From 4b0cefc4bdad98b9838489fce47ea1c7ed516fe2 Mon Sep 17 00:00:00 2001 From: Denys Holius <5650611+denisgolius@users.noreply.github.com> Date: Fri, 8 Oct 2021 18:57:36 +0300 Subject: [PATCH 01/77] Added fixes and improvements (#1677) * added guide for VM operator * Update docs/guides/getting-started-with-vm-operator.md Co-authored-by: Roman Khavronenko * Update docs/guides/getting-started-with-vm-operator.md Co-authored-by: Roman Khavronenko * Fixed different typos and added improvements from proposals * move remoteWrite.url to other place * fixed typo * rephrased vminsert explanation * remove not needed parameters for default setup Co-authored-by: Roman Khavronenko --- docs/guides/README.md | 3 +- .../getting-started-with-vm-operator.md | 323 ++++++++++++++++++ ...vmcluster-k8s-via-vm-operator-grafana1.png | Bin 0 -> 56552 bytes ...vmcluster-k8s-via-vm-operator-grafana2.png | Bin 0 -> 241302 bytes .../guide-vmcluster-k8s-via-vm-operator.png | Bin 0 -> 208622 bytes 5 files changed, 325 insertions(+), 1 deletion(-) create mode 100644 docs/guides/getting-started-with-vm-operator.md create mode 100644 docs/guides/guide-vmcluster-k8s-via-vm-operator-grafana1.png create mode 100644 docs/guides/guide-vmcluster-k8s-via-vm-operator-grafana2.png create mode 100644 docs/guides/guide-vmcluster-k8s-via-vm-operator.png diff --git a/docs/guides/README.md b/docs/guides/README.md index 776794a343..054e2e8fee 100644 --- a/docs/guides/README.md +++ b/docs/guides/README.md @@ -6,4 +6,5 @@ sort: 21 1. [K8s monitoring via VM Single](k8s-monitoring-via-vm-single.html) 2. [K8s monitoring via VM Cluster](k8s-monitoring-via-vm-cluster.html) -3. [HA monitoring setup in K8s via VM Cluster](k8s-ha-monitoring-via-vm-cluster.html) \ No newline at end of file +3. [HA monitoring setup in K8s via VM Cluster](k8s-ha-monitoring-via-vm-cluster.html) +4. [Getting started with VM Operator](getting-started-with-vm-operator.html) \ No newline at end of file diff --git a/docs/guides/getting-started-with-vm-operator.md b/docs/guides/getting-started-with-vm-operator.md new file mode 100644 index 0000000000..e930739096 --- /dev/null +++ b/docs/guides/getting-started-with-vm-operator.md @@ -0,0 +1,323 @@ +# Getting started with VM Operator + +**The guide covers:** + +* The setup of a [VM Operator](https://github.com/VictoriaMetrics/helm-charts/tree/master/charts/victoria-metrics-operator) via Helm in [Kubernetes](https://kubernetes.io/) with Helm charts. +* The setup of a [VictoriaMetrics Cluster](https://docs.victoriametrics.com/Cluster-VictoriaMetrics.html) via [VM Operator](https://github.com/VictoriaMetrics/helm-charts/tree/master/charts/victoria-metrics-operator). +* How to add CRD for a [VictoriaMetrics Cluster](https://docs.victoriametrics.com/Cluster-VictoriaMetrics.html) via [VM Operator](https://github.com/VictoriaMetrics/helm-charts/tree/master/charts/victoria-metrics-operator). +* How to visualize stored data +* How to store metrics in [VictoriaMetrics](https://victoriametrics.com) + +**Preconditions** + +* [Kubernetes cluster 1.20.9-gke.1001](https://cloud.google.com/kubernetes-engine). We use a GKE cluster from [GCP](https://cloud.google.com/) but this guide also applies to any Kubernetes cluster. For example, [Amazon EKS](https://aws.amazon.com/ru/eks/). +* [Helm 3](https://helm.sh/docs/intro/install). +* [kubectl 1.21+](https://kubernetes.io/docs/tasks/tools/install-kubectl). + +## 1. VictoriaMetrics Helm repository + +See how to work with a [VictoriaMetrics Helm repository in previous guide](https://docs.victoriametrics.com/guides/k8s-monitoring-via-vm-cluster.html#1-victoriametrics-helm-repository). + +## 2. Install the VM Operator from the Helm chart + +
+ +```bash +helm install operator vm/victoria-metrics-operator +``` + +
+ +The expected output is: + +```bash +NAME: vmoperator +LAST DEPLOYED: Thu Sep 30 17:30:30 2021 +NAMESPACE: default +STATUS: deployed +REVISION: 1 +TEST SUITE: None +NOTES: +victoria-metrics-operator has been installed. Check its status by running: + kubectl --namespace default get pods -l "app.kubernetes.io/instance=vmoperator" + +Get more information on https://github.com/VictoriaMetrics/helm-charts/tree/master/charts/victoria-metrics-operator. +See "Getting started guide for VM Operator" on https://docs.victoriametrics.com/guides/getting-started-with-vm-operator.html. +``` + +Run the following command to check that VM Operator is up and running: + +
+ +```bash +kubectl --namespace default get pods -l "app.kubernetes.io/instance=vmoperator" +``` +
+ +The expected output: +```bash +NAME READY STATUS RESTARTS AGE +vmoperator-victoria-metrics-operator-67cff44cd6-s47n6 1/1 Running 0 77s +``` + +## 3. Install VictoriaMetrics Cluster + +> For this example we will use default value for `name: example-vmcluster-persistent`. Change it value up to your needs. +Run the following command to install [VictoriaMetrics Cluster](https://docs.victoriametrics.com/Cluster-VictoriaMetrics.html) via [VM Operator](https://github.com/VictoriaMetrics/helm-charts/tree/master/charts/victoria-metrics-operator): + +
+ +```bash +cat << EOF | kubectl apply -f - +apiVersion: operator.victoriametrics.com/v1beta1 +kind: VMCluster +metadata: + name: example-vmcluster-persistent +spec: + # Add fields here + retentionPeriod: "12" + vmstorage: + replicaCount: 2 + vmselect: + replicaCount: 2 + vminsert: + replicaCount: 2 +EOF +``` +
+ +The expected output: + +```bash +vmcluster.operator.victoriametrics.com/example-vmcluster-persistent created +``` + +* By applying this CRD we install the [VictoriaMetrics cluster](https://docs.victoriametrics.com/Cluster-VictoriaMetrics.html) to the default [namespace](https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/) inside your cluster. +* `retentionPeriod: "12"` defines the [retention](https://docs.victoriametrics.com/Single-server-VictoriaMetrics.html#retention) to 12 months. +* `replicationFactor: 2` refers to the replication factor for the ingested data, i.e. how many copies should be made among distinct `-storageNode` instances. If the replication factor is greater than one, the deduplication must be enabled on the remote storage side. +* `dedup.minScrapeInterval: 1ms` would de-duplicate data points on the same time series if they fall within the same discrete 1ms bucket. The earliest data point will be kept. In the case of equal timestamps, an arbitrary data point will be kept. See [Deduplication](https://docs.victoriametrics.com/#deduplication) . +* `replicaCount: 2` creates two replicas of vmselect, vminsert and vmstorage. +* `storageDataPath: "/vm-data"` will create volume for `vmstorage` at `/vm-data` folder. +* `resources: ` configures resources for pod. See [k8s resource configuration docs](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers) to get more information. + + +Please note that it may take some time for the pods to start. To check that the pods are started, run the following command: +
+ +```bash +kubectl get pods | grep vmcluster +``` +
+ +The expected output: +```bash +NAME READY STATUS RESTARTS AGE +vminsert-example-vmcluster-persistent-845849cb84-9vb6f 1/1 Running 0 5m15s +vminsert-example-vmcluster-persistent-845849cb84-r7mmk 1/1 Running 0 5m15s +vmoperator-victoria-metrics-operator-67cff44cd6-s47n6 1/1 Running 0 7m16s +vmselect-example-vmcluster-persistent-0 1/1 Running 0 5m21s +vmselect-example-vmcluster-persistent-1 1/1 Running 0 5m21s +vmstorage-example-vmcluster-persistent-0 1/1 Running 0 5m25s +vmstorage-example-vmcluster-persistent-1 1/1 Running 0 5m25s +``` + +There is an extra command to get information about the cluster state: +
+ +```bash +kubectl get vmclusters +``` +
+ +The expected output: +```bash +NAME INSERT COUNT STORAGE COUNT SELECT COUNT AGE STATUS +example-vmcluster-persistent 2 2 2 5m53s operational +``` + +Internet traffic goes through the Kubernetes Load balancer which use the set of Pods targeted by a [Kubernetes Service](https://kubernetes.io/docs/concepts/services-networking/service/). The service in [VictoriaMetrics Cluster architecture](https://docs.victoriametrics.com/Cluster-VictoriaMetrics.html#architecture-overview) which accepts the ingested data named `vminsert` and in Kubernetes it is a `vminsert ` service. So we need to use it for remote_write url. + +To get the name of `vminsert` services, please run the following command: + +
+ +```bash +kubectl get svc | grep vminsert +``` +
+ +The expected output: + +```bash +vminsert-example-vmcluster-persistent ClusterIP 10.107.47.136 8480/TCP 5m58s +``` + +To scrape metrics from Kubernetes with a VictoriaMetrics Cluster we will need to install [VMAgent](https://docs.victoriametrics.com/vmagent.html) with some additional configurations. +Copy `vminsert-example-vmcluster-persistent` (or whatever user put into metadata.name field [https://docs.victoriametrics.com/getting-started-with-vm-operator.html#example-cluster-config](https://docs.victoriametrics.com/getting-started-with-vm-operator.html#example-cluster-config)) service name and add it to the `remoteWrite` URL from [quick-start example](https://github.com/VictoriaMetrics/operator/blob/master/docs/quick-start.MD#vmagent). +Here is an example of the full configuration that we need to apply: + +
+ +```bash +cat < + + +The expected output: +```bash +vmagent.operator.victoriametrics.com/example-vmagent created +``` + +>`remoteWrite.url` for VMAgent consists of the following parts: +> service_name + VMCLuster_namespace + svc + kubernetes_cluster_domain that in our case will look like vminsert-example-vmcluster-persistent.default.svc.cluster.local + +Verify that `VMAgent` is up and running by executing the following command: + +
+ +```bash +kubectl get pods | grep vmagent +``` +
+ +The expected output is: + +```bash +vmagent-example-vmagent-7996844b5f-b5rzs 2/2 Running 0 9s +``` + +> There are two containers for VMagent: the first one is a VMagent and the second one is a sidecard with a secret. VMagent use a secret with configuration wich is mounted to the special sidecar. It observes the changes with configuration and send a signal to reload configuration for the VMagent. + +Run the following command to make `VMAgent`'s port accessible from the local machine: + +
+ +
+ +```bash +kubectl port-forward svc/vmagent-example-vmagent 8429:8429 +``` + +The expected output is: + +```bash +Forwarding from 127.0.0.1:8429 -> 8429 +Forwarding from [::1]:8429 -> 8429 +``` + +To check that `VMAgent` collects metrics from the k8s cluster open in the browser [http://127.0.0.1:8429/targets](http://127.0.0.1:8429/targets) . +You will see something like this: + +

+ +

+ +`VMAgent` connects to [kubernetes service discovery](https://kubernetes.io/docs/concepts/services-networking/service/) and gets targets which needs to be scraped. This service discovery is controlled by [VictoriaMetrics Operator](https://github.com/VictoriaMetrics/operator) + +## 4. Verifying VictoriaMetrics cluster + +See [how to install and connect Grafana to VictoriaMetrics](https://docs.victoriametrics.com/guides/k8s-monitoring-via-vm-cluster.html#4-install-and-connect-grafana-to-victoriametrics-with-helm) but with one addition - we should get the name of `vmselect` service from the freshly installed VictoriaMetrics Cluster because it will now be different. + +To get the new service name, please run the following command: + +
+ +```bash +kubectl get svc | grep vmselect +``` +
+ +The expected output: + +```bash +vmselect-example-vmcluster-persistent ClusterIP None 8481/TCP 7m +``` + +The final config will look like this: + +
+ +```yaml +cat < + + +## 5. Check the result you obtained in your browser + +To check that [VictoriaMetrics](https://victoriametrics.com) collecting metrics from the k8s cluster open in your browser [http://127.0.0.1:3000/dashboards](http://127.0.0.1:3000/dashboards) and choose the `VictoriaMetrics - cluster` dashboard. Use `admin` for login and the `password` that you previously got from kubectl. + +

+ grafana dashboards +

+ +The expected output is: + +

+ grafana dashboards +

+ +## 6. Summary + +* We set up Kubernetes Operator for VictoriaMetrics with using CRD. +* We collected metrics from all running services and stored them in the VictoriaMetrics database. +* We configured `dedup.minScrapeInterval` and `replicationFactor` for the VictoriaMetrics cluster for high availability purposes. \ No newline at end of file diff --git a/docs/guides/guide-vmcluster-k8s-via-vm-operator-grafana1.png b/docs/guides/guide-vmcluster-k8s-via-vm-operator-grafana1.png new file mode 100644 index 0000000000000000000000000000000000000000..d1d91c7e619f8603d0cc3110cc9871abf47621c3 GIT binary patch literal 56552 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
@@ -92,14 +93,9 @@ The expected output: vmcluster.operator.victoriametrics.com/example-vmcluster-persistent created ``` -* By applying this CRD we install the [VictoriaMetrics cluster](https://docs.victoriametrics.com/Cluster-VictoriaMetrics.html) to the default [namespace](https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/) inside your cluster. +* By applying this CRD we install the [VictoriaMetrics cluster](https://docs.victoriametrics.com/Cluster-VictoriaMetrics.html) to the default [namespace](https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/) of your k8s cluster with following params: * `retentionPeriod: "12"` defines the [retention](https://docs.victoriametrics.com/Single-server-VictoriaMetrics.html#retention) to 12 months. -* `replicationFactor: 2` refers to the replication factor for the ingested data, i.e. how many copies should be made among distinct `-storageNode` instances. If the replication factor is greater than one, the deduplication must be enabled on the remote storage side. -* `dedup.minScrapeInterval: 1ms` would de-duplicate data points on the same time series if they fall within the same discrete 1ms bucket. The earliest data point will be kept. In the case of equal timestamps, an arbitrary data point will be kept. See [Deduplication](https://docs.victoriametrics.com/#deduplication) . * `replicaCount: 2` creates two replicas of vmselect, vminsert and vmstorage. -* `storageDataPath: "/vm-data"` will create volume for `vmstorage` at `/vm-data` folder. -* `resources: ` configures resources for pod. See [k8s resource configuration docs](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers) to get more information. - Please note that it may take some time for the pods to start. To check that the pods are started, run the following command:
@@ -114,7 +110,6 @@ The expected output: NAME READY STATUS RESTARTS AGE vminsert-example-vmcluster-persistent-845849cb84-9vb6f 1/1 Running 0 5m15s vminsert-example-vmcluster-persistent-845849cb84-r7mmk 1/1 Running 0 5m15s -vmoperator-victoria-metrics-operator-67cff44cd6-s47n6 1/1 Running 0 7m16s vmselect-example-vmcluster-persistent-0 1/1 Running 0 5m21s vmselect-example-vmcluster-persistent-1 1/1 Running 0 5m21s vmstorage-example-vmcluster-persistent-0 1/1 Running 0 5m25s @@ -187,7 +182,7 @@ vmagent.operator.victoriametrics.com/example-vmagent created ``` >`remoteWrite.url` for VMAgent consists of the following parts: -> service_name + VMCLuster_namespace + svc + kubernetes_cluster_domain that in our case will look like vminsert-example-vmcluster-persistent.default.svc.cluster.local +> "service_name.VMCluster_namespace.svc.kubernetes_cluster_domain" that in our case will look like vminsert-example-vmcluster-persistent.default.svc.cluster.local Verify that `VMAgent` is up and running by executing the following command: @@ -319,5 +314,4 @@ The expected output is: ## 6. Summary * We set up Kubernetes Operator for VictoriaMetrics with using CRD. -* We collected metrics from all running services and stored them in the VictoriaMetrics database. -* We configured `dedup.minScrapeInterval` and `replicationFactor` for the VictoriaMetrics cluster for high availability purposes. \ No newline at end of file +* We collected metrics from all running services and stored them in the VictoriaMetrics database. \ No newline at end of file From 873aac584e64ec09df28f4f52ce49392fc2b6fad Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Mon, 11 Oct 2021 12:40:46 +0300 Subject: [PATCH 08/77] lib/promscrape: use Prometheus format for target labels at `/targets` page This should simplify copy-pasting the labels to/from PromQL / MetricsQL --- lib/promscrape/targets_response.qtpl | 9 +++-- lib/promscrape/targets_response.qtpl.go | 52 ++++++++++++++----------- 2 files changed, 36 insertions(+), 25 deletions(-) diff --git a/lib/promscrape/targets_response.qtpl b/lib/promscrape/targets_response.qtpl index 448012c736..72a445f917 100644 --- a/lib/promscrape/targets_response.qtpl +++ b/lib/promscrape/targets_response.qtpl @@ -116,9 +116,12 @@ job={%q= jobName %} (0/0 up) {% endfunc %} {% func formatLabel(labels []prompbmarshal.Label) %} -{% for _, label := range labels %} - {%s label.Name %}={%q label.Value %} {% space %} -{% endfor %} +{ + {% for i, label := range labels %} + {%s label.Name %}={%q label.Value %} + {% if i+1 < len(labels) %},{% endif %} + {% endfor %} +} {% endfunc %} {% endstripspace %} diff --git a/lib/promscrape/targets_response.qtpl.go b/lib/promscrape/targets_response.qtpl.go index 334d1873f0..1a2015e24e 100644 --- a/lib/promscrape/targets_response.qtpl.go +++ b/lib/promscrape/targets_response.qtpl.go @@ -359,43 +359,51 @@ func TargetsResponseHTML(jts []jobTargetsStatuses, emptyJobs []string, redirectP //line lib/promscrape/targets_response.qtpl:118 func streamformatLabel(qw422016 *qt422016.Writer, labels []prompbmarshal.Label) { -//line lib/promscrape/targets_response.qtpl:119 - for _, label := range labels { +//line lib/promscrape/targets_response.qtpl:118 + qw422016.N().S(`{`) //line lib/promscrape/targets_response.qtpl:120 - qw422016.E().S(label.Name) -//line lib/promscrape/targets_response.qtpl:120 - qw422016.N().S(`=`) -//line lib/promscrape/targets_response.qtpl:120 - qw422016.E().Q(label.Value) -//line lib/promscrape/targets_response.qtpl:120 - qw422016.N().S(` `) + for i, label := range labels { //line lib/promscrape/targets_response.qtpl:121 + qw422016.E().S(label.Name) +//line lib/promscrape/targets_response.qtpl:121 + qw422016.N().S(`=`) +//line lib/promscrape/targets_response.qtpl:121 + qw422016.E().Q(label.Value) +//line lib/promscrape/targets_response.qtpl:122 + if i+1 < len(labels) { +//line lib/promscrape/targets_response.qtpl:122 + qw422016.N().S(`,`) +//line lib/promscrape/targets_response.qtpl:122 + } +//line lib/promscrape/targets_response.qtpl:123 } -//line lib/promscrape/targets_response.qtpl:122 +//line lib/promscrape/targets_response.qtpl:123 + qw422016.N().S(`}`) +//line lib/promscrape/targets_response.qtpl:125 } -//line lib/promscrape/targets_response.qtpl:122 +//line lib/promscrape/targets_response.qtpl:125 func writeformatLabel(qq422016 qtio422016.Writer, labels []prompbmarshal.Label) { -//line lib/promscrape/targets_response.qtpl:122 +//line lib/promscrape/targets_response.qtpl:125 qw422016 := qt422016.AcquireWriter(qq422016) -//line lib/promscrape/targets_response.qtpl:122 +//line lib/promscrape/targets_response.qtpl:125 streamformatLabel(qw422016, labels) -//line lib/promscrape/targets_response.qtpl:122 +//line lib/promscrape/targets_response.qtpl:125 qt422016.ReleaseWriter(qw422016) -//line lib/promscrape/targets_response.qtpl:122 +//line lib/promscrape/targets_response.qtpl:125 } -//line lib/promscrape/targets_response.qtpl:122 +//line lib/promscrape/targets_response.qtpl:125 func formatLabel(labels []prompbmarshal.Label) string { -//line lib/promscrape/targets_response.qtpl:122 +//line lib/promscrape/targets_response.qtpl:125 qb422016 := qt422016.AcquireByteBuffer() -//line lib/promscrape/targets_response.qtpl:122 +//line lib/promscrape/targets_response.qtpl:125 writeformatLabel(qb422016, labels) -//line lib/promscrape/targets_response.qtpl:122 +//line lib/promscrape/targets_response.qtpl:125 qs422016 := string(qb422016.B) -//line lib/promscrape/targets_response.qtpl:122 +//line lib/promscrape/targets_response.qtpl:125 qt422016.ReleaseByteBuffer(qb422016) -//line lib/promscrape/targets_response.qtpl:122 +//line lib/promscrape/targets_response.qtpl:125 return qs422016 -//line lib/promscrape/targets_response.qtpl:122 +//line lib/promscrape/targets_response.qtpl:125 } From 8679ba71dde817c1da33df00dab815786bcce03a Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Mon, 11 Oct 2021 17:40:38 +0300 Subject: [PATCH 09/77] docs/MetricsQL.md: clarify docs for union() function --- docs/MetricsQL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/MetricsQL.md b/docs/MetricsQL.md index 1a9f8291f1..f916adc303 100644 --- a/docs/MetricsQL.md +++ b/docs/MetricsQL.md @@ -615,7 +615,7 @@ See also [implicit query conversions](#implicit-query-conversions). #### union -`union(q1, ..., qN)` returns a union of time series returned from `q1`, ..., `qN`. The `union` function name can be skipped - the following queries are quivalent: `union(q1, q2)` and `(q1, q2)`. +`union(q1, ..., qN)` returns a union of time series returned from `q1`, ..., `qN`. The `union` function name can be skipped - the following queries are quivalent: `union(q1, q2)` and `(q1, q2)`. It is expected that each `q*` query returns time series with unique sets of labels. Otherwise only the first time series out of series with identical set of labels is returned. Use [alias](#alias) and [label_set](#label_set) functions for giving unique labelsets per each `q*` query: #### vector From 81c6720392913af00d89b7a52081ea5580ef4faf Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Mon, 11 Oct 2021 21:01:31 +0300 Subject: [PATCH 10/77] app/vmselect/promql: add missing trigonometric functions, which are going to be added in Prometheus 2.31 See https://github.com/prometheus/prometheus/issues/9233 --- app/vmselect/promql/exec_test.go | 70 ++++++++++++++++++++++++++++++++ app/vmselect/promql/transform.go | 64 +++++++++++++++++++++++++---- docs/CHANGELOG.md | 1 + docs/MetricsQL.md | 51 ++++++++++++++++++++--- 4 files changed, 174 insertions(+), 12 deletions(-) diff --git a/app/vmselect/promql/exec_test.go b/app/vmselect/promql/exec_test.go index 46b8a6605c..1cbbe03d65 100644 --- a/app/vmselect/promql/exec_test.go +++ b/app/vmselect/promql/exec_test.go @@ -1039,6 +1039,17 @@ func TestExecSuccess(t *testing.T) { resultExpected := []netstorage.Result{r} f(q, resultExpected) }) + t.Run("sinh()", func(t *testing.T) { + t.Parallel() + q := `sinh(pi()*(2000-time())/1000)` + r := netstorage.Result{ + MetricName: metricNameExpected, + Values: []float64{11.548739357257748, 6.132140673514712, 3.217113080357038, 1.6144880404748523, 0.6704839982471175, 0}, + Timestamps: timestampsExpected, + } + resultExpected := []netstorage.Result{r} + f(q, resultExpected) + }) t.Run("asin()", func(t *testing.T) { t.Parallel() q := `asin((2000-time())/1000)` @@ -1050,6 +1061,39 @@ func TestExecSuccess(t *testing.T) { resultExpected := []netstorage.Result{r} f(q, resultExpected) }) + t.Run("asinh(sinh)", func(t *testing.T) { + t.Parallel() + q := `asinh(sinh((2000-time())/1000))` + r := netstorage.Result{ + MetricName: metricNameExpected, + Values: []float64{1, 0.8000000000000002, 0.6, 0.4000000000000001, 0.2, 0}, + Timestamps: timestampsExpected, + } + resultExpected := []netstorage.Result{r} + f(q, resultExpected) + }) + t.Run("atan()", func(t *testing.T) { + t.Parallel() + q := `atan((2000-time())/1000)` + r := netstorage.Result{ + MetricName: metricNameExpected, + Values: []float64{0.7853981633974483, 0.6747409422235526, 0.5404195002705842, 0.3805063771123649, 0.19739555984988078, 0}, + Timestamps: timestampsExpected, + } + resultExpected := []netstorage.Result{r} + f(q, resultExpected) + }) + t.Run("atanh(tanh)", func(t *testing.T) { + t.Parallel() + q := `atanh(tanh((2000-time())/1000))` + r := netstorage.Result{ + MetricName: metricNameExpected, + Values: []float64{1, 0.8000000000000002, 0.6, 0.4000000000000001, 0.2, 0}, + Timestamps: timestampsExpected, + } + resultExpected := []netstorage.Result{r} + f(q, resultExpected) + }) t.Run("cos()", func(t *testing.T) { t.Parallel() q := `cos(pi()*(2000-time())/1000)` @@ -1072,6 +1116,28 @@ func TestExecSuccess(t *testing.T) { resultExpected := []netstorage.Result{r} f(q, resultExpected) }) + t.Run("acosh(cosh)", func(t *testing.T) { + t.Parallel() + q := `acosh(cosh((2000-time())/1000))` + r := netstorage.Result{ + MetricName: metricNameExpected, + Values: []float64{1, 0.8000000000000002, 0.5999999999999999, 0.40000000000000036, 0.20000000000000023, 0}, + Timestamps: timestampsExpected, + } + resultExpected := []netstorage.Result{r} + f(q, resultExpected) + }) + t.Run("rad(deg)", func(t *testing.T) { + t.Parallel() + q := `rad(deg(time()/500))` + r := netstorage.Result{ + MetricName: metricNameExpected, + Values: []float64{2, 2.3999999999999995, 2.8, 3.2, 3.6, 4}, + Timestamps: timestampsExpected, + } + resultExpected := []netstorage.Result{r} + f(q, resultExpected) + }) t.Run("floor(time()/500)", func(t *testing.T) { t.Parallel() q := `floor(time()/500)` @@ -7241,9 +7307,13 @@ func TestExecError(t *testing.T) { f(`smooth_exponential(1)`) f(`remove_resets()`) f(`sin()`) + f(`sinh()`) f(`cos()`) + f(`cosh()`) f(`asin()`) + f(`asinh()`) f(`acos()`) + f(`acosh()`) f(`rand(123, 456)`) f(`rand_normal(123, 456)`) f(`rand_exponential(122, 456)`) diff --git a/app/vmselect/promql/transform.go b/app/vmselect/promql/transform.go index 722db3bbb4..76898dba47 100644 --- a/app/vmselect/promql/transform.go +++ b/app/vmselect/promql/transform.go @@ -43,13 +43,22 @@ var transformFuncs = map[string]transformFunc{ // See funcs accepting instant-vector on https://prometheus.io/docs/prometheus/latest/querying/functions/ . "abs": newTransformFuncOneArg(transformAbs), "absent": transformAbsent, + "acos": newTransformFuncOneArg(transformAcos), + "acosh": newTransformFuncOneArg(transformAcosh), + "asin": newTransformFuncOneArg(transformAsin), + "asinh": newTransformFuncOneArg(transformAsinh), + "atan": newTransformFuncOneArg(transformAtan), + "atanh": newTransformFuncOneArg(transformAtanh), "ceil": newTransformFuncOneArg(transformCeil), "clamp": transformClamp, "clamp_max": transformClampMax, "clamp_min": transformClampMin, + "cos": newTransformFuncOneArg(transformCos), + "cosh": newTransformFuncOneArg(transformCosh), "day_of_month": newTransformFuncDateTime(transformDayOfMonth), "day_of_week": newTransformFuncDateTime(transformDayOfWeek), "days_in_month": newTransformFuncDateTime(transformDaysInMonth), + "deg": newTransformFuncOneArg(transformDeg), "exp": newTransformFuncOneArg(transformExp), "floor": newTransformFuncOneArg(transformFloor), "histogram_quantile": transformHistogramQuantile, @@ -61,12 +70,18 @@ var transformFuncs = map[string]transformFunc{ "log10": newTransformFuncOneArg(transformLog10), "minute": newTransformFuncDateTime(transformMinute), "month": newTransformFuncDateTime(transformMonth), + "pi": transformPi, + "rad": newTransformFuncOneArg(transformRad), "round": transformRound, - "sgn": transformSign, "scalar": transformScalar, + "sgn": transformSgn, + "sin": newTransformFuncOneArg(transformSin), + "sinh": newTransformFuncOneArg(transformSinh), "sort": newTransformFuncSort(false), "sort_desc": newTransformFuncSort(true), "sqrt": newTransformFuncOneArg(transformSqrt), + "tan": newTransformFuncOneArg(transformTan), + "tanh": newTransformFuncOneArg(transformTanh), "time": transformTime, // "timestamp" has been moved to rollup funcs. See https://github.com/VictoriaMetrics/VictoriaMetrics/issues/415 "vector": transformVector, @@ -109,11 +124,6 @@ var transformFuncs = map[string]transformFunc{ "rand": newTransformRand(newRandFloat64), "rand_normal": newTransformRand(newRandNormFloat64), "rand_exponential": newTransformRand(newRandExpFloat64), - "pi": transformPi, - "sin": newTransformFuncOneArg(transformSin), - "cos": newTransformFuncOneArg(transformCos), - "asin": newTransformFuncOneArg(transformAsin), - "acos": newTransformFuncOneArg(transformAcos), "prometheus_buckets": transformPrometheusBuckets, "buckets_limit": transformBucketsLimit, "histogram_share": transformHistogramShare, @@ -1777,7 +1787,7 @@ func transformRound(tfa *transformFuncArg) ([]*timeseries, error) { return doTransformValues(args[0], tf, tfa.fe) } -func transformSign(tfa *transformFuncArg) ([]*timeseries, error) { +func transformSgn(tfa *transformFuncArg) ([]*timeseries, error) { args := tfa.args if err := expectTransformArgsNum(args, 1); err != nil { return nil, err @@ -1898,18 +1908,58 @@ func transformSin(v float64) float64 { return math.Sin(v) } +func transformSinh(v float64) float64 { + return math.Sinh(v) +} + func transformCos(v float64) float64 { return math.Cos(v) } +func transformCosh(v float64) float64 { + return math.Cosh(v) +} + +func transformTan(v float64) float64 { + return math.Tan(v) +} + +func transformTanh(v float64) float64 { + return math.Tanh(v) +} + func transformAsin(v float64) float64 { return math.Asin(v) } +func transformAsinh(v float64) float64 { + return math.Asinh(v) +} + +func transformAtan(v float64) float64 { + return math.Atan(v) +} + +func transformAtanh(v float64) float64 { + return math.Atanh(v) +} + func transformAcos(v float64) float64 { return math.Acos(v) } +func transformAcosh(v float64) float64 { + return math.Acosh(v) +} + +func transformDeg(v float64) float64 { + return v * 180 / math.Pi +} + +func transformRad(v float64) float64 { + return v * math.Pi / 180 +} + func newTransformRand(newRandFunc func(r *rand.Rand) func() float64) transformFunc { return func(tfa *transformFuncArg) ([]*timeseries, error) { args := tfa.args diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index f494b30ffd..8956f7a23e 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -6,6 +6,7 @@ sort: 15 ## tip +* FEATURE: add missing trigonometric functions, which are going to be added in [Prometheus 2.31](https://github.com/prometheus/prometheus/pull/9239): [acosh](https://docs.victoriametrics.com/MetricsQL.html#acosh), [asinh](https://docs.victoriametrics.com/MetricsQL.html#asinh), [atan](https://docs.victoriametrics.com/MetricsQL.html#atan), [atanh](https://docs.victoriametrics.com/MetricsQL.html#atanh), [cosh](https://docs.victoriametrics.com/MetricsQL.html#cosh), [deg](https://docs.victoriametrics.com/MetricsQL.html#deg), [rad](https://docs.victoriametrics.com/MetricsQL.html#rad), [sinh](https://docs.victoriametrics.com/MetricsQL.html#sinh), [tan](https://docs.victoriametrics.com/MetricsQL.html#tan), [tanh](https://docs.victoriametrics.com/MetricsQL.html#tanh). * FEATURE: consistently return the same set of time series from [limitk](https://docs.victoriametrics.com/MetricsQL.html#limitk) function. This improves the usability of periodically refreshed graphs. * BUGFIX: vmstorage: fix `unaligned 64-bit atomic operation` panic on 32-bit architectures (arm and 386). The panic has been introduced in v1.67.0 diff --git a/docs/MetricsQL.md b/docs/MetricsQL.md index f916adc303..3557241890 100644 --- a/docs/MetricsQL.md +++ b/docs/MetricsQL.md @@ -351,11 +351,27 @@ See also [implicit query conversions](#implicit-query-conversions). #### acos -`acos(q)` returns `arccos(v)` for every `v` point of every time series returned by `q`. Metric names are stripped from the resulting series. See also [asin](#asin) and [cos](#cos). +`acos(q)` returns [inverse cosine](https://en.wikipedia.org/wiki/Inverse_trigonometric_functions) for every point of every time series returned by `q`. Metric names are stripped from the resulting series. This function is supported by PromQL. See also [asin](#asin) and [cos](#cos). + +#### acosh + +`acosh(q)` returns [inverse hyperbolic cosine](https://en.wikipedia.org/wiki/Inverse_hyperbolic_functions#Inverse_hyperbolic_cosine) for every point of every time series returned by `q`. Metric names are stripped from the resulting series. This function is supported by PromQL. See also [sinh](#cosh). #### asin -`asin(q)` returns `arcsin(v)` for every `v` point of every time series returned by `q`. Metric names are stripped from the resulting series. See also [acos](#acos) and [sin](#sin). +`asin(q)` returns [inverse sine](https://en.wikipedia.org/wiki/Inverse_trigonometric_functions) for every point of every time series returned by `q`. Metric names are stripped from the resulting series. This function is supported by PromQL. See also [acos](#acos) and [sin](#sin). + +#### asinh + +`asinh(q)` returns [inverse hyperbolic sine](https://en.wikipedia.org/wiki/Inverse_hyperbolic_functions#Inverse_hyperbolic_sine) for every point of every time series returned by `q`. Metric names are stripped from the resulting series. This function is supported by PromQL. See also [sinh](#sinh). + +#### atan + +`atan(q)` returns [inverse tangent](https://en.wikipedia.org/wiki/Inverse_trigonometric_functions) for every point of every time series returned by `q`. Metric names are stripped from the resulting series. This function is supported by PromQL. See also [tan](#tan). + +#### atanh + +`atanh(q)` returns [inverse hyperbolic tangent](https://en.wikipedia.org/wiki/Inverse_hyperbolic_functions#Inverse_hyperbolic_tangent) for every point of every time series returned by `q`. Metric names are stripped from the resulting series. This function is supported by PromQL. See also [tanh](#tanh). #### bitmap_and @@ -391,7 +407,11 @@ See also [implicit query conversions](#implicit-query-conversions). #### cos -`cos(q)` returns `cos(v)` for every `v` point of every time series returned by `q`. Metric names are stripped from the resulting series. See also [sin](#sin). +`cos(q)` returns `cos(v)` for every `v` point of every time series returned by `q`. Metric names are stripped from the resulting series. This function is supported by PromQL. See also [sin](#sin). + +#### cosh + +`cosh(q)` returns [hyperbolic cosine](https://en.wikipedia.org/wiki/Hyperbolic_functions) for every point of every time series returned by `q`. Metric names are stripped from the resulting series. This function is supported by PromQL. This function is supported by PromQL. See also [acosh](#acosh). #### day_of_month @@ -405,6 +425,10 @@ See also [implicit query conversions](#implicit-query-conversions). `days_in_month(q)` returns the number of days in the month identified by every point of every time series returned by `q`. It is expected that `q` returns unix timestamps. The returned values are in the range `[28...31]`. Metric names are stripped from the resulting series. This function is supported by PromQL. +#### deg + +`deg(q)` converts [Radians to degrees](https://en.wikipedia.org/wiki/Radian#Conversions) for every point of every time series returned by `q`. Metric names are stripped from the resulting series. This function is supported by PromQL. See also [rad](#rad). + #### end `end()` returns the unix timestamp in seconds for the last point. See also [start](#start). It is known as `end` query arg passed to [/api/v1/query_range](https://prometheus.io/docs/prometheus/latest/querying/api/#range-queries). @@ -479,7 +503,12 @@ See also [implicit query conversions](#implicit-query-conversions). #### pi -`pi()` returns [Pi number](https://en.wikipedia.org/wiki/Pi). +`pi()` returns [Pi number](https://en.wikipedia.org/wiki/Pi). This function is supported by PromQL. + +#### rad + +`rad(q)` converts [degrees to Radians](https://en.wikipedia.org/wiki/Radian#Conversions) for every point of every time series returned by `q`. Metric names are stripped from the resulting series. This function is supported by PromQL. See also [deg](#deg). + #### prometheus_buckets @@ -567,7 +596,19 @@ See also [implicit query conversions](#implicit-query-conversions). #### sin -`sin(q)` returns `sin(v)` for every `v` point of every time series returned by `q`. Metric names are stripped from the resulting series. See also [cos](#cos). +`sin(q)` returns `sin(v)` for every `v` point of every time series returned by `q`. Metric names are stripped from the resulting series. This function is supported by MetricsQL. See also [cos](#cos). + +#### sinh + +`sinh(q)` returns [hyperbolic sine](https://en.wikipedia.org/wiki/Hyperbolic_functions) for every point of every time series returned by `q`. Metric names are stripped from the resulting series. This function is supported by MetricsQL. See also [cosh](#cosh). + +#### tan + +`tan(q)` returns `tan(v)` for every `v` point of every time series returned by `q`. Metric names are stripped from the resulting series. This function is supported by MetricsQL. See also [atan](#atan). + +#### tanh + +`tanh(q)` returns [hyperbolic tangent](https://en.wikipedia.org/wiki/Hyperbolic_functions) for every point of every time series returned by `q`. Metric names are stripped from the resulting series. This function is supported by MetricsQL. See also [atanh](#atanh). #### smooth_exponential From a5001b9c20896c19df11e15020280a32b267178d Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Mon, 11 Oct 2021 21:15:51 +0300 Subject: [PATCH 11/77] app/vmselect/promql: add `atan2` binary operator, which is going to be added in Prometheus 2.31 See https://github.com/prometheus/prometheus/pull/9248 --- app/vmselect/promql/binary_op.go | 3 +++ app/vmselect/promql/exec_test.go | 11 ++++++++++ docs/CHANGELOG.md | 2 +- go.mod | 2 +- go.sum | 4 ++-- .../VictoriaMetrics/metricsql/binary_op.go | 13 +++++++++--- .../metricsql/binaryop/funcs.go | 5 +++++ .../VictoriaMetrics/metricsql/transform.go | 20 ++++++++++++++----- vendor/modules.txt | 2 +- 9 files changed, 49 insertions(+), 13 deletions(-) diff --git a/app/vmselect/promql/binary_op.go b/app/vmselect/promql/binary_op.go index 48b682cfe2..b720573d51 100644 --- a/app/vmselect/promql/binary_op.go +++ b/app/vmselect/promql/binary_op.go @@ -19,6 +19,9 @@ var binaryOpFuncs = map[string]binaryOpFunc{ "%": newBinaryOpArithFunc(binaryop.Mod), "^": newBinaryOpArithFunc(binaryop.Pow), + // See https://github.com/prometheus/prometheus/pull/9248 + "atan2": newBinaryOpArithFunc(binaryop.Atan2), + // cmp ops "==": newBinaryOpCmpFunc(binaryop.Eq), "!=": newBinaryOpCmpFunc(binaryop.Neq), diff --git a/app/vmselect/promql/exec_test.go b/app/vmselect/promql/exec_test.go index 1cbbe03d65..1c033b926f 100644 --- a/app/vmselect/promql/exec_test.go +++ b/app/vmselect/promql/exec_test.go @@ -1072,6 +1072,17 @@ func TestExecSuccess(t *testing.T) { resultExpected := []netstorage.Result{r} f(q, resultExpected) }) + t.Run("atan2()", func(t *testing.T) { + t.Parallel() + q := `time() atan2 time()/10` + r := netstorage.Result{ + MetricName: metricNameExpected, + Values: []float64{0.07853981633974483, 0.07853981633974483, 0.07853981633974483, 0.07853981633974483, 0.07853981633974483, 0.07853981633974483}, + Timestamps: timestampsExpected, + } + resultExpected := []netstorage.Result{r} + f(q, resultExpected) + }) t.Run("atan()", func(t *testing.T) { t.Parallel() q := `atan((2000-time())/1000)` diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 8956f7a23e..8c114af2a3 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -6,7 +6,7 @@ sort: 15 ## tip -* FEATURE: add missing trigonometric functions, which are going to be added in [Prometheus 2.31](https://github.com/prometheus/prometheus/pull/9239): [acosh](https://docs.victoriametrics.com/MetricsQL.html#acosh), [asinh](https://docs.victoriametrics.com/MetricsQL.html#asinh), [atan](https://docs.victoriametrics.com/MetricsQL.html#atan), [atanh](https://docs.victoriametrics.com/MetricsQL.html#atanh), [cosh](https://docs.victoriametrics.com/MetricsQL.html#cosh), [deg](https://docs.victoriametrics.com/MetricsQL.html#deg), [rad](https://docs.victoriametrics.com/MetricsQL.html#rad), [sinh](https://docs.victoriametrics.com/MetricsQL.html#sinh), [tan](https://docs.victoriametrics.com/MetricsQL.html#tan), [tanh](https://docs.victoriametrics.com/MetricsQL.html#tanh). +* FEATURE: add trigonometric functions, which are going to be added in [Prometheus 2.31](https://github.com/prometheus/prometheus/pull/9239): [acosh](https://docs.victoriametrics.com/MetricsQL.html#acosh), [asinh](https://docs.victoriametrics.com/MetricsQL.html#asinh), [atan](https://docs.victoriametrics.com/MetricsQL.html#atan), [atanh](https://docs.victoriametrics.com/MetricsQL.html#atanh), [cosh](https://docs.victoriametrics.com/MetricsQL.html#cosh), [deg](https://docs.victoriametrics.com/MetricsQL.html#deg), [rad](https://docs.victoriametrics.com/MetricsQL.html#rad), [sinh](https://docs.victoriametrics.com/MetricsQL.html#sinh), [tan](https://docs.victoriametrics.com/MetricsQL.html#tan), [tanh](https://docs.victoriametrics.com/MetricsQL.html#tanh). Also add `atan2` binary operator. See [this pull request](https://github.com/prometheus/prometheus/pull/9248). * FEATURE: consistently return the same set of time series from [limitk](https://docs.victoriametrics.com/MetricsQL.html#limitk) function. This improves the usability of periodically refreshed graphs. * BUGFIX: vmstorage: fix `unaligned 64-bit atomic operation` panic on 32-bit architectures (arm and 386). The panic has been introduced in v1.67.0 diff --git a/go.mod b/go.mod index 3e6688cf17..ab8cdc0f79 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( // like https://github.com/valyala/fasthttp/commit/996610f021ff45fdc98c2ce7884d5fa4e7f9199b github.com/VictoriaMetrics/fasthttp v1.1.0 github.com/VictoriaMetrics/metrics v1.18.0 - github.com/VictoriaMetrics/metricsql v0.26.0 + github.com/VictoriaMetrics/metricsql v0.27.0 github.com/VividCortex/ewma v1.2.0 // indirect github.com/aws/aws-sdk-go v1.40.58 github.com/cespare/xxhash/v2 v2.1.2 diff --git a/go.sum b/go.sum index c0855e7564..eecd4e46d2 100644 --- a/go.sum +++ b/go.sum @@ -107,8 +107,8 @@ github.com/VictoriaMetrics/fasthttp v1.1.0/go.mod h1:/7DMcogqd+aaD3G3Hg5kFgoFwlR github.com/VictoriaMetrics/metrics v1.12.2/go.mod h1:Z1tSfPfngDn12bTfZSCqArT3OPY3u88J12hSoOhuiRE= github.com/VictoriaMetrics/metrics v1.18.0 h1:vov5NxDHRSXFbdiH4dYLYEjKLoAXXSQ7hcnG8TSD9JQ= github.com/VictoriaMetrics/metrics v1.18.0/go.mod h1:ArjwVz7WpgpegX/JpB0zpNF2h2232kErkEnzH1sxMmA= -github.com/VictoriaMetrics/metricsql v0.26.0 h1:lJBRn9vn9kst7hfNzSsQorulzNYQtX7JxWWWxh/udfI= -github.com/VictoriaMetrics/metricsql v0.26.0/go.mod h1:ylO7YITho/Iw6P71oEaGyHbO94bGoGtzWfLGqFhMIg8= +github.com/VictoriaMetrics/metricsql v0.27.0 h1:S6xWFKEyu+EbPS3tYr1cWeRza61L3e4tYcbBqMakuX0= +github.com/VictoriaMetrics/metricsql v0.27.0/go.mod h1:ylO7YITho/Iw6P71oEaGyHbO94bGoGtzWfLGqFhMIg8= github.com/VividCortex/ewma v1.1.1/go.mod h1:2Tkkvm3sRDVXaiyucHiACn4cqf7DpdyLvmxzcbUokwA= github.com/VividCortex/ewma v1.2.0 h1:f58SaIzcDXrSy3kWaHNvuJgJ3Nmz59Zji6XoJR/q1ow= github.com/VividCortex/ewma v1.2.0/go.mod h1:nz4BbCtbLyFDeC9SUHbtcT5644juEuWfUAUnGx7j5l4= diff --git a/vendor/github.com/VictoriaMetrics/metricsql/binary_op.go b/vendor/github.com/VictoriaMetrics/metricsql/binary_op.go index a265af00bd..5005089ec9 100644 --- a/vendor/github.com/VictoriaMetrics/metricsql/binary_op.go +++ b/vendor/github.com/VictoriaMetrics/metricsql/binary_op.go @@ -16,6 +16,9 @@ var binaryOps = map[string]bool{ "%": true, "^": true, + // See https://github.com/prometheus/prometheus/pull/9248 + "atan2": true, + // cmp ops "==": true, "!=": true, @@ -57,9 +60,10 @@ var binaryOpPriorities = map[string]int{ "+": 4, "-": 4, - "*": 5, - "/": 5, - "%": 5, + "*": 5, + "/": 5, + "%": 5, + "atan2": 5, "^": 6, } @@ -140,6 +144,7 @@ func isBinaryOpLogicalSet(op string) bool { } func binaryOpEvalNumber(op string, left, right float64, isBool bool) float64 { + op = strings.ToLower(op) if IsBinaryOpCmp(op) { evalCmp := func(cf func(left, right float64) bool) float64 { if isBool { @@ -181,6 +186,8 @@ func binaryOpEvalNumber(op string, left, right float64, isBool bool) float64 { left = binaryop.Div(left, right) case "%": left = binaryop.Mod(left, right) + case "atan2": + left = binaryop.Atan2(left, right) case "^": left = binaryop.Pow(left, right) case "and": diff --git a/vendor/github.com/VictoriaMetrics/metricsql/binaryop/funcs.go b/vendor/github.com/VictoriaMetrics/metricsql/binaryop/funcs.go index 9a123e24d5..1cce8cba4a 100644 --- a/vendor/github.com/VictoriaMetrics/metricsql/binaryop/funcs.go +++ b/vendor/github.com/VictoriaMetrics/metricsql/binaryop/funcs.go @@ -79,6 +79,11 @@ func Pow(left, right float64) float64 { return math.Pow(left, right) } +// Atan2 returns atan2(left, right) +func Atan2(left, right float64) float64 { + return math.Atan2(left, right) +} + // Default returns left or right if left is NaN. func Default(left, right float64) float64 { if math.IsNaN(left) { diff --git a/vendor/github.com/VictoriaMetrics/metricsql/transform.go b/vendor/github.com/VictoriaMetrics/metricsql/transform.go index 131e5a6a43..d8e3c9c85c 100644 --- a/vendor/github.com/VictoriaMetrics/metricsql/transform.go +++ b/vendor/github.com/VictoriaMetrics/metricsql/transform.go @@ -9,13 +9,22 @@ var transformFuncs = map[string]bool{ // See funcs accepting instant-vector on https://prometheus.io/docs/prometheus/latest/querying/functions/ . "abs": true, "absent": true, + "acos": true, + "acosh": true, + "asin": true, + "asinh": true, + "atan": true, + "atanh": true, "ceil": true, "clamp": true, "clamp_max": true, "clamp_min": true, + "cos": true, + "cosh": true, "day_of_month": true, "day_of_week": true, "days_in_month": true, + "deg": true, "exp": true, "floor": true, "histogram_quantile": true, @@ -27,12 +36,18 @@ var transformFuncs = map[string]bool{ "log10": true, "minute": true, "month": true, + "pi": true, + "rad": true, "round": true, "scalar": true, "sgn": true, + "sin": true, + "sinh": true, "sort": true, "sort_desc": true, "sqrt": true, + "tan": true, + "tanh": true, "time": true, // "timestamp" has been moved to rollup funcs. See https://github.com/VictoriaMetrics/VictoriaMetrics/issues/415 "vector": true, @@ -75,11 +90,6 @@ var transformFuncs = map[string]bool{ "rand": true, "rand_normal": true, "rand_exponential": true, - "pi": true, - "sin": true, - "cos": true, - "asin": true, - "acos": true, "prometheus_buckets": true, "buckets_limit": true, "histogram_share": true, diff --git a/vendor/modules.txt b/vendor/modules.txt index 5b2d633819..5921149cbc 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -22,7 +22,7 @@ github.com/VictoriaMetrics/fasthttp/stackless # github.com/VictoriaMetrics/metrics v1.18.0 ## explicit github.com/VictoriaMetrics/metrics -# github.com/VictoriaMetrics/metricsql v0.26.0 +# github.com/VictoriaMetrics/metricsql v0.27.0 ## explicit github.com/VictoriaMetrics/metricsql github.com/VictoriaMetrics/metricsql/binaryop From 2c6d86226fdb5b33957f540bec0eb6c051e7da01 Mon Sep 17 00:00:00 2001 From: Roman Khavronenko Date: Mon, 11 Oct 2021 21:21:29 +0300 Subject: [PATCH 12/77] docs: mention "PromQL compliance" in MetricsQL docs (#1691) --- docs/MetricsQL.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/MetricsQL.md b/docs/MetricsQL.md index 3557241890..bb093ee6c8 100644 --- a/docs/MetricsQL.md +++ b/docs/MetricsQL.md @@ -6,6 +6,7 @@ sort: 13 [VictoriaMetrics](https://github.com/VictoriaMetrics/VictoriaMetrics) implements MetricsQL - query language inspired by [PromQL](https://prometheus.io/docs/prometheus/latest/querying/basics/). MetricsQL is backwards-compatible with PromQL, so Grafana dashboards backed by Prometheus datasource should work the same after switching from Prometheus to VictoriaMetrics. +However, there are some [intentional differences](https://medium.com/@romanhavronenko/victoriametrics-promql-compliance-d4318203f51e) between these two languages. [Standalone MetricsQL package](https://godoc.org/github.com/VictoriaMetrics/metricsql) can be used for parsing MetricsQL in external apps. If you are unfamiliar with PromQL, then it is suggested reading [this tutorial for beginners](https://medium.com/@valyala/promql-tutorial-for-beginners-9ab455142085). From 1eaaf8ad51c4e2694273163601d70bb4d76a040f Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Mon, 11 Oct 2021 21:51:32 +0300 Subject: [PATCH 13/77] vendor: `make vendor-update` --- go.mod | 9 +- go.sum | 17 +- vendor/cloud.google.com/go/storage/CHANGES.md | 13 + vendor/cloud.google.com/go/storage/bucket.go | 146 ++- vendor/cloud.google.com/go/storage/doc.go | 5 +- vendor/cloud.google.com/go/storage/go.mod | 4 +- vendor/cloud.google.com/go/storage/go.sum | 7 +- vendor/cloud.google.com/go/storage/invoke.go | 2 +- vendor/cloud.google.com/go/storage/reader.go | 35 +- vendor/cloud.google.com/go/storage/storage.go | 67 +- vendor/cloud.google.com/go/storage/writer.go | 16 +- .../aws/aws-sdk-go/aws/endpoints/defaults.go | 67 + .../github.com/aws/aws-sdk-go/aws/version.go | 2 +- .../private/protocol/json/jsonutil/build.go | 10 +- .../private/protocol/jsonrpc/jsonrpc.go | 5 +- .../private/protocol/rest/payload.go | 11 +- .../aws/aws-sdk-go/service/sso/api.go | 10 +- .../iamcredentials/v1/iamcredentials-api.json | 372 ++++++ .../iamcredentials/v1/iamcredentials-gen.go | 1089 +++++++++++++++++ .../google.golang.org/api/transport/dial.go | 36 + vendor/google.golang.org/api/transport/doc.go | 11 + .../google.golang.org/api/transport/go19.go | 26 + .../api/transport/not_go19.go | 26 + .../googleapis/api/annotations/routing.pb.go | 152 ++- vendor/modules.txt | 11 +- 25 files changed, 1986 insertions(+), 163 deletions(-) create mode 100644 vendor/google.golang.org/api/iamcredentials/v1/iamcredentials-api.json create mode 100644 vendor/google.golang.org/api/iamcredentials/v1/iamcredentials-gen.go create mode 100644 vendor/google.golang.org/api/transport/dial.go create mode 100644 vendor/google.golang.org/api/transport/doc.go create mode 100644 vendor/google.golang.org/api/transport/go19.go create mode 100644 vendor/google.golang.org/api/transport/not_go19.go diff --git a/go.mod b/go.mod index ab8cdc0f79..cc5d909751 100644 --- a/go.mod +++ b/go.mod @@ -1,8 +1,7 @@ module github.com/VictoriaMetrics/VictoriaMetrics require ( - cloud.google.com/go v0.97.0 // indirect - cloud.google.com/go/storage v1.17.0 + cloud.google.com/go/storage v1.18.0 github.com/VictoriaMetrics/fastcache v1.7.0 // Do not use the original github.com/valyala/fasthttp because of issues @@ -11,7 +10,7 @@ require ( github.com/VictoriaMetrics/metrics v1.18.0 github.com/VictoriaMetrics/metricsql v0.27.0 github.com/VividCortex/ewma v1.2.0 // indirect - github.com/aws/aws-sdk-go v1.40.58 + github.com/aws/aws-sdk-go v1.41.0 github.com/cespare/xxhash/v2 v2.1.2 github.com/cheggaaa/pb/v3 v3.0.8 github.com/cpuguy83/go-md2man/v2 v2.0.1 // indirect @@ -30,11 +29,11 @@ require ( github.com/valyala/fasttemplate v1.2.1 github.com/valyala/gozstd v1.13.0 github.com/valyala/quicktemplate v1.7.0 - golang.org/x/net v0.0.0-20211007125505-59d4e928ea9d + golang.org/x/net v0.0.0-20211011170408-caeb26a5c8c0 golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1 golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac google.golang.org/api v0.58.0 - google.golang.org/genproto v0.0.0-20211007155348-82e027067bd4 // indirect + google.golang.org/genproto v0.0.0-20211011165927-a5fb3255271e // indirect google.golang.org/grpc v1.41.0 // indirect gopkg.in/yaml.v2 v2.4.0 ) diff --git a/go.sum b/go.sum index eecd4e46d2..a5f1ca7ff9 100644 --- a/go.sum +++ b/go.sum @@ -46,8 +46,8 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -cloud.google.com/go/storage v1.17.0 h1:CDpe3jS3EiD5nGlbtvyA4EUfkF6k9GMrxLR8+hLmoec= -cloud.google.com/go/storage v1.17.0/go.mod h1:0wRtHSM3Npk/QJYdwcpRNVRVJlH2OxyWF9Dws3J+MtE= +cloud.google.com/go/storage v1.18.0 h1:HM5Hu/BqgmWbo7pT9KFYGUccwzA8ZWDICJww9m5t9UA= +cloud.google.com/go/storage v1.18.0/go.mod h1:h0NImijCz/2WHwLh03BvmWdrNe4I/pzUdvUHoxIUroU= collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/azure-sdk-for-go v41.3.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= @@ -153,8 +153,8 @@ github.com/aws/aws-sdk-go v1.30.12/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZve github.com/aws/aws-sdk-go v1.34.28/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/+8rV9s48= github.com/aws/aws-sdk-go v1.35.31/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= -github.com/aws/aws-sdk-go v1.40.58 h1:SFa94nBsXyaS+cXluXlvqLwsQdeD7A/unJcWEld1xZ0= -github.com/aws/aws-sdk-go v1.40.58/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= +github.com/aws/aws-sdk-go v1.41.0 h1:XUzHLFWQVhmFtmKTodnAo5QdooPQfpVfilCxIV3aLoE= +github.com/aws/aws-sdk-go v1.41.0/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1/go.mod h1:CM+19rL1+4dFWnOQKwDc7H1KwXTz+h61oUSHyhV0b3o= @@ -1155,8 +1155,8 @@ golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211007125505-59d4e928ea9d h1:QWMn1lFvU/nZ58ssWqiFJMd3DKIII8NYc4sn708XgKs= -golang.org/x/net v0.0.0-20211007125505-59d4e928ea9d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211011170408-caeb26a5c8c0 h1:qOfNqBm5gk93LjGZo1MJaKY6Bph39zOKz1Hz2ogHj1w= +golang.org/x/net v0.0.0-20211011170408-caeb26a5c8c0/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= 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= @@ -1498,10 +1498,9 @@ google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEc google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210921142501-181ce0d877f6/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211007155348-82e027067bd4 h1:YXPV/eKW0ZWRdB5tyI6aPoaa2Wxb4OSlFrTREMdwn64= -google.golang.org/genproto v0.0.0-20211007155348-82e027067bd4/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211011165927-a5fb3255271e h1:B3r2Cb5u7Od6/WGb95VHDMp99VU/fuqPYZb6VM8IozI= +google.golang.org/genproto v0.0.0-20211011165927-a5fb3255271e/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= diff --git a/vendor/cloud.google.com/go/storage/CHANGES.md b/vendor/cloud.google.com/go/storage/CHANGES.md index 38ca4f8fa3..f0dbf92227 100644 --- a/vendor/cloud.google.com/go/storage/CHANGES.md +++ b/vendor/cloud.google.com/go/storage/CHANGES.md @@ -1,5 +1,18 @@ # Changes +## [1.18.0](https://www.github.com/googleapis/google-cloud-go/compare/storage/v1.17.0...storage/v1.18.0) (2021-10-11) + + +### Features + +* **storage:** returned wrapped error for timeouts ([#4802](https://www.github.com/googleapis/google-cloud-go/issues/4802)) ([0e102a3](https://www.github.com/googleapis/google-cloud-go/commit/0e102a385dc67a06f6b444b3a93e6998428529be)), refs [#4197](https://www.github.com/googleapis/google-cloud-go/issues/4197) +* **storage:** SignedUrl can use existing creds to authenticate ([#4604](https://www.github.com/googleapis/google-cloud-go/issues/4604)) ([b824c89](https://www.github.com/googleapis/google-cloud-go/commit/b824c897e6941270747b612f6d36a8d6ae081315)) + + +### Bug Fixes + +* **storage:** update PAP to use inherited instead of unspecified ([#4909](https://www.github.com/googleapis/google-cloud-go/issues/4909)) ([dac26b1](https://www.github.com/googleapis/google-cloud-go/commit/dac26b1af2f2972f12775341173bcc5f982438b8)) + ## [1.17.0](https://www.github.com/googleapis/google-cloud-go/compare/storage/v1.16.1...storage/v1.17.0) (2021-09-28) diff --git a/vendor/cloud.google.com/go/storage/bucket.go b/vendor/cloud.google.com/go/storage/bucket.go index f2a59f3b3d..d8747e58c9 100644 --- a/vendor/cloud.google.com/go/storage/bucket.go +++ b/vendor/cloud.google.com/go/storage/bucket.go @@ -16,15 +16,22 @@ package storage import ( "context" + "encoding/base64" + "encoding/json" + "errors" "fmt" "net/http" "reflect" "time" + "cloud.google.com/go/compute/metadata" "cloud.google.com/go/internal/optional" "cloud.google.com/go/internal/trace" + "golang.org/x/xerrors" "google.golang.org/api/googleapi" + "google.golang.org/api/iamcredentials/v1" "google.golang.org/api/iterator" + "google.golang.org/api/option" raw "google.golang.org/api/storage/v1" ) @@ -166,7 +173,8 @@ func (b *BucketHandle) Attrs(ctx context.Context) (attrs *BucketAttrs, err error resp, err = req.Context(ctx).Do() return err }) - if e, ok := err.(*googleapi.Error); ok && e.Code == http.StatusNotFound { + var e *googleapi.Error + if ok := xerrors.As(err, &e); ok && e.Code == http.StatusNotFound { return nil, ErrBucketNotExist } if err != nil { @@ -223,6 +231,115 @@ func (b *BucketHandle) newPatchCall(uattrs *BucketAttrsToUpdate) (*raw.BucketsPa return req, nil } +// SignedURL returns a URL for the specified object. Signed URLs allow anyone +// access to a restricted resource for a limited time without needing a +// Google account or signing in. For more information about signed URLs, see +// https://cloud.google.com/storage/docs/accesscontrol#signed_urls_query_string_authentication +// +// This method only requires the Method and Expires fields in the specified +// SignedURLOptions opts to be non-nil. If not provided, it attempts to fill the +// GoogleAccessID and PrivateKey from the GOOGLE_APPLICATION_CREDENTIALS environment variable. +// If no private key is found, it attempts to use the GoogleAccessID to sign the URL. +// This requires the IAM Service Account Credentials API to be enabled +// (https://console.developers.google.com/apis/api/iamcredentials.googleapis.com/overview) +// and iam.serviceAccounts.signBlob permissions on the GoogleAccessID service account. +// If you do not want these fields set for you, you may pass them in through opts or use +// SignedURL(bucket, name string, opts *SignedURLOptions) instead. +func (b *BucketHandle) SignedURL(object string, opts *SignedURLOptions) (string, error) { + if opts.GoogleAccessID != "" && (opts.SignBytes != nil || len(opts.PrivateKey) > 0) { + return SignedURL(b.name, object, opts) + } + // Make a copy of opts so we don't modify the pointer parameter. + newopts := opts.clone() + + if newopts.GoogleAccessID == "" { + id, err := b.detectDefaultGoogleAccessID() + if err != nil { + return "", err + } + newopts.GoogleAccessID = id + } + if newopts.SignBytes == nil && len(newopts.PrivateKey) == 0 { + if len(b.c.creds.JSON) > 0 { + var sa struct { + PrivateKey string `json:"private_key"` + } + err := json.Unmarshal(b.c.creds.JSON, &sa) + if err == nil && sa.PrivateKey != "" { + newopts.PrivateKey = []byte(sa.PrivateKey) + } + } + + // Don't error out if we can't unmarshal the private key from the client, + // fallback to the default sign function for the service account. + if len(newopts.PrivateKey) == 0 { + newopts.SignBytes = b.defaultSignBytesFunc(newopts.GoogleAccessID) + } + } + return SignedURL(b.name, object, newopts) +} + +// TODO: Add a similar wrapper for GenerateSignedPostPolicyV4 allowing users to +// omit PrivateKey/SignBytes + +func (b *BucketHandle) detectDefaultGoogleAccessID() (string, error) { + returnErr := errors.New("no credentials found on client and not on GCE (Google Compute Engine)") + + if len(b.c.creds.JSON) > 0 { + var sa struct { + ClientEmail string `json:"client_email"` + } + err := json.Unmarshal(b.c.creds.JSON, &sa) + if err == nil && sa.ClientEmail != "" { + return sa.ClientEmail, nil + } else if err != nil { + returnErr = err + } else { + returnErr = errors.New("storage: empty client email in credentials") + } + + } + + // Don't error out if we can't unmarshal, fallback to GCE check. + if metadata.OnGCE() { + email, err := metadata.Email("default") + if err == nil && email != "" { + return email, nil + } else if err != nil { + returnErr = err + } else { + returnErr = errors.New("got empty email from GCE metadata service") + } + + } + return "", fmt.Errorf("storage: unable to detect default GoogleAccessID: %v", returnErr) +} + +func (b *BucketHandle) defaultSignBytesFunc(email string) func([]byte) ([]byte, error) { + return func(in []byte) ([]byte, error) { + ctx := context.Background() + + // It's ok to recreate this service per call since we pass in the http client, + // circumventing the cost of recreating the auth/transport layer + svc, err := iamcredentials.NewService(ctx, option.WithHTTPClient(b.c.hc)) + if err != nil { + return nil, fmt.Errorf("unable to create iamcredentials client: %v", err) + } + + resp, err := svc.Projects.ServiceAccounts.SignBlob(fmt.Sprintf("projects/-/serviceAccounts/%s", email), &iamcredentials.SignBlobRequest{ + Payload: base64.StdEncoding.EncodeToString(in), + }).Do() + if err != nil { + return nil, fmt.Errorf("unable to sign bytes: %v", err) + } + out, err := base64.StdEncoding.DecodeString(resp.SignedBlob) + if err != nil { + return nil, fmt.Errorf("unable to base64 decode response: %v", err) + } + return out, nil + } +} + // BucketAttrs represents the metadata for a Google Cloud Storage bucket. // Read-only fields are ignored by BucketHandle.Create. type BucketAttrs struct { @@ -376,23 +493,29 @@ const ( // not set in a call to GCS. PublicAccessPreventionUnknown PublicAccessPrevention = iota - // PublicAccessPreventionUnspecified corresponds to a value of "unspecified" - // and is the default for buckets. + // PublicAccessPreventionUnspecified corresponds to a value of "unspecified". + // Deprecated: use PublicAccessPreventionInherited PublicAccessPreventionUnspecified // PublicAccessPreventionEnforced corresponds to a value of "enforced". This // enforces Public Access Prevention on the bucket. PublicAccessPreventionEnforced - publicAccessPreventionUnknown string = "" - publicAccessPreventionUnspecified = "unspecified" - publicAccessPreventionEnforced = "enforced" + // PublicAccessPreventionInherited corresponds to a value of "inherited" + // and is the default for buckets. + PublicAccessPreventionInherited + + publicAccessPreventionUnknown string = "" + // TODO: remove unspecified when change is fully completed + publicAccessPreventionUnspecified = "unspecified" + publicAccessPreventionEnforced = "enforced" + publicAccessPreventionInherited = "inherited" ) func (p PublicAccessPrevention) String() string { switch p { - case PublicAccessPreventionUnspecified: - return publicAccessPreventionUnspecified + case PublicAccessPreventionInherited, PublicAccessPreventionUnspecified: + return publicAccessPreventionInherited case PublicAccessPreventionEnforced: return publicAccessPreventionEnforced default: @@ -1212,8 +1335,8 @@ func toPublicAccessPrevention(b *raw.BucketIamConfiguration) PublicAccessPrevent return PublicAccessPreventionUnknown } switch b.PublicAccessPrevention { - case publicAccessPreventionUnspecified: - return PublicAccessPreventionUnspecified + case publicAccessPreventionInherited, publicAccessPreventionUnspecified: + return PublicAccessPreventionInherited case publicAccessPreventionEnforced: return PublicAccessPreventionEnforced default: @@ -1313,7 +1436,8 @@ func (it *ObjectIterator) fetch(pageSize int, pageToken string) (string, error) return err }) if err != nil { - if e, ok := err.(*googleapi.Error); ok && e.Code == http.StatusNotFound { + var e *googleapi.Error + if ok := xerrors.As(err, &e); ok && e.Code == http.StatusNotFound { err = ErrBucketNotExist } return "", err diff --git a/vendor/cloud.google.com/go/storage/doc.go b/vendor/cloud.google.com/go/storage/doc.go index 418e16068a..53259936d6 100644 --- a/vendor/cloud.google.com/go/storage/doc.go +++ b/vendor/cloud.google.com/go/storage/doc.go @@ -247,9 +247,10 @@ as the documentation of GenerateSignedPostPolicyV4. Errors Errors returned by this client are often of the type [`googleapi.Error`](https://godoc.org/google.golang.org/api/googleapi#Error). -These errors can be introspected for more information by type asserting to the richer `googleapi.Error` type. For example: +These errors can be introspected for more information by using `errors.As` with the richer `googleapi.Error` type. For example: - if e, ok := err.(*googleapi.Error); ok { + var e *googleapi.Error + if ok := errors.As(err, &e); ok { if e.Code == 409 { ... } } */ diff --git a/vendor/cloud.google.com/go/storage/go.mod b/vendor/cloud.google.com/go/storage/go.mod index b7d5b3c1cc..e6e9e0ee17 100644 --- a/vendor/cloud.google.com/go/storage/go.mod +++ b/vendor/cloud.google.com/go/storage/go.mod @@ -3,14 +3,14 @@ module cloud.google.com/go/storage go 1.11 require ( - cloud.google.com/go v0.94.1 + cloud.google.com/go v0.97.0 github.com/golang/protobuf v1.5.2 github.com/google/go-cmp v0.5.6 github.com/googleapis/gax-go/v2 v2.1.0 golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 google.golang.org/api v0.57.0 - google.golang.org/genproto v0.0.0-20210921142501-181ce0d877f6 + google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0 google.golang.org/grpc v1.40.0 google.golang.org/protobuf v1.27.1 ) diff --git a/vendor/cloud.google.com/go/storage/go.sum b/vendor/cloud.google.com/go/storage/go.sum index 82b1699524..0fe77c05a7 100644 --- a/vendor/cloud.google.com/go/storage/go.sum +++ b/vendor/cloud.google.com/go/storage/go.sum @@ -23,8 +23,9 @@ cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSU cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= -cloud.google.com/go v0.94.1 h1:DwuSvDZ1pTYGbXo8yOJevCTr3BoBlE+OVkHAKiYQUXc= cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= +cloud.google.com/go v0.97.0 h1:3DXvAyifywvq64LfkKaMOmkWPS1CikIQdMe2lY9vxU8= +cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= 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= @@ -488,8 +489,8 @@ google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEc google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210921142501-181ce0d877f6 h1:2ncG/LajxmrclaZH+ppVi02rQxz4eXYJzGHdFN4Y9UA= -google.golang.org/genproto v0.0.0-20210921142501-181ce0d877f6/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0 h1:5Tbluzus3QxoAJx4IefGt1W0HQZW4nuMrVk684jI74Q= +google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= 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= diff --git a/vendor/cloud.google.com/go/storage/invoke.go b/vendor/cloud.google.com/go/storage/invoke.go index 2ecf48fffd..0c44c2db14 100644 --- a/vendor/cloud.google.com/go/storage/invoke.go +++ b/vendor/cloud.google.com/go/storage/invoke.go @@ -36,7 +36,7 @@ func runWithRetry(ctx context.Context, call func() error) error { return true, nil } if shouldRetry(err) { - return false, nil + return false, err } return true, err }) diff --git a/vendor/cloud.google.com/go/storage/reader.go b/vendor/cloud.google.com/go/storage/reader.go index ba51c5f512..4192c02ba9 100644 --- a/vendor/cloud.google.com/go/storage/reader.go +++ b/vendor/cloud.google.com/go/storage/reader.go @@ -30,7 +30,6 @@ import ( "cloud.google.com/go/internal/trace" "google.golang.org/api/googleapi" storagepb "google.golang.org/genproto/googleapis/storage/v2" - "google.golang.org/protobuf/proto" ) var crc32cTable = crc32.MakeTable(crc32.Castagnoli) @@ -475,8 +474,10 @@ func (o *ObjectHandle) newRangeReaderWithGRPC(ctx context.Context, offset, lengt } req.ReadOffset = start - // TODO: refactor this to use applyCondsProto. - setRequestConditions(req, o.conds) + if err := applyCondsProto("reopenWithGRPC", o.gen, o.conds, req); err != nil { + cancel() + return nil, nil, err + } var stream storagepb.Storage_ReadObjectClient var msg *storagepb.ReadObjectResponse @@ -632,10 +633,7 @@ func (r *Reader) readWithGRPC(p []byte) (int, error) { if leftover > 0 { // Wasn't able to copy all of the data in the message, store for // future Read calls. - // TODO: Instead of acquiring a new block of memory, should we reuse - // the existing leftovers slice, expanding it if necessary? - r.leftovers = make([]byte, leftover) - copy(r.leftovers, content[n:]) + r.leftovers = content[n:] } r.seen += int64(n) @@ -684,29 +682,6 @@ func (r *Reader) reopenStream(seen int64) (*storagepb.ReadObjectResponse, error) return res.response, nil } -// setRequestConditions is used to apply the given Conditions to a gRPC request -// message. -// -// This is an experimental API and not intended for public use. -func setRequestConditions(req *storagepb.ReadObjectRequest, conds *Conditions) { - if conds == nil { - return - } - if conds.MetagenerationMatch != 0 { - req.IfMetagenerationMatch = proto.Int64(conds.MetagenerationMatch) - } else if conds.MetagenerationNotMatch != 0 { - req.IfMetagenerationNotMatch = proto.Int64(conds.MetagenerationNotMatch) - } - switch { - case conds.GenerationNotMatch != 0: - req.IfGenerationNotMatch = proto.Int64(conds.GenerationNotMatch) - case conds.GenerationMatch != 0: - req.IfGenerationMatch = proto.Int64(conds.GenerationMatch) - case conds.DoesNotExist: - req.IfGenerationMatch = proto.Int64(0) - } -} - // Size returns the size of the object in bytes. // The returned value is always the same and is not affected by // calls to Read or Close. diff --git a/vendor/cloud.google.com/go/storage/storage.go b/vendor/cloud.google.com/go/storage/storage.go index a5627be34d..98a0389d0f 100644 --- a/vendor/cloud.google.com/go/storage/storage.go +++ b/vendor/cloud.google.com/go/storage/storage.go @@ -41,10 +41,13 @@ import ( "cloud.google.com/go/internal/trace" "cloud.google.com/go/internal/version" gapic "cloud.google.com/go/storage/internal/apiv2" + "golang.org/x/oauth2/google" + "golang.org/x/xerrors" "google.golang.org/api/googleapi" "google.golang.org/api/option" "google.golang.org/api/option/internaloption" raw "google.golang.org/api/storage/v1" + "google.golang.org/api/transport" htransport "google.golang.org/api/transport/http" storagepb "google.golang.org/genproto/googleapis/storage/v2" "google.golang.org/protobuf/proto" @@ -97,6 +100,7 @@ type Client struct { scheme string // ReadHost is the default host used on the reader. readHost string + creds *google.Credentials // gc is an optional gRPC-based, GAPIC client. // @@ -111,6 +115,7 @@ type Client struct { // Clients should be reused instead of created as needed. The methods of Client // are safe for concurrent use by multiple goroutines. func NewClient(ctx context.Context, opts ...option.ClientOption) (*Client, error) { + var creds *google.Credentials // In general, it is recommended to use raw.NewService instead of htransport.NewClient // since raw.NewService configures the correct default endpoints when initializing the @@ -121,10 +126,19 @@ func NewClient(ctx context.Context, opts ...option.ClientOption) (*Client, error // need to account for STORAGE_EMULATOR_HOST override when setting the default endpoints. if host := os.Getenv("STORAGE_EMULATOR_HOST"); host == "" { // Prepend default options to avoid overriding options passed by the user. - opts = append([]option.ClientOption{option.WithScopes(ScopeFullControl), option.WithUserAgent(userAgent)}, opts...) + opts = append([]option.ClientOption{option.WithScopes(ScopeFullControl, "https://www.googleapis.com/auth/cloud-platform"), option.WithUserAgent(userAgent)}, opts...) opts = append(opts, internaloption.WithDefaultEndpoint("https://storage.googleapis.com/storage/v1/")) opts = append(opts, internaloption.WithDefaultMTLSEndpoint("https://storage.mtls.googleapis.com/storage/v1/")) + + c, err := transport.Creds(ctx, opts...) + if err != nil { + return nil, err + } + creds = c + + opts = append(opts, internaloption.WithCredentials(creds)) + } else { var hostURL *url.URL @@ -171,6 +185,7 @@ func NewClient(ctx context.Context, opts ...option.ClientOption) (*Client, error raw: rawService, scheme: u.Scheme, readHost: u.Host, + creds: creds, }, nil } @@ -209,6 +224,7 @@ func (c *Client) Close() error { // Set fields to nil so that subsequent uses will panic. c.hc = nil c.raw = nil + c.creds = nil if c.gc != nil { return c.gc.Close() } @@ -395,6 +411,23 @@ type SignedURLOptions struct { Scheme SigningScheme } +func (opts *SignedURLOptions) clone() *SignedURLOptions { + return &SignedURLOptions{ + GoogleAccessID: opts.GoogleAccessID, + SignBytes: opts.SignBytes, + PrivateKey: opts.PrivateKey, + Method: opts.Method, + Expires: opts.Expires, + ContentType: opts.ContentType, + Headers: opts.Headers, + QueryParameters: opts.QueryParameters, + MD5: opts.MD5, + Style: opts.Style, + Insecure: opts.Insecure, + Scheme: opts.Scheme, + } +} + var ( tabRegex = regexp.MustCompile(`[\t]+`) // I was tempted to call this spacex. :) @@ -508,11 +541,11 @@ func v4SanitizeHeaders(hdrs []string) []string { return sanitizedHeaders } -// SignedURL returns a URL for the specified object. Signed URLs allow -// the users access to a restricted resource for a limited time without having a -// Google account or signing in. For more information about the signed -// URLs, see https://cloud.google.com/storage/docs/accesscontrol#Signed-URLs. -func SignedURL(bucket, name string, opts *SignedURLOptions) (string, error) { +// SignedURL returns a URL for the specified object. Signed URLs allow anyone +// access to a restricted resource for a limited time without needing a +// Google account or signing in. For more information about signed URLs, see +// https://cloud.google.com/storage/docs/accesscontrol#signed_urls_query_string_authentication +func SignedURL(bucket, object string, opts *SignedURLOptions) (string, error) { now := utcNow() if err := validateOptions(opts, now); err != nil { return "", err @@ -521,13 +554,13 @@ func SignedURL(bucket, name string, opts *SignedURLOptions) (string, error) { switch opts.Scheme { case SigningSchemeV2: opts.Headers = v2SanitizeHeaders(opts.Headers) - return signedURLV2(bucket, name, opts) + return signedURLV2(bucket, object, opts) case SigningSchemeV4: opts.Headers = v4SanitizeHeaders(opts.Headers) - return signedURLV4(bucket, name, opts, now) + return signedURLV4(bucket, object, opts, now) default: // SigningSchemeDefault opts.Headers = v2SanitizeHeaders(opts.Headers) - return signedURLV2(bucket, name, opts) + return signedURLV2(bucket, object, opts) } } @@ -867,7 +900,8 @@ func (o *ObjectHandle) Attrs(ctx context.Context) (attrs *ObjectAttrs, err error var obj *raw.Object setClientHeader(call.Header()) err = runWithRetry(ctx, func() error { obj, err = call.Do(); return err }) - if e, ok := err.(*googleapi.Error); ok && e.Code == http.StatusNotFound { + var e *googleapi.Error + if ok := xerrors.As(err, &e); ok && e.Code == http.StatusNotFound { return nil, ErrObjectNotExist } if err != nil { @@ -967,7 +1001,8 @@ func (o *ObjectHandle) Update(ctx context.Context, uattrs ObjectAttrsToUpdate) ( var obj *raw.Object setClientHeader(call.Header()) err = runWithRetry(ctx, func() error { obj, err = call.Do(); return err }) - if e, ok := err.(*googleapi.Error); ok && e.Code == http.StatusNotFound { + var e *googleapi.Error + if ok := xerrors.As(err, &e); ok && e.Code == http.StatusNotFound { return nil, ErrObjectNotExist } if err != nil { @@ -1030,13 +1065,9 @@ func (o *ObjectHandle) Delete(ctx context.Context) error { // Encryption doesn't apply to Delete. setClientHeader(call.Header()) err := runWithRetry(ctx, func() error { return call.Do() }) - switch e := err.(type) { - case nil: - return nil - case *googleapi.Error: - if e.Code == http.StatusNotFound { - return ErrObjectNotExist - } + var e *googleapi.Error + if ok := xerrors.As(err, &e); ok && e.Code == http.StatusNotFound { + return ErrObjectNotExist } return err } diff --git a/vendor/cloud.google.com/go/storage/writer.go b/vendor/cloud.google.com/go/storage/writer.go index ff30ff78bd..c25a20e4b1 100644 --- a/vendor/cloud.google.com/go/storage/writer.go +++ b/vendor/cloud.google.com/go/storage/writer.go @@ -24,9 +24,12 @@ import ( "unicode/utf8" "github.com/golang/protobuf/proto" + "golang.org/x/xerrors" "google.golang.org/api/googleapi" raw "google.golang.org/api/storage/v1" storagepb "google.golang.org/genproto/googleapis/storage/v2" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" ) const ( @@ -217,7 +220,7 @@ func (w *Writer) Write(p []byte) (n int, err error) { // Preserve existing functionality that when context is canceled, Write will return // context.Canceled instead of "io: read/write on closed pipe". This hides the // pipe implementation detail from users and makes Write seem as though it's an RPC. - if werr == context.Canceled || werr == context.DeadlineExceeded { + if xerrors.Is(werr, context.Canceled) || xerrors.Is(werr, context.DeadlineExceeded) { return n, werr } } @@ -353,6 +356,7 @@ func (w *Writer) openGRPC() error { // Note: This blocks until either the buffer is full or EOF is read. recvd, doneReading, err := read(pr, buf) if err != nil { + err = checkCanceled(err) w.error(err) pr.CloseWithError(err) return @@ -369,6 +373,7 @@ func (w *Writer) openGRPC() error { if !doneReading && w.upid == "" { err = w.startResumableUpload() if err != nil { + err = checkCanceled(err) w.error(err) pr.CloseWithError(err) return @@ -377,6 +382,7 @@ func (w *Writer) openGRPC() error { o, off, finalized, err := w.uploadBuffer(toWrite, recvd, offset, doneReading) if err != nil { + err = checkCanceled(err) w.error(err) pr.CloseWithError(err) return @@ -637,3 +643,11 @@ func read(r io.Reader, buf []byte) (int, bool, error) { } return recvd, done, err } + +func checkCanceled(err error) error { + if status.Code(err) == codes.Canceled { + return context.Canceled + } + + return err +} 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 2d90f21b15..510f68060b 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 @@ -7661,6 +7661,54 @@ var awsPartition = partition{ "us-west-2": endpoint{}, }, }, + "textract": service{ + + Endpoints: endpoints{ + "ap-northeast-2": endpoint{}, + "ap-south-1": endpoint{}, + "ap-southeast-1": endpoint{}, + "ap-southeast-2": endpoint{}, + "ca-central-1": endpoint{}, + "eu-central-1": endpoint{}, + "eu-west-1": endpoint{}, + "eu-west-2": endpoint{}, + "eu-west-3": endpoint{}, + "fips-ca-central-1": endpoint{ + Hostname: "textract-fips.ca-central-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ca-central-1", + }, + }, + "fips-us-east-1": endpoint{ + Hostname: "textract-fips.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + }, + "fips-us-east-2": endpoint{ + Hostname: "textract-fips.us-east-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-2", + }, + }, + "fips-us-west-1": endpoint{ + Hostname: "textract-fips.us-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-1", + }, + }, + "fips-us-west-2": endpoint{ + Hostname: "textract-fips.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + }, + "us-east-1": endpoint{}, + "us-east-2": endpoint{}, + "us-west-1": endpoint{}, + "us-west-2": endpoint{}, + }, + }, "transcribe": service{ Defaults: endpoint{ Protocols: []string{"https"}, @@ -11193,6 +11241,25 @@ var awsusgovPartition = partition{ "us-gov-west-1": endpoint{}, }, }, + "textract": service{ + + Endpoints: endpoints{ + "fips-us-gov-east-1": endpoint{ + Hostname: "textract-fips.us-gov-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-east-1", + }, + }, + "fips-us-gov-west-1": endpoint{ + Hostname: "textract-fips.us-gov-west-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-gov-west-1", + }, + }, + "us-gov-east-1": endpoint{}, + "us-gov-west-1": endpoint{}, + }, + }, "transcribe": service{ Defaults: endpoint{ Protocols: []string{"https"}, 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 2fc6d44857..4a04d190b2 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.40.58" +const SDKVersion = "1.41.0" diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/build.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/build.go index 864fb6704b..2aec80661a 100644 --- a/vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/build.go +++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/build.go @@ -82,13 +82,17 @@ func buildStruct(value reflect.Value, buf *bytes.Buffer, tag reflect.StructTag) field, _ := value.Type().FieldByName(payload) tag = field.Tag value = elemOf(value.FieldByName(payload)) - - if !value.IsValid() { + if !value.IsValid() && tag.Get("type") != "structure" { return nil } } buf.WriteByte('{') + defer buf.WriteString("}") + + if !value.IsValid() { + return nil + } t := value.Type() first := true @@ -144,8 +148,6 @@ func buildStruct(value reflect.Value, buf *bytes.Buffer, tag reflect.StructTag) } - buf.WriteString("}") - return nil } diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/jsonrpc/jsonrpc.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/jsonrpc/jsonrpc.go index a029217e4c..d9aa271148 100644 --- a/vendor/github.com/aws/aws-sdk-go/private/protocol/jsonrpc/jsonrpc.go +++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/jsonrpc/jsonrpc.go @@ -49,9 +49,8 @@ func Build(req *request.Request) { buf = emptyJSON } - if req.ClientInfo.TargetPrefix != "" || string(buf) != "{}" { - req.SetBufferBody(buf) - } + // Always serialize the body, don't suppress it. + req.SetBufferBody(buf) if req.ClientInfo.TargetPrefix != "" { target := req.ClientInfo.TargetPrefix + "." + req.Operation.Name diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/payload.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/payload.go index 4366de2e1e..b54c99edae 100644 --- a/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/payload.go +++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/payload.go @@ -28,18 +28,27 @@ func PayloadMember(i interface{}) interface{} { return nil } -// PayloadType returns the type of a payload field member of i if there is one, or "". +const nopayloadPayloadType = "nopayload" + +// PayloadType returns the type of a payload field member of i if there is one, +// or "". func PayloadType(i interface{}) string { v := reflect.Indirect(reflect.ValueOf(i)) if !v.IsValid() { return "" } + if field, ok := v.Type().FieldByName("_"); ok { + if noPayload := field.Tag.Get(nopayloadPayloadType); noPayload != "" { + return nopayloadPayloadType + } + if payloadName := field.Tag.Get("payload"); payloadName != "" { if member, ok := v.Type().FieldByName(payloadName); ok { return member.Tag.Get("type") } } } + return "" } diff --git a/vendor/github.com/aws/aws-sdk-go/service/sso/api.go b/vendor/github.com/aws/aws-sdk-go/service/sso/api.go index e3711e6422..c648e78191 100644 --- a/vendor/github.com/aws/aws-sdk-go/service/sso/api.go +++ b/vendor/github.com/aws/aws-sdk-go/service/sso/api.go @@ -550,7 +550,7 @@ func (s *AccountInfo) SetEmailAddress(v string) *AccountInfo { } type GetRoleCredentialsInput struct { - _ struct{} `type:"structure"` + _ struct{} `type:"structure" nopayload:"true"` // The token issued by the CreateToken API call. For more information, see CreateToken // (https://docs.aws.amazon.com/singlesignon/latest/OIDCAPIReference/API_CreateToken.html) @@ -726,7 +726,7 @@ func (s *InvalidRequestException) RequestID() string { } type ListAccountRolesInput struct { - _ struct{} `type:"structure"` + _ struct{} `type:"structure" nopayload:"true"` // The token issued by the CreateToken API call. For more information, see CreateToken // (https://docs.aws.amazon.com/singlesignon/latest/OIDCAPIReference/API_CreateToken.html) @@ -855,7 +855,7 @@ func (s *ListAccountRolesOutput) SetRoleList(v []*RoleInfo) *ListAccountRolesOut } type ListAccountsInput struct { - _ struct{} `type:"structure"` + _ struct{} `type:"structure" nopayload:"true"` // The token issued by the CreateToken API call. For more information, see CreateToken // (https://docs.aws.amazon.com/singlesignon/latest/OIDCAPIReference/API_CreateToken.html) @@ -970,7 +970,7 @@ func (s *ListAccountsOutput) SetNextToken(v string) *ListAccountsOutput { } type LogoutInput struct { - _ struct{} `type:"structure"` + _ struct{} `type:"structure" nopayload:"true"` // The token issued by the CreateToken API call. For more information, see CreateToken // (https://docs.aws.amazon.com/singlesignon/latest/OIDCAPIReference/API_CreateToken.html) @@ -1022,7 +1022,7 @@ func (s *LogoutInput) SetAccessToken(v string) *LogoutInput { } type LogoutOutput struct { - _ struct{} `type:"structure"` + _ struct{} `type:"structure" nopayload:"true"` } // String returns the string representation. diff --git a/vendor/google.golang.org/api/iamcredentials/v1/iamcredentials-api.json b/vendor/google.golang.org/api/iamcredentials/v1/iamcredentials-api.json new file mode 100644 index 0000000000..ed9ccd0348 --- /dev/null +++ b/vendor/google.golang.org/api/iamcredentials/v1/iamcredentials-api.json @@ -0,0 +1,372 @@ +{ + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/cloud-platform": { + "description": "See, edit, configure, and delete your Google Cloud data and see the email address for your Google Account." + } + } + } + }, + "basePath": "", + "baseUrl": "https://iamcredentials.googleapis.com/", + "batchPath": "batch", + "canonicalName": "IAM Credentials", + "description": "Creates short-lived credentials for impersonating IAM service accounts. To enable this API, you must enable the IAM API (iam.googleapis.com). ", + "discoveryVersion": "v1", + "documentationLink": "https://cloud.google.com/iam/docs/creating-short-lived-service-account-credentials", + "fullyEncodeReservedExpansion": true, + "icons": { + "x16": "http://www.google.com/images/icons/product/search-16.gif", + "x32": "http://www.google.com/images/icons/product/search-32.gif" + }, + "id": "iamcredentials:v1", + "kind": "discovery#restDescription", + "mtlsRootUrl": "https://iamcredentials.mtls.googleapis.com/", + "name": "iamcredentials", + "ownerDomain": "google.com", + "ownerName": "Google", + "parameters": { + "$.xgafv": { + "description": "V1 error format.", + "enum": [ + "1", + "2" + ], + "enumDescriptions": [ + "v1 error format", + "v2 error format" + ], + "location": "query", + "type": "string" + }, + "access_token": { + "description": "OAuth access token.", + "location": "query", + "type": "string" + }, + "alt": { + "default": "json", + "description": "Data format for response.", + "enum": [ + "json", + "media", + "proto" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json", + "Media download with context-dependent Content-Type", + "Responses with Content-Type of application/x-protobuf" + ], + "location": "query", + "type": "string" + }, + "callback": { + "description": "JSONP", + "location": "query", + "type": "string" + }, + "fields": { + "description": "Selector specifying which fields to include in a partial response.", + "location": "query", + "type": "string" + }, + "key": { + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query", + "type": "string" + }, + "oauth_token": { + "description": "OAuth 2.0 token for the current user.", + "location": "query", + "type": "string" + }, + "prettyPrint": { + "default": "true", + "description": "Returns response with indentations and line breaks.", + "location": "query", + "type": "boolean" + }, + "quotaUser": { + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.", + "location": "query", + "type": "string" + }, + "uploadType": { + "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").", + "location": "query", + "type": "string" + }, + "upload_protocol": { + "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").", + "location": "query", + "type": "string" + } + }, + "protocol": "rest", + "resources": { + "projects": { + "resources": { + "serviceAccounts": { + "methods": { + "generateAccessToken": { + "description": "Generates an OAuth 2.0 access token for a service account.", + "flatPath": "v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}:generateAccessToken", + "httpMethod": "POST", + "id": "iamcredentials.projects.serviceAccounts.generateAccessToken", + "parameterOrder": [ + "name" + ], + "parameters": { + "name": { + "description": "Required. The resource name of the service account for which the credentials are requested, in the following format: `projects/-/serviceAccounts/{ACCOUNT_EMAIL_OR_UNIQUEID}`. The `-` wildcard character is required; replacing it with a project ID is invalid.", + "location": "path", + "pattern": "^projects/[^/]+/serviceAccounts/[^/]+$", + "required": true, + "type": "string" + } + }, + "path": "v1/{+name}:generateAccessToken", + "request": { + "$ref": "GenerateAccessTokenRequest" + }, + "response": { + "$ref": "GenerateAccessTokenResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "generateIdToken": { + "description": "Generates an OpenID Connect ID token for a service account.", + "flatPath": "v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}:generateIdToken", + "httpMethod": "POST", + "id": "iamcredentials.projects.serviceAccounts.generateIdToken", + "parameterOrder": [ + "name" + ], + "parameters": { + "name": { + "description": "Required. The resource name of the service account for which the credentials are requested, in the following format: `projects/-/serviceAccounts/{ACCOUNT_EMAIL_OR_UNIQUEID}`. The `-` wildcard character is required; replacing it with a project ID is invalid.", + "location": "path", + "pattern": "^projects/[^/]+/serviceAccounts/[^/]+$", + "required": true, + "type": "string" + } + }, + "path": "v1/{+name}:generateIdToken", + "request": { + "$ref": "GenerateIdTokenRequest" + }, + "response": { + "$ref": "GenerateIdTokenResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "signBlob": { + "description": "Signs a blob using a service account's system-managed private key.", + "flatPath": "v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}:signBlob", + "httpMethod": "POST", + "id": "iamcredentials.projects.serviceAccounts.signBlob", + "parameterOrder": [ + "name" + ], + "parameters": { + "name": { + "description": "Required. The resource name of the service account for which the credentials are requested, in the following format: `projects/-/serviceAccounts/{ACCOUNT_EMAIL_OR_UNIQUEID}`. The `-` wildcard character is required; replacing it with a project ID is invalid.", + "location": "path", + "pattern": "^projects/[^/]+/serviceAccounts/[^/]+$", + "required": true, + "type": "string" + } + }, + "path": "v1/{+name}:signBlob", + "request": { + "$ref": "SignBlobRequest" + }, + "response": { + "$ref": "SignBlobResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "signJwt": { + "description": "Signs a JWT using a service account's system-managed private key.", + "flatPath": "v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}:signJwt", + "httpMethod": "POST", + "id": "iamcredentials.projects.serviceAccounts.signJwt", + "parameterOrder": [ + "name" + ], + "parameters": { + "name": { + "description": "Required. The resource name of the service account for which the credentials are requested, in the following format: `projects/-/serviceAccounts/{ACCOUNT_EMAIL_OR_UNIQUEID}`. The `-` wildcard character is required; replacing it with a project ID is invalid.", + "location": "path", + "pattern": "^projects/[^/]+/serviceAccounts/[^/]+$", + "required": true, + "type": "string" + } + }, + "path": "v1/{+name}:signJwt", + "request": { + "$ref": "SignJwtRequest" + }, + "response": { + "$ref": "SignJwtResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + } + } + } + } + } + }, + "revision": "20210813", + "rootUrl": "https://iamcredentials.googleapis.com/", + "schemas": { + "GenerateAccessTokenRequest": { + "id": "GenerateAccessTokenRequest", + "properties": { + "delegates": { + "description": "The sequence of service accounts in a delegation chain. Each service account must be granted the `roles/iam.serviceAccountTokenCreator` role on its next service account in the chain. The last service account in the chain must be granted the `roles/iam.serviceAccountTokenCreator` role on the service account that is specified in the `name` field of the request. The delegates must have the following format: `projects/-/serviceAccounts/{ACCOUNT_EMAIL_OR_UNIQUEID}`. The `-` wildcard character is required; replacing it with a project ID is invalid.", + "items": { + "type": "string" + }, + "type": "array" + }, + "lifetime": { + "description": "The desired lifetime duration of the access token in seconds. By default, the maximum allowed value is 1 hour. To set a lifetime of up to 12 hours, you can add the service account as an allowed value in an Organization Policy that enforces the `constraints/iam.allowServiceAccountCredentialLifetimeExtension` constraint. See detailed instructions at https://cloud.google.com/iam/help/credentials/lifetime If a value is not specified, the token's lifetime will be set to a default value of 1 hour.", + "format": "google-duration", + "type": "string" + }, + "scope": { + "description": "Required. Code to identify the scopes to be included in the OAuth 2.0 access token. See https://developers.google.com/identity/protocols/googlescopes for more information. At least one value required.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "GenerateAccessTokenResponse": { + "id": "GenerateAccessTokenResponse", + "properties": { + "accessToken": { + "description": "The OAuth 2.0 access token.", + "type": "string" + }, + "expireTime": { + "description": "Token expiration time. The expiration time is always set.", + "format": "google-datetime", + "type": "string" + } + }, + "type": "object" + }, + "GenerateIdTokenRequest": { + "id": "GenerateIdTokenRequest", + "properties": { + "audience": { + "description": "Required. The audience for the token, such as the API or account that this token grants access to.", + "type": "string" + }, + "delegates": { + "description": "The sequence of service accounts in a delegation chain. Each service account must be granted the `roles/iam.serviceAccountTokenCreator` role on its next service account in the chain. The last service account in the chain must be granted the `roles/iam.serviceAccountTokenCreator` role on the service account that is specified in the `name` field of the request. The delegates must have the following format: `projects/-/serviceAccounts/{ACCOUNT_EMAIL_OR_UNIQUEID}`. The `-` wildcard character is required; replacing it with a project ID is invalid.", + "items": { + "type": "string" + }, + "type": "array" + }, + "includeEmail": { + "description": "Include the service account email in the token. If set to `true`, the token will contain `email` and `email_verified` claims.", + "type": "boolean" + } + }, + "type": "object" + }, + "GenerateIdTokenResponse": { + "id": "GenerateIdTokenResponse", + "properties": { + "token": { + "description": "The OpenId Connect ID token.", + "type": "string" + } + }, + "type": "object" + }, + "SignBlobRequest": { + "id": "SignBlobRequest", + "properties": { + "delegates": { + "description": "The sequence of service accounts in a delegation chain. Each service account must be granted the `roles/iam.serviceAccountTokenCreator` role on its next service account in the chain. The last service account in the chain must be granted the `roles/iam.serviceAccountTokenCreator` role on the service account that is specified in the `name` field of the request. The delegates must have the following format: `projects/-/serviceAccounts/{ACCOUNT_EMAIL_OR_UNIQUEID}`. The `-` wildcard character is required; replacing it with a project ID is invalid.", + "items": { + "type": "string" + }, + "type": "array" + }, + "payload": { + "description": "Required. The bytes to sign.", + "format": "byte", + "type": "string" + } + }, + "type": "object" + }, + "SignBlobResponse": { + "id": "SignBlobResponse", + "properties": { + "keyId": { + "description": "The ID of the key used to sign the blob. The key used for signing will remain valid for at least 12 hours after the blob is signed. To verify the signature, you can retrieve the public key in several formats from the following endpoints: - RSA public key wrapped in an X.509 v3 certificate: `https://www.googleapis.com/service_accounts/v1/metadata/x509/{ACCOUNT_EMAIL}` - Raw key in JSON format: `https://www.googleapis.com/service_accounts/v1/metadata/raw/{ACCOUNT_EMAIL}` - JSON Web Key (JWK): `https://www.googleapis.com/service_accounts/v1/metadata/jwk/{ACCOUNT_EMAIL}`", + "type": "string" + }, + "signedBlob": { + "description": "The signature for the blob. Does not include the original blob. After the key pair referenced by the `key_id` response field expires, Google no longer exposes the public key that can be used to verify the blob. As a result, the receiver can no longer verify the signature.", + "format": "byte", + "type": "string" + } + }, + "type": "object" + }, + "SignJwtRequest": { + "id": "SignJwtRequest", + "properties": { + "delegates": { + "description": "The sequence of service accounts in a delegation chain. Each service account must be granted the `roles/iam.serviceAccountTokenCreator` role on its next service account in the chain. The last service account in the chain must be granted the `roles/iam.serviceAccountTokenCreator` role on the service account that is specified in the `name` field of the request. The delegates must have the following format: `projects/-/serviceAccounts/{ACCOUNT_EMAIL_OR_UNIQUEID}`. The `-` wildcard character is required; replacing it with a project ID is invalid.", + "items": { + "type": "string" + }, + "type": "array" + }, + "payload": { + "description": "Required. The JWT payload to sign. Must be a serialized JSON object that contains a JWT Claims Set. For example: `{\"sub\": \"user@example.com\", \"iat\": 313435}` If the JWT Claims Set contains an expiration time (`exp`) claim, it must be an integer timestamp that is not in the past and no more than 12 hours in the future.", + "type": "string" + } + }, + "type": "object" + }, + "SignJwtResponse": { + "id": "SignJwtResponse", + "properties": { + "keyId": { + "description": "The ID of the key used to sign the JWT. The key used for signing will remain valid for at least 12 hours after the JWT is signed. To verify the signature, you can retrieve the public key in several formats from the following endpoints: - RSA public key wrapped in an X.509 v3 certificate: `https://www.googleapis.com/service_accounts/v1/metadata/x509/{ACCOUNT_EMAIL}` - Raw key in JSON format: `https://www.googleapis.com/service_accounts/v1/metadata/raw/{ACCOUNT_EMAIL}` - JSON Web Key (JWK): `https://www.googleapis.com/service_accounts/v1/metadata/jwk/{ACCOUNT_EMAIL}`", + "type": "string" + }, + "signedJwt": { + "description": "The signed JWT. Contains the automatically generated header; the client-supplied payload; and the signature, which is generated using the key referenced by the `kid` field in the header. After the key pair referenced by the `key_id` response field expires, Google no longer exposes the public key that can be used to verify the JWT. As a result, the receiver can no longer verify the signature.", + "type": "string" + } + }, + "type": "object" + } + }, + "servicePath": "", + "title": "IAM Service Account Credentials API", + "version": "v1", + "version_module": true +} \ No newline at end of file diff --git a/vendor/google.golang.org/api/iamcredentials/v1/iamcredentials-gen.go b/vendor/google.golang.org/api/iamcredentials/v1/iamcredentials-gen.go new file mode 100644 index 0000000000..0a84fe052b --- /dev/null +++ b/vendor/google.golang.org/api/iamcredentials/v1/iamcredentials-gen.go @@ -0,0 +1,1089 @@ +// Copyright 2021 Google LLC. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated file. DO NOT EDIT. + +// Package iamcredentials provides access to the IAM Service Account Credentials API. +// +// For product documentation, see: https://cloud.google.com/iam/docs/creating-short-lived-service-account-credentials +// +// Creating a client +// +// Usage example: +// +// import "google.golang.org/api/iamcredentials/v1" +// ... +// ctx := context.Background() +// iamcredentialsService, err := iamcredentials.NewService(ctx) +// +// In this example, Google Application Default Credentials are used for authentication. +// +// For information on how to create and obtain Application Default Credentials, see https://developers.google.com/identity/protocols/application-default-credentials. +// +// Other authentication options +// +// To use an API key for authentication (note: some APIs do not support API keys), use option.WithAPIKey: +// +// iamcredentialsService, err := iamcredentials.NewService(ctx, option.WithAPIKey("AIza...")) +// +// To use an OAuth token (e.g., a user token obtained via a three-legged OAuth flow), use option.WithTokenSource: +// +// config := &oauth2.Config{...} +// // ... +// token, err := config.Exchange(ctx, ...) +// iamcredentialsService, err := iamcredentials.NewService(ctx, option.WithTokenSource(config.TokenSource(ctx, token))) +// +// See https://godoc.org/google.golang.org/api/option/ for details on options. +package iamcredentials // import "google.golang.org/api/iamcredentials/v1" + +import ( + "bytes" + "context" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" + + googleapi "google.golang.org/api/googleapi" + gensupport "google.golang.org/api/internal/gensupport" + option "google.golang.org/api/option" + internaloption "google.golang.org/api/option/internaloption" + htransport "google.golang.org/api/transport/http" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = gensupport.MarshalJSON +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace +var _ = context.Canceled +var _ = internaloption.WithDefaultEndpoint + +const apiId = "iamcredentials:v1" +const apiName = "iamcredentials" +const apiVersion = "v1" +const basePath = "https://iamcredentials.googleapis.com/" +const mtlsBasePath = "https://iamcredentials.mtls.googleapis.com/" + +// OAuth2 scopes used by this API. +const ( + // See, edit, configure, and delete your Google Cloud data and see the + // email address for your Google Account. + CloudPlatformScope = "https://www.googleapis.com/auth/cloud-platform" +) + +// NewService creates a new Service. +func NewService(ctx context.Context, opts ...option.ClientOption) (*Service, error) { + scopesOption := option.WithScopes( + "https://www.googleapis.com/auth/cloud-platform", + ) + // NOTE: prepend, so we don't override user-specified scopes. + opts = append([]option.ClientOption{scopesOption}, opts...) + opts = append(opts, internaloption.WithDefaultEndpoint(basePath)) + opts = append(opts, internaloption.WithDefaultMTLSEndpoint(mtlsBasePath)) + client, endpoint, err := htransport.NewClient(ctx, opts...) + if err != nil { + return nil, err + } + s, err := New(client) + if err != nil { + return nil, err + } + if endpoint != "" { + s.BasePath = endpoint + } + return s, nil +} + +// New creates a new Service. It uses the provided http.Client for requests. +// +// Deprecated: please use NewService instead. +// To provide a custom HTTP client, use option.WithHTTPClient. +// If you are using google.golang.org/api/googleapis/transport.APIKey, use option.WithAPIKey with NewService instead. +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Projects = NewProjectsService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + UserAgent string // optional additional User-Agent fragment + + Projects *ProjectsService +} + +func (s *Service) userAgent() string { + if s.UserAgent == "" { + return googleapi.UserAgent + } + return googleapi.UserAgent + " " + s.UserAgent +} + +func NewProjectsService(s *Service) *ProjectsService { + rs := &ProjectsService{s: s} + rs.ServiceAccounts = NewProjectsServiceAccountsService(s) + return rs +} + +type ProjectsService struct { + s *Service + + ServiceAccounts *ProjectsServiceAccountsService +} + +func NewProjectsServiceAccountsService(s *Service) *ProjectsServiceAccountsService { + rs := &ProjectsServiceAccountsService{s: s} + return rs +} + +type ProjectsServiceAccountsService struct { + s *Service +} + +type GenerateAccessTokenRequest struct { + // Delegates: The sequence of service accounts in a delegation chain. + // Each service account must be granted the + // `roles/iam.serviceAccountTokenCreator` role on its next service + // account in the chain. The last service account in the chain must be + // granted the `roles/iam.serviceAccountTokenCreator` role on the + // service account that is specified in the `name` field of the request. + // The delegates must have the following format: + // `projects/-/serviceAccounts/{ACCOUNT_EMAIL_OR_UNIQUEID}`. The `-` + // wildcard character is required; replacing it with a project ID is + // invalid. + Delegates []string `json:"delegates,omitempty"` + + // Lifetime: The desired lifetime duration of the access token in + // seconds. By default, the maximum allowed value is 1 hour. To set a + // lifetime of up to 12 hours, you can add the service account as an + // allowed value in an Organization Policy that enforces the + // `constraints/iam.allowServiceAccountCredentialLifetimeExtension` + // constraint. See detailed instructions at + // https://cloud.google.com/iam/help/credentials/lifetime If a value is + // not specified, the token's lifetime will be set to a default value of + // 1 hour. + Lifetime string `json:"lifetime,omitempty"` + + // Scope: Required. Code to identify the scopes to be included in the + // OAuth 2.0 access token. See + // https://developers.google.com/identity/protocols/googlescopes for + // more information. At least one value required. + Scope []string `json:"scope,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Delegates") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Delegates") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *GenerateAccessTokenRequest) MarshalJSON() ([]byte, error) { + type NoMethod GenerateAccessTokenRequest + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +type GenerateAccessTokenResponse struct { + // AccessToken: The OAuth 2.0 access token. + AccessToken string `json:"accessToken,omitempty"` + + // ExpireTime: Token expiration time. The expiration time is always set. + ExpireTime string `json:"expireTime,omitempty"` + + // ServerResponse contains the HTTP response code and headers from the + // server. + googleapi.ServerResponse `json:"-"` + + // ForceSendFields is a list of field names (e.g. "AccessToken") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "AccessToken") to include + // in API requests with the JSON null value. By default, fields with + // empty values are omitted from API requests. However, any field with + // an empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *GenerateAccessTokenResponse) MarshalJSON() ([]byte, error) { + type NoMethod GenerateAccessTokenResponse + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +type GenerateIdTokenRequest struct { + // Audience: Required. The audience for the token, such as the API or + // account that this token grants access to. + Audience string `json:"audience,omitempty"` + + // Delegates: The sequence of service accounts in a delegation chain. + // Each service account must be granted the + // `roles/iam.serviceAccountTokenCreator` role on its next service + // account in the chain. The last service account in the chain must be + // granted the `roles/iam.serviceAccountTokenCreator` role on the + // service account that is specified in the `name` field of the request. + // The delegates must have the following format: + // `projects/-/serviceAccounts/{ACCOUNT_EMAIL_OR_UNIQUEID}`. The `-` + // wildcard character is required; replacing it with a project ID is + // invalid. + Delegates []string `json:"delegates,omitempty"` + + // IncludeEmail: Include the service account email in the token. If set + // to `true`, the token will contain `email` and `email_verified` + // claims. + IncludeEmail bool `json:"includeEmail,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Audience") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Audience") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *GenerateIdTokenRequest) MarshalJSON() ([]byte, error) { + type NoMethod GenerateIdTokenRequest + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +type GenerateIdTokenResponse struct { + // Token: The OpenId Connect ID token. + Token string `json:"token,omitempty"` + + // ServerResponse contains the HTTP response code and headers from the + // server. + googleapi.ServerResponse `json:"-"` + + // ForceSendFields is a list of field names (e.g. "Token") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Token") to include in API + // requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *GenerateIdTokenResponse) MarshalJSON() ([]byte, error) { + type NoMethod GenerateIdTokenResponse + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +type SignBlobRequest struct { + // Delegates: The sequence of service accounts in a delegation chain. + // Each service account must be granted the + // `roles/iam.serviceAccountTokenCreator` role on its next service + // account in the chain. The last service account in the chain must be + // granted the `roles/iam.serviceAccountTokenCreator` role on the + // service account that is specified in the `name` field of the request. + // The delegates must have the following format: + // `projects/-/serviceAccounts/{ACCOUNT_EMAIL_OR_UNIQUEID}`. The `-` + // wildcard character is required; replacing it with a project ID is + // invalid. + Delegates []string `json:"delegates,omitempty"` + + // Payload: Required. The bytes to sign. + Payload string `json:"payload,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Delegates") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Delegates") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *SignBlobRequest) MarshalJSON() ([]byte, error) { + type NoMethod SignBlobRequest + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +type SignBlobResponse struct { + // KeyId: The ID of the key used to sign the blob. The key used for + // signing will remain valid for at least 12 hours after the blob is + // signed. To verify the signature, you can retrieve the public key in + // several formats from the following endpoints: - RSA public key + // wrapped in an X.509 v3 certificate: + // `https://www.googleapis.com/service_accounts/v1/metadata/x509/{ACCOUNT + // _EMAIL}` - Raw key in JSON format: + // `https://www.googleapis.com/service_accounts/v1/metadata/raw/{ACCOUNT_ + // EMAIL}` - JSON Web Key (JWK): + // `https://www.googleapis.com/service_accounts/v1/metadata/jwk/{ACCOUNT_ + // EMAIL}` + KeyId string `json:"keyId,omitempty"` + + // SignedBlob: The signature for the blob. Does not include the original + // blob. After the key pair referenced by the `key_id` response field + // expires, Google no longer exposes the public key that can be used to + // verify the blob. As a result, the receiver can no longer verify the + // signature. + SignedBlob string `json:"signedBlob,omitempty"` + + // ServerResponse contains the HTTP response code and headers from the + // server. + googleapi.ServerResponse `json:"-"` + + // ForceSendFields is a list of field names (e.g. "KeyId") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "KeyId") to include in API + // requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *SignBlobResponse) MarshalJSON() ([]byte, error) { + type NoMethod SignBlobResponse + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +type SignJwtRequest struct { + // Delegates: The sequence of service accounts in a delegation chain. + // Each service account must be granted the + // `roles/iam.serviceAccountTokenCreator` role on its next service + // account in the chain. The last service account in the chain must be + // granted the `roles/iam.serviceAccountTokenCreator` role on the + // service account that is specified in the `name` field of the request. + // The delegates must have the following format: + // `projects/-/serviceAccounts/{ACCOUNT_EMAIL_OR_UNIQUEID}`. The `-` + // wildcard character is required; replacing it with a project ID is + // invalid. + Delegates []string `json:"delegates,omitempty"` + + // Payload: Required. The JWT payload to sign. Must be a serialized JSON + // object that contains a JWT Claims Set. For example: `{"sub": + // "user@example.com", "iat": 313435}` If the JWT Claims Set contains an + // expiration time (`exp`) claim, it must be an integer timestamp that + // is not in the past and no more than 12 hours in the future. + Payload string `json:"payload,omitempty"` + + // ForceSendFields is a list of field names (e.g. "Delegates") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "Delegates") to include in + // API requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *SignJwtRequest) MarshalJSON() ([]byte, error) { + type NoMethod SignJwtRequest + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +type SignJwtResponse struct { + // KeyId: The ID of the key used to sign the JWT. The key used for + // signing will remain valid for at least 12 hours after the JWT is + // signed. To verify the signature, you can retrieve the public key in + // several formats from the following endpoints: - RSA public key + // wrapped in an X.509 v3 certificate: + // `https://www.googleapis.com/service_accounts/v1/metadata/x509/{ACCOUNT + // _EMAIL}` - Raw key in JSON format: + // `https://www.googleapis.com/service_accounts/v1/metadata/raw/{ACCOUNT_ + // EMAIL}` - JSON Web Key (JWK): + // `https://www.googleapis.com/service_accounts/v1/metadata/jwk/{ACCOUNT_ + // EMAIL}` + KeyId string `json:"keyId,omitempty"` + + // SignedJwt: The signed JWT. Contains the automatically generated + // header; the client-supplied payload; and the signature, which is + // generated using the key referenced by the `kid` field in the header. + // After the key pair referenced by the `key_id` response field expires, + // Google no longer exposes the public key that can be used to verify + // the JWT. As a result, the receiver can no longer verify the + // signature. + SignedJwt string `json:"signedJwt,omitempty"` + + // ServerResponse contains the HTTP response code and headers from the + // server. + googleapi.ServerResponse `json:"-"` + + // ForceSendFields is a list of field names (e.g. "KeyId") to + // unconditionally include in API requests. By default, fields with + // empty or default values are omitted from API requests. However, any + // non-pointer, non-interface field appearing in ForceSendFields will be + // sent to the server regardless of whether the field is empty or not. + // This may be used to include empty fields in Patch requests. + ForceSendFields []string `json:"-"` + + // NullFields is a list of field names (e.g. "KeyId") to include in API + // requests with the JSON null value. By default, fields with empty + // values are omitted from API requests. However, any field with an + // empty value appearing in NullFields will be sent to the server as + // null. It is an error if a field in this list has a non-empty value. + // This may be used to include null fields in Patch requests. + NullFields []string `json:"-"` +} + +func (s *SignJwtResponse) MarshalJSON() ([]byte, error) { + type NoMethod SignJwtResponse + raw := NoMethod(*s) + return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields) +} + +// method id "iamcredentials.projects.serviceAccounts.generateAccessToken": + +type ProjectsServiceAccountsGenerateAccessTokenCall struct { + s *Service + name string + generateaccesstokenrequest *GenerateAccessTokenRequest + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// GenerateAccessToken: Generates an OAuth 2.0 access token for a +// service account. +// +// - name: The resource name of the service account for which the +// credentials are requested, in the following format: +// `projects/-/serviceAccounts/{ACCOUNT_EMAIL_OR_UNIQUEID}`. The `-` +// wildcard character is required; replacing it with a project ID is +// invalid. +func (r *ProjectsServiceAccountsService) GenerateAccessToken(name string, generateaccesstokenrequest *GenerateAccessTokenRequest) *ProjectsServiceAccountsGenerateAccessTokenCall { + c := &ProjectsServiceAccountsGenerateAccessTokenCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + c.generateaccesstokenrequest = generateaccesstokenrequest + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsServiceAccountsGenerateAccessTokenCall) Fields(s ...googleapi.Field) *ProjectsServiceAccountsGenerateAccessTokenCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsServiceAccountsGenerateAccessTokenCall) Context(ctx context.Context) *ProjectsServiceAccountsGenerateAccessTokenCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsServiceAccountsGenerateAccessTokenCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsServiceAccountsGenerateAccessTokenCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/20210927") + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.generateaccesstokenrequest) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}:generateAccessToken") + 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{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "iamcredentials.projects.serviceAccounts.generateAccessToken" call. +// Exactly one of *GenerateAccessTokenResponse or error will be non-nil. +// Any non-2xx status code is an error. Response headers are in either +// *GenerateAccessTokenResponse.ServerResponse.Header or (if a response +// was returned at all) in error.(*googleapi.Error).Header. Use +// googleapi.IsNotModified to check whether the returned error was +// because http.StatusNotModified was returned. +func (c *ProjectsServiceAccountsGenerateAccessTokenCall) Do(opts ...googleapi.CallOption) (*GenerateAccessTokenResponse, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, &googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + } + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := &GenerateAccessTokenResponse{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Generates an OAuth 2.0 access token for a service account.", + // "flatPath": "v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}:generateAccessToken", + // "httpMethod": "POST", + // "id": "iamcredentials.projects.serviceAccounts.generateAccessToken", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "name": { + // "description": "Required. The resource name of the service account for which the credentials are requested, in the following format: `projects/-/serviceAccounts/{ACCOUNT_EMAIL_OR_UNIQUEID}`. The `-` wildcard character is required; replacing it with a project ID is invalid.", + // "location": "path", + // "pattern": "^projects/[^/]+/serviceAccounts/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+name}:generateAccessToken", + // "request": { + // "$ref": "GenerateAccessTokenRequest" + // }, + // "response": { + // "$ref": "GenerateAccessTokenResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "iamcredentials.projects.serviceAccounts.generateIdToken": + +type ProjectsServiceAccountsGenerateIdTokenCall struct { + s *Service + name string + generateidtokenrequest *GenerateIdTokenRequest + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// GenerateIdToken: Generates an OpenID Connect ID token for a service +// account. +// +// - name: The resource name of the service account for which the +// credentials are requested, in the following format: +// `projects/-/serviceAccounts/{ACCOUNT_EMAIL_OR_UNIQUEID}`. The `-` +// wildcard character is required; replacing it with a project ID is +// invalid. +func (r *ProjectsServiceAccountsService) GenerateIdToken(name string, generateidtokenrequest *GenerateIdTokenRequest) *ProjectsServiceAccountsGenerateIdTokenCall { + c := &ProjectsServiceAccountsGenerateIdTokenCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + c.generateidtokenrequest = generateidtokenrequest + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsServiceAccountsGenerateIdTokenCall) Fields(s ...googleapi.Field) *ProjectsServiceAccountsGenerateIdTokenCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsServiceAccountsGenerateIdTokenCall) Context(ctx context.Context) *ProjectsServiceAccountsGenerateIdTokenCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsServiceAccountsGenerateIdTokenCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsServiceAccountsGenerateIdTokenCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/20210927") + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.generateidtokenrequest) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}:generateIdToken") + 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{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "iamcredentials.projects.serviceAccounts.generateIdToken" call. +// Exactly one of *GenerateIdTokenResponse or error will be non-nil. Any +// non-2xx status code is an error. Response headers are in either +// *GenerateIdTokenResponse.ServerResponse.Header or (if a response was +// returned at all) in error.(*googleapi.Error).Header. Use +// googleapi.IsNotModified to check whether the returned error was +// because http.StatusNotModified was returned. +func (c *ProjectsServiceAccountsGenerateIdTokenCall) Do(opts ...googleapi.CallOption) (*GenerateIdTokenResponse, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, &googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + } + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := &GenerateIdTokenResponse{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Generates an OpenID Connect ID token for a service account.", + // "flatPath": "v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}:generateIdToken", + // "httpMethod": "POST", + // "id": "iamcredentials.projects.serviceAccounts.generateIdToken", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "name": { + // "description": "Required. The resource name of the service account for which the credentials are requested, in the following format: `projects/-/serviceAccounts/{ACCOUNT_EMAIL_OR_UNIQUEID}`. The `-` wildcard character is required; replacing it with a project ID is invalid.", + // "location": "path", + // "pattern": "^projects/[^/]+/serviceAccounts/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+name}:generateIdToken", + // "request": { + // "$ref": "GenerateIdTokenRequest" + // }, + // "response": { + // "$ref": "GenerateIdTokenResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "iamcredentials.projects.serviceAccounts.signBlob": + +type ProjectsServiceAccountsSignBlobCall struct { + s *Service + name string + signblobrequest *SignBlobRequest + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// SignBlob: Signs a blob using a service account's system-managed +// private key. +// +// - name: The resource name of the service account for which the +// credentials are requested, in the following format: +// `projects/-/serviceAccounts/{ACCOUNT_EMAIL_OR_UNIQUEID}`. The `-` +// wildcard character is required; replacing it with a project ID is +// invalid. +func (r *ProjectsServiceAccountsService) SignBlob(name string, signblobrequest *SignBlobRequest) *ProjectsServiceAccountsSignBlobCall { + c := &ProjectsServiceAccountsSignBlobCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + c.signblobrequest = signblobrequest + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsServiceAccountsSignBlobCall) Fields(s ...googleapi.Field) *ProjectsServiceAccountsSignBlobCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsServiceAccountsSignBlobCall) Context(ctx context.Context) *ProjectsServiceAccountsSignBlobCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsServiceAccountsSignBlobCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsServiceAccountsSignBlobCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/20210927") + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.signblobrequest) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}:signBlob") + 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{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "iamcredentials.projects.serviceAccounts.signBlob" call. +// Exactly one of *SignBlobResponse or error will be non-nil. Any +// non-2xx status code is an error. Response headers are in either +// *SignBlobResponse.ServerResponse.Header or (if a response was +// returned at all) in error.(*googleapi.Error).Header. Use +// googleapi.IsNotModified to check whether the returned error was +// because http.StatusNotModified was returned. +func (c *ProjectsServiceAccountsSignBlobCall) Do(opts ...googleapi.CallOption) (*SignBlobResponse, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, &googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + } + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := &SignBlobResponse{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Signs a blob using a service account's system-managed private key.", + // "flatPath": "v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}:signBlob", + // "httpMethod": "POST", + // "id": "iamcredentials.projects.serviceAccounts.signBlob", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "name": { + // "description": "Required. The resource name of the service account for which the credentials are requested, in the following format: `projects/-/serviceAccounts/{ACCOUNT_EMAIL_OR_UNIQUEID}`. The `-` wildcard character is required; replacing it with a project ID is invalid.", + // "location": "path", + // "pattern": "^projects/[^/]+/serviceAccounts/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+name}:signBlob", + // "request": { + // "$ref": "SignBlobRequest" + // }, + // "response": { + // "$ref": "SignBlobResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "iamcredentials.projects.serviceAccounts.signJwt": + +type ProjectsServiceAccountsSignJwtCall struct { + s *Service + name string + signjwtrequest *SignJwtRequest + urlParams_ gensupport.URLParams + ctx_ context.Context + header_ http.Header +} + +// SignJwt: Signs a JWT using a service account's system-managed private +// key. +// +// - name: The resource name of the service account for which the +// credentials are requested, in the following format: +// `projects/-/serviceAccounts/{ACCOUNT_EMAIL_OR_UNIQUEID}`. The `-` +// wildcard character is required; replacing it with a project ID is +// invalid. +func (r *ProjectsServiceAccountsService) SignJwt(name string, signjwtrequest *SignJwtRequest) *ProjectsServiceAccountsSignJwtCall { + c := &ProjectsServiceAccountsSignJwtCall{s: r.s, urlParams_: make(gensupport.URLParams)} + c.name = name + c.signjwtrequest = signjwtrequest + return c +} + +// Fields allows partial responses to be retrieved. See +// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse +// for more information. +func (c *ProjectsServiceAccountsSignJwtCall) Fields(s ...googleapi.Field) *ProjectsServiceAccountsSignJwtCall { + c.urlParams_.Set("fields", googleapi.CombineFields(s)) + return c +} + +// Context sets the context to be used in this call's Do method. Any +// pending HTTP request will be aborted if the provided context is +// canceled. +func (c *ProjectsServiceAccountsSignJwtCall) Context(ctx context.Context) *ProjectsServiceAccountsSignJwtCall { + c.ctx_ = ctx + return c +} + +// Header returns an http.Header that can be modified by the caller to +// add HTTP headers to the request. +func (c *ProjectsServiceAccountsSignJwtCall) Header() http.Header { + if c.header_ == nil { + c.header_ = make(http.Header) + } + return c.header_ +} + +func (c *ProjectsServiceAccountsSignJwtCall) doRequest(alt string) (*http.Response, error) { + reqHeaders := make(http.Header) + reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/20210927") + for k, v := range c.header_ { + reqHeaders[k] = v + } + reqHeaders.Set("User-Agent", c.s.userAgent()) + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.signjwtrequest) + if err != nil { + return nil, err + } + reqHeaders.Set("Content-Type", "application/json") + c.urlParams_.Set("alt", alt) + c.urlParams_.Set("prettyPrint", "false") + urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}:signJwt") + 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{ + "name": c.name, + }) + return gensupport.SendRequest(c.ctx_, c.s.client, req) +} + +// Do executes the "iamcredentials.projects.serviceAccounts.signJwt" call. +// Exactly one of *SignJwtResponse or error will be non-nil. Any non-2xx +// status code is an error. Response headers are in either +// *SignJwtResponse.ServerResponse.Header or (if a response was returned +// at all) in error.(*googleapi.Error).Header. Use +// googleapi.IsNotModified to check whether the returned error was +// because http.StatusNotModified was returned. +func (c *ProjectsServiceAccountsSignJwtCall) Do(opts ...googleapi.CallOption) (*SignJwtResponse, error) { + gensupport.SetOptions(c.urlParams_, opts...) + res, err := c.doRequest("json") + if res != nil && res.StatusCode == http.StatusNotModified { + if res.Body != nil { + res.Body.Close() + } + return nil, &googleapi.Error{ + Code: res.StatusCode, + Header: res.Header, + } + } + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := &SignJwtResponse{ + ServerResponse: googleapi.ServerResponse{ + Header: res.Header, + HTTPStatusCode: res.StatusCode, + }, + } + target := &ret + if err := gensupport.DecodeResponse(target, res); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Signs a JWT using a service account's system-managed private key.", + // "flatPath": "v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}:signJwt", + // "httpMethod": "POST", + // "id": "iamcredentials.projects.serviceAccounts.signJwt", + // "parameterOrder": [ + // "name" + // ], + // "parameters": { + // "name": { + // "description": "Required. The resource name of the service account for which the credentials are requested, in the following format: `projects/-/serviceAccounts/{ACCOUNT_EMAIL_OR_UNIQUEID}`. The `-` wildcard character is required; replacing it with a project ID is invalid.", + // "location": "path", + // "pattern": "^projects/[^/]+/serviceAccounts/[^/]+$", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v1/{+name}:signJwt", + // "request": { + // "$ref": "SignJwtRequest" + // }, + // "response": { + // "$ref": "SignJwtResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} diff --git a/vendor/google.golang.org/api/transport/dial.go b/vendor/google.golang.org/api/transport/dial.go new file mode 100644 index 0000000000..2c495ad538 --- /dev/null +++ b/vendor/google.golang.org/api/transport/dial.go @@ -0,0 +1,36 @@ +// Copyright 2015 Google LLC. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package transport + +import ( + "context" + "net/http" + + "google.golang.org/grpc" + + "google.golang.org/api/option" + gtransport "google.golang.org/api/transport/grpc" + htransport "google.golang.org/api/transport/http" +) + +// NewHTTPClient returns an HTTP client for use communicating with a Google cloud +// service, configured with the given ClientOptions. It also returns the endpoint +// for the service as specified in the options. +func NewHTTPClient(ctx context.Context, opts ...option.ClientOption) (*http.Client, string, error) { + return htransport.NewClient(ctx, opts...) +} + +// DialGRPC returns a GRPC connection for use communicating with a Google cloud +// service, configured with the given ClientOptions. +func DialGRPC(ctx context.Context, opts ...option.ClientOption) (*grpc.ClientConn, error) { + return gtransport.Dial(ctx, opts...) +} + +// DialGRPCInsecure returns an insecure GRPC connection for use communicating +// with fake or mock Google cloud service implementations, such as emulators. +// The connection is configured with the given ClientOptions. +func DialGRPCInsecure(ctx context.Context, opts ...option.ClientOption) (*grpc.ClientConn, error) { + return gtransport.DialInsecure(ctx, opts...) +} diff --git a/vendor/google.golang.org/api/transport/doc.go b/vendor/google.golang.org/api/transport/doc.go new file mode 100644 index 0000000000..7143abee45 --- /dev/null +++ b/vendor/google.golang.org/api/transport/doc.go @@ -0,0 +1,11 @@ +// Copyright 2019 Google LLC. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package transport provides utility methods for creating authenticated +// transports to Google's HTTP and gRPC APIs. It is intended to be used in +// conjunction with google.golang.org/api/option. +// +// This package is not intended for use by end developers. Use the +// google.golang.org/api/option package to configure API clients. +package transport diff --git a/vendor/google.golang.org/api/transport/go19.go b/vendor/google.golang.org/api/transport/go19.go new file mode 100644 index 0000000000..d40bcf3325 --- /dev/null +++ b/vendor/google.golang.org/api/transport/go19.go @@ -0,0 +1,26 @@ +// Copyright 2018 Google LLC. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build go1.9 +// +build go1.9 + +package transport + +import ( + "context" + + "golang.org/x/oauth2/google" + "google.golang.org/api/internal" + "google.golang.org/api/option" +) + +// Creds constructs a google.Credentials from the information in the options, +// or obtains the default credentials in the same way as google.FindDefaultCredentials. +func Creds(ctx context.Context, opts ...option.ClientOption) (*google.Credentials, error) { + var ds internal.DialSettings + for _, opt := range opts { + opt.Apply(&ds) + } + return internal.Creds(ctx, &ds) +} diff --git a/vendor/google.golang.org/api/transport/not_go19.go b/vendor/google.golang.org/api/transport/not_go19.go new file mode 100644 index 0000000000..bb5667a519 --- /dev/null +++ b/vendor/google.golang.org/api/transport/not_go19.go @@ -0,0 +1,26 @@ +// Copyright 2018 Google LLC. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !go1.9 +// +build !go1.9 + +package transport + +import ( + "context" + + "golang.org/x/oauth2/google" + "google.golang.org/api/internal" + "google.golang.org/api/option" +) + +// Creds constructs a google.DefaultCredentials from the information in the options, +// or obtains the default credentials in the same way as google.FindDefaultCredentials. +func Creds(ctx context.Context, opts ...option.ClientOption) (*google.DefaultCredentials, error) { + var ds internal.DialSettings + for _, opt := range opts { + opt.Apply(&ds) + } + return internal.Creds(ctx, &ds) +} diff --git a/vendor/google.golang.org/genproto/googleapis/api/annotations/routing.pb.go b/vendor/google.golang.org/genproto/googleapis/api/annotations/routing.pb.go index 468d466967..dd45cf6e6c 100644 --- a/vendor/google.golang.org/genproto/googleapis/api/annotations/routing.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/api/annotations/routing.pb.go @@ -37,7 +37,7 @@ const ( ) // Specifies the routing information that should be sent along with the request -// in the form of routing headers. +// in the form of routing header. // **NOTE:** All service configuration rules follow the "last one wins" order. // // The examples below will apply to an RPC which has the following request type: @@ -66,7 +66,12 @@ const ( // app_profile_id: profiles/prof_qux // } // -// ## Example 1 +// The routing header consists of one or multiple key-value pairs. Every key +// and value must be percent-encoded, and joined together in the format of +// `key1=value1&key2=value2`. +// In the examples below I am skipping the percent-encoding for readablity. +// +// Example 1 // // Extracting a field from the request to put into the routing header // unchanged, with the key equal to the field name. @@ -84,7 +89,7 @@ const ( // // x-goog-request-params: app_profile_id=profiles/prof_qux // -// ## Example 2 +// Example 2 // // Extracting a field from the request to put into the routing header // unchanged, with the key different from the field name. @@ -103,7 +108,7 @@ const ( // // x-goog-request-params: routing_id=profiles/prof_qux // -// ## Example 3 +// Example 3 // // Extracting a field from the request to put into the routing // header, while matching a path template syntax on the field's value. @@ -111,7 +116,7 @@ const ( // NB: it is more useful to send nothing than to send garbage for the purpose // of dynamic routing, since garbage pollutes cache. Thus the matching. // -// ### Sub-example 3a +// Sub-example 3a // // The field matches the template. // @@ -131,7 +136,7 @@ const ( // x-goog-request-params: // table_name=projects/proj_foo/instances/instance_bar/table/table_baz // -// ### Sub-example 3b +// Sub-example 3b // // The field does not match the template. // @@ -150,7 +155,7 @@ const ( // // // -// ### Sub-example 3c +// Sub-example 3c // // Multiple alternative conflictingly named path templates are // specified. The one that matches is used to construct the header. @@ -176,7 +181,7 @@ const ( // x-goog-request-params: // table_name=projects/proj_foo/instances/instance_bar/table/table_baz // -// ## Example 4 +// Example 4 // // Extracting a single routing header key-value pair by matching a // template syntax on (a part of) a single request field. @@ -195,7 +200,7 @@ const ( // // x-goog-request-params: routing_id=projects/proj_foo // -// ## Example 5 +// Example 5 // // Extracting a single routing header key-value pair by matching // several conflictingly named path templates on (parts of) a single request @@ -223,12 +228,12 @@ const ( // x-goog-request-params: // routing_id=projects/proj_foo/instances/instance_bar // -// ## Example 6 +// Example 6 // // Extracting multiple routing header key-value pairs by matching // several non-conflicting path templates on (parts of) a single request field. // -// ### Sub-example 6a +// Sub-example 6a // // Make the templates strict, so that if the `table_name` does not // have an instance information, nothing is sent. @@ -253,12 +258,12 @@ const ( // result: // // x-goog-request-params: -// project_id=projects/proj_foo,instance_id=instances/instance_bar +// project_id=projects/proj_foo&instance_id=instances/instance_bar // -// ### Sub-example 6b +// Sub-example 6b // // Make the templates loose, so that if the `table_name` does not -// have an instance information, the project id part is sent. +// have an instance information, just the project id part is sent. // // annotation: // @@ -281,9 +286,9 @@ const ( // information): // // x-goog-request-params: -// project_id=projects/proj_foo,instance_id=instances/instance_bar +// project_id=projects/proj_foo&instance_id=instances/instance_bar // -// ## Example 7 +// Example 7 // // Extracting multiple routing header key-value pairs by matching // several path templates on multiple request fields. @@ -313,9 +318,9 @@ const ( // result: // // x-goog-request-params: -// project_id=projects/proj_foo,routing_id=profiles/prof_qux +// project_id=projects/proj_foo&routing_id=profiles/prof_qux // -// ## Example 8 +// Example 8 // // Extracting a single routing header key-value pair by matching // several conflictingly named path templates on several request fields. The @@ -346,7 +351,7 @@ const ( // // x-goog-request-params: routing_id=profiles/prof_qux // -// ## Example 9 +// Example 9 // // Bringing it all together. // @@ -389,20 +394,23 @@ const ( // result: // // x-goog-request-params: -// table_location=instances/instance_bar,routing_id=prof_qux -type Routing struct { +// table_location=instances/instance_bar&routing_id=prof_qux +type RoutingRule struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // A collection of Routing Parameter specifications. - // **NOTE:** If multiple parameters have the same name, "last one wins" rule - // is used to determine which one gets sent. - RoutingParameters []*RoutingParameter `protobuf:"bytes,1,rep,name=routing_parameters,json=routingParameters,proto3" json:"routing_parameters,omitempty"` + // **NOTE:** If multiple Routing Parameters describe the same key + // (via the `path_template` field or via the `field` field when + // `path_template` is not provided), "last one wins" rule + // determines which Parameter gets used. + // See the examples for more details. + RoutingParameters []*RoutingParameter `protobuf:"bytes,2,rep,name=routing_parameters,json=routingParameters,proto3" json:"routing_parameters,omitempty"` } -func (x *Routing) Reset() { - *x = Routing{} +func (x *RoutingRule) Reset() { + *x = RoutingRule{} if protoimpl.UnsafeEnabled { mi := &file_google_api_routing_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -410,13 +418,13 @@ func (x *Routing) Reset() { } } -func (x *Routing) String() string { +func (x *RoutingRule) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Routing) ProtoMessage() {} +func (*RoutingRule) ProtoMessage() {} -func (x *Routing) ProtoReflect() protoreflect.Message { +func (x *RoutingRule) ProtoReflect() protoreflect.Message { mi := &file_google_api_routing_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -428,12 +436,12 @@ func (x *Routing) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Routing.ProtoReflect.Descriptor instead. -func (*Routing) Descriptor() ([]byte, []int) { +// Deprecated: Use RoutingRule.ProtoReflect.Descriptor instead. +func (*RoutingRule) Descriptor() ([]byte, []int) { return file_google_api_routing_proto_rawDescGZIP(), []int{0} } -func (x *Routing) GetRoutingParameters() []*RoutingParameter { +func (x *RoutingRule) GetRoutingParameters() []*RoutingParameter { if x != nil { return x.RoutingParameters } @@ -484,6 +492,24 @@ type RoutingParameter struct { // - The value is extracted from the request message's `table_name` field // if it matches the full pattern specified: // `projects/*/instances/*/tables/*`. + // + // **NB:** If the `path_template` field is not provided, the key name is + // equal to the field name, and the whole field should be sent as a value. + // This makes the pattern for the field and the value functionally equivalent + // to `**`, and the configuration + // + // { + // field: "table_name" + // } + // + // is a functionally equivalent shorthand to: + // + // { + // field: "table_name" + // path_template: "{table_name=**}" + // } + // + // See Example 1 for more details. PathTemplate string `protobuf:"bytes,2,opt,name=path_template,json=pathTemplate,proto3" json:"path_template,omitempty"` } @@ -536,7 +562,7 @@ func (x *RoutingParameter) GetPathTemplate() string { var file_google_api_routing_proto_extTypes = []protoimpl.ExtensionInfo{ { ExtendedType: (*descriptorpb.MethodOptions)(nil), - ExtensionType: (*Routing)(nil), + ExtensionType: (*RoutingRule)(nil), Field: 72295729, Name: "google.api.routing", Tag: "bytes,72295729,opt,name=routing", @@ -546,7 +572,9 @@ var file_google_api_routing_proto_extTypes = []protoimpl.ExtensionInfo{ // Extension fields to descriptorpb.MethodOptions. var ( - // optional google.api.Routing routing = 72295729; + // See RoutingRule. + // + // optional google.api.RoutingRule routing = 72295729; E_Routing = &file_google_api_routing_proto_extTypes[0] ) @@ -557,30 +585,30 @@ var file_google_api_routing_proto_rawDesc = []byte{ 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x56, 0x0a, 0x07, 0x52, 0x6f, 0x75, 0x74, - 0x69, 0x6e, 0x67, 0x12, 0x4b, 0x0a, 0x12, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x70, - 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x6f, 0x75, - 0x74, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x11, 0x72, - 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, - 0x22, 0x4d, 0x0a, 0x10, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x70, 0x61, 0x74, 0x68, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3a, - 0x50, 0x0a, 0x07, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 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, 0xb1, 0xca, 0xbc, 0x22, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, - 0x67, 0x42, 0x6a, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x42, 0x0c, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 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, + 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x5a, 0x0a, 0x0b, 0x52, 0x6f, 0x75, 0x74, + 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x4b, 0x0a, 0x12, 0x72, 0x6f, 0x75, 0x74, 0x69, + 0x6e, 0x67, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x52, 0x11, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x73, 0x22, 0x4d, 0x0a, 0x10, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x69, 0x65, 0x6c, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x23, + 0x0a, 0x0d, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x61, 0x74, 0x68, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x3a, 0x54, 0x0a, 0x07, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 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, 0xb1, + 0xca, 0xbc, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, + 0x52, 0x07, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x6a, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x0c, 0x52, 0x6f, 0x75, + 0x74, 0x69, 0x6e, 0x67, 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 ( @@ -597,14 +625,14 @@ func file_google_api_routing_proto_rawDescGZIP() []byte { var file_google_api_routing_proto_msgTypes = make([]protoimpl.MessageInfo, 2) var file_google_api_routing_proto_goTypes = []interface{}{ - (*Routing)(nil), // 0: google.api.Routing + (*RoutingRule)(nil), // 0: google.api.RoutingRule (*RoutingParameter)(nil), // 1: google.api.RoutingParameter (*descriptorpb.MethodOptions)(nil), // 2: google.protobuf.MethodOptions } var file_google_api_routing_proto_depIdxs = []int32{ - 1, // 0: google.api.Routing.routing_parameters:type_name -> google.api.RoutingParameter + 1, // 0: google.api.RoutingRule.routing_parameters:type_name -> google.api.RoutingParameter 2, // 1: google.api.routing:extendee -> google.protobuf.MethodOptions - 0, // 2: google.api.routing:type_name -> google.api.Routing + 0, // 2: google.api.routing:type_name -> google.api.RoutingRule 3, // [3:3] is the sub-list for method output_type 3, // [3:3] is the sub-list for method input_type 2, // [2:3] is the sub-list for extension type_name @@ -619,7 +647,7 @@ func file_google_api_routing_proto_init() { } if !protoimpl.UnsafeEnabled { file_google_api_routing_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Routing); i { + switch v := v.(*RoutingRule); i { case 0: return &v.state case 1: diff --git a/vendor/modules.txt b/vendor/modules.txt index 5921149cbc..074db8b354 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1,5 +1,4 @@ # cloud.google.com/go v0.97.0 -## explicit cloud.google.com/go cloud.google.com/go/compute/metadata cloud.google.com/go/iam @@ -7,7 +6,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/storage v1.17.0 +# cloud.google.com/go/storage v1.18.0 ## explicit cloud.google.com/go/storage cloud.google.com/go/storage/internal/apiv2 @@ -29,7 +28,7 @@ github.com/VictoriaMetrics/metricsql/binaryop # github.com/VividCortex/ewma v1.2.0 ## explicit github.com/VividCortex/ewma -# github.com/aws/aws-sdk-go v1.40.58 +# github.com/aws/aws-sdk-go v1.41.0 ## explicit github.com/aws/aws-sdk-go/aws github.com/aws/aws-sdk-go/aws/arn @@ -237,7 +236,7 @@ go.opencensus.io/trace/propagation go.opencensus.io/trace/tracestate # go.uber.org/atomic v1.9.0 go.uber.org/atomic -# golang.org/x/net v0.0.0-20211007125505-59d4e928ea9d +# golang.org/x/net v0.0.0-20211011170408-caeb26a5c8c0 ## explicit golang.org/x/net/context golang.org/x/net/context/ctxhttp @@ -278,6 +277,7 @@ golang.org/x/xerrors/internal ## explicit google.golang.org/api/googleapi google.golang.org/api/googleapi/transport +google.golang.org/api/iamcredentials/v1 google.golang.org/api/internal google.golang.org/api/internal/gensupport google.golang.org/api/internal/impersonate @@ -286,6 +286,7 @@ google.golang.org/api/iterator google.golang.org/api/option google.golang.org/api/option/internaloption google.golang.org/api/storage/v1 +google.golang.org/api/transport google.golang.org/api/transport/cert google.golang.org/api/transport/grpc google.golang.org/api/transport/http @@ -304,7 +305,7 @@ google.golang.org/appengine/internal/socket google.golang.org/appengine/internal/urlfetch google.golang.org/appengine/socket google.golang.org/appengine/urlfetch -# google.golang.org/genproto v0.0.0-20211007155348-82e027067bd4 +# google.golang.org/genproto v0.0.0-20211011165927-a5fb3255271e ## explicit google.golang.org/genproto/googleapis/api/annotations google.golang.org/genproto/googleapis/iam/v1 From 4f242980be9fe3fc100d03a2dd18314d7b921d74 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Tue, 12 Oct 2021 10:32:39 +0300 Subject: [PATCH 14/77] docs/FAQ.md: add a solution against high churn rate --- docs/FAQ.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/FAQ.md b/docs/FAQ.md index 0aff818eaa..5696263f30 100644 --- a/docs/FAQ.md +++ b/docs/FAQ.md @@ -273,10 +273,12 @@ If old time series are constantly substituted by new time series at a high rate, * Increased size of inverted index, which is stored at `<-storageDataPath>/indexdb`, since the inverted index contains entries for every label of every time series with at least a single ingested sample * Slow down of queries over multiple days. +The solution against high churn rate is to identify and eliminate labels with frequently changed values. The [/api/v1/status/tsdb](https://docs.victoriametrics.com/#tsdb-stats) page can help determining these labels. + ## What is high cardinality? -High cardinality usually means high number of [active time series](#what-is-active-time-series). High cardinality may lead to high memory usage and/or to high percentage of [slow inserts](#what-is-slow-insert). The source of high cardinality is usually a label with big number of unique values, which presents in big share of the ingested time series. The solution is to identify and remove the source of high cardinality with the help of `/api/v1/status/tsdb` page - see [these docs](https://docs.victoriametrics.com/#tsdb-stats). +High cardinality usually means high number of [active time series](#what-is-active-time-series). High cardinality may lead to high memory usage and/or to high percentage of [slow inserts](#what-is-slow-insert). The source of high cardinality is usually a label with big number of unique values, which presents in big share of the ingested time series. The solution is to identify and remove the source of high cardinality with the help of [/api/v1/status/tsdb](https://docs.victoriametrics.com/#tsdb-stats). ## What is slow insert? From 5a58c041c272705583c5cfd9c9657e8910b1423e Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Tue, 12 Oct 2021 16:23:42 +0300 Subject: [PATCH 15/77] app/vmagent: expose -promscrape.config contents at /config page as Prometheus does See https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1695 --- app/victoria-metrics/main.go | 1 + app/vmagent/main.go | 8 ++++++++ app/vminsert/main.go | 7 +++++++ docs/CHANGELOG.md | 1 + lib/promscrape/config.go | 6 +++--- lib/promscrape/scraper.go | 18 ++++++++++++++++++ 6 files changed, 38 insertions(+), 3 deletions(-) diff --git a/app/victoria-metrics/main.go b/app/victoria-metrics/main.go index e945bca25c..95bf23e655 100644 --- a/app/victoria-metrics/main.go +++ b/app/victoria-metrics/main.go @@ -93,6 +93,7 @@ func requestHandler(w http.ResponseWriter, r *http.Request) bool { {"/vmui", "Web UI"}, {"/targets", "discovered targets list"}, {"/api/v1/targets", "advanced information about discovered targets in JSON format"}, + {"/config", "-promscrape.config contents"}, {"/metrics", "available service metrics"}, {"/api/v1/status/tsdb", "tsdb status page"}, {"/api/v1/status/top_queries", "top queries"}, diff --git a/app/vmagent/main.go b/app/vmagent/main.go index 7b2e02acef..f86e3b85e5 100644 --- a/app/vmagent/main.go +++ b/app/vmagent/main.go @@ -159,6 +159,7 @@ func requestHandler(w http.ResponseWriter, r *http.Request) bool { httpserver.WriteAPIHelp(w, [][2]string{ {"/targets", "discovered targets list"}, {"/api/v1/targets", "advanced information about discovered targets in JSON format"}, + {"/config", "-promscrape.config contents"}, {"/metrics", "available service metrics"}, {"/-/reload", "reload configuration"}, }) @@ -259,6 +260,11 @@ func requestHandler(w http.ResponseWriter, r *http.Request) bool { promscrapeTargetsRequests.Inc() promscrape.WriteHumanReadableTargetsStatus(w, r) return true + case "/config": + promscrapeConfigRequests.Inc() + w.Header().Set("Content-Type", "text/plain; charset=utf-8") + promscrape.WriteConfigData(w) + return true case "/api/v1/targets": promscrapeAPIV1TargetsRequests.Inc() w.Header().Set("Content-Type", "application/json; charset=utf-8") @@ -427,6 +433,8 @@ var ( promscrapeTargetsRequests = metrics.NewCounter(`vmagent_http_requests_total{path="/targets"}`) promscrapeAPIV1TargetsRequests = metrics.NewCounter(`vmagent_http_requests_total{path="/api/v1/targets"}`) + promscrapeConfigRequests = metrics.NewCounter(`vmagent_http_requests_total{path="/config"}`) + promscrapeConfigReloadRequests = metrics.NewCounter(`vmagent_http_requests_total{path="/-/reload"}`) ) diff --git a/app/vminsert/main.go b/app/vminsert/main.go index dabe0eceac..d85187908c 100644 --- a/app/vminsert/main.go +++ b/app/vminsert/main.go @@ -196,6 +196,11 @@ func RequestHandler(w http.ResponseWriter, r *http.Request) bool { state := r.FormValue("state") promscrape.WriteAPIV1Targets(w, state) return true + case "/prometheus/config", "/config": + promscrapeConfigRequests.Inc() + w.Header().Set("Content-Type", "text/plain; charset=utf-8") + promscrape.WriteConfigData(w) + return true case "/prometheus/-/reload", "/-/reload": promscrapeConfigReloadRequests.Inc() procutil.SelfSIGHUP() @@ -250,6 +255,8 @@ var ( promscrapeTargetsRequests = metrics.NewCounter(`vm_http_requests_total{path="/targets"}`) promscrapeAPIV1TargetsRequests = metrics.NewCounter(`vm_http_requests_total{path="/api/v1/targets"}`) + promscrapeConfigRequests = metrics.NewCounter(`vm_http_requests_total{path="/config"}`) + promscrapeConfigReloadRequests = metrics.NewCounter(`vm_http_requests_total{path="/-/reload"}`) _ = metrics.NewGauge(`vm_metrics_with_dropped_labels_total`, func() float64 { diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 8c114af2a3..be4e7eceb4 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -6,6 +6,7 @@ sort: 15 ## tip +* FEATURE: vmagent: expose `-promscrape.config` contents at `/config` page as Prometheus does. See [this feature request](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1695). * FEATURE: add trigonometric functions, which are going to be added in [Prometheus 2.31](https://github.com/prometheus/prometheus/pull/9239): [acosh](https://docs.victoriametrics.com/MetricsQL.html#acosh), [asinh](https://docs.victoriametrics.com/MetricsQL.html#asinh), [atan](https://docs.victoriametrics.com/MetricsQL.html#atan), [atanh](https://docs.victoriametrics.com/MetricsQL.html#atanh), [cosh](https://docs.victoriametrics.com/MetricsQL.html#cosh), [deg](https://docs.victoriametrics.com/MetricsQL.html#deg), [rad](https://docs.victoriametrics.com/MetricsQL.html#rad), [sinh](https://docs.victoriametrics.com/MetricsQL.html#sinh), [tan](https://docs.victoriametrics.com/MetricsQL.html#tan), [tanh](https://docs.victoriametrics.com/MetricsQL.html#tanh). Also add `atan2` binary operator. See [this pull request](https://github.com/prometheus/prometheus/pull/9248). * FEATURE: consistently return the same set of time series from [limitk](https://docs.victoriametrics.com/MetricsQL.html#limitk) function. This improves the usability of periodically refreshed graphs. diff --git a/lib/promscrape/config.go b/lib/promscrape/config.go index 84e2df522f..dbbbeaf24b 100644 --- a/lib/promscrape/config.go +++ b/lib/promscrape/config.go @@ -58,8 +58,8 @@ var ( // Config represents essential parts from Prometheus config defined at https://prometheus.io/docs/prometheus/latest/configuration/configuration/ type Config struct { Global GlobalConfig `yaml:"global,omitempty"` - ScrapeConfigs []ScrapeConfig `yaml:"scrape_configs"` - ScrapeConfigFiles []string `yaml:"scrape_config_files"` + ScrapeConfigs []ScrapeConfig `yaml:"scrape_configs,omitempty"` + ScrapeConfigFiles []string `yaml:"scrape_config_files,omitempty"` // This is set to the directory from where the config has been loaded. baseDir string @@ -121,7 +121,7 @@ type ScrapeConfig struct { MetricsPath string `yaml:"metrics_path,omitempty"` HonorLabels bool `yaml:"honor_labels,omitempty"` HonorTimestamps bool `yaml:"honor_timestamps,omitempty"` - FollowRedirects *bool `yaml:"follow_redirects"` // omitempty isn't set, since the default value for this flag is true. + FollowRedirects *bool `yaml:"follow_redirects,omitempty"` Scheme string `yaml:"scheme,omitempty"` Params map[string][]string `yaml:"params,omitempty"` HTTPClientConfig promauth.HTTPClientConfig `yaml:",inline"` diff --git a/lib/promscrape/scraper.go b/lib/promscrape/scraper.go index fcd781ed9e..02a2c9b0bf 100644 --- a/lib/promscrape/scraper.go +++ b/lib/promscrape/scraper.go @@ -4,6 +4,7 @@ import ( "bytes" "flag" "fmt" + "io" "sync" "sync/atomic" "time" @@ -70,8 +71,22 @@ var ( // PendingScrapeConfigs - zero value means, that // all scrapeConfigs are inited and ready for work. PendingScrapeConfigs int32 + + // configData contains -promscrape.config data + configData atomic.Value ) +// WriteConfigData writes -promscrape.config contents to w +func WriteConfigData(w io.Writer) { + v := configData.Load() + if v == nil { + // Nothing to write to w + return + } + b := v.(*[]byte) + w.Write(*b) +} + func runScraper(configFile string, pushData func(wr *prompbmarshal.WriteRequest), globalStopCh <-chan struct{}) { if configFile == "" { // Nothing to scrape. @@ -89,6 +104,7 @@ func runScraper(configFile string, pushData func(wr *prompbmarshal.WriteRequest) logger.Fatalf("cannot read %q: %s", configFile, err) } data := cfg.marshal() + configData.Store(&data) cfg.mustStart() scs := newScrapeConfigs(pushData) @@ -132,6 +148,7 @@ func runScraper(configFile string, pushData func(wr *prompbmarshal.WriteRequest) cfgNew.mustStart() cfg = cfgNew data = dataNew + configData.Store(&data) case <-tickerCh: cfgNew, err := loadConfig(configFile) if err != nil { @@ -147,6 +164,7 @@ func runScraper(configFile string, pushData func(wr *prompbmarshal.WriteRequest) cfgNew.mustStart() cfg = cfgNew data = dataNew + configData.Store(&data) case <-globalStopCh: cfg.mustStop() logger.Infof("stopping Prometheus scrapers") From 9882cda8b9b38e697ad3d94ec448ccb08480577d Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Tue, 12 Oct 2021 17:03:09 +0300 Subject: [PATCH 16/77] lib/promscrape: shard targets among cluster nodes after relabeling is applied This guarantees that targets with the same set of labels go to the same vmagent node. See https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1687#issuecomment-940629495 --- docs/CHANGELOG.md | 1 + lib/promscrape/config.go | 54 ++++++++++++++++------------------------ 2 files changed, 22 insertions(+), 33 deletions(-) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index be4e7eceb4..d191f66088 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -7,6 +7,7 @@ sort: 15 ## tip * FEATURE: vmagent: expose `-promscrape.config` contents at `/config` page as Prometheus does. See [this feature request](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1695). +* FEATURE: vmagent: shard targets among cluster nodes after the relabeling is applied. This should guarantee that targets with the same set of labels go to the same `vmagent` node in the cluster. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1687). * FEATURE: add trigonometric functions, which are going to be added in [Prometheus 2.31](https://github.com/prometheus/prometheus/pull/9239): [acosh](https://docs.victoriametrics.com/MetricsQL.html#acosh), [asinh](https://docs.victoriametrics.com/MetricsQL.html#asinh), [atan](https://docs.victoriametrics.com/MetricsQL.html#atan), [atanh](https://docs.victoriametrics.com/MetricsQL.html#atanh), [cosh](https://docs.victoriametrics.com/MetricsQL.html#cosh), [deg](https://docs.victoriametrics.com/MetricsQL.html#deg), [rad](https://docs.victoriametrics.com/MetricsQL.html#rad), [sinh](https://docs.victoriametrics.com/MetricsQL.html#sinh), [tan](https://docs.victoriametrics.com/MetricsQL.html#tan), [tanh](https://docs.victoriametrics.com/MetricsQL.html#tanh). Also add `atan2` binary operator. See [this pull request](https://github.com/prometheus/prometheus/pull/9248). * FEATURE: consistently return the same set of time series from [limitk](https://docs.victoriametrics.com/MetricsQL.html#limitk) function. This improves the usability of periodically refreshed graphs. diff --git a/lib/promscrape/config.go b/lib/promscrape/config.go index dbbbeaf24b..11e80f8ddf 100644 --- a/lib/promscrape/config.go +++ b/lib/promscrape/config.go @@ -926,11 +926,14 @@ func (stc *StaticConfig) appendScrapeWork(dst []*ScrapeWork, swc *scrapeWorkConf return dst } -func appendScrapeWorkKey(dst []byte, target string, extraLabels, metaLabels map[string]string) []byte { - dst = append(dst, target...) - dst = append(dst, ',') - dst = appendSortedKeyValuePairs(dst, extraLabels) - dst = appendSortedKeyValuePairs(dst, metaLabels) +func appendScrapeWorkKey(dst []byte, labels []prompbmarshal.Label) []byte { + for _, label := range labels { + // Do not use strconv.AppendQuote, since it is slow according to CPU profile. + dst = append(dst, label.Name...) + dst = append(dst, '=') + dst = append(dst, label.Value...) + dst = append(dst, ',') + } return dst } @@ -955,37 +958,9 @@ func needSkipScrapeWork(key string, membersCount, replicasCount, memberNum int) return true } -func appendSortedKeyValuePairs(dst []byte, m map[string]string) []byte { - keys := make([]string, 0, len(m)) - for k := range m { - keys = append(keys, k) - } - sort.Strings(keys) - for _, k := range keys { - // Do not use strconv.AppendQuote, since it is slow according to CPU profile. - dst = append(dst, k...) - dst = append(dst, '=') - dst = append(dst, m[k]...) - dst = append(dst, ',') - } - dst = append(dst, '\n') - return dst -} - var scrapeWorkKeyBufPool bytesutil.ByteBufferPool func (swc *scrapeWorkConfig) getScrapeWork(target string, extraLabels, metaLabels map[string]string) (*ScrapeWork, error) { - // Verify whether the scrape work must be skipped because of `-promscrape.cluster.*` configs. - if *clusterMembersCount > 1 { - bb := scrapeWorkKeyBufPool.Get() - bb.B = appendScrapeWorkKey(bb.B[:0], target, extraLabels, metaLabels) - needSkip := needSkipScrapeWork(bytesutil.ToUnsafeString(bb.B), *clusterMembersCount, *clusterReplicationFactor, *clusterMemberNum) - scrapeWorkKeyBufPool.Put(bb) - if needSkip { - return nil, nil - } - } - labels := mergeLabels(swc, target, extraLabels, metaLabels) var originalLabels []prompbmarshal.Label if !*dropOriginalLabels { @@ -1001,6 +976,19 @@ func (swc *scrapeWorkConfig) getScrapeWork(target string, extraLabels, metaLabel // See https://github.com/VictoriaMetrics/VictoriaMetrics/issues/825 for details. labels = append([]prompbmarshal.Label{}, labels...) + // Verify whether the scrape work must be skipped because of `-promscrape.cluster.*` configs. + // Perform the verification on labels after the relabeling in order to guarantee that targets with the same set of labels + // go to the same vmagent shard. + // See https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1687#issuecomment-940629495 + if *clusterMembersCount > 1 { + bb := scrapeWorkKeyBufPool.Get() + bb.B = appendScrapeWorkKey(bb.B[:0], labels) + needSkip := needSkipScrapeWork(bytesutil.ToUnsafeString(bb.B), *clusterMembersCount, *clusterReplicationFactor, *clusterMemberNum) + scrapeWorkKeyBufPool.Put(bb) + if needSkip { + return nil, nil + } + } if len(labels) == 0 { // Drop target without labels. droppedTargetsMap.Register(originalLabels) From c0a932a55f858f29fbc90147b05a34cddbd86c65 Mon Sep 17 00:00:00 2001 From: Roman Khavronenko Date: Wed, 13 Oct 2021 14:57:30 +0300 Subject: [PATCH 17/77] lib/promscrape: make errcheck happy (#1703) --- lib/promscrape/scraper.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/promscrape/scraper.go b/lib/promscrape/scraper.go index 02a2c9b0bf..80a3067f33 100644 --- a/lib/promscrape/scraper.go +++ b/lib/promscrape/scraper.go @@ -84,7 +84,7 @@ func WriteConfigData(w io.Writer) { return } b := v.(*[]byte) - w.Write(*b) + _, _ = w.Write(*b) } func runScraper(configFile string, pushData func(wr *prompbmarshal.WriteRequest), globalStopCh <-chan struct{}) { From 3d61a10367dbc47981f89977c0b9872be08557a0 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Wed, 13 Oct 2021 15:10:40 +0300 Subject: [PATCH 18/77] docs/MetricsQL.md: add missing blank line before the link to github.com/VictoriaMetrics/metricsql package --- docs/MetricsQL.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/MetricsQL.md b/docs/MetricsQL.md index bb093ee6c8..45753c469b 100644 --- a/docs/MetricsQL.md +++ b/docs/MetricsQL.md @@ -7,6 +7,7 @@ sort: 13 [VictoriaMetrics](https://github.com/VictoriaMetrics/VictoriaMetrics) implements MetricsQL - query language inspired by [PromQL](https://prometheus.io/docs/prometheus/latest/querying/basics/). MetricsQL is backwards-compatible with PromQL, so Grafana dashboards backed by Prometheus datasource should work the same after switching from Prometheus to VictoriaMetrics. However, there are some [intentional differences](https://medium.com/@romanhavronenko/victoriametrics-promql-compliance-d4318203f51e) between these two languages. + [Standalone MetricsQL package](https://godoc.org/github.com/VictoriaMetrics/metricsql) can be used for parsing MetricsQL in external apps. If you are unfamiliar with PromQL, then it is suggested reading [this tutorial for beginners](https://medium.com/@valyala/promql-tutorial-for-beginners-9ab455142085). From 8df3c569c7c632db6966ff7f9715070b0011a5bc Mon Sep 17 00:00:00 2001 From: Roman Khavronenko Date: Wed, 13 Oct 2021 15:25:11 +0300 Subject: [PATCH 19/77] vmalert: add Source link to alerts UI (#1701) The source link is controlled by `external.url` and `external.alert.source` flags, in the same way as for alertmanager notifications. The source link is added to Alerts list view, and specific Alert view. --- app/vmalert/alerting.go | 6 +- app/vmalert/main.go | 29 +++-- app/vmalert/web.qtpl | 14 ++- app/vmalert/web.qtpl.go | 242 +++++++++++++++++++++------------------ app/vmalert/web_types.go | 1 + 5 files changed, 164 insertions(+), 128 deletions(-) diff --git a/app/vmalert/alerting.go b/app/vmalert/alerting.go index 4aa77adea4..671750ecdf 100644 --- a/app/vmalert/alerting.go +++ b/app/vmalert/alerting.go @@ -415,7 +415,7 @@ func (ar *AlertingRule) AlertsAPI() []*APIAlert { } func (ar *AlertingRule) newAlertAPI(a notifier.Alert) *APIAlert { - return &APIAlert{ + aa := &APIAlert{ // encode as strings to avoid rounding ID: fmt.Sprintf("%d", a.ID), GroupID: fmt.Sprintf("%d", a.GroupID), @@ -429,6 +429,10 @@ func (ar *AlertingRule) newAlertAPI(a notifier.Alert) *APIAlert { ActiveAt: a.Start, Value: strconv.FormatFloat(a.Value, 'f', -1, 32), } + if alertURLGeneratorFn != nil { + aa.SourceLink = alertURLGeneratorFn(a) + } + return aa } const ( diff --git a/app/vmalert/main.go b/app/vmalert/main.go index fa8ed3753a..7e9c109f3b 100644 --- a/app/vmalert/main.go +++ b/app/vmalert/main.go @@ -59,6 +59,8 @@ eg. 'explore?orgId=1&left=[\"now-1h\",\"now\",\"VictoriaMetrics\",{\"expr\": \"{ dryRun = flag.Bool("dryRun", false, "Whether to check only config files without running vmalert. The rules file are validated. The `-rule` flag must be specified.") ) +var alertURLGeneratorFn notifier.AlertURLGenerator + func main() { // Write flags and help message to stdout, since it is easier to grep or pipe. flag.CommandLine.SetOutput(os.Stdout) @@ -79,15 +81,22 @@ func main() { } return } + + eu, err := getExternalURL(*externalURL, *httpListenAddr, httpserver.IsTLS()) + if err != nil { + logger.Fatalf("failed to init `external.url`: %s", err) + } + notifier.InitTemplateFunc(eu) + alertURLGeneratorFn, err = getAlertURLGenerator(eu, *externalAlertSource, *validateTemplates) + if err != nil { + logger.Fatalf("failed to init `external.alert.source`: %s", err) + } + if *replayFrom != "" || *replayTo != "" { rw, err := remotewrite.Init(context.Background()) if err != nil { logger.Fatalf("failed to init remoteWrite: %s", err) } - eu, err := getExternalURL(*externalURL, *httpListenAddr, httpserver.IsTLS()) - if err != nil { - logger.Fatalf("failed to init `external.url`: %s", err) - } notifier.InitTemplateFunc(eu) groupsCfg, err := config.Parse(*rulePath, *validateTemplates, *validateExpressions) if err != nil { @@ -148,20 +157,10 @@ func newManager(ctx context.Context) (*manager, error) { if err != nil { return nil, fmt.Errorf("failed to init datasource: %w", err) } - eu, err := getExternalURL(*externalURL, *httpListenAddr, httpserver.IsTLS()) - if err != nil { - return nil, fmt.Errorf("failed to init `external.url`: %w", err) - } - notifier.InitTemplateFunc(eu) - aug, err := getAlertURLGenerator(eu, *externalAlertSource, *validateTemplates) - if err != nil { - return nil, fmt.Errorf("failed to init `external.alert.source`: %w", err) - } - nts, err := notifier.Init(aug) + nts, err := notifier.Init(alertURLGeneratorFn) if err != nil { return nil, fmt.Errorf("failed to init notifier: %w", err) } - manager := &manager{ groups: make(map[uint64]*Group), querierBuilder: q, diff --git a/app/vmalert/web.qtpl b/app/vmalert/web.qtpl index 7c5c6b2b4e..b64640a450 100644 --- a/app/vmalert/web.qtpl +++ b/app/vmalert/web.qtpl @@ -155,7 +155,9 @@ sort.Strings(labelKeys) %}
- alert: {%s defaultAR.Name %} ({%d len(alertsByRule[ruleID]) %})
+ alert: {%s defaultAR.Name %} ({%d len(alertsByRule[ruleID]) %}) + |
Source +
expr:
{%s defaultAR.Expression %}
@@ -270,6 +272,16 @@ {%s alert.GroupID %} + +
+
+
+ Source link +
+
+ Link +
+
{%= tpl.Footer() %} diff --git a/app/vmalert/web.qtpl.go b/app/vmalert/web.qtpl.go index a15c6523f8..5b7a3bbb4d 100644 --- a/app/vmalert/web.qtpl.go +++ b/app/vmalert/web.qtpl.go @@ -573,11 +573,17 @@ func StreamListAlerts(qw422016 *qt422016.Writer, groupAlerts []GroupAlerts) { //line app/vmalert/web.qtpl:158 qw422016.N().D(len(alertsByRule[ruleID])) //line app/vmalert/web.qtpl:158 - qw422016.N().S(`)
+ qw422016.N().S(`) + | Source +
expr:
`)
-//line app/vmalert/web.qtpl:159
+//line app/vmalert/web.qtpl:161
 				qw422016.E().S(defaultAR.Expression)
-//line app/vmalert/web.qtpl:159
+//line app/vmalert/web.qtpl:161
 				qw422016.N().S(`
@@ -591,152 +597,152 @@ func StreamListAlerts(qw422016 *qt422016.Writer, groupAlerts []GroupAlerts) { `) -//line app/vmalert/web.qtpl:171 +//line app/vmalert/web.qtpl:173 for _, ar := range alertsByRule[ruleID] { -//line app/vmalert/web.qtpl:171 +//line app/vmalert/web.qtpl:173 qw422016.N().S(` `) -//line app/vmalert/web.qtpl:185 +//line app/vmalert/web.qtpl:187 } -//line app/vmalert/web.qtpl:185 +//line app/vmalert/web.qtpl:187 qw422016.N().S(`
`) -//line app/vmalert/web.qtpl:174 +//line app/vmalert/web.qtpl:176 for _, k := range labelKeys { -//line app/vmalert/web.qtpl:174 +//line app/vmalert/web.qtpl:176 qw422016.N().S(` `) -//line app/vmalert/web.qtpl:175 +//line app/vmalert/web.qtpl:177 qw422016.E().S(k) -//line app/vmalert/web.qtpl:175 +//line app/vmalert/web.qtpl:177 qw422016.N().S(`=`) -//line app/vmalert/web.qtpl:175 +//line app/vmalert/web.qtpl:177 qw422016.E().S(ar.Labels[k]) -//line app/vmalert/web.qtpl:175 +//line app/vmalert/web.qtpl:177 qw422016.N().S(` `) -//line app/vmalert/web.qtpl:176 +//line app/vmalert/web.qtpl:178 } -//line app/vmalert/web.qtpl:176 +//line app/vmalert/web.qtpl:178 qw422016.N().S(` `) -//line app/vmalert/web.qtpl:178 +//line app/vmalert/web.qtpl:180 qw422016.E().S(ar.State) -//line app/vmalert/web.qtpl:178 +//line app/vmalert/web.qtpl:180 qw422016.N().S(` `) -//line app/vmalert/web.qtpl:179 +//line app/vmalert/web.qtpl:181 qw422016.E().S(ar.ActiveAt.Format("2006-01-02T15:04:05Z07:00")) -//line app/vmalert/web.qtpl:179 +//line app/vmalert/web.qtpl:181 qw422016.N().S(` `) -//line app/vmalert/web.qtpl:180 +//line app/vmalert/web.qtpl:182 qw422016.E().S(ar.Value) -//line app/vmalert/web.qtpl:180 +//line app/vmalert/web.qtpl:182 qw422016.N().S(` Details
`) -//line app/vmalert/web.qtpl:188 +//line app/vmalert/web.qtpl:190 } -//line app/vmalert/web.qtpl:188 +//line app/vmalert/web.qtpl:190 qw422016.N().S(`

`) -//line app/vmalert/web.qtpl:191 +//line app/vmalert/web.qtpl:193 } -//line app/vmalert/web.qtpl:191 +//line app/vmalert/web.qtpl:193 qw422016.N().S(` `) -//line app/vmalert/web.qtpl:193 +//line app/vmalert/web.qtpl:195 } else { -//line app/vmalert/web.qtpl:193 +//line app/vmalert/web.qtpl:195 qw422016.N().S(`

No items...

`) -//line app/vmalert/web.qtpl:197 +//line app/vmalert/web.qtpl:199 } -//line app/vmalert/web.qtpl:197 +//line app/vmalert/web.qtpl:199 qw422016.N().S(` `) -//line app/vmalert/web.qtpl:199 +//line app/vmalert/web.qtpl:201 tpl.StreamFooter(qw422016) -//line app/vmalert/web.qtpl:199 +//line app/vmalert/web.qtpl:201 qw422016.N().S(` `) -//line app/vmalert/web.qtpl:201 +//line app/vmalert/web.qtpl:203 } -//line app/vmalert/web.qtpl:201 +//line app/vmalert/web.qtpl:203 func WriteListAlerts(qq422016 qtio422016.Writer, groupAlerts []GroupAlerts) { -//line app/vmalert/web.qtpl:201 +//line app/vmalert/web.qtpl:203 qw422016 := qt422016.AcquireWriter(qq422016) -//line app/vmalert/web.qtpl:201 +//line app/vmalert/web.qtpl:203 StreamListAlerts(qw422016, groupAlerts) -//line app/vmalert/web.qtpl:201 +//line app/vmalert/web.qtpl:203 qt422016.ReleaseWriter(qw422016) -//line app/vmalert/web.qtpl:201 +//line app/vmalert/web.qtpl:203 } -//line app/vmalert/web.qtpl:201 +//line app/vmalert/web.qtpl:203 func ListAlerts(groupAlerts []GroupAlerts) string { -//line app/vmalert/web.qtpl:201 +//line app/vmalert/web.qtpl:203 qb422016 := qt422016.AcquireByteBuffer() -//line app/vmalert/web.qtpl:201 +//line app/vmalert/web.qtpl:203 WriteListAlerts(qb422016, groupAlerts) -//line app/vmalert/web.qtpl:201 +//line app/vmalert/web.qtpl:203 qs422016 := string(qb422016.B) -//line app/vmalert/web.qtpl:201 +//line app/vmalert/web.qtpl:203 qt422016.ReleaseByteBuffer(qb422016) -//line app/vmalert/web.qtpl:201 +//line app/vmalert/web.qtpl:203 return qs422016 -//line app/vmalert/web.qtpl:201 +//line app/vmalert/web.qtpl:203 } -//line app/vmalert/web.qtpl:203 +//line app/vmalert/web.qtpl:205 func StreamAlert(qw422016 *qt422016.Writer, alert *APIAlert) { -//line app/vmalert/web.qtpl:203 - qw422016.N().S(` - `) -//line app/vmalert/web.qtpl:204 - tpl.StreamHeader(qw422016, "", navItems) -//line app/vmalert/web.qtpl:204 +//line app/vmalert/web.qtpl:205 qw422016.N().S(` `) //line app/vmalert/web.qtpl:206 + tpl.StreamHeader(qw422016, "", navItems) +//line app/vmalert/web.qtpl:206 + qw422016.N().S(` + `) +//line app/vmalert/web.qtpl:208 var labelKeys []string for k := range alert.Labels { labelKeys = append(labelKeys, k) @@ -749,28 +755,28 @@ func StreamAlert(qw422016 *qt422016.Writer, alert *APIAlert) { } sort.Strings(annotationKeys) -//line app/vmalert/web.qtpl:217 +//line app/vmalert/web.qtpl:219 qw422016.N().S(`
`) -//line app/vmalert/web.qtpl:218 +//line app/vmalert/web.qtpl:220 qw422016.E().S(alert.Name) -//line app/vmalert/web.qtpl:218 +//line app/vmalert/web.qtpl:220 qw422016.N().S(``) -//line app/vmalert/web.qtpl:218 +//line app/vmalert/web.qtpl:220 qw422016.E().S(alert.State) -//line app/vmalert/web.qtpl:218 +//line app/vmalert/web.qtpl:220 qw422016.N().S(`
@@ -779,9 +785,9 @@ func StreamAlert(qw422016 *qt422016.Writer, alert *APIAlert) {
`) -//line app/vmalert/web.qtpl:225 +//line app/vmalert/web.qtpl:227 qw422016.E().S(alert.ActiveAt.Format("2006-01-02T15:04:05Z07:00")) -//line app/vmalert/web.qtpl:225 +//line app/vmalert/web.qtpl:227 qw422016.N().S(`
@@ -793,9 +799,9 @@ func StreamAlert(qw422016 *qt422016.Writer, alert *APIAlert) {
`)
-//line app/vmalert/web.qtpl:235
+//line app/vmalert/web.qtpl:237
 	qw422016.E().S(alert.Expression)
-//line app/vmalert/web.qtpl:235
+//line app/vmalert/web.qtpl:237
 	qw422016.N().S(`

5 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≈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 l2En-q5;b6Z=x^b-|BP=sqjqkeRVV~ Date: Fri, 8 Oct 2021 19:34:38 +0300 Subject: [PATCH 02/77] lib/storage: fix unaligned access on 32-bit architectures. The bug has been introduced at a171916ef5664690c9b596fe73b095aa75fa5d5c --- docs/CHANGELOG.md | 2 ++ lib/storage/storage.go | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 5de5e5aaee..73447c7cbf 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -6,6 +6,8 @@ sort: 15 ## tip +BUGFIX: vmstorage: fix `unaligned 64-bit atomic operation` panic on 32-bit architectures (arm and 386). The panic has been introduced in v1.67.0 + ## [v1.67.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.67.0) diff --git a/lib/storage/storage.go b/lib/storage/storage.go index 6b9f6d4d2a..68f64558cb 100644 --- a/lib/storage/storage.go +++ b/lib/storage/storage.go @@ -57,8 +57,6 @@ type Storage struct { hourlySeriesLimitRowsDropped uint64 dailySeriesLimitRowsDropped uint64 - isReadOnly uint32 - path string cachePath string retentionMsecs int64 @@ -137,6 +135,8 @@ type Storage struct { // metricIDs, since it usually requires 1 bit per deleted metricID. deletedMetricIDs atomic.Value deletedMetricIDsUpdateLock sync.Mutex + + isReadOnly uint32 } // OpenStorage opens storage on the given path with the given retentionMsecs. From 92b92d4d2c047d00899eeadbe5223dac44449426 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Fri, 8 Oct 2021 19:53:50 +0300 Subject: [PATCH 03/77] app/vmselect/promql: consistently return the same set of time series from `limitk()` function This is the expected behaviour by most users. --- app/vmselect/promql/aggr.go | 5 +++++ app/vmselect/promql/exec_test.go | 2 +- docs/CHANGELOG.md | 4 +++- docs/MetricsQL.md | 2 +- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/app/vmselect/promql/aggr.go b/app/vmselect/promql/aggr.go index 458061959f..ba908e6b89 100644 --- a/app/vmselect/promql/aggr.go +++ b/app/vmselect/promql/aggr.go @@ -1010,6 +1010,11 @@ func aggrFuncLimitK(afa *aggrFuncArg) ([]*timeseries, error) { } } afe := func(tss []*timeseries, modifier *metricsql.ModifierExpr) []*timeseries { + // Sort series by metricName in order to get consistent set of output series + // across multiple calls to limitk() function. + sort.Slice(tss, func(i, j int) bool { + return metricNameLess(&tss[i].MetricName, &tss[j].MetricName) + }) if len(tss) > maxK { tss = tss[:maxK] } diff --git a/app/vmselect/promql/exec_test.go b/app/vmselect/promql/exec_test.go index f335e3e07f..46b8a6605c 100644 --- a/app/vmselect/promql/exec_test.go +++ b/app/vmselect/promql/exec_test.go @@ -4993,7 +4993,7 @@ func TestExecSuccess(t *testing.T) { }) t.Run(`limitk(1)`, func(t *testing.T) { t.Parallel() - q := `limitk(1, label_set(10, "foo", "bar") or label_set(time()/150, "baz", "sss"))` + q := `limitk(1, label_set(10, "foo", "bar") or label_set(time()/150, "xbaz", "sss"))` r1 := netstorage.Result{ MetricName: metricNameExpected, Values: []float64{10, 10, 10, 10, 10, 10}, diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 73447c7cbf..f494b30ffd 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -6,7 +6,9 @@ sort: 15 ## tip -BUGFIX: vmstorage: fix `unaligned 64-bit atomic operation` panic on 32-bit architectures (arm and 386). The panic has been introduced in v1.67.0 +* FEATURE: consistently return the same set of time series from [limitk](https://docs.victoriametrics.com/MetricsQL.html#limitk) function. This improves the usability of periodically refreshed graphs. + +* BUGFIX: vmstorage: fix `unaligned 64-bit atomic operation` panic on 32-bit architectures (arm and 386). The panic has been introduced in v1.67.0 ## [v1.67.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.67.0) diff --git a/docs/MetricsQL.md b/docs/MetricsQL.md index e700f951c8..2700443dbd 100644 --- a/docs/MetricsQL.md +++ b/docs/MetricsQL.md @@ -762,7 +762,7 @@ See also [implicit query conversions](#implicit-query-conversions). #### limitk -`limitk(k, q) by (group_labels)` returns up to `k` time series per each `group_labels` out of time series returned by `q`. The returned set of time series can change with each call. +`limitk(k, q) by (group_labels)` returns up to `k` time series per each `group_labels` out of time series returned by `q`. The returned set of time series remain the same across calls. #### mad From 83a2a9f2f7793f8b20adeb53b55c38d58f5b25f1 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Fri, 8 Oct 2021 20:37:20 +0300 Subject: [PATCH 04/77] deployment/docker/docker-compose.yml: upgrade Grafana from v8.1.2 to v8.2.0 --- deployment/docker/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployment/docker/docker-compose.yml b/deployment/docker/docker-compose.yml index fbbd679bf2..21f1ceeae7 100644 --- a/deployment/docker/docker-compose.yml +++ b/deployment/docker/docker-compose.yml @@ -39,7 +39,7 @@ services: restart: always grafana: container_name: grafana - image: grafana/grafana:8.1.2 + image: grafana/grafana:8.2.0 depends_on: - "victoriametrics" ports: From 9b557a88fc9ebb10db484f5fd048f5a81bb26464 Mon Sep 17 00:00:00 2001 From: Roman Khavronenko Date: Mon, 11 Oct 2021 10:58:34 +0300 Subject: [PATCH 05/77] docs: add "PromQL compliance" article (#1689) * docs: add "PromQL compliance" article * Update docs/Articles.md Co-authored-by: Aliaksandr Valialkin --- docs/Articles.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Articles.md b/docs/Articles.md index 6b6fd5cd0e..073341925c 100644 --- a/docs/Articles.md +++ b/docs/Articles.md @@ -80,6 +80,7 @@ See also [case studies](https://docs.victoriametrics.com/CaseStudies.html). * [Speeding up backups for big time series databases](https://valyala.medium.com/speeding-up-backups-for-big-time-series-databases-533c1a927883) * [Improving histogram usability for Prometheus and Grafana](https://valyala.medium.com/improving-histogram-usability-for-prometheus-and-grafana-bc7e5df0e350) * [Why irate from Prometheus doesn't capture spikes](https://valyala.medium.com/why-irate-from-prometheus-doesnt-capture-spikes-45f9896d7832) +* [VictoriaMetrics: PromQL compliance](https://medium.com/@romanhavronenko/victoriametrics-promql-compliance-d4318203f51e) ### Tutorials, guides and how-to articles From 986bed8261e813ded762295616d9bb3bde112088 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Mon, 11 Oct 2021 11:00:56 +0300 Subject: [PATCH 06/77] docs/MetricsQL.md: add a link to https://medium.com/@romanhavronenko/victoriametrics-promql-compliance-d4318203f51e --- docs/MetricsQL.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/MetricsQL.md b/docs/MetricsQL.md index 2700443dbd..1a9f8291f1 100644 --- a/docs/MetricsQL.md +++ b/docs/MetricsQL.md @@ -18,6 +18,8 @@ The following functionality is implemented differently in MetricsQL compared to * MetricsQL removes all the `NaN` values from the output, so some queries like `(-1)^0.5` return empty results in VictoriaMetrics, while returning a series of `NaN` values in Prometheus. Note that Grafana doesn't draw any lines or dots for `NaN` values, so the end result looks the same for both VictoriaMetrics and Prometheus. * MetricsQL keeps metric names after applying functions, which don't change the meaining of the original time series. For example, [min_over_time(foo)](#min_over_time) or [round(foo)](#round) leaves `foo` metric name in the result. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/674) for details. +Read more about the diffferences between PromQL and MetricsQL in [this article](https://medium.com/@romanhavronenko/victoriametrics-promql-compliance-d4318203f51e). + Other PromQL functionality should work the same in MetricsQL. [File an issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues) if you notice discrepancies between PromQL and MetricsQL results other than mentioned above. ## MetricsQL features From dd4038f0e5ec85b1d77e69c9904fa1f5f2f97153 Mon Sep 17 00:00:00 2001 From: Denys Holius <5650611+denisgolius@users.noreply.github.com> Date: Mon, 11 Oct 2021 11:21:07 +0300 Subject: [PATCH 07/77] Added some fixes (#1690) * removed not needed description * added some fixes and fixed typos --- docs/guides/getting-started-with-vm-operator.md | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/docs/guides/getting-started-with-vm-operator.md b/docs/guides/getting-started-with-vm-operator.md index e930739096..4a8ff83ee7 100644 --- a/docs/guides/getting-started-with-vm-operator.md +++ b/docs/guides/getting-started-with-vm-operator.md @@ -63,6 +63,7 @@ vmoperator-victoria-metrics-operator-67cff44cd6-s47n6 1/1 Running 0 ## 3. Install VictoriaMetrics Cluster > For this example we will use default value for `name: example-vmcluster-persistent`. Change it value up to your needs. + Run the following command to install [VictoriaMetrics Cluster](https://docs.victoriametrics.com/Cluster-VictoriaMetrics.html) via [VM Operator](https://github.com/VictoriaMetrics/helm-charts/tree/master/charts/victoria-metrics-operator):

@@ -807,23 +813,23 @@ func StreamAlert(qw422016 *qt422016.Writer, alert *APIAlert) {
`) -//line app/vmalert/web.qtpl:245 +//line app/vmalert/web.qtpl:247 for _, k := range labelKeys { -//line app/vmalert/web.qtpl:245 +//line app/vmalert/web.qtpl:247 qw422016.N().S(` `) -//line app/vmalert/web.qtpl:246 +//line app/vmalert/web.qtpl:248 qw422016.E().S(k) -//line app/vmalert/web.qtpl:246 +//line app/vmalert/web.qtpl:248 qw422016.N().S(`=`) -//line app/vmalert/web.qtpl:246 +//line app/vmalert/web.qtpl:248 qw422016.E().S(alert.Labels[k]) -//line app/vmalert/web.qtpl:246 +//line app/vmalert/web.qtpl:248 qw422016.N().S(` `) -//line app/vmalert/web.qtpl:247 +//line app/vmalert/web.qtpl:249 } -//line app/vmalert/web.qtpl:247 +//line app/vmalert/web.qtpl:249 qw422016.N().S(`
@@ -835,24 +841,24 @@ func StreamAlert(qw422016 *qt422016.Writer, alert *APIAlert) {
`) -//line app/vmalert/web.qtpl:257 +//line app/vmalert/web.qtpl:259 for _, k := range annotationKeys { -//line app/vmalert/web.qtpl:257 +//line app/vmalert/web.qtpl:259 qw422016.N().S(` `) -//line app/vmalert/web.qtpl:258 +//line app/vmalert/web.qtpl:260 qw422016.E().S(k) -//line app/vmalert/web.qtpl:258 +//line app/vmalert/web.qtpl:260 qw422016.N().S(`:

`) -//line app/vmalert/web.qtpl:259 +//line app/vmalert/web.qtpl:261 qw422016.E().S(alert.Annotations[k]) -//line app/vmalert/web.qtpl:259 +//line app/vmalert/web.qtpl:261 qw422016.N().S(`

`) -//line app/vmalert/web.qtpl:260 +//line app/vmalert/web.qtpl:262 } -//line app/vmalert/web.qtpl:260 +//line app/vmalert/web.qtpl:262 qw422016.N().S(`
@@ -864,49 +870,63 @@ func StreamAlert(qw422016 *qt422016.Writer, alert *APIAlert) { + +
+
+
+ Source link +
+
+ Link +
+
`) -//line app/vmalert/web.qtpl:274 +//line app/vmalert/web.qtpl:286 tpl.StreamFooter(qw422016) -//line app/vmalert/web.qtpl:274 +//line app/vmalert/web.qtpl:286 qw422016.N().S(` `) -//line app/vmalert/web.qtpl:276 +//line app/vmalert/web.qtpl:288 } -//line app/vmalert/web.qtpl:276 +//line app/vmalert/web.qtpl:288 func WriteAlert(qq422016 qtio422016.Writer, alert *APIAlert) { -//line app/vmalert/web.qtpl:276 +//line app/vmalert/web.qtpl:288 qw422016 := qt422016.AcquireWriter(qq422016) -//line app/vmalert/web.qtpl:276 +//line app/vmalert/web.qtpl:288 StreamAlert(qw422016, alert) -//line app/vmalert/web.qtpl:276 +//line app/vmalert/web.qtpl:288 qt422016.ReleaseWriter(qw422016) -//line app/vmalert/web.qtpl:276 +//line app/vmalert/web.qtpl:288 } -//line app/vmalert/web.qtpl:276 +//line app/vmalert/web.qtpl:288 func Alert(alert *APIAlert) string { -//line app/vmalert/web.qtpl:276 +//line app/vmalert/web.qtpl:288 qb422016 := qt422016.AcquireByteBuffer() -//line app/vmalert/web.qtpl:276 +//line app/vmalert/web.qtpl:288 WriteAlert(qb422016, alert) -//line app/vmalert/web.qtpl:276 +//line app/vmalert/web.qtpl:288 qs422016 := string(qb422016.B) -//line app/vmalert/web.qtpl:276 +//line app/vmalert/web.qtpl:288 qt422016.ReleaseByteBuffer(qb422016) -//line app/vmalert/web.qtpl:276 +//line app/vmalert/web.qtpl:288 return qs422016 -//line app/vmalert/web.qtpl:276 +//line app/vmalert/web.qtpl:288 } diff --git a/app/vmalert/web_types.go b/app/vmalert/web_types.go index 5a4f253626..fa14d3cc14 100644 --- a/app/vmalert/web_types.go +++ b/app/vmalert/web_types.go @@ -17,6 +17,7 @@ type APIAlert struct { Labels map[string]string `json:"labels"` Annotations map[string]string `json:"annotations"` ActiveAt time.Time `json:"activeAt"` + SourceLink string `json:"source"` } // APIGroup represents Group for WEB view From e3c8304deb7f0f3e1978c37fc0ddc478cb897f8d Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Wed, 13 Oct 2021 15:59:55 +0300 Subject: [PATCH 20/77] lib/promscrape: add ability to show the original labels for discovered targets at /targets page See https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1698 --- docs/CHANGELOG.md | 1 + lib/promscrape/targets_response.qtpl | 13 +- lib/promscrape/targets_response.qtpl.go | 154 ++++++++++++++---------- 3 files changed, 102 insertions(+), 66 deletions(-) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index d191f66088..f0fc76894d 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -7,6 +7,7 @@ sort: 15 ## tip * FEATURE: vmagent: expose `-promscrape.config` contents at `/config` page as Prometheus does. See [this feature request](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1695). +* FEATURE: vmagent: add `show original labels` button per each scrape target displayed at `http://vmagent;8429/targets` page. This should improve debuggability for service discovery issues similar to [this one](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1664). See [this feature request](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1698). * FEATURE: vmagent: shard targets among cluster nodes after the relabeling is applied. This should guarantee that targets with the same set of labels go to the same `vmagent` node in the cluster. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1687). * FEATURE: add trigonometric functions, which are going to be added in [Prometheus 2.31](https://github.com/prometheus/prometheus/pull/9239): [acosh](https://docs.victoriametrics.com/MetricsQL.html#acosh), [asinh](https://docs.victoriametrics.com/MetricsQL.html#asinh), [atan](https://docs.victoriametrics.com/MetricsQL.html#atan), [atanh](https://docs.victoriametrics.com/MetricsQL.html#atanh), [cosh](https://docs.victoriametrics.com/MetricsQL.html#cosh), [deg](https://docs.victoriametrics.com/MetricsQL.html#deg), [rad](https://docs.victoriametrics.com/MetricsQL.html#rad), [sinh](https://docs.victoriametrics.com/MetricsQL.html#sinh), [tan](https://docs.victoriametrics.com/MetricsQL.html#tan), [tanh](https://docs.victoriametrics.com/MetricsQL.html#tanh). Also add `atan2` binary operator. See [this pull request](https://github.com/prometheus/prometheus/pull/9248). * FEATURE: consistently return the same set of time series from [limitk](https://docs.victoriametrics.com/MetricsQL.html#limitk) function. This improves the usability of periodically refreshed graphs. diff --git a/lib/promscrape/targets_response.qtpl b/lib/promscrape/targets_response.qtpl index 72a445f917..d842a4bae5 100644 --- a/lib/promscrape/targets_response.qtpl +++ b/lib/promscrape/targets_response.qtpl @@ -53,7 +53,7 @@ job={%q= jobName %} (0/0 up) Unhealthy - {% for _, js := range jts %} + {% for i, js := range jts %} {% if onlyUnhealthy && js.upCount == js.targetsTotal %}{% continue %}{% endif %}

@@ -72,13 +72,18 @@ job={%q= jobName %} (0/0 up) - {% for _, ts := range js.targetsStatus %} + {% for j, ts := range js.targetsStatus %} {% if onlyUnhealthy && ts.up %}{% continue %}{% endif %} {%s ts.endpoint %}
{% if ts.up %}UP{% else %}DOWN{% endif %} - + + {% space %} {%= formatLabel(ts.labels) %} + {%f.3 ts.lastScrapeTime.Seconds() %}s ago {%f.3 ts.scrapeDuration.Seconds() %}s @@ -119,7 +124,7 @@ job={%q= jobName %} (0/0 up) { {% for i, label := range labels %} {%s label.Name %}={%q label.Value %} - {% if i+1 < len(labels) %},{% endif %} + {% if i+1 < len(labels) %},{% space %}{% endif %} {% endfor %} } {% endfunc %} diff --git a/lib/promscrape/targets_response.qtpl.go b/lib/promscrape/targets_response.qtpl.go index 1a2015e24e..0ee64550d7 100644 --- a/lib/promscrape/targets_response.qtpl.go +++ b/lib/promscrape/targets_response.qtpl.go @@ -225,7 +225,7 @@ func StreamTargetsResponseHTML(qw422016 *qt422016.Writer, jts []jobTargetsStatus //line lib/promscrape/targets_response.qtpl:52 qw422016.N().S(`>Unhealthy

`) //line lib/promscrape/targets_response.qtpl:56 - for _, js := range jts { + for i, js := range jts { //line lib/promscrape/targets_response.qtpl:57 if onlyUnhealthy && js.upCount == js.targetsTotal { //line lib/promscrape/targets_response.qtpl:57 @@ -247,7 +247,7 @@ func StreamTargetsResponseHTML(qw422016 *qt422016.Writer, jts []jobTargetsStatus //line lib/promscrape/targets_response.qtpl:60 qw422016.N().S(`up)`) //line lib/promscrape/targets_response.qtpl:75 - for _, ts := range js.targetsStatus { + for j, ts := range js.targetsStatus { //line lib/promscrape/targets_response.qtpl:76 if onlyUnhealthy && ts.up { //line lib/promscrape/targets_response.qtpl:76 @@ -285,125 +285,155 @@ func StreamTargetsResponseHTML(qw422016 *qt422016.Writer, jts []jobTargetsStatus //line lib/promscrape/targets_response.qtpl:79 } //line lib/promscrape/targets_response.qtpl:79 - qw422016.N().S(``) -//line lib/promscrape/targets_response.qtpl:88 +//line lib/promscrape/targets_response.qtpl:93 } -//line lib/promscrape/targets_response.qtpl:88 +//line lib/promscrape/targets_response.qtpl:93 qw422016.N().S(`
EndpointStateLabelsLast ScrapeScrape DurationSamples ScrapedError
`) + qw422016.N().S(``) +//line lib/promscrape/targets_response.qtpl:81 + qw422016.N().S(` `) +//line lib/promscrape/targets_response.qtpl:82 streamformatLabel(qw422016, ts.labels) -//line lib/promscrape/targets_response.qtpl:81 - qw422016.N().S(``) +//line lib/promscrape/targets_response.qtpl:82 + qw422016.N().S(``) +//line lib/promscrape/targets_response.qtpl:88 qw422016.N().FPrec(ts.lastScrapeTime.Seconds(), 3) -//line lib/promscrape/targets_response.qtpl:83 +//line lib/promscrape/targets_response.qtpl:88 qw422016.N().S(`s ago`) -//line lib/promscrape/targets_response.qtpl:84 +//line lib/promscrape/targets_response.qtpl:89 qw422016.N().FPrec(ts.scrapeDuration.Seconds(), 3) -//line lib/promscrape/targets_response.qtpl:84 +//line lib/promscrape/targets_response.qtpl:89 qw422016.N().S(`s`) -//line lib/promscrape/targets_response.qtpl:85 +//line lib/promscrape/targets_response.qtpl:90 qw422016.N().D(ts.samplesScraped) -//line lib/promscrape/targets_response.qtpl:85 +//line lib/promscrape/targets_response.qtpl:90 qw422016.N().S(``) -//line lib/promscrape/targets_response.qtpl:86 +//line lib/promscrape/targets_response.qtpl:91 qw422016.E().S(ts.errMsg) -//line lib/promscrape/targets_response.qtpl:86 +//line lib/promscrape/targets_response.qtpl:91 qw422016.N().S(`
`) -//line lib/promscrape/targets_response.qtpl:92 +//line lib/promscrape/targets_response.qtpl:97 } -//line lib/promscrape/targets_response.qtpl:94 +//line lib/promscrape/targets_response.qtpl:99 for _, jobName := range emptyJobs { -//line lib/promscrape/targets_response.qtpl:94 +//line lib/promscrape/targets_response.qtpl:99 qw422016.N().S(``) -//line lib/promscrape/targets_response.qtpl:113 +//line lib/promscrape/targets_response.qtpl:118 } -//line lib/promscrape/targets_response.qtpl:113 +//line lib/promscrape/targets_response.qtpl:118 qw422016.N().S(``) -//line lib/promscrape/targets_response.qtpl:116 +//line lib/promscrape/targets_response.qtpl:121 } -//line lib/promscrape/targets_response.qtpl:116 +//line lib/promscrape/targets_response.qtpl:121 func WriteTargetsResponseHTML(qq422016 qtio422016.Writer, jts []jobTargetsStatuses, emptyJobs []string, redirectPath string, onlyUnhealthy bool) { -//line lib/promscrape/targets_response.qtpl:116 +//line lib/promscrape/targets_response.qtpl:121 qw422016 := qt422016.AcquireWriter(qq422016) -//line lib/promscrape/targets_response.qtpl:116 +//line lib/promscrape/targets_response.qtpl:121 StreamTargetsResponseHTML(qw422016, jts, emptyJobs, redirectPath, onlyUnhealthy) -//line lib/promscrape/targets_response.qtpl:116 +//line lib/promscrape/targets_response.qtpl:121 qt422016.ReleaseWriter(qw422016) -//line lib/promscrape/targets_response.qtpl:116 +//line lib/promscrape/targets_response.qtpl:121 } -//line lib/promscrape/targets_response.qtpl:116 +//line lib/promscrape/targets_response.qtpl:121 func TargetsResponseHTML(jts []jobTargetsStatuses, emptyJobs []string, redirectPath string, onlyUnhealthy bool) string { -//line lib/promscrape/targets_response.qtpl:116 +//line lib/promscrape/targets_response.qtpl:121 qb422016 := qt422016.AcquireByteBuffer() -//line lib/promscrape/targets_response.qtpl:116 +//line lib/promscrape/targets_response.qtpl:121 WriteTargetsResponseHTML(qb422016, jts, emptyJobs, redirectPath, onlyUnhealthy) -//line lib/promscrape/targets_response.qtpl:116 +//line lib/promscrape/targets_response.qtpl:121 qs422016 := string(qb422016.B) -//line lib/promscrape/targets_response.qtpl:116 +//line lib/promscrape/targets_response.qtpl:121 qt422016.ReleaseByteBuffer(qb422016) -//line lib/promscrape/targets_response.qtpl:116 +//line lib/promscrape/targets_response.qtpl:121 return qs422016 -//line lib/promscrape/targets_response.qtpl:116 +//line lib/promscrape/targets_response.qtpl:121 } -//line lib/promscrape/targets_response.qtpl:118 +//line lib/promscrape/targets_response.qtpl:123 func streamformatLabel(qw422016 *qt422016.Writer, labels []prompbmarshal.Label) { -//line lib/promscrape/targets_response.qtpl:118 +//line lib/promscrape/targets_response.qtpl:123 qw422016.N().S(`{`) -//line lib/promscrape/targets_response.qtpl:120 +//line lib/promscrape/targets_response.qtpl:125 for i, label := range labels { -//line lib/promscrape/targets_response.qtpl:121 +//line lib/promscrape/targets_response.qtpl:126 qw422016.E().S(label.Name) -//line lib/promscrape/targets_response.qtpl:121 +//line lib/promscrape/targets_response.qtpl:126 qw422016.N().S(`=`) -//line lib/promscrape/targets_response.qtpl:121 +//line lib/promscrape/targets_response.qtpl:126 qw422016.E().Q(label.Value) -//line lib/promscrape/targets_response.qtpl:122 +//line lib/promscrape/targets_response.qtpl:127 if i+1 < len(labels) { -//line lib/promscrape/targets_response.qtpl:122 +//line lib/promscrape/targets_response.qtpl:127 qw422016.N().S(`,`) -//line lib/promscrape/targets_response.qtpl:122 +//line lib/promscrape/targets_response.qtpl:127 + qw422016.N().S(` `) +//line lib/promscrape/targets_response.qtpl:127 } -//line lib/promscrape/targets_response.qtpl:123 +//line lib/promscrape/targets_response.qtpl:128 } -//line lib/promscrape/targets_response.qtpl:123 +//line lib/promscrape/targets_response.qtpl:128 qw422016.N().S(`}`) -//line lib/promscrape/targets_response.qtpl:125 +//line lib/promscrape/targets_response.qtpl:130 } -//line lib/promscrape/targets_response.qtpl:125 +//line lib/promscrape/targets_response.qtpl:130 func writeformatLabel(qq422016 qtio422016.Writer, labels []prompbmarshal.Label) { -//line lib/promscrape/targets_response.qtpl:125 +//line lib/promscrape/targets_response.qtpl:130 qw422016 := qt422016.AcquireWriter(qq422016) -//line lib/promscrape/targets_response.qtpl:125 +//line lib/promscrape/targets_response.qtpl:130 streamformatLabel(qw422016, labels) -//line lib/promscrape/targets_response.qtpl:125 +//line lib/promscrape/targets_response.qtpl:130 qt422016.ReleaseWriter(qw422016) -//line lib/promscrape/targets_response.qtpl:125 +//line lib/promscrape/targets_response.qtpl:130 } -//line lib/promscrape/targets_response.qtpl:125 +//line lib/promscrape/targets_response.qtpl:130 func formatLabel(labels []prompbmarshal.Label) string { -//line lib/promscrape/targets_response.qtpl:125 +//line lib/promscrape/targets_response.qtpl:130 qb422016 := qt422016.AcquireByteBuffer() -//line lib/promscrape/targets_response.qtpl:125 +//line lib/promscrape/targets_response.qtpl:130 writeformatLabel(qb422016, labels) -//line lib/promscrape/targets_response.qtpl:125 +//line lib/promscrape/targets_response.qtpl:130 qs422016 := string(qb422016.B) -//line lib/promscrape/targets_response.qtpl:125 +//line lib/promscrape/targets_response.qtpl:130 qt422016.ReleaseByteBuffer(qb422016) -//line lib/promscrape/targets_response.qtpl:125 +//line lib/promscrape/targets_response.qtpl:130 return qs422016 -//line lib/promscrape/targets_response.qtpl:125 +//line lib/promscrape/targets_response.qtpl:130 } From 1c17fe70e0b5999b9b6e220484e4eec51bc0f934 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Wed, 13 Oct 2021 16:00:50 +0300 Subject: [PATCH 21/77] docs/CHANGELOG.md: document e3c8304deb7f0f3e1978c37fc0ddc478cb897f8d --- docs/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index f0fc76894d..2c98424052 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -7,7 +7,7 @@ sort: 15 ## tip * FEATURE: vmagent: expose `-promscrape.config` contents at `/config` page as Prometheus does. See [this feature request](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1695). -* FEATURE: vmagent: add `show original labels` button per each scrape target displayed at `http://vmagent;8429/targets` page. This should improve debuggability for service discovery issues similar to [this one](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1664). See [this feature request](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1698). +* FEATURE: vmagent: add `show original labels` button per each scrape target displayed at `http://vmagent;8429/targets` page. This should improve debuggability for service discovery and relabeling issues similar to [this one](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1664). See [this feature request](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1698). * FEATURE: vmagent: shard targets among cluster nodes after the relabeling is applied. This should guarantee that targets with the same set of labels go to the same `vmagent` node in the cluster. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1687). * FEATURE: add trigonometric functions, which are going to be added in [Prometheus 2.31](https://github.com/prometheus/prometheus/pull/9239): [acosh](https://docs.victoriametrics.com/MetricsQL.html#acosh), [asinh](https://docs.victoriametrics.com/MetricsQL.html#asinh), [atan](https://docs.victoriametrics.com/MetricsQL.html#atan), [atanh](https://docs.victoriametrics.com/MetricsQL.html#atanh), [cosh](https://docs.victoriametrics.com/MetricsQL.html#cosh), [deg](https://docs.victoriametrics.com/MetricsQL.html#deg), [rad](https://docs.victoriametrics.com/MetricsQL.html#rad), [sinh](https://docs.victoriametrics.com/MetricsQL.html#sinh), [tan](https://docs.victoriametrics.com/MetricsQL.html#tan), [tanh](https://docs.victoriametrics.com/MetricsQL.html#tanh). Also add `atan2` binary operator. See [this pull request](https://github.com/prometheus/prometheus/pull/9248). * FEATURE: consistently return the same set of time series from [limitk](https://docs.victoriametrics.com/MetricsQL.html#limitk) function. This improves the usability of periodically refreshed graphs. From 7fcbd3fa4b8501ce535b54576b33f8ce8d99c991 Mon Sep 17 00:00:00 2001 From: Roman Khavronenko Date: Wed, 13 Oct 2021 17:29:28 +0300 Subject: [PATCH 22/77] Adjust `http.Transport.MaxIdleConns` setting for vmauth/vmalert services (#1704) * vmalert: adjust `http.Transport.MaxIdleConns` value accordingly to `http.Transport.MaxIdleConnsPerHost` `http.Transport.MaxIdleConnsPerHost` setting is controlled by `datasource.maxIdleConnections` flag, while `http.Transport.MaxIdleConns` is inherited from DefaultTransport and is equal to `100`. The fix adjusts `http.Transport.MaxIdleConns` value if it is lower than `http.Transport.MaxIdleConnsPerHost`. Signed-off-by: hagen1778 * vmauth: adjust `http.Transport.MaxIdleConns` value accordingly to `http.Transport.MaxIdleConnsPerHost` `http.Transport.MaxIdleConnsPerHost` setting is controlled by `maxIdleConnsPerBackend` flag, while `http.Transport.MaxIdleConns` is inherited from DefaultTransport and is equal to `100`. The fix adjusts `http.Transport.MaxIdleConns` value if it is lower than `http.Transport.MaxIdleConnsPerHost`. Signed-off-by: hagen1778 --- app/vmalert/datasource/init.go | 3 +++ app/vmauth/main.go | 3 +++ 2 files changed, 6 insertions(+) diff --git a/app/vmalert/datasource/init.go b/app/vmalert/datasource/init.go index 3e28d6e43e..72cfddfc99 100644 --- a/app/vmalert/datasource/init.go +++ b/app/vmalert/datasource/init.go @@ -52,6 +52,9 @@ func Init(extraParams []Param) (QuerierBuilder, error) { return nil, fmt.Errorf("failed to create transport: %w", err) } tr.MaxIdleConnsPerHost = *maxIdleConnections + if tr.MaxIdleConns != 0 && tr.MaxIdleConns < tr.MaxIdleConnsPerHost { + tr.MaxIdleConns = tr.MaxIdleConnsPerHost + } if *roundDigits > 0 { extraParams = append(extraParams, Param{ diff --git a/app/vmauth/main.go b/app/vmauth/main.go index e1b282bec5..22cd16ae56 100644 --- a/app/vmauth/main.go +++ b/app/vmauth/main.go @@ -130,6 +130,9 @@ var reverseProxy = &httputil.ReverseProxy{ // Disable HTTP/2.0, since VictoriaMetrics components don't support HTTP/2.0 (because there is no sense in this). tr.ForceAttemptHTTP2 = false tr.MaxIdleConnsPerHost = *maxIdleConnsPerBackend + if tr.MaxIdleConns != 0 && tr.MaxIdleConns < tr.MaxIdleConnsPerHost { + tr.MaxIdleConns = tr.MaxIdleConnsPerHost + } return tr }(), FlushInterval: time.Second, From 1a7287c4087d15dc774f2453fa71382a0d1ac886 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Thu, 14 Oct 2021 12:10:13 +0300 Subject: [PATCH 23/77] lib/promscrape: return error if `sample_limit` or `series_limit` options are set when stream parsing mode is enabled --- app/vmagent/README.md | 2 +- docs/CHANGELOG.md | 1 + docs/vmagent.md | 2 +- lib/promscrape/config.go | 6 ++++++ 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/app/vmagent/README.md b/app/vmagent/README.md index 93b612d0ae..cac24136fd 100644 --- a/app/vmagent/README.md +++ b/app/vmagent/README.md @@ -329,7 +329,7 @@ scrape_configs: 'match[]': ['{__name__!=""}'] ``` -Note that `sample_limit` option doesn't prevent from data push to remote storage if stream parsing is enabled because the parsed data is pushed to remote storage as soon as it is parsed. +Note that `sample_limit` and `series_limit` options cannot be used in stream parsing mode because the parsed data is pushed to remote storage as soon as it is parsed. ## Scraping big number of targets diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 2c98424052..d8123a1f9f 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -9,6 +9,7 @@ sort: 15 * FEATURE: vmagent: expose `-promscrape.config` contents at `/config` page as Prometheus does. See [this feature request](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1695). * FEATURE: vmagent: add `show original labels` button per each scrape target displayed at `http://vmagent;8429/targets` page. This should improve debuggability for service discovery and relabeling issues similar to [this one](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1664). See [this feature request](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1698). * FEATURE: vmagent: shard targets among cluster nodes after the relabeling is applied. This should guarantee that targets with the same set of labels go to the same `vmagent` node in the cluster. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1687). +* FEATURE: vmagent: return error if `sample_limit` or `series_limit` options are set when [stream parsing mode](https://docs.victoriametrics.com/vmagent.html#stream-parsing-mode) is enabled, since these limits cannot be applied in stream parsing mode. * FEATURE: add trigonometric functions, which are going to be added in [Prometheus 2.31](https://github.com/prometheus/prometheus/pull/9239): [acosh](https://docs.victoriametrics.com/MetricsQL.html#acosh), [asinh](https://docs.victoriametrics.com/MetricsQL.html#asinh), [atan](https://docs.victoriametrics.com/MetricsQL.html#atan), [atanh](https://docs.victoriametrics.com/MetricsQL.html#atanh), [cosh](https://docs.victoriametrics.com/MetricsQL.html#cosh), [deg](https://docs.victoriametrics.com/MetricsQL.html#deg), [rad](https://docs.victoriametrics.com/MetricsQL.html#rad), [sinh](https://docs.victoriametrics.com/MetricsQL.html#sinh), [tan](https://docs.victoriametrics.com/MetricsQL.html#tan), [tanh](https://docs.victoriametrics.com/MetricsQL.html#tanh). Also add `atan2` binary operator. See [this pull request](https://github.com/prometheus/prometheus/pull/9248). * FEATURE: consistently return the same set of time series from [limitk](https://docs.victoriametrics.com/MetricsQL.html#limitk) function. This improves the usability of periodically refreshed graphs. diff --git a/docs/vmagent.md b/docs/vmagent.md index 579210ef96..038dd05adc 100644 --- a/docs/vmagent.md +++ b/docs/vmagent.md @@ -333,7 +333,7 @@ scrape_configs: 'match[]': ['{__name__!=""}'] ``` -Note that `sample_limit` option doesn't prevent from data push to remote storage if stream parsing is enabled because the parsed data is pushed to remote storage as soon as it is parsed. +Note that `sample_limit` and `series_limit` options cannot be used in stream parsing mode because the parsed data is pushed to remote storage as soon as it is parsed. ## Scraping big number of targets diff --git a/lib/promscrape/config.go b/lib/promscrape/config.go index 11e80f8ddf..17cc688085 100644 --- a/lib/promscrape/config.go +++ b/lib/promscrape/config.go @@ -753,6 +753,12 @@ func getScrapeWorkConfig(sc *ScrapeConfig, baseDir string, globalCfg *GlobalConf if err != nil { return nil, fmt.Errorf("cannot parse `metric_relabel_configs` for `job_name` %q: %w", jobName, err) } + if (*streamParse || sc.StreamParse) && sc.SampleLimit > 0 { + return nil, fmt.Errorf("cannot use stream parsing mode when `sample_limit` is set for `job_name` %q", jobName) + } + if (*streamParse || sc.StreamParse) && sc.SeriesLimit > 0 { + return nil, fmt.Errorf("cannot use stream parsing mode when `series_limit` is set for `job_name` %q", jobName) + } swc := &scrapeWorkConfig{ scrapeInterval: scrapeInterval, scrapeTimeout: scrapeTimeout, From bbd34fa15e1684f35692ef13dfde986b7763cee4 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Thu, 14 Oct 2021 12:29:12 +0300 Subject: [PATCH 24/77] lib/promscrape: add `-promscrape.minResponseSizeForStreamParse` command-line option for automatic switching to stream parsing mode when scraping targets with big responses This should reduce memory usage when vmagent scrapes targets with non-uniform response sizes. This is common case in Kubernetes monitoring. --- README.md | 11 ++++++++- app/vmagent/README.md | 10 +++++++- docs/CHANGELOG.md | 1 + docs/README.md | 11 ++++++++- docs/Single-server-VictoriaMetrics.md | 11 ++++++++- docs/vmagent.md | 10 +++++++- lib/promscrape/scrapework.go | 34 ++++++++++++++++++++------- 7 files changed, 74 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index bc947e1d7e..001ff224ac 100644 --- a/README.md +++ b/README.md @@ -1540,6 +1540,9 @@ Pass `-help` to VictoriaMetrics in order to see the list of supported command-li The maximum number of CPU cores to use for big merges. Default value is used if set to 0 -csvTrimTimestamp duration Trim timestamps when importing csv data to this duration. Minimum practical duration is 1ms. Higher duration (i.e. 1s) may be used for reducing disk space usage for timestamp data (default 1ms) + -datadog.maxInsertRequestSize size + The maximum size in bytes of a single DataDog POST request to /api/v1/series + Supports the following optional suffixes for size values: KB, MB, GB, KiB, MiB, GiB (default 67108864) -dedup.minScrapeInterval duration Leave only the first sample in every time series per each discrete interval equal to -dedup.minScrapeInterval > 0. See https://docs.victoriametrics.com/#deduplication for details -deleteAuthKey string @@ -1705,6 +1708,9 @@ Pass `-help` to VictoriaMetrics in order to see the list of supported command-li -promscrape.maxScrapeSize size The maximum size of scrape response in bytes to process from Prometheus targets. Bigger responses are rejected Supports the following optional suffixes for size values: KB, MB, GB, KiB, MiB, GiB (default 16777216) + -promscrape.minResponseSizeForStreamParse size + The minimum target response size for automatic switching to stream parsing mode, which can reduce memory usage. See https://docs.victoriametrics.com/vmagent.html#stream-parsing-mode + Supports the following optional suffixes for size values: KB, MB, GB, KiB, MiB, GiB (default 1000000) -promscrape.noStaleMarkers Whether to disable sending Prometheus stale markers for metrics when scrape target disappears. This option may reduce memory usage if stale markers aren't needed for your setup. See also https://docs.victoriametrics.com/vmagent.html#stream-parsing-mode -promscrape.openstackSDCheckInterval duration @@ -1718,7 +1724,7 @@ Pass `-help` to VictoriaMetrics in order to see the list of supported command-li -promscrape.suppressScrapeErrors Whether to suppress scrape errors logging. The last error for each target is always available at '/targets' page even if scrape errors logging is suppressed -relabelConfig string - Optional path to a file with relabeling rules, which are applied to all the ingested metrics. See https://docs.victoriametrics.com/#relabeling for details + Optional path to a file with relabeling rules, which are applied to all the ingested metrics. See https://docs.victoriametrics.com/#relabeling for details. The config is reloaded on SIGHUP signal -relabelDebug Whether to log metrics before and after relabeling with -relabelConfig. If the -relabelDebug is enabled, then the metrics aren't sent to storage. This is useful for debugging the relabeling configs -retentionPeriod value @@ -1795,6 +1801,9 @@ Pass `-help` to VictoriaMetrics in order to see the list of supported command-li The maximum number of unique series can be added to the storage during the last 24 hours. Excess series are logged and dropped. This can be useful for limiting series churn rate. See also -storage.maxHourlySeries -storage.maxHourlySeries int The maximum number of unique series can be added to the storage during the last hour. Excess series are logged and dropped. This can be useful for limiting series cardinality. See also -storage.maxDailySeries + -storage.minFreeDiskSpaceBytes size + The minimum free disk space at -storageDataPath after which the storage stops accepting new data + Supports the following optional suffixes for size values: KB, MB, GB, KiB, MiB, GiB (default 10000000) -storageDataPath string Path to storage data (default "victoria-metrics-data") -tls diff --git a/app/vmagent/README.md b/app/vmagent/README.md index cac24136fd..8c296d31d7 100644 --- a/app/vmagent/README.md +++ b/app/vmagent/README.md @@ -307,7 +307,9 @@ Prometheus staleness markers aren't sent to `-remoteWrite.url` in [stream parsin ## Stream parsing mode -By default `vmagent` reads the full response from scrape target into memory, then parses it, applies [relabeling](#relabeling) and then pushes the resulting metrics to the configured `-remoteWrite.url`. This mode works good for the majority of cases when the scrape target exposes small number of metrics (e.g. less than 10 thousand). But this mode may take big amounts of memory when the scrape target exposes big number of metrics. In this case it is recommended enabling stream parsing mode. When this mode is enabled, then `vmagent` reads response from scrape target in chunks, then immediately processes every chunk and pushes the processed metrics to remote storage. This allows saving memory when scraping targets that expose millions of metrics. Stream parsing mode may be enabled in the following places: +By default `vmagent` reads the full response body from scrape target into memory, then parses it, applies [relabeling](#relabeling) and then pushes the resulting metrics to the configured `-remoteWrite.url`. This mode works good for the majority of cases when the scrape target exposes small number of metrics (e.g. less than 10 thousand). But this mode may take big amounts of memory when the scrape target exposes big number of metrics. In this case it is recommended enabling stream parsing mode. When this mode is enabled, then `vmagent` reads response from scrape target in chunks, then immediately processes every chunk and pushes the processed metrics to remote storage. This allows saving memory when scraping targets that expose millions of metrics. + +Stream parsing mode is automatically enabled for scrape targets returning response bodies with sizes bigger than the `-promscrape.minResponseSizeForStreamParse` command-line flag value. Additionally, the stream parsing mode can be explicitly enabled in the following places: - Via `-promscrape.streamParse` command-line flag. In this case all the scrape targets defined in the file pointed by `-promscrape.config` are scraped in stream parsing mode. - Via `stream_parse: true` option at `scrape_configs` section. In this case all the scrape targets defined in this section are scraped in stream parsing mode. @@ -706,6 +708,9 @@ See the docs at https://docs.victoriametrics.com/vmagent.html . -csvTrimTimestamp duration Trim timestamps when importing csv data to this duration. Minimum practical duration is 1ms. Higher duration (i.e. 1s) may be used for reducing disk space usage for timestamp data (default 1ms) + -datadog.maxInsertRequestSize size + The maximum size in bytes of a single DataDog POST request to /api/v1/series + Supports the following optional suffixes for size values: KB, MB, GB, KiB, MiB, GiB (default 67108864) -dryRun Whether to check only config files without running vmagent. The following files are checked: -promscrape.config, -remoteWrite.relabelConfig, -remoteWrite.urlRelabelConfig . Unknown config entries are allowed in -promscrape.config by default. This can be changed with -promscrape.config.strictParse -enableTCP6 @@ -853,6 +858,9 @@ See the docs at https://docs.victoriametrics.com/vmagent.html . -promscrape.maxScrapeSize size The maximum size of scrape response in bytes to process from Prometheus targets. Bigger responses are rejected Supports the following optional suffixes for size values: KB, MB, GB, KiB, MiB, GiB (default 16777216) + -promscrape.minResponseSizeForStreamParse size + The minimum target response size for automatic switching to stream parsing mode, which can reduce memory usage. See https://docs.victoriametrics.com/vmagent.html#stream-parsing-mode + Supports the following optional suffixes for size values: KB, MB, GB, KiB, MiB, GiB (default 1000000) -promscrape.noStaleMarkers Whether to disable sending Prometheus stale markers for metrics when scrape target disappears. This option may reduce memory usage if stale markers aren't needed for your setup. See also https://docs.victoriametrics.com/vmagent.html#stream-parsing-mode -promscrape.openstackSDCheckInterval duration diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index d8123a1f9f..22ce7337a0 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -9,6 +9,7 @@ sort: 15 * FEATURE: vmagent: expose `-promscrape.config` contents at `/config` page as Prometheus does. See [this feature request](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1695). * FEATURE: vmagent: add `show original labels` button per each scrape target displayed at `http://vmagent;8429/targets` page. This should improve debuggability for service discovery and relabeling issues similar to [this one](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1664). See [this feature request](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1698). * FEATURE: vmagent: shard targets among cluster nodes after the relabeling is applied. This should guarantee that targets with the same set of labels go to the same `vmagent` node in the cluster. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1687). +* FEATURE: vmagent: add `-promscrape.minResponseSizeForStreamParse` command-line flag, which can be used for instructing `vmagent` to automatically switch to [stream parsing mode](https://docs.victoriametrics.com/vmagent.html#stream-parsing-mode) for scrape targets with big responses. This should reduce memory usage when `vmagent` scrapes targets with non-uniform response sizes (this is the case in Kubernetes monitoring). * FEATURE: vmagent: return error if `sample_limit` or `series_limit` options are set when [stream parsing mode](https://docs.victoriametrics.com/vmagent.html#stream-parsing-mode) is enabled, since these limits cannot be applied in stream parsing mode. * FEATURE: add trigonometric functions, which are going to be added in [Prometheus 2.31](https://github.com/prometheus/prometheus/pull/9239): [acosh](https://docs.victoriametrics.com/MetricsQL.html#acosh), [asinh](https://docs.victoriametrics.com/MetricsQL.html#asinh), [atan](https://docs.victoriametrics.com/MetricsQL.html#atan), [atanh](https://docs.victoriametrics.com/MetricsQL.html#atanh), [cosh](https://docs.victoriametrics.com/MetricsQL.html#cosh), [deg](https://docs.victoriametrics.com/MetricsQL.html#deg), [rad](https://docs.victoriametrics.com/MetricsQL.html#rad), [sinh](https://docs.victoriametrics.com/MetricsQL.html#sinh), [tan](https://docs.victoriametrics.com/MetricsQL.html#tan), [tanh](https://docs.victoriametrics.com/MetricsQL.html#tanh). Also add `atan2` binary operator. See [this pull request](https://github.com/prometheus/prometheus/pull/9248). * FEATURE: consistently return the same set of time series from [limitk](https://docs.victoriametrics.com/MetricsQL.html#limitk) function. This improves the usability of periodically refreshed graphs. diff --git a/docs/README.md b/docs/README.md index bc947e1d7e..001ff224ac 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1540,6 +1540,9 @@ Pass `-help` to VictoriaMetrics in order to see the list of supported command-li The maximum number of CPU cores to use for big merges. Default value is used if set to 0 -csvTrimTimestamp duration Trim timestamps when importing csv data to this duration. Minimum practical duration is 1ms. Higher duration (i.e. 1s) may be used for reducing disk space usage for timestamp data (default 1ms) + -datadog.maxInsertRequestSize size + The maximum size in bytes of a single DataDog POST request to /api/v1/series + Supports the following optional suffixes for size values: KB, MB, GB, KiB, MiB, GiB (default 67108864) -dedup.minScrapeInterval duration Leave only the first sample in every time series per each discrete interval equal to -dedup.minScrapeInterval > 0. See https://docs.victoriametrics.com/#deduplication for details -deleteAuthKey string @@ -1705,6 +1708,9 @@ Pass `-help` to VictoriaMetrics in order to see the list of supported command-li -promscrape.maxScrapeSize size The maximum size of scrape response in bytes to process from Prometheus targets. Bigger responses are rejected Supports the following optional suffixes for size values: KB, MB, GB, KiB, MiB, GiB (default 16777216) + -promscrape.minResponseSizeForStreamParse size + The minimum target response size for automatic switching to stream parsing mode, which can reduce memory usage. See https://docs.victoriametrics.com/vmagent.html#stream-parsing-mode + Supports the following optional suffixes for size values: KB, MB, GB, KiB, MiB, GiB (default 1000000) -promscrape.noStaleMarkers Whether to disable sending Prometheus stale markers for metrics when scrape target disappears. This option may reduce memory usage if stale markers aren't needed for your setup. See also https://docs.victoriametrics.com/vmagent.html#stream-parsing-mode -promscrape.openstackSDCheckInterval duration @@ -1718,7 +1724,7 @@ Pass `-help` to VictoriaMetrics in order to see the list of supported command-li -promscrape.suppressScrapeErrors Whether to suppress scrape errors logging. The last error for each target is always available at '/targets' page even if scrape errors logging is suppressed -relabelConfig string - Optional path to a file with relabeling rules, which are applied to all the ingested metrics. See https://docs.victoriametrics.com/#relabeling for details + Optional path to a file with relabeling rules, which are applied to all the ingested metrics. See https://docs.victoriametrics.com/#relabeling for details. The config is reloaded on SIGHUP signal -relabelDebug Whether to log metrics before and after relabeling with -relabelConfig. If the -relabelDebug is enabled, then the metrics aren't sent to storage. This is useful for debugging the relabeling configs -retentionPeriod value @@ -1795,6 +1801,9 @@ Pass `-help` to VictoriaMetrics in order to see the list of supported command-li The maximum number of unique series can be added to the storage during the last 24 hours. Excess series are logged and dropped. This can be useful for limiting series churn rate. See also -storage.maxHourlySeries -storage.maxHourlySeries int The maximum number of unique series can be added to the storage during the last hour. Excess series are logged and dropped. This can be useful for limiting series cardinality. See also -storage.maxDailySeries + -storage.minFreeDiskSpaceBytes size + The minimum free disk space at -storageDataPath after which the storage stops accepting new data + Supports the following optional suffixes for size values: KB, MB, GB, KiB, MiB, GiB (default 10000000) -storageDataPath string Path to storage data (default "victoria-metrics-data") -tls diff --git a/docs/Single-server-VictoriaMetrics.md b/docs/Single-server-VictoriaMetrics.md index 94f8cbcc25..324bde5cfe 100644 --- a/docs/Single-server-VictoriaMetrics.md +++ b/docs/Single-server-VictoriaMetrics.md @@ -1544,6 +1544,9 @@ Pass `-help` to VictoriaMetrics in order to see the list of supported command-li The maximum number of CPU cores to use for big merges. Default value is used if set to 0 -csvTrimTimestamp duration Trim timestamps when importing csv data to this duration. Minimum practical duration is 1ms. Higher duration (i.e. 1s) may be used for reducing disk space usage for timestamp data (default 1ms) + -datadog.maxInsertRequestSize size + The maximum size in bytes of a single DataDog POST request to /api/v1/series + Supports the following optional suffixes for size values: KB, MB, GB, KiB, MiB, GiB (default 67108864) -dedup.minScrapeInterval duration Leave only the first sample in every time series per each discrete interval equal to -dedup.minScrapeInterval > 0. See https://docs.victoriametrics.com/#deduplication for details -deleteAuthKey string @@ -1709,6 +1712,9 @@ Pass `-help` to VictoriaMetrics in order to see the list of supported command-li -promscrape.maxScrapeSize size The maximum size of scrape response in bytes to process from Prometheus targets. Bigger responses are rejected Supports the following optional suffixes for size values: KB, MB, GB, KiB, MiB, GiB (default 16777216) + -promscrape.minResponseSizeForStreamParse size + The minimum target response size for automatic switching to stream parsing mode, which can reduce memory usage. See https://docs.victoriametrics.com/vmagent.html#stream-parsing-mode + Supports the following optional suffixes for size values: KB, MB, GB, KiB, MiB, GiB (default 1000000) -promscrape.noStaleMarkers Whether to disable sending Prometheus stale markers for metrics when scrape target disappears. This option may reduce memory usage if stale markers aren't needed for your setup. See also https://docs.victoriametrics.com/vmagent.html#stream-parsing-mode -promscrape.openstackSDCheckInterval duration @@ -1722,7 +1728,7 @@ Pass `-help` to VictoriaMetrics in order to see the list of supported command-li -promscrape.suppressScrapeErrors Whether to suppress scrape errors logging. The last error for each target is always available at '/targets' page even if scrape errors logging is suppressed -relabelConfig string - Optional path to a file with relabeling rules, which are applied to all the ingested metrics. See https://docs.victoriametrics.com/#relabeling for details + Optional path to a file with relabeling rules, which are applied to all the ingested metrics. See https://docs.victoriametrics.com/#relabeling for details. The config is reloaded on SIGHUP signal -relabelDebug Whether to log metrics before and after relabeling with -relabelConfig. If the -relabelDebug is enabled, then the metrics aren't sent to storage. This is useful for debugging the relabeling configs -retentionPeriod value @@ -1799,6 +1805,9 @@ Pass `-help` to VictoriaMetrics in order to see the list of supported command-li The maximum number of unique series can be added to the storage during the last 24 hours. Excess series are logged and dropped. This can be useful for limiting series churn rate. See also -storage.maxHourlySeries -storage.maxHourlySeries int The maximum number of unique series can be added to the storage during the last hour. Excess series are logged and dropped. This can be useful for limiting series cardinality. See also -storage.maxDailySeries + -storage.minFreeDiskSpaceBytes size + The minimum free disk space at -storageDataPath after which the storage stops accepting new data + Supports the following optional suffixes for size values: KB, MB, GB, KiB, MiB, GiB (default 10000000) -storageDataPath string Path to storage data (default "victoria-metrics-data") -tls diff --git a/docs/vmagent.md b/docs/vmagent.md index 038dd05adc..7e4afd52f0 100644 --- a/docs/vmagent.md +++ b/docs/vmagent.md @@ -311,7 +311,9 @@ Prometheus staleness markers aren't sent to `-remoteWrite.url` in [stream parsin ## Stream parsing mode -By default `vmagent` reads the full response from scrape target into memory, then parses it, applies [relabeling](#relabeling) and then pushes the resulting metrics to the configured `-remoteWrite.url`. This mode works good for the majority of cases when the scrape target exposes small number of metrics (e.g. less than 10 thousand). But this mode may take big amounts of memory when the scrape target exposes big number of metrics. In this case it is recommended enabling stream parsing mode. When this mode is enabled, then `vmagent` reads response from scrape target in chunks, then immediately processes every chunk and pushes the processed metrics to remote storage. This allows saving memory when scraping targets that expose millions of metrics. Stream parsing mode may be enabled in the following places: +By default `vmagent` reads the full response body from scrape target into memory, then parses it, applies [relabeling](#relabeling) and then pushes the resulting metrics to the configured `-remoteWrite.url`. This mode works good for the majority of cases when the scrape target exposes small number of metrics (e.g. less than 10 thousand). But this mode may take big amounts of memory when the scrape target exposes big number of metrics. In this case it is recommended enabling stream parsing mode. When this mode is enabled, then `vmagent` reads response from scrape target in chunks, then immediately processes every chunk and pushes the processed metrics to remote storage. This allows saving memory when scraping targets that expose millions of metrics. + +Stream parsing mode is automatically enabled for scrape targets returning response bodies with sizes bigger than the `-promscrape.minResponseSizeForStreamParse` command-line flag value. Additionally, the stream parsing mode can be explicitly enabled in the following places: - Via `-promscrape.streamParse` command-line flag. In this case all the scrape targets defined in the file pointed by `-promscrape.config` are scraped in stream parsing mode. - Via `stream_parse: true` option at `scrape_configs` section. In this case all the scrape targets defined in this section are scraped in stream parsing mode. @@ -710,6 +712,9 @@ See the docs at https://docs.victoriametrics.com/vmagent.html . -csvTrimTimestamp duration Trim timestamps when importing csv data to this duration. Minimum practical duration is 1ms. Higher duration (i.e. 1s) may be used for reducing disk space usage for timestamp data (default 1ms) + -datadog.maxInsertRequestSize size + The maximum size in bytes of a single DataDog POST request to /api/v1/series + Supports the following optional suffixes for size values: KB, MB, GB, KiB, MiB, GiB (default 67108864) -dryRun Whether to check only config files without running vmagent. The following files are checked: -promscrape.config, -remoteWrite.relabelConfig, -remoteWrite.urlRelabelConfig . Unknown config entries are allowed in -promscrape.config by default. This can be changed with -promscrape.config.strictParse -enableTCP6 @@ -857,6 +862,9 @@ See the docs at https://docs.victoriametrics.com/vmagent.html . -promscrape.maxScrapeSize size The maximum size of scrape response in bytes to process from Prometheus targets. Bigger responses are rejected Supports the following optional suffixes for size values: KB, MB, GB, KiB, MiB, GiB (default 16777216) + -promscrape.minResponseSizeForStreamParse size + The minimum target response size for automatic switching to stream parsing mode, which can reduce memory usage. See https://docs.victoriametrics.com/vmagent.html#stream-parsing-mode + Supports the following optional suffixes for size values: KB, MB, GB, KiB, MiB, GiB (default 1000000) -promscrape.noStaleMarkers Whether to disable sending Prometheus stale markers for metrics when scrape target disappears. This option may reduce memory usage if stale markers aren't needed for your setup. See also https://docs.victoriametrics.com/vmagent.html#stream-parsing-mode -promscrape.openstackSDCheckInterval duration diff --git a/lib/promscrape/scrapework.go b/lib/promscrape/scrapework.go index d2b1ec1871..73d6e0b68f 100644 --- a/lib/promscrape/scrapework.go +++ b/lib/promscrape/scrapework.go @@ -13,6 +13,7 @@ import ( "github.com/VictoriaMetrics/VictoriaMetrics/lib/bloomfilter" "github.com/VictoriaMetrics/VictoriaMetrics/lib/bytesutil" "github.com/VictoriaMetrics/VictoriaMetrics/lib/decimal" + "github.com/VictoriaMetrics/VictoriaMetrics/lib/flagutil" "github.com/VictoriaMetrics/VictoriaMetrics/lib/leveledbytebufferpool" "github.com/VictoriaMetrics/VictoriaMetrics/lib/logger" "github.com/VictoriaMetrics/VictoriaMetrics/lib/promauth" @@ -28,8 +29,9 @@ import ( var ( suppressScrapeErrors = flag.Bool("promscrape.suppressScrapeErrors", false, "Whether to suppress scrape errors logging. "+ "The last error for each target is always available at '/targets' page even if scrape errors logging is suppressed") - noStaleMarkers = flag.Bool("promscrape.noStaleMarkers", false, "Whether to disable sending Prometheus stale markers for metrics when scrape target disappears. This option may reduce memory usage if stale markers aren't needed for your setup. See also https://docs.victoriametrics.com/vmagent.html#stream-parsing-mode") - seriesLimitPerTarget = flag.Int("promscrape.seriesLimitPerTarget", 0, "Optional limit on the number of unique time series a single scrape target can expose. See https://docs.victoriametrics.com/vmagent.html#cardinality-limiter for more info") + noStaleMarkers = flag.Bool("promscrape.noStaleMarkers", false, "Whether to disable sending Prometheus stale markers for metrics when scrape target disappears. This option may reduce memory usage if stale markers aren't needed for your setup. See also https://docs.victoriametrics.com/vmagent.html#stream-parsing-mode") + seriesLimitPerTarget = flag.Int("promscrape.seriesLimitPerTarget", 0, "Optional limit on the number of unique time series a single scrape target can expose. See https://docs.victoriametrics.com/vmagent.html#cardinality-limiter for more info") + minResponseSizeForStreamParse = flagutil.NewBytes("promscrape.minResponseSizeForStreamParse", 1e6, "The minimum target response size for automatic switching to stream parsing mode, which can reduce memory usage. See https://docs.victoriametrics.com/vmagent.html#stream-parsing-mode") ) // ScrapeWork represents a unit of work for scraping Prometheus metrics. @@ -115,6 +117,11 @@ type ScrapeWork struct { jobNameOriginal string } +func (sw *ScrapeWork) canUseStreamParse() bool { + // Stream parsing mode cannot be used if SampleLimit or SeriesLimit is set. + return sw.SampleLimit <= 0 && sw.SeriesLimit <= 0 +} + // key returns unique identifier for the given sw. // // it can be used for comparing for equality for two ScrapeWork objects. @@ -291,9 +298,9 @@ var ( ) func (sw *scrapeWork) scrapeInternal(scrapeTimestamp, realTimestamp int64) error { - if *streamParse || sw.Config.StreamParse { + if (sw.Config.canUseStreamParse() && sw.prevBodyLen >= minResponseSizeForStreamParse.N) || *streamParse || sw.Config.StreamParse { // Read data from scrape targets in streaming manner. - // This case is optimized for targets exposing millions and more of metrics per target. + // This case is optimized for targets exposing more than ten thousand of metrics per target. return sw.scrapeStream(scrapeTimestamp, realTimestamp) } @@ -355,15 +362,23 @@ func (sw *scrapeWork) scrapeInternal(scrapeTimestamp, realTimestamp int64) error sw.addAutoTimeseries(wc, "scrape_timeout_seconds", sw.Config.ScrapeTimeout.Seconds(), scrapeTimestamp) sw.pushData(&wc.writeRequest) sw.prevLabelsLen = len(wc.labels) - wc.reset() - writeRequestCtxPool.Put(wc) - // body must be released only after wc is released, since wc refers to body. sw.prevBodyLen = len(body.B) + wc.reset() + if len(body.B) < minResponseSizeForStreamParse.N { + // Return wc to the pool if the parsed response size was smaller than -promscrape.minResponseSizeForStreamParse + // This should reduce memory usage when scraping targets with big responses. + writeRequestCtxPool.Put(wc) + } + // body must be released only after wc is released, since wc refers to body. if !areIdenticalSeries { sw.sendStaleSeries(bodyString, scrapeTimestamp, false) } - sw.lastScrape = append(sw.lastScrape[:0], bodyString...) - leveledbytebufferpool.Put(body) + if len(body.B) < minResponseSizeForStreamParse.N { + // Save body to sw.lastScrape and return it to the pool only if its size is smaller than -promscrape.minResponseSizeForStreamParse + // This should reduce memory usage when scraping targets which return big responses. + sw.lastScrape = append(sw.lastScrape[:0], bodyString...) + leveledbytebufferpool.Put(body) + } tsmGlobal.Update(sw.Config, sw.ScrapeGroup, up == 1, realTimestamp, int64(duration*1000), samplesScraped, err) return err } @@ -432,6 +447,7 @@ func (sw *scrapeWork) scrapeStream(scrapeTimestamp, realTimestamp int64) error { sw.addAutoTimeseries(wc, "scrape_timeout_seconds", sw.Config.ScrapeTimeout.Seconds(), scrapeTimestamp) sw.pushData(&wc.writeRequest) sw.prevLabelsLen = len(wc.labels) + sw.prevBodyLen = int(responseSize) wc.reset() writeRequestCtxPool.Put(wc) tsmGlobal.Update(sw.Config, sw.ScrapeGroup, up == 1, realTimestamp, int64(duration*1000), samplesScraped, err) From 1ac12597fafde611e600ac6e28088a9cdbf3e545 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Thu, 14 Oct 2021 12:50:10 +0300 Subject: [PATCH 25/77] docs/FAQ.md: add an entry explaining why MetricsQL isn't 100% compatible with PromQL --- docs/FAQ.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/FAQ.md b/docs/FAQ.md index 5696263f30..f93e2bfefb 100644 --- a/docs/FAQ.md +++ b/docs/FAQ.md @@ -286,6 +286,11 @@ High cardinality usually means high number of [active time series](#what-is-acti VictoriaMetrics maintains in-memory cache for mapping of [active time series](#what-is-active-time-series) into internal series ids. The cache size depends on the available memory for VictoriaMetrics in the host system. If the information about all the active time series doesn't fit the cache, then VictoriaMetrics needs to read and unpack the information from disk on every incoming sample for time series missing in the cache. This operation is much slower than the cache lookup, so such insert is named `slow insert`. High percentage of slow inserts on the [official dashboard for VictoriaMetrics](https://docs.victoriametrics.com/#monitoring) indicates on memory shortage for the current number of [active time series](#what-is-active-time-series). Such a condition usually leads to significant slowdown for data ingestion, to significantly increased disk IO and CPU usage. The solution is to add more memory or to reduce the number of [active time series](#what-is-active-time-series). The `/api/v1/status/tsdb` page can be helpful for locating the source of high number of active time seriess - see [these docs](https://docs.victoriametrics.com/#tsdb-stats). +## Why MetricsQL isn't 100% compatible with PromQL? + +MetricsQL provides better user experience than PromQL. It fixes a few annoying issues in PromQL, so it cannot be 100% compatible. See [this article](https://medium.com/@romanhavronenko/victoriametrics-promql-compliance-d4318203f51e) for details. + + ## How to migrate data from Prometheus to VictoriaMetrics? Please see [these docs](https://docs.victoriametrics.com/vmctl.html#migrating-data-from-prometheus). From 78425561ce1a80ba634345f5bc76f89732d4cf64 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Thu, 14 Oct 2021 14:37:44 +0300 Subject: [PATCH 26/77] docs/CHANGELOG.md: document the change at 7fcbd3fa4b8501ce535b54576b33f8ce8d99c991 --- docs/CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 22ce7337a0..e59773baa2 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -14,7 +14,8 @@ sort: 15 * FEATURE: add trigonometric functions, which are going to be added in [Prometheus 2.31](https://github.com/prometheus/prometheus/pull/9239): [acosh](https://docs.victoriametrics.com/MetricsQL.html#acosh), [asinh](https://docs.victoriametrics.com/MetricsQL.html#asinh), [atan](https://docs.victoriametrics.com/MetricsQL.html#atan), [atanh](https://docs.victoriametrics.com/MetricsQL.html#atanh), [cosh](https://docs.victoriametrics.com/MetricsQL.html#cosh), [deg](https://docs.victoriametrics.com/MetricsQL.html#deg), [rad](https://docs.victoriametrics.com/MetricsQL.html#rad), [sinh](https://docs.victoriametrics.com/MetricsQL.html#sinh), [tan](https://docs.victoriametrics.com/MetricsQL.html#tan), [tanh](https://docs.victoriametrics.com/MetricsQL.html#tanh). Also add `atan2` binary operator. See [this pull request](https://github.com/prometheus/prometheus/pull/9248). * FEATURE: consistently return the same set of time series from [limitk](https://docs.victoriametrics.com/MetricsQL.html#limitk) function. This improves the usability of periodically refreshed graphs. -* BUGFIX: vmstorage: fix `unaligned 64-bit atomic operation` panic on 32-bit architectures (arm and 386). The panic has been introduced in v1.67.0 +* BUGFIX: vmstorage: fix `unaligned 64-bit atomic operation` panic on 32-bit architectures (arm and 386). The panic has been introduced in v1.67.0. +* BUGFIX: vmalert, vmauth: prevent from frequent closing of TCP connections established to backends under high load. This should reduce the number of TCP sockets in `TIME_WAIT` state at `vmalert` and `vmauth` under high load. See [this pull request](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/1704). ## [v1.67.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.67.0) From 0db0410237110110ad0b17e7baf6a04aab22e9f4 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Thu, 14 Oct 2021 16:22:20 +0300 Subject: [PATCH 27/77] docs/FAQ.md: improve wording on why MetricsQL isnt 100% compatible with PromQL --- docs/FAQ.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/FAQ.md b/docs/FAQ.md index f93e2bfefb..cdaecef68d 100644 --- a/docs/FAQ.md +++ b/docs/FAQ.md @@ -288,7 +288,7 @@ VictoriaMetrics maintains in-memory cache for mapping of [active time series](#w ## Why MetricsQL isn't 100% compatible with PromQL? -MetricsQL provides better user experience than PromQL. It fixes a few annoying issues in PromQL, so it cannot be 100% compatible. See [this article](https://medium.com/@romanhavronenko/victoriametrics-promql-compliance-d4318203f51e) for details. +[MetricsQL](https://docs.victoriametrics.com/MetricsQL.html) provides better user experience than PromQL. It fixes a few annoying issues in PromQL. This prevents MetricsQL to be 100% compatible with PromQL. See [this article](https://medium.com/@romanhavronenko/victoriametrics-promql-compliance-d4318203f51e) for details. ## How to migrate data from Prometheus to VictoriaMetrics? From f6d33596ff6aa02856ddcbb29308084d7d948917 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Fri, 15 Oct 2021 12:26:49 +0300 Subject: [PATCH 28/77] lib/promscrape/discovery/kubernetes: rename endpointslices.go -> endpointslice.go in order to be consistent with EndpointSlice struct name This is a follow-up for 31b42b30b656cd3a3c3fed768eabbae1a8363ac5 --- .../discovery/kubernetes/{endpointslices.go => endpointslice.go} | 0 .../kubernetes/{endpointslices_test.go => endpointslice_test.go} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename lib/promscrape/discovery/kubernetes/{endpointslices.go => endpointslice.go} (100%) rename lib/promscrape/discovery/kubernetes/{endpointslices_test.go => endpointslice_test.go} (100%) diff --git a/lib/promscrape/discovery/kubernetes/endpointslices.go b/lib/promscrape/discovery/kubernetes/endpointslice.go similarity index 100% rename from lib/promscrape/discovery/kubernetes/endpointslices.go rename to lib/promscrape/discovery/kubernetes/endpointslice.go diff --git a/lib/promscrape/discovery/kubernetes/endpointslices_test.go b/lib/promscrape/discovery/kubernetes/endpointslice_test.go similarity index 100% rename from lib/promscrape/discovery/kubernetes/endpointslices_test.go rename to lib/promscrape/discovery/kubernetes/endpointslice_test.go From 9866dd95c14ae450c71ddc538aedc9a43df31273 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Fri, 15 Oct 2021 15:26:22 +0300 Subject: [PATCH 29/77] lib/promscrape: store the full response in stream parsing mode in scrapeWork.lastScrape byte slice This allows sending staleness marks and properly calculate scrape_series_added metric in stream parsing mode at the cost of the increased memory usage, since now the potentially big response is kept in the lastScrape byte slice per each scrapeWork. In practice the memory usage increase shouldn't be big, since the response size is usually much smaller than the parsed metrics from this response after the relabeling, which usually adds a big pile of target-specific labels per each metric. --- app/vmagent/README.md | 2 +- docs/CHANGELOG.md | 4 ++- docs/vmagent.md | 2 +- lib/promscrape/scrapework.go | 69 +++++++++++++++++++++++++++--------- 4 files changed, 58 insertions(+), 19 deletions(-) diff --git a/app/vmagent/README.md b/app/vmagent/README.md index 8c296d31d7..1abe1e4a32 100644 --- a/app/vmagent/README.md +++ b/app/vmagent/README.md @@ -302,7 +302,7 @@ You can read more about relabeling in the following articles: * If the scrape target is removed from the list of targets, then stale markers are sent for all the metrics scraped from this target. * Stale markers are sent for all the scraped metrics on graceful shutdown of `vmagent`. -Prometheus staleness markers aren't sent to `-remoteWrite.url` in [stream parsing mode](#stream-parsing-mode) or if `-promscrape.noStaleMarkers` command-line is set. +Prometheus staleness markers aren't sent to `-remoteWrite.url` if `-promscrape.noStaleMarkers` command-line flag is set. ## Stream parsing mode diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index e59773baa2..e06d72af93 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -9,7 +9,9 @@ sort: 15 * FEATURE: vmagent: expose `-promscrape.config` contents at `/config` page as Prometheus does. See [this feature request](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1695). * FEATURE: vmagent: add `show original labels` button per each scrape target displayed at `http://vmagent;8429/targets` page. This should improve debuggability for service discovery and relabeling issues similar to [this one](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1664). See [this feature request](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1698). * FEATURE: vmagent: shard targets among cluster nodes after the relabeling is applied. This should guarantee that targets with the same set of labels go to the same `vmagent` node in the cluster. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1687). -* FEATURE: vmagent: add `-promscrape.minResponseSizeForStreamParse` command-line flag, which can be used for instructing `vmagent` to automatically switch to [stream parsing mode](https://docs.victoriametrics.com/vmagent.html#stream-parsing-mode) for scrape targets with big responses. This should reduce memory usage when `vmagent` scrapes targets with non-uniform response sizes (this is the case in Kubernetes monitoring). +* FEATURE: vmagent: atomatically switch to [stream parsing mode](https://docs.victoriametrics.com/vmagent.html#stream-parsing-mode) if the response from the given target exceeds the command-line flag value `-promscrape.minResponseSizeForStreamParse`. This should reduce memory usage when `vmagent` scrapes targets with non-uniform response sizes (this is the case in Kubernetes monitoring). +* FEATURE: vmagent: send Prometheus-like staleness marks in [stream parsing mode](https://docs.victoriametrics.com/vmagent.html#stream-parsing-mode). Previously staleness marks wern't sent in stream parsing mode. See [these docs](https://docs.victoriametrics.com/vmagent.html#prometheus-staleness-markers) for details. +* FEATURE: vmagent: properly calculate `scrape_series_added` metric for targets in [stream parsing mode](https://docs.victoriametrics.com/vmagent.html#stream-parsing-mode). Previously it was set to 0 in stream parsing mode. See [more details about this metric](https://prometheus.io/docs/concepts/jobs_instances/#automatically-generated-labels-and-time-series). * FEATURE: vmagent: return error if `sample_limit` or `series_limit` options are set when [stream parsing mode](https://docs.victoriametrics.com/vmagent.html#stream-parsing-mode) is enabled, since these limits cannot be applied in stream parsing mode. * FEATURE: add trigonometric functions, which are going to be added in [Prometheus 2.31](https://github.com/prometheus/prometheus/pull/9239): [acosh](https://docs.victoriametrics.com/MetricsQL.html#acosh), [asinh](https://docs.victoriametrics.com/MetricsQL.html#asinh), [atan](https://docs.victoriametrics.com/MetricsQL.html#atan), [atanh](https://docs.victoriametrics.com/MetricsQL.html#atanh), [cosh](https://docs.victoriametrics.com/MetricsQL.html#cosh), [deg](https://docs.victoriametrics.com/MetricsQL.html#deg), [rad](https://docs.victoriametrics.com/MetricsQL.html#rad), [sinh](https://docs.victoriametrics.com/MetricsQL.html#sinh), [tan](https://docs.victoriametrics.com/MetricsQL.html#tan), [tanh](https://docs.victoriametrics.com/MetricsQL.html#tanh). Also add `atan2` binary operator. See [this pull request](https://github.com/prometheus/prometheus/pull/9248). * FEATURE: consistently return the same set of time series from [limitk](https://docs.victoriametrics.com/MetricsQL.html#limitk) function. This improves the usability of periodically refreshed graphs. diff --git a/docs/vmagent.md b/docs/vmagent.md index 7e4afd52f0..beb6df8120 100644 --- a/docs/vmagent.md +++ b/docs/vmagent.md @@ -306,7 +306,7 @@ You can read more about relabeling in the following articles: * If the scrape target is removed from the list of targets, then stale markers are sent for all the metrics scraped from this target. * Stale markers are sent for all the scraped metrics on graceful shutdown of `vmagent`. -Prometheus staleness markers aren't sent to `-remoteWrite.url` in [stream parsing mode](#stream-parsing-mode) or if `-promscrape.noStaleMarkers` command-line is set. +Prometheus staleness markers aren't sent to `-remoteWrite.url` if `-promscrape.noStaleMarkers` command-line flag is set. ## Stream parsing mode diff --git a/lib/promscrape/scrapework.go b/lib/promscrape/scrapework.go index 73d6e0b68f..0624abbab7 100644 --- a/lib/promscrape/scrapework.go +++ b/lib/promscrape/scrapework.go @@ -5,6 +5,7 @@ import ( "fmt" "math" "math/bits" + "runtime" "strconv" "strings" "sync" @@ -117,8 +118,9 @@ type ScrapeWork struct { jobNameOriginal string } -func (sw *ScrapeWork) canUseStreamParse() bool { - // Stream parsing mode cannot be used if SampleLimit or SeriesLimit is set. +func (sw *ScrapeWork) canSwitchToStreamParseMode() bool { + // Deny switching to stream parse mode if `sample_limit` or `series_limit` options are set, + // since these limits cannot be applied in stream parsing mode. return sw.SampleLimit <= 0 && sw.SeriesLimit <= 0 } @@ -297,8 +299,15 @@ var ( pushDataDuration = metrics.NewHistogram("vm_promscrape_push_data_duration_seconds") ) +func (sw *scrapeWork) mustSwitchToStreamParseMode(responseSize int) bool { + if minResponseSizeForStreamParse.N <= 0 { + return false + } + return sw.Config.canSwitchToStreamParseMode() && responseSize >= minResponseSizeForStreamParse.N +} + func (sw *scrapeWork) scrapeInternal(scrapeTimestamp, realTimestamp int64) error { - if (sw.Config.canUseStreamParse() && sw.prevBodyLen >= minResponseSizeForStreamParse.N) || *streamParse || sw.Config.StreamParse { + if sw.mustSwitchToStreamParseMode(sw.prevBodyLen) || *streamParse || sw.Config.StreamParse { // Read data from scrape targets in streaming manner. // This case is optimized for targets exposing more than ten thousand of metrics per target. return sw.scrapeStream(scrapeTimestamp, realTimestamp) @@ -364,7 +373,8 @@ func (sw *scrapeWork) scrapeInternal(scrapeTimestamp, realTimestamp int64) error sw.prevLabelsLen = len(wc.labels) sw.prevBodyLen = len(body.B) wc.reset() - if len(body.B) < minResponseSizeForStreamParse.N { + canReturnToPool := !sw.mustSwitchToStreamParseMode(len(body.B)) + if canReturnToPool { // Return wc to the pool if the parsed response size was smaller than -promscrape.minResponseSizeForStreamParse // This should reduce memory usage when scraping targets with big responses. writeRequestCtxPool.Put(wc) @@ -372,11 +382,11 @@ func (sw *scrapeWork) scrapeInternal(scrapeTimestamp, realTimestamp int64) error // body must be released only after wc is released, since wc refers to body. if !areIdenticalSeries { sw.sendStaleSeries(bodyString, scrapeTimestamp, false) - } - if len(body.B) < minResponseSizeForStreamParse.N { - // Save body to sw.lastScrape and return it to the pool only if its size is smaller than -promscrape.minResponseSizeForStreamParse - // This should reduce memory usage when scraping targets which return big responses. sw.lastScrape = append(sw.lastScrape[:0], bodyString...) + } + if canReturnToPool { + // Return wc to the pool only if its size is smaller than -promscrape.minResponseSizeForStreamParse + // This should reduce memory usage when scraping targets which return big responses. leveledbytebufferpool.Put(body) } tsmGlobal.Update(sw.Config, sw.ScrapeGroup, up == 1, realTimestamp, int64(duration*1000), samplesScraped, err) @@ -389,18 +399,33 @@ func (sw *scrapeWork) pushData(wr *prompbmarshal.WriteRequest) { pushDataDuration.UpdateDuration(startTime) } +type streamBodyReader struct { + sr *streamReader + body []byte +} + +func (sbr *streamBodyReader) Read(b []byte) (int, error) { + n, err := sbr.sr.Read(b) + sbr.body = append(sbr.body, b[:n]...) + return n, err +} + func (sw *scrapeWork) scrapeStream(scrapeTimestamp, realTimestamp int64) error { samplesScraped := 0 samplesPostRelabeling := 0 - responseSize := int64(0) wc := writeRequestCtxPool.Get(sw.prevLabelsLen) + // Do not pool sbr in order to reduce memory usage when scraping big responses. + sbr := &streamBodyReader{ + body: make([]byte, 0, len(sw.lastScrape)), + } sr, err := sw.GetStreamReader() if err != nil { err = fmt.Errorf("cannot read data: %s", err) } else { var mu sync.Mutex - err = parser.ParseStream(sr, scrapeTimestamp, false, func(rows []parser.Row) error { + sbr.sr = sr + err = parser.ParseStream(sbr, scrapeTimestamp, false, func(rows []parser.Row) error { mu.Lock() defer mu.Unlock() samplesScraped += len(rows) @@ -421,15 +446,17 @@ func (sw *scrapeWork) scrapeStream(scrapeTimestamp, realTimestamp int64) error { wc.resetNoRows() return nil }, sw.logError) - responseSize = sr.bytesRead sr.MustClose() } + bodyString := bytesutil.ToUnsafeString(sbr.body) + lastScrape := bytesutil.ToUnsafeString(sw.lastScrape) + areIdenticalSeries := parser.AreIdenticalSeriesFast(lastScrape, bodyString) scrapedSamples.Update(float64(samplesScraped)) endTimestamp := time.Now().UnixNano() / 1e6 duration := float64(endTimestamp-realTimestamp) / 1e3 scrapeDuration.Update(duration) - scrapeResponseSize.Update(float64(responseSize)) + scrapeResponseSize.Update(float64(len(bodyString))) up := 1 if err != nil { if samplesScraped == 0 { @@ -437,19 +464,29 @@ func (sw *scrapeWork) scrapeStream(scrapeTimestamp, realTimestamp int64) error { } scrapesFailed.Inc() } + seriesAdded := 0 + if !areIdenticalSeries { + // The returned value for seriesAdded may be bigger than the real number of added series + // if some series were removed during relabeling. + // This is a trade-off between performance and accuracy. + seriesAdded = sw.getSeriesAdded(bodyString) + } sw.addAutoTimeseries(wc, "up", float64(up), scrapeTimestamp) sw.addAutoTimeseries(wc, "scrape_duration_seconds", duration, scrapeTimestamp) sw.addAutoTimeseries(wc, "scrape_samples_scraped", float64(samplesScraped), scrapeTimestamp) sw.addAutoTimeseries(wc, "scrape_samples_post_metric_relabeling", float64(samplesPostRelabeling), scrapeTimestamp) - // scrape_series_added isn't calculated in streaming mode, - // since it may need unlimited amounts of memory when scraping targets with millions of exposed metrics. - sw.addAutoTimeseries(wc, "scrape_series_added", 0, scrapeTimestamp) + sw.addAutoTimeseries(wc, "scrape_series_added", float64(seriesAdded), scrapeTimestamp) sw.addAutoTimeseries(wc, "scrape_timeout_seconds", sw.Config.ScrapeTimeout.Seconds(), scrapeTimestamp) sw.pushData(&wc.writeRequest) sw.prevLabelsLen = len(wc.labels) - sw.prevBodyLen = int(responseSize) + sw.prevBodyLen = len(bodyString) wc.reset() writeRequestCtxPool.Put(wc) + if !areIdenticalSeries { + sw.sendStaleSeries(bodyString, scrapeTimestamp, false) + sw.lastScrape = append(sw.lastScrape[:0], bodyString...) + } + runtime.KeepAlive(sbr) // this is needed in order to prevent from GC'ing data pointed by bodyString tsmGlobal.Update(sw.Config, sw.ScrapeGroup, up == 1, realTimestamp, int64(duration*1000), samplesScraped, err) // Do not track active series in streaming mode, since this may need too big amounts of memory // when the target exports too big number of metrics. From 32793adbd9969b643ebf1d681f4aeff172675140 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Sat, 16 Oct 2021 12:58:34 +0300 Subject: [PATCH 30/77] lib/promscrape: store the last scraped response in compressed form if its size exceeds -promscrape.minResponseSizeForStreamParse This should reduce memory usage when scraping targets with big response bodies. --- lib/promscrape/scrapework.go | 67 +++++++++++++++++++++++++++++------- 1 file changed, 54 insertions(+), 13 deletions(-) diff --git a/lib/promscrape/scrapework.go b/lib/promscrape/scrapework.go index 0624abbab7..517fd0b4e1 100644 --- a/lib/promscrape/scrapework.go +++ b/lib/promscrape/scrapework.go @@ -5,7 +5,6 @@ import ( "fmt" "math" "math/bits" - "runtime" "strconv" "strings" "sync" @@ -14,6 +13,7 @@ import ( "github.com/VictoriaMetrics/VictoriaMetrics/lib/bloomfilter" "github.com/VictoriaMetrics/VictoriaMetrics/lib/bytesutil" "github.com/VictoriaMetrics/VictoriaMetrics/lib/decimal" + "github.com/VictoriaMetrics/VictoriaMetrics/lib/encoding" "github.com/VictoriaMetrics/VictoriaMetrics/lib/flagutil" "github.com/VictoriaMetrics/VictoriaMetrics/lib/leveledbytebufferpool" "github.com/VictoriaMetrics/VictoriaMetrics/lib/logger" @@ -209,6 +209,46 @@ type scrapeWork struct { // lastScrape holds the last response from scrape target. lastScrape []byte + + // lastScrapeCompressed is used for storing the compressed lastScrape between scrapes + // in stream parsing mode in order to reduce memory usage when the lastScrape size + // equals to or exceeds -promscrape.minResponseSizeForStreamParse + lastScrapeCompressed []byte +} + +func (sw *scrapeWork) loadLastScrape() { + if len(sw.lastScrapeCompressed) == 0 { + // The lastScrape is already stored in sw.lastScrape + return + } + b, err := encoding.DecompressZSTD(sw.lastScrape[:0], sw.lastScrapeCompressed) + if err != nil { + logger.Panicf("BUG: cannot unpack compressed previous response: %s", err) + } + sw.lastScrape = b +} + +func (sw *scrapeWork) storeLastScrape(lastScrape []byte) { + mustCompress := minResponseSizeForStreamParse.N > 0 && len(lastScrape) >= minResponseSizeForStreamParse.N + if mustCompress { + sw.lastScrapeCompressed = encoding.CompressZSTDLevel(sw.lastScrapeCompressed[:0], lastScrape, 1) + sw.lastScrape = nil + } else { + sw.lastScrape = append(sw.lastScrape[:0], lastScrape...) + sw.lastScrapeCompressed = nil + } +} + +func (sw *scrapeWork) finalizeLastScrape() { + if len(sw.lastScrapeCompressed) > 0 { + // The compressed lastScrape is available in sw.lastScrapeCompressed. + // Release the memory occupied by sw.lastScrape, so it won't be occupied between scrapes. + sw.lastScrape = nil + } + if len(sw.lastScrape) > 0 { + // Release the memory occupied by sw.lastScrapeCompressed, so it won't be occupied between scrapes. + sw.lastScrapeCompressed = nil + } } func (sw *scrapeWork) run(stopCh <-chan struct{}) { @@ -307,7 +347,7 @@ func (sw *scrapeWork) mustSwitchToStreamParseMode(responseSize int) bool { } func (sw *scrapeWork) scrapeInternal(scrapeTimestamp, realTimestamp int64) error { - if sw.mustSwitchToStreamParseMode(sw.prevBodyLen) || *streamParse || sw.Config.StreamParse { + if *streamParse || sw.Config.StreamParse || sw.mustSwitchToStreamParseMode(sw.prevBodyLen) { // Read data from scrape targets in streaming manner. // This case is optimized for targets exposing more than ten thousand of metrics per target. return sw.scrapeStream(scrapeTimestamp, realTimestamp) @@ -325,6 +365,7 @@ func (sw *scrapeWork) scrapeInternal(scrapeTimestamp, realTimestamp int64) error scrapeResponseSize.Update(float64(len(body.B))) up := 1 wc := writeRequestCtxPool.Get(sw.prevLabelsLen) + sw.loadLastScrape() bodyString := bytesutil.ToUnsafeString(body.B) lastScrape := bytesutil.ToUnsafeString(sw.lastScrape) areIdenticalSeries := parser.AreIdenticalSeriesFast(lastScrape, bodyString) @@ -371,10 +412,10 @@ func (sw *scrapeWork) scrapeInternal(scrapeTimestamp, realTimestamp int64) error sw.addAutoTimeseries(wc, "scrape_timeout_seconds", sw.Config.ScrapeTimeout.Seconds(), scrapeTimestamp) sw.pushData(&wc.writeRequest) sw.prevLabelsLen = len(wc.labels) - sw.prevBodyLen = len(body.B) + sw.prevBodyLen = len(bodyString) wc.reset() - canReturnToPool := !sw.mustSwitchToStreamParseMode(len(body.B)) - if canReturnToPool { + mustSwitchToStreamParse := sw.mustSwitchToStreamParseMode(len(bodyString)) + if !mustSwitchToStreamParse { // Return wc to the pool if the parsed response size was smaller than -promscrape.minResponseSizeForStreamParse // This should reduce memory usage when scraping targets with big responses. writeRequestCtxPool.Put(wc) @@ -382,9 +423,10 @@ func (sw *scrapeWork) scrapeInternal(scrapeTimestamp, realTimestamp int64) error // body must be released only after wc is released, since wc refers to body. if !areIdenticalSeries { sw.sendStaleSeries(bodyString, scrapeTimestamp, false) - sw.lastScrape = append(sw.lastScrape[:0], bodyString...) + sw.storeLastScrape(body.B) } - if canReturnToPool { + sw.finalizeLastScrape() + if !mustSwitchToStreamParse { // Return wc to the pool only if its size is smaller than -promscrape.minResponseSizeForStreamParse // This should reduce memory usage when scraping targets which return big responses. leveledbytebufferpool.Put(body) @@ -414,10 +456,8 @@ func (sw *scrapeWork) scrapeStream(scrapeTimestamp, realTimestamp int64) error { samplesScraped := 0 samplesPostRelabeling := 0 wc := writeRequestCtxPool.Get(sw.prevLabelsLen) - // Do not pool sbr in order to reduce memory usage when scraping big responses. - sbr := &streamBodyReader{ - body: make([]byte, 0, len(sw.lastScrape)), - } + // Do not pool sbr and do not pre-allocate sbr.body in order to reduce memory usage when scraping big responses. + sbr := &streamBodyReader{} sr, err := sw.GetStreamReader() if err != nil { @@ -448,6 +488,7 @@ func (sw *scrapeWork) scrapeStream(scrapeTimestamp, realTimestamp int64) error { }, sw.logError) sr.MustClose() } + sw.loadLastScrape() bodyString := bytesutil.ToUnsafeString(sbr.body) lastScrape := bytesutil.ToUnsafeString(sw.lastScrape) areIdenticalSeries := parser.AreIdenticalSeriesFast(lastScrape, bodyString) @@ -484,9 +525,9 @@ func (sw *scrapeWork) scrapeStream(scrapeTimestamp, realTimestamp int64) error { writeRequestCtxPool.Put(wc) if !areIdenticalSeries { sw.sendStaleSeries(bodyString, scrapeTimestamp, false) - sw.lastScrape = append(sw.lastScrape[:0], bodyString...) + sw.storeLastScrape(sbr.body) } - runtime.KeepAlive(sbr) // this is needed in order to prevent from GC'ing data pointed by bodyString + sw.finalizeLastScrape() tsmGlobal.Update(sw.Config, sw.ScrapeGroup, up == 1, realTimestamp, int64(duration*1000), samplesScraped, err) // Do not track active series in streaming mode, since this may need too big amounts of memory // when the target exports too big number of metrics. From cae174b11cea92ed88a7dab988711724beea780a Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Fri, 15 Oct 2021 22:26:09 +0300 Subject: [PATCH 31/77] app/vmselect/promql: typo fix in comment: didsn't -> didn't --- app/vmselect/promql/rollup.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/vmselect/promql/rollup.go b/app/vmselect/promql/rollup.go index 3056c73bf1..f540ba9bb3 100644 --- a/app/vmselect/promql/rollup.go +++ b/app/vmselect/promql/rollup.go @@ -1384,7 +1384,7 @@ func rollupIncreasePure(rfa *rollupFuncArg) float64 { prevValue = 0 } if len(values) == 0 { - // Assume the counter didsn't change since prevValue. + // Assume the counter didn't change since prevValue. return 0 } return values[len(values)-1] - prevValue From 06b0982d6bda390021ebc27a54d7eb6ef5d8bce6 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Sat, 16 Oct 2021 13:18:20 +0300 Subject: [PATCH 32/77] lib/promscrape: always initialize http client for stream parsing mode Stream parsing mode can be automatically enabled when scraping targets with big response bodies exceeding the -promscrape.minResponseSizeForStreamParse , so it must be always initialized. --- lib/promscrape/client.go | 56 +++++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 29 deletions(-) diff --git a/lib/promscrape/client.go b/lib/promscrape/client.go index a2ad7e4d6f..40fcf6be57 100644 --- a/lib/promscrape/client.go +++ b/lib/promscrape/client.go @@ -106,37 +106,35 @@ func newClient(sw *ScrapeWork) *client { MaxIdempotentRequestAttempts: 1, } var sc *http.Client - if *streamParse || sw.StreamParse { - var proxyURLFunc func(*http.Request) (*url.URL, error) - if proxyURL := sw.ProxyURL.URL(); proxyURL != nil { - proxyURLFunc = http.ProxyURL(proxyURL) - } - sc = &http.Client{ - Transport: &http.Transport{ - TLSClientConfig: tlsCfg, - Proxy: proxyURLFunc, - TLSHandshakeTimeout: 10 * time.Second, - IdleConnTimeout: 2 * sw.ScrapeInterval, - DisableCompression: *disableCompression || sw.DisableCompression, - DisableKeepAlives: *disableKeepAlive || sw.DisableKeepAlive, - DialContext: statStdDial, - MaxIdleConnsPerHost: 100, + var proxyURLFunc func(*http.Request) (*url.URL, error) + if proxyURL := sw.ProxyURL.URL(); proxyURL != nil { + proxyURLFunc = http.ProxyURL(proxyURL) + } + sc = &http.Client{ + Transport: &http.Transport{ + TLSClientConfig: tlsCfg, + Proxy: proxyURLFunc, + TLSHandshakeTimeout: 10 * time.Second, + IdleConnTimeout: 2 * sw.ScrapeInterval, + DisableCompression: *disableCompression || sw.DisableCompression, + DisableKeepAlives: *disableKeepAlive || sw.DisableKeepAlive, + DialContext: statStdDial, + MaxIdleConnsPerHost: 100, - // Set timeout for receiving the first response byte, - // since the duration for reading the full response can be much bigger because of stream parsing. - // See https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1017#issuecomment-767235047 - ResponseHeaderTimeout: sw.ScrapeTimeout, - }, - - // Set 30x bigger timeout than the sw.ScrapeTimeout, since the duration for reading the full response - // can be much bigger because of stream parsing. + // Set timeout for receiving the first response byte, + // since the duration for reading the full response can be much bigger because of stream parsing. // See https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1017#issuecomment-767235047 - Timeout: 30 * sw.ScrapeTimeout, - } - if sw.DenyRedirects { - sc.CheckRedirect = func(req *http.Request, via []*http.Request) error { - return http.ErrUseLastResponse - } + ResponseHeaderTimeout: sw.ScrapeTimeout, + }, + + // Set 30x bigger timeout than the sw.ScrapeTimeout, since the duration for reading the full response + // can be much bigger because of stream parsing. + // See https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1017#issuecomment-767235047 + Timeout: 30 * sw.ScrapeTimeout, + } + if sw.DenyRedirects { + sc.CheckRedirect = func(req *http.Request, via []*http.Request) error { + return http.ErrUseLastResponse } } return &client{ From 9761b7f3efaf4234606d5f0186617cf5fa3eb537 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Sat, 16 Oct 2021 18:20:01 +0300 Subject: [PATCH 33/77] vendor: update github.com/valyala/gozstd from v1.13.0 to v1.14.1 This should reduce memory usage in vmagent when compressing large scrape responses in stream parsing mode --- go.mod | 2 +- go.sum | 4 ++-- vendor/github.com/valyala/gozstd/gozstd.go | 18 +++++++++++++----- vendor/modules.txt | 2 +- 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/go.mod b/go.mod index cc5d909751..431dafc2af 100644 --- a/go.mod +++ b/go.mod @@ -27,7 +27,7 @@ require ( github.com/valyala/fastjson v1.6.3 github.com/valyala/fastrand v1.1.0 github.com/valyala/fasttemplate v1.2.1 - github.com/valyala/gozstd v1.13.0 + github.com/valyala/gozstd v1.14.1 github.com/valyala/quicktemplate v1.7.0 golang.org/x/net v0.0.0-20211011170408-caeb26a5c8c0 golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1 diff --git a/go.sum b/go.sum index a5f1ca7ff9..6d65065eef 100644 --- a/go.sum +++ b/go.sum @@ -958,8 +958,8 @@ github.com/valyala/fastrand v1.1.0/go.mod h1:HWqCzkrkg6QXT8V2EXWvXCoow7vLwOFN002 github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= github.com/valyala/fasttemplate v1.2.1 h1:TVEnxayobAdVkhQfrfes2IzOB6o+z4roRkPF52WA1u4= github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -github.com/valyala/gozstd v1.13.0 h1:M9qgbElBZsHlh8a4jjHO4lY42xLJeb+KWVBwFBAapRo= -github.com/valyala/gozstd v1.13.0/go.mod h1:y5Ew47GLlP37EkTB+B4s7r6A5rdaeB7ftbl9zoYiIPQ= +github.com/valyala/gozstd v1.14.1 h1:xkPAeHe8U/w/ocS6PywjkH406lKdratZuxhb1UTgO/s= +github.com/valyala/gozstd v1.14.1/go.mod h1:y5Ew47GLlP37EkTB+B4s7r6A5rdaeB7ftbl9zoYiIPQ= github.com/valyala/histogram v1.1.2/go.mod h1:CZAr6gK9dbD7hYx2s8WSPh0p5x5wETjC+2b3PJVtEdg= github.com/valyala/histogram v1.2.0 h1:wyYGAZZt3CpwUiIb9AU/Zbllg1llXyrtApRS815OLoQ= github.com/valyala/histogram v1.2.0/go.mod h1:Hb4kBwb4UxsaNbbbh+RRz8ZR6pdodR57tzWUS3BUzXY= diff --git a/vendor/github.com/valyala/gozstd/gozstd.go b/vendor/github.com/valyala/gozstd/gozstd.go index 4287778d50..cc9ffa4672 100644 --- a/vendor/github.com/valyala/gozstd/gozstd.go +++ b/vendor/github.com/valyala/gozstd/gozstd.go @@ -123,7 +123,6 @@ func compress(cctx, cctxDict *cctxWrapper, dst, src []byte, cd *CDict, compressi // All OK. return dst[:dstLen+compressedSize] } - if C.ZSTD_getErrorCode(result) != C.ZSTD_error_dstSize_tooSmall { // Unexpected error. panic(fmt.Errorf("BUG: unexpected error during compression with cd=%p: %s", cd, errStr(result))) @@ -139,7 +138,12 @@ func compress(cctx, cctxDict *cctxWrapper, dst, src []byte, cd *CDict, compressi result := compressInternal(cctx, cctxDict, dst[dstLen:dstLen+compressBound], src, cd, compressionLevel, true) compressedSize := int(result) - return dst[:dstLen+compressedSize] + dst = dst[:dstLen+compressedSize] + if cap(dst)-len(dst) > 4096 { + // Re-allocate dst in order to remove superflouos capacity and reduce memory usage. + dst = append([]byte{}, dst...) + } + return dst } func compressInternal(cctx, cctxDict *cctxWrapper, dst, src []byte, cd *CDict, compressionLevel int, mustSucceed bool) C.size_t { @@ -234,7 +238,7 @@ func decompress(dctx, dctxDict *dctxWrapper, dst, src []byte, dd *DDict) ([]byte } dstLen := len(dst) - if cap(dst)-dstLen >= len(src) { + if cap(dst) > dstLen { // Fast path - try decompressing without dst resize. result := decompressInternal(dctx, dctxDict, dst[dstLen:cap(dst)], src, dd) decompressedSize := int(result) @@ -270,8 +274,12 @@ func decompress(dctx, dctxDict *dctxWrapper, dst, src []byte, dd *DDict) ([]byte result := decompressInternal(dctx, dctxDict, dst[dstLen:dstLen+decompressBound], src, dd) decompressedSize := int(result) if decompressedSize >= 0 { - // All OK. - return dst[:dstLen+decompressedSize], nil + dst = dst[:dstLen+decompressedSize] + if cap(dst)-len(dst) > 4096 { + // Re-allocate dst in order to remove superflouos capacity and reduce memory usage. + dst = append([]byte{}, dst...) + } + return dst, nil } // Error during decompression. diff --git a/vendor/modules.txt b/vendor/modules.txt index 074db8b354..ad86590ee6 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -208,7 +208,7 @@ github.com/valyala/fastrand # github.com/valyala/fasttemplate v1.2.1 ## explicit github.com/valyala/fasttemplate -# github.com/valyala/gozstd v1.13.0 +# github.com/valyala/gozstd v1.14.1 ## explicit github.com/valyala/gozstd # github.com/valyala/histogram v1.2.0 From c055bc478cfb5b32e614c31754b617c15b0789e3 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Sat, 16 Oct 2021 18:47:13 +0300 Subject: [PATCH 34/77] lib/promscrape: expose `promscrape_series_limit_max_series` and `promscrape_series_limit_current_series` metrics per each scrape target with the enabled unique series limiter --- docs/CHANGELOG.md | 1 + lib/promscrape/scrapework.go | 25 ++++++++++++++++++++++--- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index e06d72af93..e0fc6e5cd9 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -12,6 +12,7 @@ sort: 15 * FEATURE: vmagent: atomatically switch to [stream parsing mode](https://docs.victoriametrics.com/vmagent.html#stream-parsing-mode) if the response from the given target exceeds the command-line flag value `-promscrape.minResponseSizeForStreamParse`. This should reduce memory usage when `vmagent` scrapes targets with non-uniform response sizes (this is the case in Kubernetes monitoring). * FEATURE: vmagent: send Prometheus-like staleness marks in [stream parsing mode](https://docs.victoriametrics.com/vmagent.html#stream-parsing-mode). Previously staleness marks wern't sent in stream parsing mode. See [these docs](https://docs.victoriametrics.com/vmagent.html#prometheus-staleness-markers) for details. * FEATURE: vmagent: properly calculate `scrape_series_added` metric for targets in [stream parsing mode](https://docs.victoriametrics.com/vmagent.html#stream-parsing-mode). Previously it was set to 0 in stream parsing mode. See [more details about this metric](https://prometheus.io/docs/concepts/jobs_instances/#automatically-generated-labels-and-time-series). +* FEATURE: vmagent: expose `promscrape_series_limit_max_series` and `promscrape_series_limit_current_series` metrics at `http://vmagent:8429/metrics` for scrape targets with the [enabled series limiter](https://docs.victoriametrics.com/vmagent.html#cardinality-limiter). * FEATURE: vmagent: return error if `sample_limit` or `series_limit` options are set when [stream parsing mode](https://docs.victoriametrics.com/vmagent.html#stream-parsing-mode) is enabled, since these limits cannot be applied in stream parsing mode. * FEATURE: add trigonometric functions, which are going to be added in [Prometheus 2.31](https://github.com/prometheus/prometheus/pull/9239): [acosh](https://docs.victoriametrics.com/MetricsQL.html#acosh), [asinh](https://docs.victoriametrics.com/MetricsQL.html#asinh), [atan](https://docs.victoriametrics.com/MetricsQL.html#atan), [atanh](https://docs.victoriametrics.com/MetricsQL.html#atanh), [cosh](https://docs.victoriametrics.com/MetricsQL.html#cosh), [deg](https://docs.victoriametrics.com/MetricsQL.html#deg), [rad](https://docs.victoriametrics.com/MetricsQL.html#rad), [sinh](https://docs.victoriametrics.com/MetricsQL.html#sinh), [tan](https://docs.victoriametrics.com/MetricsQL.html#tan), [tanh](https://docs.victoriametrics.com/MetricsQL.html#tanh). Also add `atan2` binary operator. See [this pull request](https://github.com/prometheus/prometheus/pull/9248). * FEATURE: consistently return the same set of time series from [limitk](https://docs.victoriametrics.com/MetricsQL.html#limitk) function. This improves the usability of periodically refreshed graphs. diff --git a/lib/promscrape/scrapework.go b/lib/promscrape/scrapework.go index 517fd0b4e1..fc95e8ce96 100644 --- a/lib/promscrape/scrapework.go +++ b/lib/promscrape/scrapework.go @@ -199,6 +199,9 @@ type scrapeWork struct { // Optional limiter on the number of unique series per scrape target. seriesLimiter *bloomfilter.Limiter + // Optional counter on the number of dropped samples if the limit on the number of unique series is set. + seriesLimiterRowsDroppedTotal *metrics.Counter + // prevBodyLen contains the previous response body length for the given scrape work. // It is used as a hint in order to reduce memory usage for body buffers. prevBodyLen int @@ -302,6 +305,13 @@ func (sw *scrapeWork) run(stopCh <-chan struct{}) { t := time.Now().UnixNano() / 1e6 sw.sendStaleSeries("", t, true) if sw.seriesLimiter != nil { + job := sw.Config.Job() + metrics.UnregisterMetric(fmt.Sprintf(`promscrape_series_limit_rows_dropped_total{scrape_job_original=%q,scrape_job=%q,scrape_target=%q}`, + sw.Config.jobNameOriginal, job, sw.Config.ScrapeURL)) + metrics.UnregisterMetric(fmt.Sprintf(`promscrape_series_limit_max_series{scrape_job_original=%q,scrape_job=%q,scrape_target=%q}`, + sw.Config.jobNameOriginal, job, sw.Config.ScrapeURL)) + metrics.UnregisterMetric(fmt.Sprintf(`promscrape_series_limit_current_series{scrape_job_original=%q,scrape_job=%q,scrape_target=%q}`, + sw.Config.jobNameOriginal, job, sw.Config.ScrapeURL)) sw.seriesLimiter.MustStop() } return @@ -615,22 +625,31 @@ func (sw *scrapeWork) applySeriesLimit(wc *writeRequestCtx) bool { seriesLimit = sw.Config.SeriesLimit } if sw.seriesLimiter == nil && seriesLimit > 0 { + job := sw.Config.Job() sw.seriesLimiter = bloomfilter.NewLimiter(seriesLimit, 24*time.Hour) + sw.seriesLimiterRowsDroppedTotal = metrics.GetOrCreateCounter(fmt.Sprintf(`promscrape_series_limit_rows_dropped_total{scrape_job_original=%q,scrape_job=%q,scrape_target=%q}`, + sw.Config.jobNameOriginal, job, sw.Config.ScrapeURL)) + _ = metrics.GetOrCreateGauge(fmt.Sprintf(`promscrape_series_limit_max_series{scrape_job_original=%q,scrape_job=%q,scrape_target=%q}`, + sw.Config.jobNameOriginal, job, sw.Config.ScrapeURL), func() float64 { + return float64(sw.seriesLimiter.MaxItems()) + }) + _ = metrics.GetOrCreateGauge(fmt.Sprintf(`promscrape_series_limit_current_series{scrape_job_original=%q,scrape_job=%q,scrape_target=%q}`, + sw.Config.jobNameOriginal, job, sw.Config.ScrapeURL), func() float64 { + return float64(sw.seriesLimiter.CurrentItems()) + }) } hsl := sw.seriesLimiter if hsl == nil { return false } dstSeries := wc.writeRequest.Timeseries[:0] - job := sw.Config.Job() limitExceeded := false for _, ts := range wc.writeRequest.Timeseries { h := sw.getLabelsHash(ts.Labels) if !hsl.Add(h) { // The limit on the number of hourly unique series per scrape target has been exceeded. // Drop the metric. - metrics.GetOrCreateCounter(fmt.Sprintf(`promscrape_series_limit_rows_dropped_total{scrape_job_original=%q,scrape_job=%q,scrape_target=%q}`, - sw.Config.jobNameOriginal, job, sw.Config.ScrapeURL)).Inc() + sw.seriesLimiterRowsDroppedTotal.Inc() limitExceeded = true continue } From ede9dd43e84034c1a8fc1080fabfe374b0f9155e Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Sat, 16 Oct 2021 19:10:38 +0300 Subject: [PATCH 35/77] docs/CaseStudies.md: add Percona case study --- README.md | 1 + docs/CaseStudies.md | 5 +++++ docs/README.md | 1 + docs/Single-server-VictoriaMetrics.md | 1 + 4 files changed, 8 insertions(+) diff --git a/README.md b/README.md index 001ff224ac..a57e5c1e70 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,7 @@ Case studies: * [Groove X](https://docs.victoriametrics.com/CaseStudies.html#groove-x) * [Idealo.de](https://docs.victoriametrics.com/CaseStudies.html#idealode) * [MHI Vestas Offshore Wind](https://docs.victoriametrics.com/CaseStudies.html#mhi-vestas-offshore-wind) +* [Percona](https://docs.victoriametrics.com/CaseStudies.html#percona) * [Sensedia](https://docs.victoriametrics.com/CaseStudies.html#sensedia) * [Synthesio](https://docs.victoriametrics.com/CaseStudies.html#synthesio) * [Wedos.com](https://docs.victoriametrics.com/CaseStudies.html#wedoscom) diff --git a/docs/CaseStudies.md b/docs/CaseStudies.md index c92ca829ba..778153b503 100644 --- a/docs/CaseStudies.md +++ b/docs/CaseStudies.md @@ -19,6 +19,7 @@ where you can chat with VictoriaMetrics users to get additional references, revi * [Groove X](#groove-x) * [Idealo.de](#idealode) * [MHI Vestas Offshore Wind](#mhi-vestas-offshore-wind) +* [Percona](#percona) * [Sensedia](#sensedia) * [Synthesio](#synthesio) * [Wedos.com](#wedoscom) @@ -351,6 +352,10 @@ Numbers with current, limited roll out: - Data size on disk: 800 GiB - Retention period: 3 years +## Percona + +[Percona](https://www.percona.com/) is a leader in providing best-of-breed enterprise-class support, consulting, managed services, training and software for MySQL®, MariaDB®, MongoDB®, PostgreSQL® and other open source databases in on-premises and cloud environments. Percona switched from Prometheus to VictoriaMetrics in the [Percona Monitoring and Management](https://www.percona.com/software/database-tools/percona-monitoring-and-management) product. This allowed [reducing resource usage](https://www.percona.com/blog/2020/12/23/observations-on-better-resource-usage-with-percona-monitoring-and-management-v2-12-0/) and [getting rid of complex firewall setup](https://www.percona.com/blog/2020/12/01/foiled-by-the-firewall-a-tale-of-transition-from-prometheus-to-victoriametrics/), while [improving user experience](https://www.percona.com/blog/2020/02/28/better-prometheus-rate-function-with-victoriametrics/). + ## Sensedia diff --git a/docs/README.md b/docs/README.md index 001ff224ac..a57e5c1e70 100644 --- a/docs/README.md +++ b/docs/README.md @@ -40,6 +40,7 @@ Case studies: * [Groove X](https://docs.victoriametrics.com/CaseStudies.html#groove-x) * [Idealo.de](https://docs.victoriametrics.com/CaseStudies.html#idealode) * [MHI Vestas Offshore Wind](https://docs.victoriametrics.com/CaseStudies.html#mhi-vestas-offshore-wind) +* [Percona](https://docs.victoriametrics.com/CaseStudies.html#percona) * [Sensedia](https://docs.victoriametrics.com/CaseStudies.html#sensedia) * [Synthesio](https://docs.victoriametrics.com/CaseStudies.html#synthesio) * [Wedos.com](https://docs.victoriametrics.com/CaseStudies.html#wedoscom) diff --git a/docs/Single-server-VictoriaMetrics.md b/docs/Single-server-VictoriaMetrics.md index 324bde5cfe..aef27f3f81 100644 --- a/docs/Single-server-VictoriaMetrics.md +++ b/docs/Single-server-VictoriaMetrics.md @@ -44,6 +44,7 @@ Case studies: * [Groove X](https://docs.victoriametrics.com/CaseStudies.html#groove-x) * [Idealo.de](https://docs.victoriametrics.com/CaseStudies.html#idealode) * [MHI Vestas Offshore Wind](https://docs.victoriametrics.com/CaseStudies.html#mhi-vestas-offshore-wind) +* [Percona](https://docs.victoriametrics.com/CaseStudies.html#percona) * [Sensedia](https://docs.victoriametrics.com/CaseStudies.html#sensedia) * [Synthesio](https://docs.victoriametrics.com/CaseStudies.html#synthesio) * [Wedos.com](https://docs.victoriametrics.com/CaseStudies.html#wedoscom) From 3e9ffb6e33090219f694538939c06d6a8be10613 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Sat, 16 Oct 2021 19:26:04 +0300 Subject: [PATCH 36/77] docs/CaseStudies.md: add AbiosGaming --- README.md | 1 + docs/CaseStudies.md | 20 ++++++++++++++++++++ docs/README.md | 1 + docs/Single-server-VictoriaMetrics.md | 1 + 4 files changed, 23 insertions(+) diff --git a/README.md b/README.md index a57e5c1e70..fe73ec11d7 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,7 @@ Enterprise binaries can be downloaded and evaluated for free from [the releases Case studies: +* [AbiosGaming](https://docs.victoriametrics.com/CaseStudies.html#abiosgaming) * [adidas](https://docs.victoriametrics.com/CaseStudies.html#adidas) * [Adsterra](https://docs.victoriametrics.com/CaseStudies.html#adsterra) * [ARNES](https://docs.victoriametrics.com/CaseStudies.html#arnes) diff --git a/docs/CaseStudies.md b/docs/CaseStudies.md index 778153b503..87903a28c8 100644 --- a/docs/CaseStudies.md +++ b/docs/CaseStudies.md @@ -7,6 +7,7 @@ sort: 11 Below please find public case studies and talks from VictoriaMetrics users. You can also join our [community Slack channel](https://slack.victoriametrics.com/) where you can chat with VictoriaMetrics users to get additional references, reviews and case studies. +* [AbiosGaming](#aboisgaming) * [adidas](#adidas) * [Adsterra](#adsterra) * [ARNES](#arnes) @@ -30,6 +31,25 @@ where you can chat with VictoriaMetrics users to get additional references, revi You can also read [articles about VictoriaMetrics from our users](https://docs.victoriametrics.com/Articles.html#third-party-articles-and-slides-about-victoriametrics). +## AbiosGaming + +[AbiosGaming](https://abiosgaming.com/) provides industry leading esports data and technology across the globe. + +> At Abios, we are running Grafana and Prometheus for our operational insights. We are collecting all sorts of operational metrics such as request latency, active WebSocket connections, and cache statistics to determine if things are working as we expect them to. + +> Prometheus explicitly recommends their users not to use high cardinality labels for their time-series data, which is exactly what we want to do. Prometheus is thus a poor solution to keep using. However, since we were already using Prometheus, we needed an alternative solution to be fully compatible with the Prometheus query language. + +> The options we decided to try were TimescaleDB together with Promscale to act as a remote write intermediary and VictoriaMetrics. In both cases we still used Prometheus Operator to launch Prometheus instances to scrape metrics and send them to the respective storage layers. + +> The biggest difference for our day-to-day operation is perhaps that VictoriaMetrics does not have a Write-Ahead log. The WAL has caused us trouble when Prometheus has experienced issues and starts to run out of RAM when replaying the WAL, thus entering a crash-loop. + +> All in all, we are quite impressed with VictoriaMetrics. Not only is the core time-series database well designed, easy to deploy and operate, and performant but the entire ecosystem around it seems to have been given an equal amount of love. There are utilities for things such as taking snapshots (backups) and storing to S3 (and reloading from S3), a Kubernetes Operator, and authentication proxies. It also provides a cluster deployment option if we were to scale up to those numbers. + +> From a usability point of view, VictoriaMetrics is the clear winner. Neither Prometheus nor TimescaleDB managed to do any kind of aggregations on our high cardinality metrics, whereas VictoriaMetrics does. + +See [the full article](https://abiosgaming.com/press/high-cardinality-aggregations/). + + ## adidas See our [slides](https://promcon.io/2019-munich/slides/remote-write-storage-wars.pdf) and [video](https://youtu.be/OsH6gPdxR4s) diff --git a/docs/README.md b/docs/README.md index a57e5c1e70..fe73ec11d7 100644 --- a/docs/README.md +++ b/docs/README.md @@ -28,6 +28,7 @@ Enterprise binaries can be downloaded and evaluated for free from [the releases Case studies: +* [AbiosGaming](https://docs.victoriametrics.com/CaseStudies.html#abiosgaming) * [adidas](https://docs.victoriametrics.com/CaseStudies.html#adidas) * [Adsterra](https://docs.victoriametrics.com/CaseStudies.html#adsterra) * [ARNES](https://docs.victoriametrics.com/CaseStudies.html#arnes) diff --git a/docs/Single-server-VictoriaMetrics.md b/docs/Single-server-VictoriaMetrics.md index aef27f3f81..73eb5cf5b2 100644 --- a/docs/Single-server-VictoriaMetrics.md +++ b/docs/Single-server-VictoriaMetrics.md @@ -32,6 +32,7 @@ Enterprise binaries can be downloaded and evaluated for free from [the releases Case studies: +* [AbiosGaming](https://docs.victoriametrics.com/CaseStudies.html#abiosgaming) * [adidas](https://docs.victoriametrics.com/CaseStudies.html#adidas) * [Adsterra](https://docs.victoriametrics.com/CaseStudies.html#adsterra) * [ARNES](https://docs.victoriametrics.com/CaseStudies.html#arnes) From 47c6baf5ea58f5fb1f2f7f7cda8e85cbae288593 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Sat, 16 Oct 2021 19:36:33 +0300 Subject: [PATCH 37/77] docs/CaseStudies.md: add a case study for Razorpay --- README.md | 1 + docs/CaseStudies.md | 27 ++++++++++++++++++++++++++- docs/README.md | 1 + docs/Single-server-VictoriaMetrics.md | 1 + 4 files changed, 29 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index fe73ec11d7..95efad218d 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,7 @@ Case studies: * [Groove X](https://docs.victoriametrics.com/CaseStudies.html#groove-x) * [Idealo.de](https://docs.victoriametrics.com/CaseStudies.html#idealode) * [MHI Vestas Offshore Wind](https://docs.victoriametrics.com/CaseStudies.html#mhi-vestas-offshore-wind) +* [Razorpay](https://docs.victoriametrics.com/CaseStudies.html#razorpay) * [Percona](https://docs.victoriametrics.com/CaseStudies.html#percona) * [Sensedia](https://docs.victoriametrics.com/CaseStudies.html#sensedia) * [Synthesio](https://docs.victoriametrics.com/CaseStudies.html#synthesio) diff --git a/docs/CaseStudies.md b/docs/CaseStudies.md index 87903a28c8..ac29685480 100644 --- a/docs/CaseStudies.md +++ b/docs/CaseStudies.md @@ -21,6 +21,7 @@ where you can chat with VictoriaMetrics users to get additional references, revi * [Idealo.de](#idealode) * [MHI Vestas Offshore Wind](#mhi-vestas-offshore-wind) * [Percona](#percona) +* [Razorpay](#razorpay) * [Sensedia](#sensedia) * [Synthesio](#synthesio) * [Wedos.com](#wedoscom) @@ -372,9 +373,33 @@ Numbers with current, limited roll out: - Data size on disk: 800 GiB - Retention period: 3 years + ## Percona -[Percona](https://www.percona.com/) is a leader in providing best-of-breed enterprise-class support, consulting, managed services, training and software for MySQL®, MariaDB®, MongoDB®, PostgreSQL® and other open source databases in on-premises and cloud environments. Percona switched from Prometheus to VictoriaMetrics in the [Percona Monitoring and Management](https://www.percona.com/software/database-tools/percona-monitoring-and-management) product. This allowed [reducing resource usage](https://www.percona.com/blog/2020/12/23/observations-on-better-resource-usage-with-percona-monitoring-and-management-v2-12-0/) and [getting rid of complex firewall setup](https://www.percona.com/blog/2020/12/01/foiled-by-the-firewall-a-tale-of-transition-from-prometheus-to-victoriametrics/), while [improving user experience](https://www.percona.com/blog/2020/02/28/better-prometheus-rate-function-with-victoriametrics/). +[Percona](https://www.percona.com/) is a leader in providing best-of-breed enterprise-class support, consulting, managed services, training and software for MySQL®, MariaDB®, MongoDB®, PostgreSQL® and other open source databases in on-premises and cloud environments. + +Percona migrated from Prometheus to VictoriaMetrics in the [Percona Monitoring and Management](https://www.percona.com/software/database-tools/percona-monitoring-and-management) product. This allowed [reducing resource usage](https://www.percona.com/blog/2020/12/23/observations-on-better-resource-usage-with-percona-monitoring-and-management-v2-12-0/) and [getting rid of complex firewall setup](https://www.percona.com/blog/2020/12/01/foiled-by-the-firewall-a-tale-of-transition-from-prometheus-to-victoriametrics/), while [improving user experience](https://www.percona.com/blog/2020/02/28/better-prometheus-rate-function-with-victoriametrics/). + + +## Razorpay + +[Razorpay](https://razorpay.com/) aims to revolutionize money management for online businesses by providing clean, developer-friendly APIs and hassle-free integration. + +> As a fintech organization, we move billions of dollars every month. Our customers and merchants have entrusted us with a paramount responsibility. To handle our ever-growing business, building a robust observability stack is not just “nice to have”, but absolutely essential. And all of this starts with better monitoring and metrics. + +> We executed a variety of POCs on various solutions and finally arrived at the following technologies: M3DB, Thanos, Cortex and VictoriaMetrics. The clear winner was VictoriaMetrics. + +> The following are some of the basic observations we derived from Victoria Metrics: +> * Simple components, each horizontally scalable. +> * Clear separation between writes and reads. +> * Runs from default configurations, with no extra frills. +> * Default retention starts with 1 month +> * Storage, ingestion, and reads can be easily scaled. +> * High Compression store ~ 70% more compression. +> * Currently running in production with commodity hardware with a good mix of spot instances. +> * Successfully ran some of the worst Grafana dashboards/queries that have historically failed to run. + +See [the full article](https://engineering.razorpay.com/scaling-to-trillions-of-metric-data-points-f569a5b654f2). ## Sensedia diff --git a/docs/README.md b/docs/README.md index fe73ec11d7..95efad218d 100644 --- a/docs/README.md +++ b/docs/README.md @@ -41,6 +41,7 @@ Case studies: * [Groove X](https://docs.victoriametrics.com/CaseStudies.html#groove-x) * [Idealo.de](https://docs.victoriametrics.com/CaseStudies.html#idealode) * [MHI Vestas Offshore Wind](https://docs.victoriametrics.com/CaseStudies.html#mhi-vestas-offshore-wind) +* [Razorpay](https://docs.victoriametrics.com/CaseStudies.html#razorpay) * [Percona](https://docs.victoriametrics.com/CaseStudies.html#percona) * [Sensedia](https://docs.victoriametrics.com/CaseStudies.html#sensedia) * [Synthesio](https://docs.victoriametrics.com/CaseStudies.html#synthesio) diff --git a/docs/Single-server-VictoriaMetrics.md b/docs/Single-server-VictoriaMetrics.md index 73eb5cf5b2..1adb38e8b4 100644 --- a/docs/Single-server-VictoriaMetrics.md +++ b/docs/Single-server-VictoriaMetrics.md @@ -45,6 +45,7 @@ Case studies: * [Groove X](https://docs.victoriametrics.com/CaseStudies.html#groove-x) * [Idealo.de](https://docs.victoriametrics.com/CaseStudies.html#idealode) * [MHI Vestas Offshore Wind](https://docs.victoriametrics.com/CaseStudies.html#mhi-vestas-offshore-wind) +* [Razorpay](https://docs.victoriametrics.com/CaseStudies.html#razorpay) * [Percona](https://docs.victoriametrics.com/CaseStudies.html#percona) * [Sensedia](https://docs.victoriametrics.com/CaseStudies.html#sensedia) * [Synthesio](https://docs.victoriametrics.com/CaseStudies.html#synthesio) From a1e54fa2c972cf5474fa968a92d6fc3ecf6c47c8 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Sat, 16 Oct 2021 19:45:44 +0300 Subject: [PATCH 38/77] docs/CaseStudies.md: add Fly.io case study --- README.md | 1 + docs/CaseStudies.md | 14 ++++++++++++++ docs/README.md | 1 + docs/Single-server-VictoriaMetrics.md | 1 + 4 files changed, 17 insertions(+) diff --git a/README.md b/README.md index 95efad218d..b80fdc4d02 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,7 @@ Case studies: * [CERN](https://docs.victoriametrics.com/CaseStudies.html#cern) * [COLOPL](https://docs.victoriametrics.com/CaseStudies.html#colopl) * [Dreamteam](https://docs.victoriametrics.com/CaseStudies.html#dreamteam) +* [Fly.io](https://docs.victoriametrics.com/CaseStudies.html#flyio) * [German Research Center for Artificial Intelligence](https://docs.victoriametrics.com/CaseStudies.html#german-research-center-for-artificial-intelligence) * [Grammarly](https://docs.victoriametrics.com/CaseStudies.html#grammarly) * [Groove X](https://docs.victoriametrics.com/CaseStudies.html#groove-x) diff --git a/docs/CaseStudies.md b/docs/CaseStudies.md index ac29685480..d33e9fc2d8 100644 --- a/docs/CaseStudies.md +++ b/docs/CaseStudies.md @@ -15,6 +15,7 @@ where you can chat with VictoriaMetrics users to get additional references, revi * [CERN](#cern) * [COLOPL](#colopl) * [Dreamteam](#dreamteam) +* [Fly.io](#flyio) * [German Research Center for Artificial Intelligence](#german-research-center-for-artificial-intelligence) * [Grammarly](#grammarly) * [Groove X](#groove-x) @@ -246,6 +247,19 @@ VictoriaMetrics in production environment runs on 2 M5 EC2 instances in "HA" mod 2 Prometheus instances are writing to both VMs, with 2 [Promxy](https://github.com/jacksontj/promxy) replicas as the load balancer for reads. +## Fly.io + +[Fly.io](https://fly.io/about/) is a platform for running full stack apps and databases close to your users. + +> Victoria Metrics (“Vicky”), in a clustered configuration, is our metrics database. We run a cluster of fairly big Vicky hosts. + +> Like everyone else, we started with a simple Prometheus server. That worked until it didn’t. We spent some time scaling it with Thanos, and Thanos was a lot, as far as ops hassle goes. We’d dabbled with Vicky just as a long-term storage engine for vanilla Prometheus, with promxy set up to deduplicate metrics. + +> Vicky grew into a more ambitious offering, and added its own Prometheus scraper; we adopted it and scaled it as far as we reasonably could in a single-node configuration. Scaling requirements ultimately pushed us into a clustered deployment; we run an HA cluster (fronted by haproxy). Current Vicky has a really straightforward multi-tenant API — it’s easy to namespace metrics for customers — and it chugs along for us without too much minding. + +See [the full post](https://fly.io/blog/measuring-fly/). + + ## German Research Center for Artificial Intelligence [German Research Center for Artificial Intelligence](https://en.wikipedia.org/wiki/German_Research_Centre_for_Artificial_Intelligence) (DFKI) is one of the world's largest nonprofit contract research institutes for software technology based on artificial intelligence (AI) methods. DFKI was founded in 1988, and has facilities in the German cities of Kaiserslautern, Saarbrücken, Bremen and Berlin. diff --git a/docs/README.md b/docs/README.md index 95efad218d..b80fdc4d02 100644 --- a/docs/README.md +++ b/docs/README.md @@ -36,6 +36,7 @@ Case studies: * [CERN](https://docs.victoriametrics.com/CaseStudies.html#cern) * [COLOPL](https://docs.victoriametrics.com/CaseStudies.html#colopl) * [Dreamteam](https://docs.victoriametrics.com/CaseStudies.html#dreamteam) +* [Fly.io](https://docs.victoriametrics.com/CaseStudies.html#flyio) * [German Research Center for Artificial Intelligence](https://docs.victoriametrics.com/CaseStudies.html#german-research-center-for-artificial-intelligence) * [Grammarly](https://docs.victoriametrics.com/CaseStudies.html#grammarly) * [Groove X](https://docs.victoriametrics.com/CaseStudies.html#groove-x) diff --git a/docs/Single-server-VictoriaMetrics.md b/docs/Single-server-VictoriaMetrics.md index 1adb38e8b4..e00221bbd5 100644 --- a/docs/Single-server-VictoriaMetrics.md +++ b/docs/Single-server-VictoriaMetrics.md @@ -40,6 +40,7 @@ Case studies: * [CERN](https://docs.victoriametrics.com/CaseStudies.html#cern) * [COLOPL](https://docs.victoriametrics.com/CaseStudies.html#colopl) * [Dreamteam](https://docs.victoriametrics.com/CaseStudies.html#dreamteam) +* [Fly.io](https://docs.victoriametrics.com/CaseStudies.html#flyio) * [German Research Center for Artificial Intelligence](https://docs.victoriametrics.com/CaseStudies.html#german-research-center-for-artificial-intelligence) * [Grammarly](https://docs.victoriametrics.com/CaseStudies.html#grammarly) * [Groove X](https://docs.victoriametrics.com/CaseStudies.html#groove-x) From dfc719e0124057c4491fe022db9e6c9754912500 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Sat, 16 Oct 2021 19:57:23 +0300 Subject: [PATCH 39/77] docs/CaseStudies.md: add Smarkets case study --- README.md | 1 + docs/CaseStudies.md | 17 +++++++++++++++++ docs/README.md | 1 + docs/Single-server-VictoriaMetrics.md | 1 + 4 files changed, 20 insertions(+) diff --git a/README.md b/README.md index b80fdc4d02..3389cb4306 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,7 @@ Case studies: * [Razorpay](https://docs.victoriametrics.com/CaseStudies.html#razorpay) * [Percona](https://docs.victoriametrics.com/CaseStudies.html#percona) * [Sensedia](https://docs.victoriametrics.com/CaseStudies.html#sensedia) +* [Smarkets](https://docs.victoriametrics.com/CaseStudies.html#smarkets) * [Synthesio](https://docs.victoriametrics.com/CaseStudies.html#synthesio) * [Wedos.com](https://docs.victoriametrics.com/CaseStudies.html#wedoscom) * [Wix.com](https://docs.victoriametrics.com/CaseStudies.html#wixcom) diff --git a/docs/CaseStudies.md b/docs/CaseStudies.md index d33e9fc2d8..1f6eaace8d 100644 --- a/docs/CaseStudies.md +++ b/docs/CaseStudies.md @@ -24,6 +24,7 @@ where you can chat with VictoriaMetrics users to get additional references, revi * [Percona](#percona) * [Razorpay](#razorpay) * [Sensedia](#sensedia) +* [Smarkets](#smarkets) * [Synthesio](#synthesio) * [Wedos.com](#wedoscom) * [Wix.com](#wixcom) @@ -441,6 +442,22 @@ Numbers: - Query response time (99th percentile): 500ms +## Smarkets + +[Smarkets](https://smarkets.com/) simplifies peer-to-peer trading on sporting and political events. + +> We always wanted our developers to have out-of-the-box monitoring available for any application or service. Before we adopted Kubernetes this was achieved either with Prometheus metrics, or with statsd being sent over to the underlying host and then converted into Prometheus metrics. As we expanded our Kubernetes adoption and started to split clusters, we also wanted developers to be able to expose metrics directly to Prometheus by annotating services. Those metrics were then only available inside the cluster so they couldn’t be scraped globally. + +> We considered three different solutions to improve our architecture: +> * Prometheus + Cortex +> * Prometheus + Thanos Receive +> * Prometheus + Victoria Metrics + +> We selected Victoria Metrics. Our new architecture has been very stable since it was put into production. With the previous setup we would have had two or three cardinality explosions in a two-week period, with this new one we have none. + +See [the full article](https://smarketshq.com/monitoring-kubernetes-clusters-41a4b24c19e3). + + ## Synthesio [Synthesio](https://www.synthesio.com/) is the leading social intelligence tool for social media monitoring and analytics. diff --git a/docs/README.md b/docs/README.md index b80fdc4d02..3389cb4306 100644 --- a/docs/README.md +++ b/docs/README.md @@ -45,6 +45,7 @@ Case studies: * [Razorpay](https://docs.victoriametrics.com/CaseStudies.html#razorpay) * [Percona](https://docs.victoriametrics.com/CaseStudies.html#percona) * [Sensedia](https://docs.victoriametrics.com/CaseStudies.html#sensedia) +* [Smarkets](https://docs.victoriametrics.com/CaseStudies.html#smarkets) * [Synthesio](https://docs.victoriametrics.com/CaseStudies.html#synthesio) * [Wedos.com](https://docs.victoriametrics.com/CaseStudies.html#wedoscom) * [Wix.com](https://docs.victoriametrics.com/CaseStudies.html#wixcom) diff --git a/docs/Single-server-VictoriaMetrics.md b/docs/Single-server-VictoriaMetrics.md index e00221bbd5..b7671521ea 100644 --- a/docs/Single-server-VictoriaMetrics.md +++ b/docs/Single-server-VictoriaMetrics.md @@ -49,6 +49,7 @@ Case studies: * [Razorpay](https://docs.victoriametrics.com/CaseStudies.html#razorpay) * [Percona](https://docs.victoriametrics.com/CaseStudies.html#percona) * [Sensedia](https://docs.victoriametrics.com/CaseStudies.html#sensedia) +* [Smarkets](https://docs.victoriametrics.com/CaseStudies.html#smarkets) * [Synthesio](https://docs.victoriametrics.com/CaseStudies.html#synthesio) * [Wedos.com](https://docs.victoriametrics.com/CaseStudies.html#wedoscom) * [Wix.com](https://docs.victoriametrics.com/CaseStudies.html#wixcom) From c37f2854666150939e4a61a164dfb5f0392e5e5c Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Sat, 16 Oct 2021 20:48:15 +0300 Subject: [PATCH 40/77] lib/promscrape: set `honor_timestamps: true` by default if this option isnt set explicitly in scrape configs This aligns the behavior to Prometheus - see https://prometheus.io/docs/prometheus/latest/configuration/configuration/#scrape_config --- docs/CHANGELOG.md | 1 + lib/promscrape/config.go | 7 ++- lib/promscrape/config_test.go | 105 ++++++++++++++++++---------------- 3 files changed, 62 insertions(+), 51 deletions(-) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index e0fc6e5cd9..b9982efd9c 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -19,6 +19,7 @@ sort: 15 * BUGFIX: vmstorage: fix `unaligned 64-bit atomic operation` panic on 32-bit architectures (arm and 386). The panic has been introduced in v1.67.0. * BUGFIX: vmalert, vmauth: prevent from frequent closing of TCP connections established to backends under high load. This should reduce the number of TCP sockets in `TIME_WAIT` state at `vmalert` and `vmauth` under high load. See [this pull request](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/1704). +* BUGFIX: vmagent: set `honor_timestamps: true` by default in [scrape configs](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#scrape_config) if this options isn't set explicitly. This aligns the behaviour with Prometheus. ## [v1.67.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.67.0) diff --git a/lib/promscrape/config.go b/lib/promscrape/config.go index 17cc688085..ec1047f913 100644 --- a/lib/promscrape/config.go +++ b/lib/promscrape/config.go @@ -120,7 +120,7 @@ type ScrapeConfig struct { ScrapeTimeout time.Duration `yaml:"scrape_timeout,omitempty"` MetricsPath string `yaml:"metrics_path,omitempty"` HonorLabels bool `yaml:"honor_labels,omitempty"` - HonorTimestamps bool `yaml:"honor_timestamps,omitempty"` + HonorTimestamps *bool `yaml:"honor_timestamps,omitempty"` FollowRedirects *bool `yaml:"follow_redirects,omitempty"` Scheme string `yaml:"scheme,omitempty"` Params map[string][]string `yaml:"params,omitempty"` @@ -720,7 +720,10 @@ func getScrapeWorkConfig(sc *ScrapeConfig, baseDir string, globalCfg *GlobalConf scrapeTimeout = scrapeInterval } honorLabels := sc.HonorLabels - honorTimestamps := sc.HonorTimestamps + honorTimestamps := true + if sc.HonorTimestamps != nil { + honorTimestamps = *sc.HonorTimestamps + } denyRedirects := false if sc.FollowRedirects != nil { denyRedirects = !*sc.FollowRedirects diff --git a/lib/promscrape/config_test.go b/lib/promscrape/config_test.go index c28f7c550d..8ed36a49c3 100644 --- a/lib/promscrape/config_test.go +++ b/lib/promscrape/config_test.go @@ -128,9 +128,10 @@ scrape_configs: sws := cfg.getStaticScrapeWork() resetNonEssentialFields(sws) swsExpected := []*ScrapeWork{{ - ScrapeURL: "http://black:9115/probe?module=dns_udp_example&target=8.8.8.8", - ScrapeInterval: defaultScrapeInterval, - ScrapeTimeout: defaultScrapeTimeout, + ScrapeURL: "http://black:9115/probe?module=dns_udp_example&target=8.8.8.8", + ScrapeInterval: defaultScrapeInterval, + ScrapeTimeout: defaultScrapeTimeout, + HonorTimestamps: true, Labels: []prompbmarshal.Label{ { Name: "__address__", @@ -574,8 +575,7 @@ scrape_configs: ScrapeURL: "http://host1:80/abc/de", ScrapeInterval: defaultScrapeInterval, ScrapeTimeout: defaultScrapeTimeout, - HonorLabels: false, - HonorTimestamps: false, + HonorTimestamps: true, Labels: []prompbmarshal.Label{ { Name: "__address__", @@ -622,8 +622,7 @@ scrape_configs: ScrapeURL: "http://host2:80/abc/de", ScrapeInterval: defaultScrapeInterval, ScrapeTimeout: defaultScrapeTimeout, - HonorLabels: false, - HonorTimestamps: false, + HonorTimestamps: true, Labels: []prompbmarshal.Label{ { Name: "__address__", @@ -670,8 +669,7 @@ scrape_configs: ScrapeURL: "http://localhost:9090/abc/de", ScrapeInterval: defaultScrapeInterval, ScrapeTimeout: defaultScrapeTimeout, - HonorLabels: false, - HonorTimestamps: false, + HonorTimestamps: true, Labels: []prompbmarshal.Label{ { Name: "__address__", @@ -740,8 +738,7 @@ scrape_configs: ScrapeURL: "http://foo.bar:1234/metrics", ScrapeInterval: defaultScrapeInterval, ScrapeTimeout: defaultScrapeTimeout, - HonorLabels: false, - HonorTimestamps: false, + HonorTimestamps: true, Labels: []prompbmarshal.Label{ { Name: "__address__", @@ -791,8 +788,7 @@ scrape_configs: ScrapeURL: "http://foo.bar:1234/metrics", ScrapeInterval: defaultScrapeInterval, ScrapeTimeout: defaultScrapeTimeout, - HonorLabels: false, - HonorTimestamps: false, + HonorTimestamps: true, Labels: []prompbmarshal.Label{ { Name: "__address__", @@ -847,7 +843,7 @@ scrape_configs: metrics_path: /foo/bar scheme: https honor_labels: true - honor_timestamps: true + honor_timestamps: false follow_redirects: false params: p: ["x&y", "="] @@ -873,7 +869,7 @@ scrape_configs: ScrapeInterval: 54 * time.Second, ScrapeTimeout: 5 * time.Second, HonorLabels: true, - HonorTimestamps: true, + HonorTimestamps: false, DenyRedirects: true, Labels: []prompbmarshal.Label{ { @@ -923,7 +919,7 @@ scrape_configs: ScrapeInterval: 54 * time.Second, ScrapeTimeout: 5 * time.Second, HonorLabels: true, - HonorTimestamps: true, + HonorTimestamps: false, DenyRedirects: true, Labels: []prompbmarshal.Label{ { @@ -969,9 +965,10 @@ scrape_configs: jobNameOriginal: "foo", }, { - ScrapeURL: "http://1.2.3.4:80/metrics", - ScrapeInterval: 8 * time.Second, - ScrapeTimeout: 8 * time.Second, + ScrapeURL: "http://1.2.3.4:80/metrics", + ScrapeInterval: 8 * time.Second, + ScrapeTimeout: 8 * time.Second, + HonorTimestamps: true, Labels: []prompbmarshal.Label{ { Name: "__address__", @@ -1010,9 +1007,10 @@ scrape_configs: jobNameOriginal: "qwer", }, { - ScrapeURL: "http://foobar:80/metrics", - ScrapeInterval: 8 * time.Second, - ScrapeTimeout: 8 * time.Second, + ScrapeURL: "http://foobar:80/metrics", + ScrapeInterval: 8 * time.Second, + ScrapeTimeout: 8 * time.Second, + HonorTimestamps: true, Labels: []prompbmarshal.Label{ { Name: "__address__", @@ -1085,9 +1083,10 @@ scrape_configs: - targets: ["foo.bar:1234", "drop-this-target"] `, []*ScrapeWork{ { - ScrapeURL: "http://foo.bar:1234/metrics?x=keep_me", - ScrapeInterval: defaultScrapeInterval, - ScrapeTimeout: defaultScrapeTimeout, + ScrapeURL: "http://foo.bar:1234/metrics?x=keep_me", + ScrapeInterval: defaultScrapeInterval, + ScrapeTimeout: defaultScrapeTimeout, + HonorTimestamps: true, Labels: []prompbmarshal.Label{ { Name: "__address__", @@ -1164,9 +1163,10 @@ scrape_configs: - targets: ["foo.bar:1234"] `, []*ScrapeWork{ { - ScrapeURL: "mailto://foo.bar:1234/abc.de?a=b", - ScrapeInterval: defaultScrapeInterval, - ScrapeTimeout: defaultScrapeTimeout, + ScrapeURL: "mailto://foo.bar:1234/abc.de?a=b", + ScrapeInterval: defaultScrapeInterval, + ScrapeTimeout: defaultScrapeTimeout, + HonorTimestamps: true, Labels: []prompbmarshal.Label{ { Name: "__address__", @@ -1228,9 +1228,10 @@ scrape_configs: - targets: ["foo.bar:1234", "xyz"] `, []*ScrapeWork{ { - ScrapeURL: "http://foo.bar:1234/metrics", - ScrapeInterval: defaultScrapeInterval, - ScrapeTimeout: defaultScrapeTimeout, + ScrapeURL: "http://foo.bar:1234/metrics", + ScrapeInterval: defaultScrapeInterval, + ScrapeTimeout: defaultScrapeTimeout, + HonorTimestamps: true, Labels: []prompbmarshal.Label{ { Name: "__address__", @@ -1261,9 +1262,10 @@ scrape_configs: - targets: ["foo.bar:1234"] `, []*ScrapeWork{ { - ScrapeURL: "http://foo.bar:1234/metrics", - ScrapeInterval: defaultScrapeInterval, - ScrapeTimeout: defaultScrapeTimeout, + ScrapeURL: "http://foo.bar:1234/metrics", + ScrapeInterval: defaultScrapeInterval, + ScrapeTimeout: defaultScrapeTimeout, + HonorTimestamps: true, Labels: []prompbmarshal.Label{ { Name: "__address__", @@ -1310,9 +1312,10 @@ scrape_configs: - targets: ["foo.bar:1234"] `, []*ScrapeWork{ { - ScrapeURL: "http://foo.bar:1234/metrics", - ScrapeInterval: defaultScrapeInterval, - ScrapeTimeout: defaultScrapeTimeout, + ScrapeURL: "http://foo.bar:1234/metrics", + ScrapeInterval: defaultScrapeInterval, + ScrapeTimeout: defaultScrapeTimeout, + HonorTimestamps: true, Labels: []prompbmarshal.Label{ { Name: "__address__", @@ -1355,9 +1358,10 @@ scrape_configs: - targets: ["foo.bar:1234"] `, []*ScrapeWork{ { - ScrapeURL: "http://foo.bar:1234/metrics", - ScrapeInterval: defaultScrapeInterval, - ScrapeTimeout: defaultScrapeTimeout, + ScrapeURL: "http://foo.bar:1234/metrics", + ScrapeInterval: defaultScrapeInterval, + ScrapeTimeout: defaultScrapeTimeout, + HonorTimestamps: true, Labels: []prompbmarshal.Label{ { Name: "__address__", @@ -1414,9 +1418,10 @@ scrape_configs: job: yyy `, []*ScrapeWork{ { - ScrapeURL: "http://pp:80/metrics?a=c&a=xy", - ScrapeInterval: defaultScrapeInterval, - ScrapeTimeout: defaultScrapeTimeout, + ScrapeURL: "http://pp:80/metrics?a=c&a=xy", + ScrapeInterval: defaultScrapeInterval, + ScrapeTimeout: defaultScrapeTimeout, + HonorTimestamps: true, Labels: []prompbmarshal.Label{ { Name: "__address__", @@ -1491,9 +1496,10 @@ scrape_configs: replacement: true `, []*ScrapeWork{ { - ScrapeURL: "http://127.0.0.1:9116/snmp?module=if_mib&target=192.168.1.2", - ScrapeInterval: defaultScrapeInterval, - ScrapeTimeout: defaultScrapeTimeout, + ScrapeURL: "http://127.0.0.1:9116/snmp?module=if_mib&target=192.168.1.2", + ScrapeInterval: defaultScrapeInterval, + ScrapeTimeout: defaultScrapeTimeout, + HonorTimestamps: true, Labels: []prompbmarshal.Label{ { Name: "__address__", @@ -1562,9 +1568,10 @@ scrape_configs: target_label: __metrics_path__ `, []*ScrapeWork{ { - ScrapeURL: "http://foo.bar:1234/metricspath", - ScrapeInterval: defaultScrapeInterval, - ScrapeTimeout: defaultScrapeTimeout, + ScrapeURL: "http://foo.bar:1234/metricspath", + ScrapeInterval: defaultScrapeInterval, + ScrapeTimeout: defaultScrapeTimeout, + HonorTimestamps: true, Labels: []prompbmarshal.Label{ { Name: "__address__", From da97e58979a0a6c41bae47a2a8c74783af659a04 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Sat, 16 Oct 2021 21:13:58 +0300 Subject: [PATCH 41/77] app/vmselect/promql: randomize the static selection of time series returned from `limitk()` Sort series by a hash calculated from the series labels. This should guarantee "random" selection of the returned time series. Previously the selection could be biased, since time series were sorted alphabetically by label names and label values. --- app/vmselect/promql/aggr.go | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/app/vmselect/promql/aggr.go b/app/vmselect/promql/aggr.go index ba908e6b89..ba71ea0d66 100644 --- a/app/vmselect/promql/aggr.go +++ b/app/vmselect/promql/aggr.go @@ -11,6 +11,7 @@ import ( "github.com/VictoriaMetrics/VictoriaMetrics/lib/storage" "github.com/VictoriaMetrics/metrics" "github.com/VictoriaMetrics/metricsql" + xxhash "github.com/cespare/xxhash/v2" ) var aggrFuncs = map[string]aggrFunc{ @@ -1012,9 +1013,26 @@ func aggrFuncLimitK(afa *aggrFuncArg) ([]*timeseries, error) { afe := func(tss []*timeseries, modifier *metricsql.ModifierExpr) []*timeseries { // Sort series by metricName in order to get consistent set of output series // across multiple calls to limitk() function. - sort.Slice(tss, func(i, j int) bool { - return metricNameLess(&tss[i].MetricName, &tss[j].MetricName) + // Sort series by hash in order to guarantee uniform selection across series. + type hashSeries struct { + h uint64 + ts *timeseries + } + hss := make([]hashSeries, len(tss)) + d := xxhash.New() + for i, ts := range tss { + h := getHash(d, &ts.MetricName) + hss[i] = hashSeries{ + h: h, + ts: ts, + } + } + sort.Slice(hss, func(i, j int) bool { + return hss[i].h < hss[j].h }) + for i, hs := range hss { + tss[i] = hs.ts + } if len(tss) > maxK { tss = tss[:maxK] } @@ -1032,6 +1050,17 @@ func aggrFuncLimitK(afa *aggrFuncArg) ([]*timeseries, error) { return aggrFuncExt(afe, args[1], &afa.ae.Modifier, afa.ae.Limit, true) } +func getHash(d *xxhash.Digest, mn *storage.MetricName) uint64 { + d.Reset() + _, _ = d.Write(mn.MetricGroup) + for _, tag := range mn.Tags { + _, _ = d.Write(tag.Key) + _, _ = d.Write(tag.Value) + } + return d.Sum64() + +} + func aggrFuncQuantiles(afa *aggrFuncArg) ([]*timeseries, error) { args := afa.args if len(args) < 3 { From c0e58ade45f18448e680bdc3e914ae6089b66547 Mon Sep 17 00:00:00 2001 From: Alexander Rickardsson Date: Mon, 18 Oct 2021 09:20:26 +0200 Subject: [PATCH 42/77] vmalert: Redact passwords from error messages (#1713) --- app/vmalert/datasource/vm.go | 4 ++-- app/vmalert/datasource/vm_graphite_api.go | 2 +- app/vmalert/datasource/vm_prom_api.go | 4 ++-- app/vmalert/remotewrite/remotewrite.go | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/vmalert/datasource/vm.go b/app/vmalert/datasource/vm.go index a6058dec8e..34a83d3412 100644 --- a/app/vmalert/datasource/vm.go +++ b/app/vmalert/datasource/vm.go @@ -132,12 +132,12 @@ func (s *VMStorage) QueryRange(ctx context.Context, query string, start, end tim func (s *VMStorage) do(ctx context.Context, req *http.Request) (*http.Response, error) { resp, err := s.c.Do(req.WithContext(ctx)) if err != nil { - return nil, fmt.Errorf("error getting response from %s: %w", req.URL, err) + return nil, fmt.Errorf("error getting response from %s: %w", req.URL.Redacted(), err) } if resp.StatusCode != http.StatusOK { body, _ := ioutil.ReadAll(resp.Body) _ = resp.Body.Close() - return nil, fmt.Errorf("unexpected response code %d for %s. Response body %s", resp.StatusCode, req.URL, body) + return nil, fmt.Errorf("unexpected response code %d for %s. Response body %s", resp.StatusCode, req.URL.Redacted(), body) } return resp, nil } diff --git a/app/vmalert/datasource/vm_graphite_api.go b/app/vmalert/datasource/vm_graphite_api.go index 3c6a2ab341..36b89e187e 100644 --- a/app/vmalert/datasource/vm_graphite_api.go +++ b/app/vmalert/datasource/vm_graphite_api.go @@ -38,7 +38,7 @@ func (r graphiteResponse) metrics() []Metric { func parseGraphiteResponse(req *http.Request, resp *http.Response) ([]Metric, error) { r := &graphiteResponse{} if err := json.NewDecoder(resp.Body).Decode(r); err != nil { - return nil, fmt.Errorf("error parsing graphite metrics for %s: %w", req.URL, err) + return nil, fmt.Errorf("error parsing graphite metrics for %s: %w", req.URL.Redacted(), err) } return r.metrics(), nil } diff --git a/app/vmalert/datasource/vm_prom_api.go b/app/vmalert/datasource/vm_prom_api.go index 62154c3134..dcffe2dc1c 100644 --- a/app/vmalert/datasource/vm_prom_api.go +++ b/app/vmalert/datasource/vm_prom_api.go @@ -82,10 +82,10 @@ const ( func parsePrometheusResponse(req *http.Request, resp *http.Response) ([]Metric, error) { r := &promResponse{} if err := json.NewDecoder(resp.Body).Decode(r); err != nil { - return nil, fmt.Errorf("error parsing prometheus metrics for %s: %w", req.URL, err) + return nil, fmt.Errorf("error parsing prometheus metrics for %s: %w", req.URL.Redacted(), err) } if r.Status == statusError { - return nil, fmt.Errorf("response error, query: %s, errorType: %s, error: %s", req.URL, r.ErrorType, r.Error) + return nil, fmt.Errorf("response error, query: %s, errorType: %s, error: %s", req.URL.Redacted(), r.ErrorType, r.Error) } if r.Status != statusSuccess { return nil, fmt.Errorf("unknown status: %s, Expected success or error ", r.Status) diff --git a/app/vmalert/remotewrite/remotewrite.go b/app/vmalert/remotewrite/remotewrite.go index 30d948224d..035f2af77e 100644 --- a/app/vmalert/remotewrite/remotewrite.go +++ b/app/vmalert/remotewrite/remotewrite.go @@ -246,13 +246,13 @@ func (c *Client) send(ctx context.Context, data []byte) error { resp, err := c.c.Do(req.WithContext(ctx)) if err != nil { return fmt.Errorf("error while sending request to %s: %w; Data len %d(%d)", - req.URL, err, len(data), r.Size()) + req.URL.Redacted(), err, len(data), r.Size()) } defer func() { _ = resp.Body.Close() }() if resp.StatusCode != http.StatusNoContent && resp.StatusCode != http.StatusOK { body, _ := ioutil.ReadAll(resp.Body) return fmt.Errorf("unexpected response code %d for %s. Response body %q", - resp.StatusCode, req.URL, body) + resp.StatusCode, req.URL.Redacted(), body) } return nil } From 0e2486df5631d8c8ed8dab51de070dc8c3c2ab33 Mon Sep 17 00:00:00 2001 From: Alexander Rickardsson Date: Mon, 18 Oct 2021 09:24:52 +0200 Subject: [PATCH 43/77] vmalert: add disablePathAppend to remote read (#1712) * vmalert: add disablePathAppend to remoteRead * docs: add docs for remoteRead.disablePathAppend --- app/vmalert/README.md | 8 +++-- app/vmalert/datasource/vm.go | 33 ++++++++++-------- app/vmalert/datasource/vm_prom_api.go | 8 +++-- app/vmalert/datasource/vm_test.go | 50 +++++++++++++++++++++++++-- app/vmalert/remoteread/init.go | 5 +-- docs/vmalert.md | 8 +++-- 6 files changed, 85 insertions(+), 27 deletions(-) diff --git a/app/vmalert/README.md b/app/vmalert/README.md index d62cf6ae40..9e481694bf 100644 --- a/app/vmalert/README.md +++ b/app/vmalert/README.md @@ -351,12 +351,12 @@ See full description for these flags in `./vmalert --help`. ## Monitoring -`vmalert` exports various metrics in Prometheus exposition format at `http://vmalert-host:8880/metrics` page. -We recommend setting up regular scraping of this page either through `vmagent` or by Prometheus so that the exported +`vmalert` exports various metrics in Prometheus exposition format at `http://vmalert-host:8880/metrics` page. +We recommend setting up regular scraping of this page either through `vmagent` or by Prometheus so that the exported metrics may be analyzed later. Use official [Grafana dashboard](https://grafana.com/grafana/dashboards/14950) for `vmalert` overview. -If you have suggestions for improvements or have found a bug - please open an issue on github or add +If you have suggestions for improvements or have found a bug - please open an issue on github or add a review to the dashboard. @@ -496,6 +496,8 @@ The shortlist of configuration flags is the following: Optional bearer auth token to use for -remoteRead.url. -remoteRead.bearerTokenFile string Optional path to bearer token file to use for -remoteRead.url. + -remoteRead.disablePathAppend + Whether to disable automatic appending of '/api/v1/query' path to the configured -remoteRead.url. -remoteRead.ignoreRestoreErrors Whether to ignore errors from remote storage when restoring alerts state on startup. (default true) -remoteRead.lookback duration diff --git a/app/vmalert/datasource/vm.go b/app/vmalert/datasource/vm.go index 34a83d3412..5d3dc62671 100644 --- a/app/vmalert/datasource/vm.go +++ b/app/vmalert/datasource/vm.go @@ -24,18 +24,20 @@ type VMStorage struct { evaluationInterval time.Duration extraLabels []string extraParams []Param + disablePathAppend bool } // Clone makes clone of VMStorage, shares http client. func (s *VMStorage) Clone() *VMStorage { return &VMStorage{ - c: s.c, - authCfg: s.authCfg, - datasourceURL: s.datasourceURL, - lookBack: s.lookBack, - queryStep: s.queryStep, - appendTypePrefix: s.appendTypePrefix, - dataSourceType: s.dataSourceType, + c: s.c, + authCfg: s.authCfg, + datasourceURL: s.datasourceURL, + lookBack: s.lookBack, + queryStep: s.queryStep, + appendTypePrefix: s.appendTypePrefix, + dataSourceType: s.dataSourceType, + disablePathAppend: s.disablePathAppend, } } @@ -57,15 +59,16 @@ func (s *VMStorage) BuildWithParams(params QuerierParams) Querier { } // NewVMStorage is a constructor for VMStorage -func NewVMStorage(baseURL string, authCfg *promauth.Config, lookBack time.Duration, queryStep time.Duration, appendTypePrefix bool, c *http.Client) *VMStorage { +func NewVMStorage(baseURL string, authCfg *promauth.Config, lookBack time.Duration, queryStep time.Duration, appendTypePrefix bool, c *http.Client, disablePathAppend bool) *VMStorage { return &VMStorage{ - c: c, - authCfg: authCfg, - datasourceURL: strings.TrimSuffix(baseURL, "/"), - appendTypePrefix: appendTypePrefix, - lookBack: lookBack, - queryStep: queryStep, - dataSourceType: NewPrometheusType(), + c: c, + authCfg: authCfg, + datasourceURL: strings.TrimSuffix(baseURL, "/"), + appendTypePrefix: appendTypePrefix, + lookBack: lookBack, + queryStep: queryStep, + dataSourceType: NewPrometheusType(), + disablePathAppend: disablePathAppend, } } diff --git a/app/vmalert/datasource/vm_prom_api.go b/app/vmalert/datasource/vm_prom_api.go index dcffe2dc1c..2faba4d27e 100644 --- a/app/vmalert/datasource/vm_prom_api.go +++ b/app/vmalert/datasource/vm_prom_api.go @@ -118,7 +118,9 @@ func (s *VMStorage) setPrometheusInstantReqParams(r *http.Request, query string, if s.appendTypePrefix { r.URL.Path += prometheusPrefix } - r.URL.Path += prometheusInstantPath + if !s.disablePathAppend { + r.URL.Path += prometheusInstantPath + } q := r.URL.Query() if s.lookBack > 0 { timestamp = timestamp.Add(-s.lookBack) @@ -136,7 +138,9 @@ func (s *VMStorage) setPrometheusRangeReqParams(r *http.Request, query string, s if s.appendTypePrefix { r.URL.Path += prometheusPrefix } - r.URL.Path += prometheusRangePath + if !s.disablePathAppend { + r.URL.Path += prometheusRangePath + } q := r.URL.Query() q.Add("start", fmt.Sprintf("%d", start.Unix())) q.Add("end", fmt.Sprintf("%d", end.Unix())) diff --git a/app/vmalert/datasource/vm_test.go b/app/vmalert/datasource/vm_test.go index 801974d9c9..ba406a46c8 100644 --- a/app/vmalert/datasource/vm_test.go +++ b/app/vmalert/datasource/vm_test.go @@ -83,7 +83,7 @@ func TestVMInstantQuery(t *testing.T) { if err != nil { t.Fatalf("unexpected: %s", err) } - s := NewVMStorage(srv.URL, authCfg, time.Minute, 0, false, srv.Client()) + s := NewVMStorage(srv.URL, authCfg, time.Minute, 0, false, srv.Client(), false) p := NewPrometheusType() pq := s.BuildWithParams(QuerierParams{DataSourceType: &p, EvaluationInterval: 15 * time.Second}) @@ -193,7 +193,7 @@ func TestVMRangeQuery(t *testing.T) { if err != nil { t.Fatalf("unexpected: %s", err) } - s := NewVMStorage(srv.URL, authCfg, time.Minute, 0, false, srv.Client()) + s := NewVMStorage(srv.URL, authCfg, time.Minute, 0, false, srv.Client(), false) p := NewPrometheusType() pq := s.BuildWithParams(QuerierParams{DataSourceType: &p, EvaluationInterval: 15 * time.Second}) @@ -252,6 +252,17 @@ func TestRequestParams(t *testing.T) { checkEqualString(t, prometheusInstantPath, r.URL.Path) }, }, + { + "prometheus path with disablePathAppend", + false, + &VMStorage{ + dataSourceType: NewPrometheusType(), + disablePathAppend: true, + }, + func(t *testing.T, r *http.Request) { + checkEqualString(t, "", r.URL.Path) + }, + }, { "prometheus prefix", false, @@ -263,6 +274,18 @@ func TestRequestParams(t *testing.T) { checkEqualString(t, prometheusPrefix+prometheusInstantPath, r.URL.Path) }, }, + { + "prometheus prefix with disablePathAppend", + false, + &VMStorage{ + dataSourceType: NewPrometheusType(), + appendTypePrefix: true, + disablePathAppend: true, + }, + func(t *testing.T, r *http.Request) { + checkEqualString(t, prometheusPrefix, r.URL.Path) + }, + }, { "prometheus range path", true, @@ -273,6 +296,17 @@ func TestRequestParams(t *testing.T) { checkEqualString(t, prometheusRangePath, r.URL.Path) }, }, + { + "prometheus range path with disablePathAppend", + true, + &VMStorage{ + dataSourceType: NewPrometheusType(), + disablePathAppend: true, + }, + func(t *testing.T, r *http.Request) { + checkEqualString(t, "", r.URL.Path) + }, + }, { "prometheus range prefix", true, @@ -284,6 +318,18 @@ func TestRequestParams(t *testing.T) { checkEqualString(t, prometheusPrefix+prometheusRangePath, r.URL.Path) }, }, + { + "prometheus range prefix with disablePathAppend", + true, + &VMStorage{ + dataSourceType: NewPrometheusType(), + appendTypePrefix: true, + disablePathAppend: true, + }, + func(t *testing.T, r *http.Request) { + checkEqualString(t, prometheusPrefix, r.URL.Path) + }, + }, { "graphite path", false, diff --git a/app/vmalert/remoteread/init.go b/app/vmalert/remoteread/init.go index 73a2993b5d..12a9024723 100644 --- a/app/vmalert/remoteread/init.go +++ b/app/vmalert/remoteread/init.go @@ -12,7 +12,7 @@ import ( var ( addr = flag.String("remoteRead.url", "", "Optional URL to VictoriaMetrics or vmselect that will be used to restore alerts "+ "state. This configuration makes sense only if `vmalert` was configured with `remoteWrite.url` before and has been successfully persisted its state. "+ - "E.g. http://127.0.0.1:8428") + "E.g. http://127.0.0.1:8428. See also -remoteRead.disablePathAppend") basicAuthUsername = flag.String("remoteRead.basicAuth.username", "", "Optional basic auth username for -remoteRead.url") basicAuthPassword = flag.String("remoteRead.basicAuth.password", "", "Optional basic auth password for -remoteRead.url") basicAuthPasswordFile = flag.String("remoteRead.basicAuth.passwordFile", "", "Optional path to basic auth password to use for -remoteRead.url") @@ -26,6 +26,7 @@ var ( "By default system CA is used") tlsServerName = flag.String("remoteRead.tlsServerName", "", "Optional TLS server name to use for connections to -remoteRead.url. "+ "By default the server name from -remoteRead.url is used") + disablePathAppend = flag.Bool("remoteRead.disablePathAppend", false, "Whether to disable automatic appending of '/api/v1' path to the configured -remoteRead.url.") ) // Init creates a Querier from provided flag values. @@ -43,5 +44,5 @@ func Init() (datasource.QuerierBuilder, error) { return nil, fmt.Errorf("failed to configure auth: %w", err) } c := &http.Client{Transport: tr} - return datasource.NewVMStorage(*addr, authCfg, 0, 0, false, c), nil + return datasource.NewVMStorage(*addr, authCfg, 0, 0, false, c, *disablePathAppend), nil } diff --git a/docs/vmalert.md b/docs/vmalert.md index 2dc811a6da..d630b557de 100644 --- a/docs/vmalert.md +++ b/docs/vmalert.md @@ -355,12 +355,12 @@ See full description for these flags in `./vmalert --help`. ## Monitoring -`vmalert` exports various metrics in Prometheus exposition format at `http://vmalert-host:8880/metrics` page. -We recommend setting up regular scraping of this page either through `vmagent` or by Prometheus so that the exported +`vmalert` exports various metrics in Prometheus exposition format at `http://vmalert-host:8880/metrics` page. +We recommend setting up regular scraping of this page either through `vmagent` or by Prometheus so that the exported metrics may be analyzed later. Use official [Grafana dashboard](https://grafana.com/grafana/dashboards/14950) for `vmalert` overview. -If you have suggestions for improvements or have found a bug - please open an issue on github or add +If you have suggestions for improvements or have found a bug - please open an issue on github or add a review to the dashboard. @@ -500,6 +500,8 @@ The shortlist of configuration flags is the following: Optional bearer auth token to use for -remoteRead.url. -remoteRead.bearerTokenFile string Optional path to bearer token file to use for -remoteRead.url. + -remoteRead.disablePathAppend + Whether to disable automatic appending of '/api/v1/query' path to the configured -remoteRead.url. -remoteRead.ignoreRestoreErrors Whether to ignore errors from remote storage when restoring alerts state on startup. (default true) -remoteRead.lookback duration From 5416e18007c765deb3e99efa572c8075cbb540de Mon Sep 17 00:00:00 2001 From: Miro Prasil Date: Mon, 18 Oct 2021 08:29:34 +0100 Subject: [PATCH 44/77] vmctl influx convert bool to number (#1714) vmctl: properly convert influx bools into integer representation When using vmctl influx, the import would fail importing boolean fields with: ``` failed to convert value "some".0 to float64: unexpected value type true ``` This converts `true` to `1` and `false` to `0`. Fixes #1709 --- app/vmctl/influx/parser.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/vmctl/influx/parser.go b/app/vmctl/influx/parser.go index e8b425f422..5cd5a374c3 100644 --- a/app/vmctl/influx/parser.go +++ b/app/vmctl/influx/parser.go @@ -58,6 +58,12 @@ func toFloat64(v interface{}) (float64, error) { return float64(i), nil case string: return strconv.ParseFloat(i, 64) + case bool: + if i { + return 1, nil + } else { + return 0, nil + } default: return 0, fmt.Errorf("unexpected value type %v", i) } From 478854d36d5b43959729ae99f7db36d33e221de6 Mon Sep 17 00:00:00 2001 From: Roman Khavronenko Date: Mon, 18 Oct 2021 15:10:44 +0300 Subject: [PATCH 45/77] vmctl: follow-up after 95d1d38595861f3ec5a8aae07df31c699e8c41ee (#1718) Signed-off-by: hagen1778 --- app/vmctl/influx/parser.go | 3 +-- app/vmctl/influx/parser_test.go | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/app/vmctl/influx/parser.go b/app/vmctl/influx/parser.go index 5cd5a374c3..a4b7ab7d6a 100644 --- a/app/vmctl/influx/parser.go +++ b/app/vmctl/influx/parser.go @@ -61,9 +61,8 @@ func toFloat64(v interface{}) (float64, error) { case bool: if i { return 1, nil - } else { - return 0, nil } + return 0, nil default: return 0, fmt.Errorf("unexpected value type %v", i) } diff --git a/app/vmctl/influx/parser_test.go b/app/vmctl/influx/parser_test.go index 15ce9adaa5..70ee424bba 100644 --- a/app/vmctl/influx/parser_test.go +++ b/app/vmctl/influx/parser_test.go @@ -1,6 +1,7 @@ package influx import ( + "encoding/json" "reflect" "testing" ) @@ -58,3 +59,28 @@ func TestSeries_Unmarshal(t *testing.T) { } } } + +func TestToFloat64(t *testing.T) { + f := func(in interface{}, want float64) { + t.Helper() + got, err := toFloat64(in) + if err != nil { + t.Fatalf("unexpected err: %s", err) + } + if got != want { + t.Errorf("got %v; want %v", got, want) + } + } + f("123.4", 123.4) + f(float64(123.4), 123.4) + f(float32(12), 12) + f(123, 123) + f(true, 1) + f(false, 0) + f(json.Number("123456.789"), 123456.789) + + _, err := toFloat64("text") + if err == nil { + t.Fatalf("expected to get err; got nil instead") + } +} From 146a5b504c6b14ed256ca3e174e09ec05582ff19 Mon Sep 17 00:00:00 2001 From: Roman Khavronenko Date: Mon, 18 Oct 2021 15:12:47 +0300 Subject: [PATCH 46/77] vmalert: remove extra `/` from path in WEB interface (#1717) The extra `/` may cause issues when additional path prefixes are configured. Also, removing it makes it consistent with the rest of declarations. Signed-off-by: hagen1778 --- app/vmalert/web.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/vmalert/web.go b/app/vmalert/web.go index ef31ce3598..a82ba776e0 100644 --- a/app/vmalert/web.go +++ b/app/vmalert/web.go @@ -32,9 +32,9 @@ func initLinks() { {path.Join(pathPrefix, "-/reload"), "reload configuration"}, } navItems = []tpl.NavItem{ - {Name: "vmalert", Url: path.Join(pathPrefix, "/")}, + {Name: "vmalert", Url: pathPrefix}, {Name: "Groups", Url: path.Join(pathPrefix, "groups")}, - {Name: "Alerts", Url: path.Join(pathPrefix, "/alerts")}, + {Name: "Alerts", Url: path.Join(pathPrefix, "alerts")}, {Name: "Docs", Url: "https://docs.victoriametrics.com/vmalert.html"}, } } From a3e09a57c251d21094a7d1f65b924389380fba85 Mon Sep 17 00:00:00 2001 From: Yury Molodov Date: Mon, 18 Oct 2021 15:16:57 +0300 Subject: [PATCH 47/77] vmui: features (#1711) * feat: initial uPlot graph * feat: add zoom/pan for graph * fix: add zoom by ctrl/mac * fix: remove unused code * feat: add toggle cache for fetch * feat: add fix y-axis limits * fix: stop point events while panning * fix: change getting cursor position when scaling * feat: add cursor tooltip to graph * fix: uninstall chart.js * fix: change link for create an issue * fix: set default cache value to true * app/vmalert: follow-up after 0e2486df5631d8c8ed8dab51de070dc8c3c2ab33 * docs/CHANGELOG.md: document 5416e18007c765deb3e99efa572c8075cbb540de * app/vmui: `make vmui-update` Co-authored-by: Aliaksandr Valialkin --- app/vmalert/README.md | 2 +- app/vmalert/remoteread/init.go | 2 +- app/vmselect/vmui/asset-manifest.json | 20 +-- app/vmselect/vmui/index.html | 2 +- ...1dd8.chunk.css => main.acc63211.chunk.css} | 2 +- .../vmui/static/js/2.72d7cb01.chunk.js | 2 - .../vmui/static/js/2.856ca35b.chunk.js | 2 + ...SE.txt => 2.856ca35b.chunk.js.LICENSE.txt} | 13 -- ....3cf0cbc4.chunk.js => 3.daeccd9c.chunk.js} | 2 +- .../vmui/static/js/main.33166fff.chunk.js | 1 + .../vmui/static/js/main.3fb3f4d1.chunk.js | 1 - ...n.22ec3f63.js => runtime-main.b765a534.js} | 2 +- app/vmui/packages/vmui/package-lock.json | 110 ----------------- app/vmui/packages/vmui/package.json | 5 - app/vmui/packages/vmui/src/App.tsx | 9 +- app/vmui/packages/vmui/src/api/query-range.ts | 4 +- .../Home/Configurator/QueryConfigurator.tsx | 98 ++++++++------- .../Home/Configurator/useFetchQuery.ts | 4 +- .../vmui/src/components/Home/HomeLayout.tsx | 2 +- .../src/components/Home/Views/GraphView.tsx | 1 - .../src/components/LineChart/LineChart.tsx | 114 +++++++++--------- .../vmui/src/components/LineChart/tooltip.css | 35 ++++++ .../packages/vmui/src/state/common/reducer.ts | 23 ++-- .../src/state/graph/GraphStateContext.tsx | 25 ++++ .../packages/vmui/src/state/graph/reducer.ts | 49 ++++++++ .../src/utils/chartjs-register-plugins.ts | 4 - app/vmui/packages/vmui/src/utils/color.ts | 12 ++ app/vmui/packages/vmui/src/utils/storage.ts | 3 +- app/vmui/packages/vmui/src/utils/uPlot.ts | 64 ++++++++++ docs/CHANGELOG.md | 3 + docs/vmalert.md | 2 +- 31 files changed, 346 insertions(+), 272 deletions(-) rename app/vmselect/vmui/static/css/{main.cbb91dd8.chunk.css => main.acc63211.chunk.css} (58%) delete mode 100644 app/vmselect/vmui/static/js/2.72d7cb01.chunk.js create mode 100644 app/vmselect/vmui/static/js/2.856ca35b.chunk.js rename app/vmselect/vmui/static/js/{2.72d7cb01.chunk.js.LICENSE.txt => 2.856ca35b.chunk.js.LICENSE.txt} (93%) rename app/vmselect/vmui/static/js/{3.3cf0cbc4.chunk.js => 3.daeccd9c.chunk.js} (97%) create mode 100644 app/vmselect/vmui/static/js/main.33166fff.chunk.js delete mode 100644 app/vmselect/vmui/static/js/main.3fb3f4d1.chunk.js rename app/vmselect/vmui/static/js/{runtime-main.22ec3f63.js => runtime-main.b765a534.js} (94%) create mode 100644 app/vmui/packages/vmui/src/components/LineChart/tooltip.css create mode 100644 app/vmui/packages/vmui/src/state/graph/GraphStateContext.tsx create mode 100644 app/vmui/packages/vmui/src/state/graph/reducer.ts delete mode 100644 app/vmui/packages/vmui/src/utils/chartjs-register-plugins.ts create mode 100644 app/vmui/packages/vmui/src/utils/color.ts create mode 100644 app/vmui/packages/vmui/src/utils/uPlot.ts diff --git a/app/vmalert/README.md b/app/vmalert/README.md index 9e481694bf..d7169df6cd 100644 --- a/app/vmalert/README.md +++ b/app/vmalert/README.md @@ -513,7 +513,7 @@ The shortlist of configuration flags is the following: -remoteRead.tlsServerName string Optional TLS server name to use for connections to -remoteRead.url. By default the server name from -remoteRead.url is used -remoteRead.url vmalert - Optional URL to VictoriaMetrics or vmselect that will be used to restore alerts state. This configuration makes sense only if vmalert was configured with `remoteWrite.url` before and has been successfully persisted its state. E.g. http://127.0.0.1:8428 + Optional URL to VictoriaMetrics or vmselect that will be used to restore alerts state. This configuration makes sense only if vmalert was configured with `remoteWrite.url` before and has been successfully persisted its state. E.g. http://127.0.0.1:8428. See also -remoteRead.disablePathAppend -remoteWrite.basicAuth.password string Optional basic auth password for -remoteWrite.url -remoteWrite.basicAuth.passwordFile string diff --git a/app/vmalert/remoteread/init.go b/app/vmalert/remoteread/init.go index 12a9024723..427b5def20 100644 --- a/app/vmalert/remoteread/init.go +++ b/app/vmalert/remoteread/init.go @@ -26,7 +26,7 @@ var ( "By default system CA is used") tlsServerName = flag.String("remoteRead.tlsServerName", "", "Optional TLS server name to use for connections to -remoteRead.url. "+ "By default the server name from -remoteRead.url is used") - disablePathAppend = flag.Bool("remoteRead.disablePathAppend", false, "Whether to disable automatic appending of '/api/v1' path to the configured -remoteRead.url.") + disablePathAppend = flag.Bool("remoteRead.disablePathAppend", false, "Whether to disable automatic appending of '/api/v1/query' path to the configured -remoteRead.url.") ) // Init creates a Querier from provided flag values. diff --git a/app/vmselect/vmui/asset-manifest.json b/app/vmselect/vmui/asset-manifest.json index b901f28930..9e190e2355 100644 --- a/app/vmselect/vmui/asset-manifest.json +++ b/app/vmselect/vmui/asset-manifest.json @@ -1,19 +1,19 @@ { "files": { - "main.css": "./static/css/main.cbb91dd8.chunk.css", - "main.js": "./static/js/main.3fb3f4d1.chunk.js", - "runtime-main.js": "./static/js/runtime-main.22ec3f63.js", + "main.css": "./static/css/main.acc63211.chunk.css", + "main.js": "./static/js/main.33166fff.chunk.js", + "runtime-main.js": "./static/js/runtime-main.b765a534.js", "static/css/2.a684aa27.chunk.css": "./static/css/2.a684aa27.chunk.css", - "static/js/2.72d7cb01.chunk.js": "./static/js/2.72d7cb01.chunk.js", - "static/js/3.3cf0cbc4.chunk.js": "./static/js/3.3cf0cbc4.chunk.js", + "static/js/2.856ca35b.chunk.js": "./static/js/2.856ca35b.chunk.js", + "static/js/3.daeccd9c.chunk.js": "./static/js/3.daeccd9c.chunk.js", "index.html": "./index.html", - "static/js/2.72d7cb01.chunk.js.LICENSE.txt": "./static/js/2.72d7cb01.chunk.js.LICENSE.txt" + "static/js/2.856ca35b.chunk.js.LICENSE.txt": "./static/js/2.856ca35b.chunk.js.LICENSE.txt" }, "entrypoints": [ - "static/js/runtime-main.22ec3f63.js", + "static/js/runtime-main.b765a534.js", "static/css/2.a684aa27.chunk.css", - "static/js/2.72d7cb01.chunk.js", - "static/css/main.cbb91dd8.chunk.css", - "static/js/main.3fb3f4d1.chunk.js" + "static/js/2.856ca35b.chunk.js", + "static/css/main.acc63211.chunk.css", + "static/js/main.33166fff.chunk.js" ] } \ No newline at end of file diff --git a/app/vmselect/vmui/index.html b/app/vmselect/vmui/index.html index 801909ecc4..d26db7ec0f 100644 --- a/app/vmselect/vmui/index.html +++ b/app/vmselect/vmui/index.html @@ -1 +1 @@ -VM UI
\ No newline at end of file +VM UI
\ No newline at end of file diff --git a/app/vmselect/vmui/static/css/main.cbb91dd8.chunk.css b/app/vmselect/vmui/static/css/main.acc63211.chunk.css similarity index 58% rename from app/vmselect/vmui/static/css/main.cbb91dd8.chunk.css rename to app/vmselect/vmui/static/css/main.acc63211.chunk.css index 40fd14ec21..d54bbca12e 100644 --- a/app/vmselect/vmui/static/css/main.cbb91dd8.chunk.css +++ b/app/vmselect/vmui/static/css/main.acc63211.chunk.css @@ -1 +1 @@ -body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}code{font-family:source-code-pro,Menlo,Monaco,Consolas,"Courier New",monospace}.MuiAccordionSummary-content{margin:10px 0!important}.cm-activeLine{background-color:inherit!important}.cm-wrap{border-radius:4px;border:1px solid #b9b9b9;font-size:10px}.one-line-scroll .cm-wrap{height:24px}.cm-content,.cm-gutter{min-height:51px}.one-line-scroll .cm-content,.one-line-scroll .cm-gutter{min-height:auto}.uplot .u-legend{display:grid;align-items:center;justify-content:start;text-align:left;margin-top:25px}.uplot .u-legend .u-series{font-size:12px} \ No newline at end of file +body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}code{font-family:source-code-pro,Menlo,Monaco,Consolas,"Courier New",monospace}.MuiAccordionSummary-content{margin:10px 0!important}.cm-activeLine{background-color:inherit!important}.cm-wrap{border-radius:4px;border:1px solid #b9b9b9;font-size:10px}.one-line-scroll .cm-wrap{height:24px}.cm-content,.cm-gutter{min-height:51px}.one-line-scroll .cm-content,.one-line-scroll .cm-gutter{min-height:auto}.uplot .u-legend{display:grid;align-items:center;justify-content:start;text-align:left;margin-top:25px}.uplot .u-legend .u-series{font-size:12px}.u-tooltip{position:absolute;display:none;grid-gap:12px;max-width:300px;padding:8px;border-radius:4px;background:rgba(57,57,57,.9);color:#fff;font-size:10px;line-height:1.4em;font-weight:500;word-wrap:break-word;font-family:monospace;pointer-events:none;z-index:100}.u-tooltip-data{display:flex;flex-wrap:wrap;align-items:center;font-size:11px}.u-tooltip__info{display:grid;grid-gap:4px}.u-tooltip__marker{width:12px;height:12px;margin-right:4px} \ No newline at end of file diff --git a/app/vmselect/vmui/static/js/2.72d7cb01.chunk.js b/app/vmselect/vmui/static/js/2.72d7cb01.chunk.js deleted file mode 100644 index 837d637850..0000000000 --- a/app/vmselect/vmui/static/js/2.72d7cb01.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see 2.72d7cb01.chunk.js.LICENSE.txt */ -(this.webpackJsonpvmui=this.webpackJsonpvmui||[]).push([[2],[function(e,t,n){"use strict";e.exports=n(172)},function(e,t,n){"use strict";n.d(t,"a",(function(){return Ke})),n.d(t,"b",(function(){return kt})),n.d(t,"c",(function(){return S})),n.d(t,"d",(function(){return un})),n.d(t,"e",(function(){return nn})),n.d(t,"f",(function(){return hn})),n.d(t,"g",(function(){return c})),n.d(t,"h",(function(){return dn})),n.d(t,"i",(function(){return H})),n.d(t,"j",(function(){return tn})),n.d(t,"k",(function(){return q})),n.d(t,"l",(function(){return K})),n.d(t,"m",(function(){return O})),n.d(t,"n",(function(){return j})),n.d(t,"o",(function(){return jt})),n.d(t,"p",(function(){return ne})),n.d(t,"q",(function(){return F})),n.d(t,"r",(function(){return tt})),n.d(t,"s",(function(){return ue})),n.d(t,"t",(function(){return rt})),n.d(t,"u",(function(){return $})),n.d(t,"v",(function(){return st})),n.d(t,"w",(function(){return ft})),n.d(t,"x",(function(){return lt})),n.d(t,"y",(function(){return xt})),n.d(t,"z",(function(){return f})),n.d(t,"A",(function(){return d})),n.d(t,"B",(function(){return Dt})),n.d(t,"C",(function(){return wt})),n.d(t,"D",(function(){return P})),n.d(t,"E",(function(){return L})),n.d(t,"F",(function(){return Ge})),n.d(t,"G",(function(){return z})),n.d(t,"H",(function(){return Rt})),n.d(t,"I",(function(){return At})),n.d(t,"J",(function(){return Lt})),n.d(t,"K",(function(){return _})),n.d(t,"L",(function(){return v})),n.d(t,"M",(function(){return u})),n.d(t,"N",(function(){return ee})),n.d(t,"O",(function(){return X})),n.d(t,"P",(function(){return J})),n.d(t,"Q",(function(){return Z})),n.d(t,"R",(function(){return re})),n.d(t,"S",(function(){return nt})),n.d(t,"T",(function(){return Et})),n.d(t,"U",(function(){return St})),n.d(t,"V",(function(){return fn})),n.d(t,"W",(function(){return it})),n.d(t,"X",(function(){return I})),n.d(t,"Y",(function(){return C})),n.d(t,"Z",(function(){return ie})),n.d(t,"ab",(function(){return bt})),n.d(t,"bb",(function(){return en})),n.d(t,"cb",(function(){return Cn})),n.d(t,"db",(function(){return Sn})),n.d(t,"eb",(function(){return vn})),n.d(t,"fb",(function(){return mn})),n.d(t,"gb",(function(){return pn})),n.d(t,"hb",(function(){return ct})),n.d(t,"ib",(function(){return ut})),n.d(t,"jb",(function(){return at})),n.d(t,"kb",(function(){return pt})),n.d(t,"lb",(function(){return yt})),n.d(t,"mb",(function(){return Ot})),n.d(t,"nb",(function(){return jn})),n.d(t,"ob",(function(){return se})),n.d(t,"pb",(function(){return yn})),n.d(t,"qb",(function(){return On})),n.d(t,"rb",(function(){return h})),n.d(t,"sb",(function(){return kn})),n.d(t,"tb",(function(){return p})),n.d(t,"ub",(function(){return ae})),n.d(t,"vb",(function(){return g})),n.d(t,"wb",(function(){return Ye})),n.d(t,"xb",(function(){return et})),n.d(t,"yb",(function(){return pe})),n.d(t,"zb",(function(){return R})),n.d(t,"Ab",(function(){return y})),n.d(t,"Bb",(function(){return N})),n.d(t,"Cb",(function(){return b})),n.d(t,"Db",(function(){return m})),n.d(t,"Eb",(function(){return x})),n.d(t,"Fb",(function(){return Pt})),n.d(t,"Gb",(function(){return w})),n.d(t,"Hb",(function(){return bn})),n.d(t,"Ib",(function(){return le})),n.d(t,"Jb",(function(){return G})),n.d(t,"Kb",(function(){return ce})),n.d(t,"Lb",(function(){return l})),n.d(t,"Mb",(function(){return Y})),n.d(t,"Nb",(function(){return te})),n.d(t,"Ob",(function(){return _t})),n.d(t,"Pb",(function(){return k})),n.d(t,"Qb",(function(){return Ct})),n.d(t,"Rb",(function(){return ln})),n.d(t,"Sb",(function(){return ot})),n.d(t,"Tb",(function(){return Mt}));var r=n(25),i=n(13),a=n(4),o=n(6),s=n(7);var l="undefined"===typeof window?function(e){return e()}:window.requestAnimationFrame;function c(e,t,n){var r=n||function(e){return Array.prototype.slice.call(e)},i=!1,a=[];return function(){for(var n=arguments.length,o=new Array(n),s=0;s=0;i--)t.call(n,e[i],i);else for(i=0;in;)e=e[t.substr(n,r-n)],r=A(t,n=r+1);return e}function L(e){return e.charAt(0).toUpperCase()+e.slice(1)}var N=function(e){return"undefined"!==typeof e},z=function(e){return"function"===typeof e},I=function(e,t){if(e.size!==t.size)return!1;var n,r=Object(s.a)(e);try{for(r.s();!(n=r.n()).done;){var i=n.value;if(!t.has(i))return!1}}catch(a){r.e(a)}finally{r.f()}return!0},F=Math.PI,$=2*F,B=$+F,Q=Number.POSITIVE_INFINITY,W=F/180,H=F/2,V=F/4,U=2*F/3,q=Math.log10,Y=Math.sign;function X(e){var t=Math.round(e);e=Z(e,t,e/1e3)?t:e;var n=Math.pow(10,Math.floor(q(e))),r=e/n;return(r<=1?1:r<=2?2:r<=5?5:10)*n}function K(e){var t,n=[],r=Math.sqrt(e);for(t=1;t=e}function ee(e,t,n){var r,i,a;for(r=0,i=e.length;rl&&c=1?e:-(Math.sqrt(1-e*e)-1)},easeOutCirc:function(e){return Math.sqrt(1-(e-=1)*e)},easeInOutCirc:function(e){return(e/=.5)<1?-.5*(Math.sqrt(1-e*e)-1):.5*(Math.sqrt(1-(e-=2)*e)+1)},easeInElastic:function(e){return fe(e)?e:de(e,.075,.3)},easeOutElastic:function(e){return fe(e)?e:he(e,.075,.3)},easeInOutElastic:function(e){var t=.1125;return fe(e)?e:e<.5?.5*de(2*e,t,.45):.5+.5*he(2*e-1,t,.45)},easeInBack:function(e){var t=1.70158;return e*e*((t+1)*e-t)},easeOutBack:function(e){var t=1.70158;return(e-=1)*e*((t+1)*e+t)+1},easeInOutBack:function(e){var t=1.70158;return(e/=.5)<1?e*e*((1+(t*=1.525))*e-t)*.5:.5*((e-=2)*e*((1+(t*=1.525))*e+t)+2)},easeInBounce:function(e){return 1-pe.easeOutBounce(1-e)},easeOutBounce:function(e){var t=7.5625,n=2.75;return e<1/n?t*e*e:e<2/n?t*(e-=1.5/n)*e+.75:e<2.5/n?t*(e-=2.25/n)*e+.9375:t*(e-=2.625/n)*e+.984375},easeInOutBounce:function(e){return e<.5?.5*pe.easeInBounce(2*e):.5*pe.easeOutBounce(2*e-1)+.5}},ve={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},me="0123456789ABCDEF",ge=function(e){return me[15&e]},be=function(e){return me[(240&e)>>4]+me[15&e]},ye=function(e){return(240&e)>>4===(15&e)};function Oe(e){var t=function(e){return ye(e.r)&&ye(e.g)&&ye(e.b)&&ye(e.a)}(e)?ge:be;return e?"#"+t(e.r)+t(e.g)+t(e.b)+(e.a<255?t(e.a):""):e}function ke(e){return e+.5|0}var xe=function(e,t,n){return Math.max(Math.min(e,n),t)};function we(e){return xe(ke(2.55*e),0,255)}function je(e){return xe(ke(255*e),0,255)}function Se(e){return xe(ke(e/2.55)/100,0,1)}function Ce(e){return xe(ke(100*e),0,100)}var Me=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;var Ee=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function Te(e,t,n){var r=t*Math.min(n,1-n),i=function(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:(t+e/30)%12;return n-r*Math.max(Math.min(i-3,9-i,1),-1)};return[i(0),i(8),i(4)]}function Pe(e,t,n){var r=function(r){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:(r+e/60)%6;return n-n*t*Math.max(Math.min(i,4-i,1),0)};return[r(5),r(3),r(1)]}function _e(e,t,n){var r,i=Te(e,1,.5);for(t+n>1&&(t*=r=1/(t+n),n*=r),r=0;r<3;r++)i[r]*=1-t-n,i[r]+=t;return i}function De(e){var t,n,r,i=e.r/255,a=e.g/255,o=e.b/255,s=Math.max(i,a,o),l=Math.min(i,a,o),c=(s+l)/2;return s!==l&&(r=s-l,n=c>.5?r/(2-s-l):r/(s+l),t=60*(t=s===i?(a-o)/r+(a>16&255,n>>8&255,255&n]}return a}()).transparent=[0,0,0,0]);var t=ze[e.toLowerCase()];return t&&{r:t[0],g:t[1],b:t[2],a:4===t.length?t[3]:255}}function Be(e,t,n){if(e){var r=De(e);r[t]=Math.max(0,Math.min(r[t]+r[t]*n,0===t?360:1)),r=Re(r),e.r=r[0],e.g=r[1],e.b=r[2]}}function Qe(e,t){return e?Object.assign(t||{},e):e}function We(e){var t={r:0,g:0,b:0,a:255};return Array.isArray(e)?e.length>=3&&(t={r:e[0],g:e[1],b:e[2],a:255},e.length>3&&(t.a=je(e[3]))):(t=Qe(e,{r:0,g:0,b:0,a:1})).a=je(t.a),t}function He(e){return"r"===e.charAt(0)?function(e){var t,n,r,i=Me.exec(e),a=255;if(i){if(i[7]!==t){var o=+i[7];a=255&(i[8]?we(o):255*o)}return t=+i[1],n=+i[3],r=+i[5],{r:t=255&(i[2]?we(t):t),g:n=255&(i[4]?we(n):n),b:r=255&(i[6]?we(r):r),a:a}}}(e):Ne(e)}var Ve=function(){function e(t){if(Object(a.a)(this,e),t instanceof e)return t;var n,r=typeof t;"object"===r?n=We(t):"string"===r&&(n=function(e){var t,n=e.length;return"#"===e[0]&&(4===n||5===n?t={r:255&17*ve[e[1]],g:255&17*ve[e[2]],b:255&17*ve[e[3]],a:5===n?17*ve[e[4]]:255}:7!==n&&9!==n||(t={r:ve[e[1]]<<4|ve[e[2]],g:ve[e[3]]<<4|ve[e[4]],b:ve[e[5]]<<4|ve[e[6]],a:9===n?ve[e[7]]<<4|ve[e[8]]:255})),t}(t)||$e(t)||He(t)),this._rgb=n,this._valid=!!n}return Object(o.a)(e,[{key:"rgbString",value:function(){return this._valid?(e=this._rgb)&&(e.a<255?"rgba(".concat(e.r,", ").concat(e.g,", ").concat(e.b,", ").concat(Se(e.a),")"):"rgb(".concat(e.r,", ").concat(e.g,", ").concat(e.b,")")):this._rgb;var e}},{key:"hexString",value:function(){return this._valid?Oe(this._rgb):this._rgb}},{key:"hslString",value:function(){return this._valid?function(e){if(e){var t=De(e),n=t[0],r=Ce(t[1]),i=Ce(t[2]);return e.a<255?"hsla(".concat(n,", ").concat(r,"%, ").concat(i,"%, ").concat(Se(e.a),")"):"hsl(".concat(n,", ").concat(r,"%, ").concat(i,"%)")}}(this._rgb):this._rgb}},{key:"mix",value:function(e,t){var n=this;if(e){var r,i=n.rgb,a=e.rgb,o=t===r?.5:t,s=2*o-1,l=i.a-a.a,c=((s*l===-1?s:(s+l)/(1+s*l))+1)/2;r=1-c,i.r=255&c*i.r+r*a.r+.5,i.g=255&c*i.g+r*a.g+.5,i.b=255&c*i.b+r*a.b+.5,i.a=o*i.a+(1-o)*a.a,n.rgb=i}return n}},{key:"clone",value:function(){return new e(this.rgb)}},{key:"alpha",value:function(e){return this._rgb.a=je(e),this}},{key:"clearer",value:function(e){return this._rgb.a*=1-e,this}},{key:"greyscale",value:function(){var e=this._rgb,t=ke(.3*e.r+.59*e.g+.11*e.b);return e.r=e.g=e.b=t,this}},{key:"opaquer",value:function(e){return this._rgb.a*=1+e,this}},{key:"negate",value:function(){var e=this._rgb;return e.r=255-e.r,e.g=255-e.g,e.b=255-e.b,this}},{key:"lighten",value:function(e){return Be(this._rgb,2,e),this}},{key:"darken",value:function(e){return Be(this._rgb,2,-e),this}},{key:"saturate",value:function(e){return Be(this._rgb,1,e),this}},{key:"desaturate",value:function(e){return Be(this._rgb,1,-e),this}},{key:"rotate",value:function(e){return function(e,t){var n=De(e);n[0]=Le(n[0]+t),n=Re(n),e.r=n[0],e.g=n[1],e.b=n[2]}(this._rgb,e),this}},{key:"valid",get:function(){return this._valid}},{key:"rgb",get:function(){var e=Qe(this._rgb);return e&&(e.a=Se(e.a)),e},set:function(e){this._rgb=We(e)}}]),e}();function Ue(e){return new Ve(e)}var qe=function(e){return e instanceof CanvasGradient||e instanceof CanvasPattern};function Ye(e){return qe(e)?e:Ue(e)}function Xe(e){return qe(e)?e:Ue(e).saturate(.5).darken(.1).hexString()}var Ke=Object.create(null),Ge=Object.create(null);function Ze(e,t){if(!t)return e;for(var n=t.split("."),r=0,i=n.length;rr&&(r=a),r}function nt(e,t,n,r){var i=(r=r||{}).data=r.data||{},a=r.garbageCollect=r.garbageCollect||[];r.font!==t&&(i=r.data={},a=r.garbageCollect=[],r.font=t),e.save(),e.font=t;var o,s,l,c,u,f=0,d=n.length;for(o=0;on.length){for(o=0;o0&&e.stroke()}}function ot(e,t,n){return n=n||.5,!t||e&&e.x>t.left-n&&e.xt.top-n&&e.y5&&void 0!==arguments[5]?arguments[5]:{},l=g(t)?t:[t],c=s.strokeWidth>0&&""!==s.strokeColor;for(e.save(),e.font=i.string,dt(e,s),a=0;a1;)n(r=a+i>>1)?a=r:i=r;return{lo:a,hi:i}}var Ct=function(e,t,n){return St(e,n,(function(r){return e[r][t]=n}))};function Et(e,t,n){for(var r=0,i=e.length;rr&&e[i-1]>n;)i--;return r>0||i0||(Tt.forEach((function(t){delete e[t]})),delete e._chartjs)}}function Dt(e){var t,n,r=new Set;for(t=0,n=e.length;t1&&void 0!==arguments[1]?arguments[1]:[""],a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e,o=arguments.length>3?arguments[3]:void 0,s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:function(){return e[0]};N(o)||(o=Vt("_fallback",e));var l=(t={},Object(i.a)(t,Symbol.toStringTag,"Object"),Object(i.a)(t,"_cacheable",!0),Object(i.a)(t,"_scopes",e),Object(i.a)(t,"_rootScopes",a),Object(i.a)(t,"_fallback",o),Object(i.a)(t,"_getTarget",s),Object(i.a)(t,"override",(function(t){return At([t].concat(Object(r.a)(e)),n,a,o)})),t);return new Proxy(l,{deleteProperty:function(t,n){return delete t[n],delete t._keys,delete e[0][n],!0},get:function(t,r){return It(t,r,(function(){return Ht(r,n,e,t)}))},getOwnPropertyDescriptor:function(e,t){return Reflect.getOwnPropertyDescriptor(e._scopes[0],t)},getPrototypeOf:function(){return Reflect.getPrototypeOf(e[0])},has:function(e,t){return Ut(e).includes(t)},ownKeys:function(e){return Ut(e)},set:function(e,t,n){return(e._storage||(e._storage=s()))[t]=n,delete e[t],delete e._keys,!0}})}function Rt(e,t,n,r){var i={_cacheable:!1,_proxy:e,_context:t,_subProxy:n,_stack:new Set,_descriptors:Lt(e,r),setContext:function(t){return Rt(e,t,n,r)},override:function(i){return Rt(e.override(i),t,n,r)}};return new Proxy(i,{deleteProperty:function(t,n){return delete t[n],delete e[n],!0},get:function(e,t,n){return It(e,t,(function(){return function(e,t,n){var r=e._proxy,i=e._context,a=e._subProxy,o=e._descriptors,l=r[t];z(l)&&o.isScriptable(t)&&(l=function(e,t,n,r){var i=n._proxy,a=n._context,o=n._subProxy,s=n._stack;if(s.has(e))throw new Error("Recursion detected: "+Array.from(s).join("->")+"->"+e);s.add(e),t=t(a,o||r),s.delete(e),b(t)&&(t=Qt(i._scopes,i,e,t));return t}(t,l,e,n));g(l)&&l.length&&(l=function(e,t,n,r){var i=n._proxy,a=n._context,o=n._subProxy,l=n._descriptors;if(N(a.index)&&r(e))t=t[a.index%t.length];else if(b(t[0])){var c=t,u=i._scopes.filter((function(e){return e!==c}));t=[];var f,d=Object(s.a)(c);try{for(d.s();!(f=d.n()).done;){var h=Qt(u,i,e,f.value);t.push(Rt(h,a,o&&o[e],l))}}catch(p){d.e(p)}finally{d.f()}}return t}(t,l,e,o.isIndexable));zt(t,l)&&(l=Rt(l,i,a&&a[t],o));return l}(e,t,n)}))},getOwnPropertyDescriptor:function(t,n){return t._descriptors.allKeys?Reflect.has(e,n)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(e,n)},getPrototypeOf:function(){return Reflect.getPrototypeOf(e)},has:function(t,n){return Reflect.has(e,n)},ownKeys:function(){return Reflect.ownKeys(e)},set:function(t,n,r){return e[n]=r,delete t[n],!0}})}function Lt(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{scriptable:!0,indexable:!0},n=e._scriptable,r=void 0===n?t.scriptable:n,i=e._indexable,a=void 0===i?t.indexable:i,o=e._allKeys,s=void 0===o?t.allKeys:o;return{allKeys:s,scriptable:r,indexable:a,isScriptable:z(r)?r:function(){return r},isIndexable:z(a)?a:function(){return a}}}var Nt=function(e,t){return e?e+L(t):t},zt=function(e,t){return b(t)&&"adapters"!==e};function It(e,t,n){var r=e[t];return N(r)||(r=n(),N(r)&&(e[t]=r)),r}function Ft(e,t,n){return z(e)?e(t,n):e}var $t=function(e,t){return!0===e?t:"string"===typeof e?R(t,e):void 0};function Bt(e,t,n,r){var i,a=Object(s.a)(t);try{for(a.s();!(i=a.n()).done;){var o=i.value,l=$t(n,o);if(l){e.add(l);var c=Ft(l._fallback,n,l);if(N(c)&&c!==n&&c!==r)return c}else if(!1===l&&N(r)&&n!==r)return null}}catch(u){a.e(u)}finally{a.f()}return!1}function Qt(e,t,n,i){var a=t._rootScopes,o=Ft(t._fallback,n,i),s=[].concat(Object(r.a)(e),Object(r.a)(a)),l=new Set;l.add(i);var c=Wt(l,s,n,o||n);return null!==c&&((!N(o)||o===n||null!==(c=Wt(l,s,o,c)))&&At(Array.from(l),[""],a,o,(function(){return function(e,t,n){var r=e._getTarget();t in r||(r[t]={});var i=r[t];if(g(i)&&b(n))return n;return i}(t,n,i)})))}function Wt(e,t,n,r){for(;n;)n=Bt(e,t,n,r);return n}function Ht(e,t,n,r){var i,a,o=Object(s.a)(t);try{for(o.s();!(a=o.n()).done;){var l=a.value;if(i=Vt(Nt(l,e),n),N(i))return zt(e,i)?Qt(n,r,e,i):i}}catch(c){o.e(c)}finally{o.f()}}function Vt(e,t){var n,r=Object(s.a)(t);try{for(r.s();!(n=r.n()).done;){var i=n.value;if(i){var a=i[e];if(N(a))return a}}}catch(o){r.e(o)}finally{r.f()}}function Ut(e){var t=e._keys;return t||(t=e._keys=function(e){var t,n=new Set,r=Object(s.a)(e);try{for(r.s();!(t=r.n()).done;){var i,a=t.value,o=Object(s.a)(Object.keys(a).filter((function(e){return!e.startsWith("_")})));try{for(o.s();!(i=o.n()).done;){var l=i.value;n.add(l)}}catch(c){o.e(c)}finally{o.f()}}}catch(c){r.e(c)}finally{r.f()}return Array.from(n)}(e._scopes)),t}var qt=Number.EPSILON||1e-14,Yt=function(e,t){return t2&&void 0!==arguments[2]?arguments[2]:"x",o=Xt(a),s=e.length,l=Yt(e,0),c=0;c1&&void 0!==arguments[1]?arguments[1]:"x",a=Xt(i),o=e.length,s=Array(o).fill(0),l=Array(o),c=Yt(e,0);for(t=0;t0||t>0)&&(!n||!n.shadowRoot)}(s,l,i.target))n=s,r=l;else{var u=t.getBoundingClientRect();n=o.clientX-u.left,r=o.clientY-u.top,c=!0}return{x:n,y:r,box:c}}(e,n),c=l.x,u=l.y,f=l.box,d=o.left+(f&&s.left),h=o.top+(f&&s.top),p=t.width,v=t.height;return a&&(p-=o.width+s.width,v-=o.height+s.height),{x:Math.round((c-d)/p*n.width/r),y:Math.round((u-h)/v*n.height/r)}}var cn=function(e){return Math.round(10*e)/10};function un(e,t,n,r){var i=an(e),a=sn(i,"margin"),o=rn(i.maxWidth,e,"clientWidth")||Q,s=rn(i.maxHeight,e,"clientHeight")||Q,l=function(e,t,n){var r,i;if(void 0===t||void 0===n){var a=nn(e);if(a){var o=a.getBoundingClientRect(),s=an(a),l=sn(s,"border","width"),c=sn(s,"padding");t=o.width-c.width-l.width,n=o.height-c.height-l.height,r=rn(s.maxWidth,a,"clientWidth"),i=rn(s.maxHeight,a,"clientHeight")}else t=e.clientWidth,n=e.clientHeight}return{width:t,height:n,maxWidth:r||Q,maxHeight:i||Q}}(e,t,n),c=l.width,u=l.height;if("content-box"===i.boxSizing){var f=sn(i,"border","width"),d=sn(i,"padding");c-=d.width+f.width,u-=d.height+f.height}return c=Math.max(0,c-a.width),u=Math.max(0,r?Math.floor(c/r):u-a.height),c=cn(Math.min(c,o,l.maxWidth)),u=cn(Math.min(u,s,l.maxHeight)),c&&!u&&(u=cn(c/2)),{width:c,height:u}}function fn(e,t,n){var r=t||1,i=Math.floor(e.height*r),a=Math.floor(e.width*r);e.height=i/r,e.width=a/r;var o=e.canvas;return o.style&&(n||!o.style.height&&!o.style.width)&&(o.style.height="".concat(e.height,"px"),o.style.width="".concat(e.width,"px")),(e.currentDevicePixelRatio!==r||o.height!==i||o.width!==a)&&(e.currentDevicePixelRatio=r,o.height=i,o.width=a,e.ctx.setTransform(r,0,0,r,0,0),!0)}var dn=function(){var e=!1;try{var t={get passive(){return e=!0,!1}};window.addEventListener("test",null,t),window.removeEventListener("test",null,t)}catch(n){}return e}();function hn(e,t){var n=function(e,t){return an(e).getPropertyValue(t)}(e,t),r=n&&n.match(/^(\d+)(\.\d+)?px$/);return r?+r[1]:void 0}function pn(e,t,n,r){return{x:e.x+n*(t.x-e.x),y:e.y+n*(t.y-e.y)}}function vn(e,t,n,r){return{x:e.x+n*(t.x-e.x),y:"middle"===r?n<.5?e.y:t.y:"after"===r?n<1?e.y:t.y:n>0?t.y:e.y}}function mn(e,t,n,r){var i={x:e.cp2x,y:e.cp2y},a={x:t.cp1x,y:t.cp1y},o=pn(e,i,n),s=pn(i,a,n),l=pn(a,t,n),c=pn(o,s,n),u=pn(s,l,n);return pn(c,u,n)}var gn=new Map;function bn(e,t,n){return function(e,t){t=t||{};var n=e+JSON.stringify(t),r=gn.get(n);return r||(r=new Intl.NumberFormat(e,t),gn.set(n,r)),r}(t,n).format(e)}function yn(e,t,n){return e?function(e,t){return{x:function(n){return e+e+t-n},setWidth:function(e){t=e},textAlign:function(e){return"center"===e?e:"right"===e?"left":"right"},xPlus:function(e,t){return e-t},leftForLtr:function(e,t){return e-t}}}(t,n):{x:function(e){return e},setWidth:function(e){},textAlign:function(e){return e},xPlus:function(e,t){return e+t},leftForLtr:function(e,t){return e}}}function On(e,t){var n,r;"ltr"!==t&&"rtl"!==t||(r=[(n=e.canvas.style).getPropertyValue("direction"),n.getPropertyPriority("direction")],n.setProperty("direction",t,"important"),e.prevTextDirection=r)}function kn(e,t){void 0!==t&&(delete e.prevTextDirection,e.canvas.style.setProperty("direction",t[0],t[1]))}function xn(e){return"angle"===e?{between:le,compare:oe,normalize:se}:{between:function(e,t,n){return e>=Math.min(t,n)&&e<=Math.max(n,t)},compare:function(e,t){return e-t},normalize:function(e){return e}}}function wn(e){var t=e.start,n=e.end,r=e.count;return{start:t%r,end:n%r,loop:e.loop&&(n-t+1)%r===0,style:e.style}}function jn(e,t,n){if(!n)return[e];for(var r,i,a,o=n.property,s=n.start,l=n.end,c=t.length,u=xn(o),f=u.compare,d=u.between,h=u.normalize,p=function(e,t,n){var r,i,a=n.property,o=n.start,s=n.end,l=xn(a),c=l.between,u=l.normalize,f=t.length,d=e.start,h=e.end,p=e.loop;if(p){for(d+=f,h+=f,r=0,i=f;ri&&e[a%t].skip;)a--;return{start:i,end:a%=t}}(n,i,a,r),s=o.start,l=o.end;return Mn(e,!0===r?[{start:s,end:l,loop:a}]:function(e,t,n,r){var i,a=e.length,o=[],s=t,l=e[t];for(i=t+1;i<=n;++i){var c=e[i%a];c.skip||c.stop?l.skip||(r=!1,o.push({start:t%a,end:(i-1)%a,loop:r}),t=s=c.stop?i:null):(s=i,l.skip&&(t=i)),l=c}return null!==s&&o.push({start:t%a,end:s%a,loop:r}),o}(n,s,l1&&void 0!==arguments[1]&&arguments[1];m(this,e,t)}},{key:"composeDesc",value:function(e){return this.empty?e:e.empty?this:b(this,e)}},{key:"mapDesc",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return e.empty?this:g(this,e,t)}},{key:"mapPos",value:function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:c.Simple,r=0,i=0,a=0;ae)return i+(e-r);i+=o}else{if(n!=c.Simple&&l>=e&&(n==c.TrackDel&&re||n==c.TrackBefore&&re))return-1;if(l>e||l==e&&t<0&&!o)return e==r||t<0?i:i+s;i+=s}r=l}if(e>r)throw new RangeError("Position ".concat(e," is out of range for changeset of length ").concat(r));return i}},{key:"mapPosStable",value:function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1,n=0,r=0,i=0,a=0;ae)return r+Math.max(0,e-n);i=r+=o}else{if(t<=0&&l>=e)return i;r+=s}n=l}return r}},{key:"touchesRange",value:function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,n=0,r=0;n=0&&r<=t&&o>=e)return!(rt)||"cover";r=o}return!1}},{key:"toString",value:function(){for(var e="",t=0;t=0?":"+r:"")}return e}},{key:"length",get:function(){for(var e=0,t=0;t1&&void 0!==arguments[1]&&arguments[1];return g(this,e,t,!0)}},{key:"invert",value:function(e){for(var t=this.sections.slice(),r=[],i=0,a=0;i=0){t[i]=s,t[i+1]=o;for(var c=i>>1;r.length1&&void 0!==arguments[1]&&arguments[1];return e.empty?this:g(this,e,t,!0)}},{key:"iterChanges",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];m(this,e,t)}},{key:"filter",value:function(e){var t=[],r=[],i=[],a=new y(this);e:for(var o=0,s=0;;){for(var l=o==e.length?1e9:e[o++];s0&&v(r,t,a.text),a.forward(c),s+=c}for(var f=e[o++];s>1].toJSON()])}return e}},{key:"desc",get:function(){return new d(this.sections)}}],[{key:"of",value:function(e,t,i){var a=[],o=[],s=0,c=null;function u(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(e||a.length){sy||g<0||y>t)throw new RangeError("Invalid change range ".concat(g," to ").concat(y," (in doc of length ").concat(t,")"));var k=O?"string"==typeof O?l.a.of(O.split(i||f)):O:l.a.empty,x=k.length;if(g==y&&0==x)return;gs&&p(a,g-s,-1),p(a,y-g,x),v(o,a,k),s=y}}(e),u(!c),c}},{key:"empty",value:function(e){return new n(e?[e,-1]:[],[])}},{key:"fromJSON",value:function(e){for(var t=[],r=[],i=0;i3&&void 0!==arguments[3]&&arguments[3];if(!(0==t&&n<=0)){var i=e.length-2;i>=0&&n<=0&&n==e[i+1]?e[i]+=t:0==t&&0==e[i]?e[i+1]+=n:r?(e[i]+=t,e[i+1]+=n):e.push(t,n)}}function v(e,t,n){if(0!=n.length){var r=t.length-2>>1;if(r>1])),!(n||o==e.sections.length||e.sections[o+1]<0);)s=e.sections[o++],c=e.sections[o++];t(i,u,a,f,d),i=u,a=f}}}function g(e,t,n){for(var r=arguments.length>3&&void 0!==arguments[3]&&arguments[3],i=[],a=r?[]:null,o=new y(e),s=new y(t),l=0,c=0;;)if(-1==o.ins)l+=o.len,o.next();else if(-1==s.ins&&c=0&&(o.done||cc&&!o.done&&l+o.len=0)){if(o.done&&s.done)return a?new h(i,a):new d(i);throw new Error("Mismatched change set lengths")}for(var f=0,m=l+o.len;;)if(s.ins>=0&&c>l&&c+s.len2&&void 0!==arguments[2]&&arguments[2],r=[],i=n?[]:null,a=new y(e),o=new y(t),s=!1;;){if(a.done&&o.done)return i?new h(r,i):new d(r);if(0==a.ins)p(r,a.len,0,s),a.next();else if(0!=o.len||o.done){if(a.done||o.done)throw new Error("Mismatched change set lengths");var l=Math.min(a.len2,o.len),c=r.length;if(-1==a.ins){var u=-1==o.ins?-1:o.off?0:o.ins;p(r,l,u,s),i&&u&&v(i,r,o.text)}else-1==o.ins?(p(r,a.off?0:a.len,l,s),i&&v(i,r,a.textBit(l))):(p(r,a.off?0:a.len,o.off?0:o.ins,s),i&&!o.off&&v(i,r,o.text));s=(a.ins>l||o.ins>=0&&o.len>l)&&(s||r.length>c),a.forward2(l),o.forward(l)}else p(r,0,o.ins,s),i&&v(i,r,o.text),o.next()}}var y=function(){function e(t){Object(o.a)(this,e),this.set=t,this.i=0,this.next()}return Object(s.a)(e,[{key:"next",value:function(){var e=this.set.sections;this.i>1;return n>=t.length&&!e?l.a.empty:t[n].slice(this.off,null==e?void 0:this.off+e)}},{key:"forward",value:function(e){e==this.len?this.next():(this.len-=e,this.off+=e)}},{key:"forward2",value:function(e){-1==this.ins?this.forward(e):e==this.ins?this.next():(this.ins-=e,this.off+=e)}},{key:"done",get:function(){return-2==this.ins}},{key:"len2",get:function(){return this.ins<0?this.len:this.ins}},{key:"text",get:function(){var e=this.set.inserted,t=this.i-2>>1;return t>=e.length?l.a.empty:e[t]}}]),e}(),O=function(){function e(t,n,r){Object(o.a)(this,e),this.from=t,this.to=n,this.flags=r}return Object(s.a)(e,[{key:"map",value:function(t){var n=t.mapPos(this.from),r=t.mapPos(this.to);return n==this.from&&r==this.to?this:new e(n,r,this.flags)}},{key:"extend",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e;if(e<=this.anchor&&t>=this.anchor)return k.range(e,t);var n=Math.abs(e-this.anchor)>Math.abs(t-this.anchor)?e:t;return k.range(this.anchor,n)}},{key:"eq",value:function(e){return this.anchor==e.anchor&&this.head==e.head}},{key:"toJSON",value:function(){return{anchor:this.anchor,head:this.head}}},{key:"anchor",get:function(){return 16&this.flags?this.to:this.from}},{key:"head",get:function(){return 16&this.flags?this.from:this.to}},{key:"empty",get:function(){return this.from==this.to}},{key:"assoc",get:function(){return 4&this.flags?-1:8&this.flags?1:0}},{key:"bidiLevel",get:function(){var e=3&this.flags;return 3==e?null:e}},{key:"goalColumn",get:function(){var e=this.flags>>5;return 33554431==e?void 0:e}}],[{key:"fromJSON",value:function(e){if(!e||"number"!=typeof e.anchor||"number"!=typeof e.head)throw new RangeError("Invalid JSON representation for SelectionRange");return k.range(e.anchor,e.head)}}]),e}(),k=function(){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;Object(o.a)(this,e),this.ranges=t,this.primaryIndex=n}return Object(s.a)(e,[{key:"map",value:function(t){return t.empty?this:e.create(this.ranges.map((function(e){return e.map(t)})),this.primaryIndex)}},{key:"eq",value:function(e){if(this.ranges.length!=e.ranges.length||this.primaryIndex!=e.primaryIndex)return!1;for(var t=0;t1&&void 0!==arguments[1])||arguments[1];return e.create([t].concat(this.ranges),n?0:this.primaryIndex+1)}},{key:"replaceRange",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.primaryIndex,r=this.ranges.slice();return r[n]=t,e.create(r,this.primaryIndex)}},{key:"toJSON",value:function(){return{ranges:this.ranges.map((function(e){return e.toJSON()})),primaryIndex:this.primaryIndex}}},{key:"primary",get:function(){return this.ranges[this.primaryIndex]}}],[{key:"fromJSON",value:function(t){if(!t||!Array.isArray(t.ranges)||"number"!=typeof t.primaryIndex||t.primaryIndex>=t.ranges.length)throw new RangeError("Invalid JSON representation for EditorSelection");return new e(t.ranges.map((function(e){return O.fromJSON(e)})),t.primaryIndex)}},{key:"single",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t;return new e([e.range(t,n)],0)}},{key:"create",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(0==t.length)throw new RangeError("A selection needs at least one range");for(var r=0,i=0;i1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2?arguments[2]:void 0,r=arguments.length>3?arguments[3]:void 0;return new O(e,e,(0==t?0:t<0?4:8)|(null==n?3:Math.min(2,n))|(null!==r&&void 0!==r?r:33554431)<<5)}},{key:"range",value:function(e,t,n){var r=(null!==n&&void 0!==n?n:33554431)<<5;return t1&&void 0!==arguments[1]?arguments[1]:0,n=e[t];e.sort((function(e,t){return e.from-t.from})),t=e.indexOf(n);for(var r=1;ri.head?k.range(s,o):k.range(o,s))}}return new k(e,t)}function w(e,t){var n,i=Object(r.a)(e.ranges);try{for(i.s();!(n=i.n()).done;){if(n.value.to>t)throw new RangeError("Selection points outside of document")}}catch(a){i.e(a)}finally{i.f()}}var j=0,S=function(){function e(t,n,r,i){Object(o.a)(this,e),this.combine=t,this.compareInput=n,this.compare=r,this.isStatic=i,this.id=j++,this.default=t([])}return Object(s.a)(e,[{key:"of",value:function(e){return new M([],this,0,e)}},{key:"compute",value:function(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new M(e,this,1,t)}},{key:"computeN",value:function(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new M(e,this,2,t)}},{key:"from",value:function(e,t){var n=this;return function(r){return D(t,n.compute([r],(function(t){return e(t.field(r))})))}}},{key:"nFrom",value:function(e,t){var n=this;return function(r){return D(t,n.computeN([r],(function(t){return e(t.field(r))})))}}}],[{key:"define",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return new e(t.combine||function(e){return e},t.compareInput||function(e,t){return e===t},t.compare||(t.combine?function(e,t){return e===t}:C),!!t.static)}}]),e}();function C(e,t){return e==t||e.length==t.length&&e.every((function(e,n){return e===t[n]}))}var M=function(){function e(t,n,r,i){Object(o.a)(this,e),this.dependencies=t,this.facet=n,this.type=r,this.value=i,this.id=j++}return Object(s.a)(e,[{key:"dynamicSlot",value:function(e){var t,n=this.value,i=this.facet.compareInput,a=e[this.id]>>1,o=2==this.type,s=!1,l=!1,c=[],u=Object(r.a)(this.dependencies);try{for(u.s();!(t=u.n()).done;){var f=t.value;"doc"==f?s=!0:"selection"==f?l=!0:0==(1&e[f.id])&&c.push(e[f.id])}}catch(d){u.e(d)}finally{u.f()}return function(e,t){if(!t||t.reconfigure)return e.values[a]=n(e),1;if(!(s&&t.docChanged||l&&(t.docChanged||t.selection)||c.some((function(t){return(1&z(e,t))>0}))))return 0;var r=n(e),u=t.startState.values[a];return(o?function(e,t,n){if(e.length!=t.length)return!1;for(var r=0;r>1;return function(e,n){var l,c=n?n.reconfigure?n.startState.config.address[t.id]:s<<1:null,u=null==c,f=Object(r.a)(o);try{for(f.s();!(l=f.n()).done;){1&z(e,l.value)&&(u=!0)}}catch(y){f.e(y)}finally{f.f()}if(!u)return 0;for(var d=[],h=0;h>1;return function(e,r){if(!r)return e.values[n]=t.createF(e),1;var i,a=0;if(r.reconfigure){var o=function(e,t){var n=e.config.address[t];return null==n?null:n>>1}(r.startState,t.id);i=null==o?t.createF(r.startState):r.startState.values[o],a=1}else i=r.startState.values[n];var s=t.updateF(i,r);return a||t.compareF(i,s)||(a=1),a&&(e.values[n]=s),a}}}],[{key:"define",value:function(t){var n=[],i=new e(j++,t.create,t.update,t.compare||function(e,t){return e===t},n);if(t.provide){var a,o=Object(r.a)(t.provide);try{for(o.s();!(a=o.n()).done;){var s=a.value;s instanceof S?n.push(s.compute([i],(function(e){return e.field(i)}))):n.push(s(i))}}catch(l){o.e(l)}finally{o.f()}}return i}}]),e}(),P={fallback:3,default:2,extend:1,override:0};function _(e,t){if(!P.hasOwnProperty(t))throw new RangeError("Invalid precedence: ".concat(t));return new A(e,P[t])}function D(e,t){return e?_(t,e):t}var A=function e(t,n){Object(o.a)(this,e),this.e=t,this.prec=n},R=function e(t,n){Object(o.a)(this,e),this.tag=t,this.extension=n};var L=function(){function e(t,n,r,i,a){for(Object(o.a)(this,e),this.source=t,this.replacements=n,this.dynamicSlots=r,this.address=i,this.staticValues=a,this.statusTemplate=[];this.statusTemplate.length>1]}}],[{key:"resolve",value:function(t){var n,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Object.create(null),a=arguments.length>2?arguments[2]:void 0,o=[],s=Object.create(null),l=Object(r.a)(N(t,i));try{for(l.s();!(n=l.n()).done;){var c=n.value;c instanceof T?o.push(c):(s[c.facet.id]||(s[c.facet.id]=[])).push(c)}}catch(b){l.e(b)}finally{l.f()}for(var u=Object.create(null),f=[],d=[],h=function(){var e=v[p];u[e.id]=d.length<<1,d.push((function(t){return e.slot(t)}))},p=0,v=o;p=s)return;var c=n[l].indexOf(e);c>-1&&n[l].splice(c,1)}if(i.set(e,s),Array.isArray(e)){var u,f=Object(r.a)(e);try{for(f.s();!(u=f.n()).done;){o(u.value,s)}}catch(d){f.e(d)}finally{f.f()}}else if(e instanceof R){if(e.tag in a)throw new RangeError("Duplicate use of tag '".concat(String(e.tag),"' in extensions"));a[e.tag]=!0,o(t[e.tag]||e.extension,s)}else e.extension?o(e.extension,s):e instanceof A?o(e.e,e.prec):(n[s].push(e),e instanceof T&&o(e.facets,s))}o(e,P.default);var s,l,c=Object(r.a)((l=t,(Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(l):[]).concat(Object.keys(l))));try{for(c.s();!(s=c.n()).done;){var u=s.value;!(u in a)&&"full"!=u&&t[u]&&(a[u]=!0,o(t[u],P.default))}}catch(f){c.e(f)}finally{c.f()}return n.reduce((function(e,t){return e.concat(t)}))}function z(e,t){if(1&t)return 2;var n=t>>1,r=e.status[n];if(4==r)throw new Error("Cyclic dependency between fields and/or facets");if(2&r)return r;e.status[n]=4;var i=e.config.dynamicSlots[n](e,e.applying);return e.status[n]=2|i}function I(e,t){return 1&t?e.config.staticValues[t>>1]:e.values[t>>1]}var F=S.define({combine:function(e){return e.some((function(e){return e}))},static:!0}),$=S.define({combine:function(e){return e.length?e[0]:void 0},static:!0}),B=S.define(),Q=S.define(),W=new u.c,H=S.define(),V=function(){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};Object(o.a)(this,e),this.state=t,this.options=n}return Object(s.a)(e,[{key:"textAfterPos",value:function(e){var t,n,r=null===(t=this.options)||void 0===t?void 0:t.simulateBreak;return e==r&&(null===(n=this.options)||void 0===n?void 0:n.simulateDoubleBreak)?"":this.state.sliceDoc(e,Math.min(e+100,null!=r&&r>e?r:1e9,this.state.doc.lineAt(e).to))}},{key:"countColumn",value:function(e,t){return Object(l.d)(t<0?e:e.slice(0,t),0,this.state.tabSize)}},{key:"lineIndent",value:function(e){var t,n=null===(t=this.options)||void 0===t?void 0:t.overrideIndentation;if(n){var r=n(e.from);if(r>-1)return r}var i=e.slice(0,Math.min(100,e.length));return this.countColumn(i,i.search(/\S/))}},{key:"column",value:function(e){var t,n=this.state.doc.lineAt(e),r=n.slice(0,e-n.from),i=this.countColumn(r,e-n.from),a=(null===(t=this.options)||void 0===t?void 0:t.overrideIndentation)?this.options.overrideIndentation(n.from):-1;return a>-1&&(i+=a-this.countColumn(r,r.search(/\S/))),i}},{key:"unit",get:function(){return this.state.indentUnit}}]),e}(),U=function(){function e(t,n){Object(o.a)(this,e),this.type=t,this.value=n}return Object(s.a)(e,null,[{key:"define",value:function(){return new q}}]),e}(),q=function(){function e(){Object(o.a)(this,e)}return Object(s.a)(e,[{key:"of",value:function(e){return new U(this,e)}}]),e}(),Y=function(){function e(t,n){Object(o.a)(this,e),this.type=t,this.value=n}return Object(s.a)(e,[{key:"map",value:function(t){var n=this.type.map(this.value,t);return void 0===n?void 0:n==this.value?this:new e(this.type,n)}},{key:"is",value:function(e){return this.type==e}}],[{key:"define",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return new X(e.map||function(e){return e})}},{key:"mapEffects",value:function(e,t){if(!e.length)return e;var n,i=[],a=Object(r.a)(e);try{for(a.s();!(n=a.n()).done;){var o=n.value.map(t);o&&i.push(o)}}catch(s){a.e(s)}finally{a.f()}return i}}]),e}(),X=function(){function e(t){Object(o.a)(this,e),this.map=t}return Object(s.a)(e,[{key:"of",value:function(e){return new Y(this,e)}}]),e}(),K=function(){function e(t,n,r,i,a,s,l){Object(o.a)(this,e),this.startState=t,this.changes=n,this.selection=r,this.effects=i,this.annotations=a,this.reconfigure=s,this.scrollIntoView=l,this._doc=null,this._state=null,r&&w(r,n.newLength),a.some((function(t){return t.type==e.time}))||(this.annotations=a.concat(e.time.of(Date.now())))}return Object(s.a)(e,[{key:"annotation",value:function(e){var t,n=Object(r.a)(this.annotations);try{for(n.s();!(t=n.n()).done;){var i=t.value;if(i.type==e)return i.value}}catch(a){n.e(a)}finally{n.f()}}},{key:"newDoc",get:function(){return this._doc||(this._doc=this.changes.apply(this.startState.doc))}},{key:"newSelection",get:function(){return this.selection||this.startState.selection.map(this.changes)}},{key:"state",get:function(){return this._state||this.startState.applyTransaction(this),this._state}},{key:"docChanged",get:function(){return!this.changes.empty}}]),e}();function G(e,t){for(var n=[],r=0,i=0;;){var a=void 0,o=void 0;if(r=e[r]))a=e[r++],o=e[r++];else{if(!(i=0;f--){var d=u[f](e);e=d instanceof K?d:Array.isArray(d)&&1==d.length&&d[0]instanceof K?d[0]:ee(n,Array.isArray(d)?d:[d],!1)}return e}(s):s}K.time=U.define(),K.userEvent=U.define(),K.addToHistory=U.define();var te,ne=[];!function(e){e[e.Word=0]="Word",e[e.Space=1]="Space",e[e.Other=2]="Other"}(te||(te={}));var re,ie=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;try{re=new RegExp("[\\p{Alphabetic}\\p{Number}_]","u")}catch(le){}function ae(e){return function(t){if(!/\S/.test(t))return te.Space;if(function(e){if(re)return re.test(e);for(var t=0;t"\x80"&&(n.toUpperCase()!=n.toLowerCase()||ie.test(n)))return!0}return!1}(t))return te.Word;for(var n=0;n-1)return te.Word;return te.Other}}var oe=function(){function e(t,n,r){var i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;if(Object(o.a)(this,e),this.config=t,this.doc=n,this.selection=r,this.applying=null,this.status=t.statusTemplate.slice(),i&&!i.reconfigure)this.values=i.startState.values.slice();else if(this.values=t.dynamicSlots.map((function(e){return null})),i)for(var a in t.address){var s=t.address[a],l=i.startState.config.address[a];null!=l&&0==(1&s)&&(this.values[s>>1]=I(i.startState,l))}this.applying=i,i&&(i._state=this);for(var c=0;c1&&void 0!==arguments[1])||arguments[1],n=this.config.address[e.id];if(null!=n)return z(this,n),I(this,n);if(t)throw new RangeError("Field is not present in this state")}},{key:"update",value:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&void 0!==arguments[0]?arguments[0]:[];return t instanceof h?t:h.of(t,this.doc.length,this.facet(e.lineSeparator))}},{key:"toText",value:function(t){return l.a.of(t.split(this.facet(e.lineSeparator)||f))}},{key:"sliceDoc",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.doc.length;return this.doc.sliceString(e,t,this.lineBreak)}},{key:"facet",value:function(e){var t=this.config.address[e.id];return null==t?e.default:(z(this,t),I(this,t))}},{key:"toJSON",value:function(){return{doc:this.sliceDoc(),selection:this.selection.toJSON()}}},{key:"indentString",value:function(t){var n="";if(9==this.facet(e.indentUnit).charCodeAt(0))for(;t>=this.tabSize;)n+="\t",t-=this.tabSize;for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:{};if(!t||"string"!=typeof t.doc)throw new RangeError("Invalid JSON representation for EditorState");return e.create({doc:t.doc,selection:k.fromJSON(t.selection),extensions:n.extensions})}},{key:"create",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=L.resolve(t.extensions||[]),r=t.doc instanceof l.a?t.doc:l.a.of((t.doc||"").split(n.staticFacet(e.lineSeparator)||f)),i=t.selection?t.selection instanceof k?t.selection:k.single(t.selection.anchor,t.selection.head):k.single(0);return w(i,r.length),n.staticFacet(F)||(i=i.asSingle()),new e(n,r,i)}}]),e}();function se(e,t){var n,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a={},o=Object(r.a)(e);try{for(o.s();!(n=o.n()).done;)for(var s=n.value,l=0,c=Object.keys(s);l=e.length?{done:!0}:{done:!1,value:e[i++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,l=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return s=e.done,e},e:function(e){l=!0,o=e},f:function(){try{s||null==n.return||n.return()}finally{if(l)throw o}}}}},function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var r=n(55);function i(e,t){if(null==e)return{};var n,i,a=Object(r.a)(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}},function(e,t,n){"use strict";function r(e){var t,n,i="";if("string"===typeof e||"number"===typeof e)i+=e;else if("object"===typeof e)if(Array.isArray(e))for(t=0;t",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"',229:"Q"},O="undefined"!=typeof navigator&&/Chrome\/(\d+)/.exec(navigator.userAgent),k="undefined"!=typeof navigator&&/Apple Computer/.test(navigator.vendor),x="undefined"!=typeof navigator&&/Gecko\/\d+/.test(navigator.userAgent),w="undefined"!=typeof navigator&&/Mac/.test(navigator.platform),j="undefined"!=typeof navigator&&/MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent),S=O&&(w||+O[1]<57)||x&&w,C=0;C<10;C++)b[48+C]=b[96+C]=String(C);for(C=1;C<=24;C++)b[C+111]="F"+C;for(C=65;C<=90;C++)b[C]=String.fromCharCode(C+32),y[C]=String.fromCharCode(C);for(var M in b)y.hasOwnProperty(M)||(y[M]=b[M]);var E="undefined"!=typeof navigator?[navigator,document]:[{userAgent:"",vendor:"",platform:""},{documentElement:{style:{}}}],T=Object(h.a)(E,2),P=T[0],_=T[1],D=/Edge\/(\d+)/.exec(P.userAgent),A=/MSIE \d/.test(P.userAgent),R=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(P.userAgent),L=!!(A||R||D),N=!L&&/gecko\/(\d+)/i.test(P.userAgent),z=!L&&/Chrome\/(\d+)/.exec(P.userAgent),I="webkitFontSmoothing"in _.documentElement.style,F={mac:/Mac/.test(P.platform),ie:L,ie_version:A?_.documentMode||6:R?+R[1]:D?+D[1]:0,gecko:N,gecko_version:N?+(/Firefox\/(\d+)/.exec(P.userAgent)||[0,0])[1]:0,chrome:!!z,chrome_version:z?+z[1]:0,ios:!L&&/AppleWebKit/.test(P.userAgent)&&/Mobile\/\w+/.test(P.userAgent),android:/Android\b/.test(P.userAgent),webkit:I,safari:/Apple Computer/.test(P.vendor),webkit_version:I?+(/\bAppleWebKit\/(\d+)/.exec(navigator.userAgent)||[0,0])[1]:0,tabSize:null!=_.documentElement.style.tabSize?"tab-size":"-moz-tab-size"};function $(e){return e.getSelection?e.getSelection():document.getSelection()}function B(e,t){if(!t.anchorNode)return!1;try{return e.contains(3==t.anchorNode.nodeType?t.anchorNode.parentNode:t.anchorNode)}catch(n){return!1}}function Q(e){if(3==e.nodeType){var t=J();return t.setEnd(e,e.nodeValue.length),t.setStart(e,0),t.getClientRects()}return 1==e.nodeType?e.getClientRects():[]}function W(e,t,n,r){return!!n&&(V(e,t,n,r,-1)||V(e,t,n,r,1))}function H(e){for(var t=0;;t++)if(!(e=e.previousSibling))return t}function V(e,t,n,r,i){for(;;){if(e==n&&t==r)return!0;if(t==(i<0?0:U(e))){if("DIV"==e.nodeName)return!1;var a=e.parentNode;if(!a||1!=a.nodeType)return!1;t=H(e)+(i<0?0:1),e=a}else{if(1!=e.nodeType)return!1;e=e.childNodes[t+(i<0?-1:0)],t=i<0?U(e):0}}}function U(e){return 3==e.nodeType?e.nodeValue.length:e.childNodes.length}function q(e,t){var n=t?e.left:e.right;return{left:n,right:n,top:e.top,bottom:e.bottom}}function Y(e){return{left:0,right:e.innerWidth,top:0,bottom:e.innerHeight}}var X,K=function(){function e(){Object(f.a)(this,e),this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}return Object(d.a)(e,[{key:"eq",value:function(e){return this.anchorNode==e.anchorNode&&this.anchorOffset==e.anchorOffset&&this.focusNode==e.focusNode&&this.focusOffset==e.focusOffset}},{key:"set",value:function(e){this.anchorNode=e.anchorNode,this.anchorOffset=e.anchorOffset,this.focusNode=e.focusNode,this.focusOffset=e.focusOffset}}]),e}(),G=null;function Z(e){if(e.setActive)return e.setActive();if(G)return e.focus(G);for(var t=[],n=e;n&&(t.push(n,n.scrollTop,n.scrollLeft),n!=n.ownerDocument);n=n.parentNode);if(e.focus(null==G?{get preventScroll(){return G={preventScroll:!0},!0}}:void 0),!G){G=!1;for(var r=0;r2&&void 0!==arguments[2])||arguments[2];Object(f.a)(this,e),this.node=t,this.offset=n,this.precise=r}return Object(d.a)(e,null,[{key:"before",value:function(t,n){return new e(t.parentNode,H(t),n)}},{key:"after",value:function(t,n){return new e(t.parentNode,H(t)+1,n)}}]),e}(),te=[],ne=function(){function e(){Object(f.a)(this,e),this.parent=null,this.dom=null,this.dirty=2}return Object(d.a)(e,[{key:"posBefore",value:function(e){var t,n=this.posAtStart,r=Object(u.a)(this.children);try{for(r.s();!(t=r.n()).done;){var i=t.value;if(i==e)return n;n+=i.length+i.breakAfter}}catch(a){r.e(a)}finally{r.f()}throw new RangeError("Invalid child in posBefore")}},{key:"posAfter",value:function(e){return this.posBefore(e)+e.length}},{key:"coordsAt",value:function(e,t){return null}},{key:"sync",value:function(t){if(2&this.dirty){var n,r=this.dom,i=null,a=Object(u.a)(this.children);try{for(a.s();!(n=a.n()).done;){var o=n.value;if(o.dirty){var s=i?i.nextSibling:r.firstChild;!s||o.dom||e.get(s)||o.reuseDOM(s),o.sync(t),o.dirty=0}t&&t.node==r&&i!=o.dom&&(t.written=!0),ie(r,i,o.dom),i=o.dom}}catch(h){a.e(h)}finally{a.f()}var l=i?i.nextSibling:r.firstChild;for(l&&t&&t.node==r&&(t.written=!0);l;)l=re(l)}else if(1&this.dirty){var c,f=Object(u.a)(this.children);try{for(f.s();!(c=f.n()).done;){var d=c.value;d.dirty&&(d.sync(t),d.dirty=0)}}catch(h){f.e(h)}finally{f.f()}}}},{key:"reuseDOM",value:function(e){return!1}},{key:"localPosFromDOM",value:function(t,n){var r;if(t==this.dom)r=this.dom.childNodes[n];else{for(var i=0==U(t)?0:0==n?-1:1;;){var a=t.parentNode;if(a==this.dom)break;0==i&&a.firstChild!=a.lastChild&&(i=t==a.firstChild?-1:1),t=a}r=i<0?t:t.nextSibling}if(r==this.dom.firstChild)return 0;for(;r&&!e.get(r);)r=r.nextSibling;if(!r)return this.length;for(var o=0,s=0;;o++){var l=this.children[o];if(l.dom==r)return s;s+=l.length+l.breakAfter}}},{key:"domBoundsAround",value:function(e,t){for(var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=-1,i=-1,a=-1,o=-1,s=0,l=n;st)return c.domBoundsAround(e,t,l);if(u>=e&&-1==r&&(r=s,i=l),u>=t&&-1==a){a=s,o=u;break}l=u+c.breakAfter}return{from:i,to:o,startDOM:(r?this.children[r-1].dom.nextSibling:null)||this.dom.firstChild,endDOM:a0&&void 0!==arguments[0]&&arguments[0];2&this.dirty||(this.dirty|=2,this.markParentsDirty(e))}},{key:"markParentsDirty",value:function(e){for(var t=this.parent;t;t=t.parent){if(e&&(t.dirty|=2),1&t.dirty)return;t.dirty|=1,e=!1}}},{key:"setParent",value:function(e){this.parent!=e&&(this.parent=e,this.dirty&&this.markParentsDirty(!0))}},{key:"setDOM",value:function(e){this.dom=e,e.cmView=this}},{key:"replaceChildren",value:function(e,t){var n,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:te;this.markDirty();for(var i=e;i0&&void 0!==arguments[0]?arguments[0]:this.length;return new ae(this.children,e,this.children.length)}},{key:"childPos",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return this.childCursor().findPos(e,t)}},{key:"toString",value:function(){var e=this.constructor.name.replace("View","");return e+(this.children.length?"("+this.children.join()+")":this.length?"["+("Text"==e?this.text:this.length)+"]":"")+(this.breakAfter?"#":"")}},{key:"editorView",get:function(){if(!this.parent)throw new Error("Accessing view in orphan content view");return this.parent.editorView}},{key:"overrideDOMText",get:function(){return null}},{key:"posAtStart",get:function(){return this.parent?this.parent.posBefore(this):0}},{key:"posAtEnd",get:function(){return this.posAtStart+this.length}},{key:"rootView",get:function(){for(var e=this;;){var t=e.parent;if(!t)return e;e=t}}}],[{key:"get",value:function(e){return e.cmView}}]),e}();function re(e){var t=e.nextSibling;return e.parentNode.removeChild(e),t}function ie(e,t,n){var r=t?t.nextSibling:e.firstChild;if(n.parentNode==e)for(;r!=n;)r=re(r);else e.insertBefore(n,r)}ne.prototype.breakAfter=0;var ae=function(){function e(t,n,r){Object(f.a)(this,e),this.children=t,this.pos=n,this.i=r,this.off=0}return Object(d.a)(e,[{key:"findPos",value:function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;;){if(e>this.pos||e==this.pos&&(t>0||0==this.i||this.children[this.i-1].breakAfter))return this.off=e-this.pos,this;var n=this.children[--this.i];this.pos-=n.length+n.breakAfter}}}]),e}(),oe=[],se=function(e){Object(s.a)(n,e);var t=Object(l.a)(n);function n(){return Object(f.a)(this,n),t.apply(this,arguments)}return Object(d.a)(n,[{key:"become",value:function(e){return!1}},{key:"getSide",value:function(){return 0}}]),n}(ne);se.prototype.children=oe;var le=function(e){Object(s.a)(n,e);var t=Object(l.a)(n);function n(e){var r;return Object(f.a)(this,n),(r=t.call(this)).text=e,r}return Object(d.a)(n,[{key:"createDOM",value:function(e){this.setDOM(e||document.createTextNode(this.text))}},{key:"sync",value:function(e){this.dom||this.createDOM(),this.dom.nodeValue!=this.text&&(e&&e.node==this.dom&&(e.written=!0),this.dom.nodeValue=this.text)}},{key:"reuseDOM",value:function(e){return 3==e.nodeType&&(this.createDOM(e),!0)}},{key:"merge",value:function(e,t,r){return(!r||r instanceof n&&!(this.length-(t-e)+r.length>256))&&(this.text=this.text.slice(0,e)+(r?r.text:"")+this.text.slice(t),this.markDirty(),!0)}},{key:"slice",value:function(e){return new n(this.text.slice(e))}},{key:"localPosFromDOM",value:function(e,t){return e==this.dom?t:t?this.text.length:0}},{key:"domAtPos",value:function(e){return new ee(this.dom,e)}},{key:"domBoundsAround",value:function(e,t,n){return{from:n,to:n+this.length,startDOM:this.dom,endDOM:this.dom.nextSibling}}},{key:"coordsAt",value:function(e,t){return ue(this.dom,e,t,this.length)}},{key:"length",get:function(){return this.text.length}}]),n}(se),ce=function(e){Object(s.a)(n,e);var t=Object(l.a)(n);function n(e){var r,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;Object(f.a)(this,n),(r=t.call(this)).mark=e,r.children=a,r.length=o;var s,l=Object(u.a)(a);try{for(l.s();!(s=l.n()).done;){var c=s.value;c.setParent(Object(i.a)(r))}}catch(d){l.e(d)}finally{l.f()}return r}return Object(d.a)(n,[{key:"createDOM",value:function(){var e=document.createElement(this.mark.tagName);if(this.mark.class&&(e.className=this.mark.class),this.mark.attrs)for(var t in this.mark.attrs)e.setAttribute(t,this.mark.attrs[t]);this.setDOM(e)}},{key:"sync",value:function(e){this.dom||this.createDOM(),Object(a.a)(Object(o.a)(n.prototype),"sync",this).call(this,e)}},{key:"merge",value:function(e,t,r,i,a){return(!r||!(!(r instanceof n&&r.mark.eq(this.mark))||e&&i<=0||tt&&r.push(i=0?F.chrome||F.gecko||(t?(i--,o=1):(a++,o=-1)):n<0?i--:a++;var s=J();s.setEnd(e,a),s.setStart(e,i);var l=s.getBoundingClientRect();return o?q(l,o<0):l}var fe=function(e){Object(s.a)(n,e);var t=Object(l.a)(n);function n(e,r,i){var a;return Object(f.a)(this,n),(a=t.call(this)).widget=e,a.length=r,a.side=i,a}return Object(d.a)(n,[{key:"slice",value:function(e){return n.create(this.widget,this.length-e,this.side)}},{key:"sync",value:function(){this.dom&&this.widget.updateDOM(this.dom)||(this.setDOM(this.widget.toDOM(this.editorView)),this.dom.contentEditable="false")}},{key:"getSide",value:function(){return this.side}},{key:"merge",value:function(e,t,r,i,a){return!(r&&(!(r instanceof n&&this.widget.compare(r.widget))||e>0&&i<=0||t0?n.length-1:0;r=n[i],!(e>0?0==i:i==n.length-1||r.top0?-1:1);return r}},{key:"overrideDOMText",get:function(){if(0==this.length)return g.a.empty;for(var e=this;e.parent;)e=e.parent;var t=e.editorView,n=t&&t.state.doc,r=this.posAtStart;return n?n.slice(r,r+this.length):g.a.empty}}],[{key:"create",value:function(e,t,r){return new(e.customView||n)(e,t,r)}}]),n}(se),de=function(e){Object(s.a)(n,e);var t=Object(l.a)(n);function n(){return Object(f.a)(this,n),t.apply(this,arguments)}return Object(d.a)(n,[{key:"domAtPos",value:function(e){return new ee(this.widget.text,e)}},{key:"sync",value:function(){this.dom||this.setDOM(this.widget.toDOM())}},{key:"localPosFromDOM",value:function(e,t){return t?3==e.nodeType?Math.min(t,this.length):this.length:0}},{key:"ignoreMutation",value:function(){return!1}},{key:"coordsAt",value:function(e,t){return ue(this.widget.text,e,t,this.length)}},{key:"overrideDOMText",get:function(){return null}}]),n}(fe);function he(e,t,n,r,i,a){var o,s=e.childCursor(),l=s.findPos(n,1),c=l.i,f=l.off,d=s.findPos(t,-1),h=d.i,p=d.off,v=t-n,m=Object(u.a)(r);try{for(m.s();!(o=m.n()).done;){v+=o.value.length}}catch(w){m.e(w)}finally{m.f()}e.length+=v;var g=e.children;if(h==c&&p){var b=g[h];if(1==r.length&&b.merge(p,f,r[0],i,a))return;if(0==r.length)return void b.merge(p,f,null,i,a);var y=b.slice(f);y.merge(0,0,r[r.length-1],0,a)?r[r.length-1]=y:r.push(y),c++,a=f=0}if(f){var O=g[c];r.length&&O.merge(0,f,r[r.length-1],0,a)?(r.pop(),a=0):O.merge(0,f,null,0,0)}else ci&&n0;r--){var s=t[r-1].dom;if(s.parentNode==e)return ee.after(s)}return new ee(e,0)}function ve(e,t,n){var r,i=e.children;n>0&&t instanceof ce&&i.length&&(r=i[i.length-1])instanceof ce&&r.mark.eq(t.mark)?ve(r,t.children[0],n-1):(i.push(t),t.setParent(e)),e.length+=t.length}function me(e,t,n){for(var r=0,i=0;i=t:o>t)return a.coordsAt(t-r,n);r=o}}return(e.dom.lastChild||e.dom).getBoundingClientRect()}function ge(e,t){for(var n in e)"class"==n&&t.class?t.class+=" "+e.class:"style"==n&&t.style?t.style+=";"+e.style:t[n]=e[n];return t}function be(e,t){if(e==t)return!0;if(!e||!t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!=r.length)return!1;for(var i=0,a=n;i-1}},{key:"heightRelevant",get:function(){return!1}}],[{key:"mark",value:function(e){return new we(e)}},{key:"widget",value:function(e){var t=e.side||0;return e.block&&(t+=200000001*(t>0?1:-1)),new Se(e,t,t,!!e.block,e.widget||null,!1)}},{key:"replace",value:function(e){var t=!!e.block,n=Ce(e),r=n.start,i=n.end;return new Se(e,t?-2e8*(r?2:1):1e8*(r?-1:1),t?2e8*(i?2:1):1e8*(i?1:-1),t,e.widget||null,!0)}},{key:"line",value:function(e){return new je(e)}},{key:"set",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return m.b.of(e,t)}}]),n}(m.d);xe.none=m.b.empty;var we=function(e){Object(s.a)(n,e);var t=Object(l.a)(n);function n(e){var r;Object(f.a)(this,n);var i=Ce(e),a=i.start,o=i.end;return(r=t.call(this,1e8*(a?-1:1),1e8*(o?1:-1),null,e)).tagName=e.tagName||"span",r.class=e.class||"",r.attrs=e.attributes||null,r}return Object(d.a)(n,[{key:"eq",value:function(e){return this==e||e instanceof n&&this.tagName==e.tagName&&this.class==e.class&&be(this.attrs,e.attrs)}},{key:"range",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e;if(e>=t)throw new RangeError("Mark decorations may not be empty");return Object(a.a)(Object(o.a)(n.prototype),"range",this).call(this,e,t)}}]),n}(xe);we.prototype.point=!1;var je=function(e){Object(s.a)(n,e);var t=Object(l.a)(n);function n(e){return Object(f.a)(this,n),t.call(this,-1e8,-1e8,null,e)}return Object(d.a)(n,[{key:"eq",value:function(e){return e instanceof n&&be(this.spec.attributes,e.spec.attributes)}},{key:"range",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e;if(t!=e)throw new RangeError("Line decoration ranges must be zero-length");return Object(a.a)(Object(o.a)(n.prototype),"range",this).call(this,e,t)}}]),n}(xe);je.prototype.mapMode=p.h.TrackBefore,je.prototype.point=!0;var Se=function(e){Object(s.a)(n,e);var t=Object(l.a)(n);function n(e,r,i,a,o,s){var l;return Object(f.a)(this,n),(l=t.call(this,r,i,o,e)).block=a,l.isReplace=s,l.mapMode=a?r<0?p.h.TrackBefore:p.h.TrackAfter:p.h.TrackDel,l}return Object(d.a)(n,[{key:"eq",value:function(e){return e instanceof n&&(t=this.widget,r=e.widget,t==r||!!(t&&r&&t.compare(r)))&&this.block==e.block&&this.startSide==e.startSide&&this.endSide==e.endSide;var t,r}},{key:"range",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e;if(this.isReplace&&(e>t||e==t&&this.startSide>0&&this.endSide<0))throw new RangeError("Invalid range for replacement decoration");if(!this.isReplace&&t!=e)throw new RangeError("Widget decorations can only have zero-length ranges");return Object(a.a)(Object(o.a)(n.prototype),"range",this).call(this,e,t)}},{key:"type",get:function(){return this.startSide=5}}]),n}(xe);function Ce(e){var t=e.inclusiveStart,n=e.inclusiveEnd;return null==t&&(t=e.inclusive),null==n&&(n=e.inclusive),{start:t||!1,end:n||!1}}Se.prototype.point=!0;function Me(e,t,n){var r=n.length-1;r>=0&&n[r]+4>e?n[r]=Math.max(n[r],t):n.push(e,t)}var Ee=p.f.define({combine:function(e){return e.join(" ")}}),Te=p.f.define({combine:function(e){return e.indexOf(!0)>-1}}),Pe=v.a.newName();function _e(e){return e.replace(/\$\w[\w\.]*/g,(function(e){for(var t=e.slice(1).split("."),n="",r=1;r<=t.length;r++)n+=".cm-"+t.slice(0,r).join("-");return n}))}function De(e,t){return new v.a(t,{process:function(t){return t=_e(t),/\$/.test(t)?t.replace(/\$/,e):e+" "+t},extend:function(t,n){return t=_e(t),n.slice(0,e.length+1)==e+" "?e+" "+t.replace(/&/,n.slice(e.length+1)):t.replace(/&/,n)}})}function Ae(e){if(e.indexOf(".")<0)return"cm-"+e;for(var t=e.split("."),n="",r=1;r<=t.length;r++)n+=(n?" ":"")+"cm-"+t.slice(0,r).join("-");return n}var Re,Le=De("."+Pe,{$:{position:"relative !important",boxSizing:"border-box","&$focused":{outline_fallback:"1px dotted #212121",outline:"5px auto -webkit-focus-ring-color"},display:"flex !important",flexDirection:"column"},$scroller:{display:"flex !important",alignItems:"flex-start !important",fontFamily:"monospace",lineHeight:1.4,height:"100%",overflowX:"auto",position:"relative",zIndex:0},$content:{margin:0,flexGrow:2,minHeight:"100%",display:"block",whiteSpace:"pre",boxSizing:"border-box",padding:"4px 0",outline:"none"},"$$light $content":{caretColor:"black"},"$$dark $content":{caretColor:"white"},$line:{display:"block",padding:"0 2px 0 4px"},$selectionLayer:{zIndex:-1,contain:"size style"},$selectionBackground:{position:"absolute"},"$$light $selectionBackground":{background:"#d9d9d9"},"$$dark $selectionBackground":{background:"#222"},"$$focused$light $selectionBackground":{background:"#d7d4f0"},"$$focused$dark $selectionBackground":{background:"#233"},$cursorLayer:{zIndex:100,contain:"size style",pointerEvents:"none"},"$$focused $cursorLayer":{animation:"steps(1) cm-blink 1.2s infinite"},"@keyframes cm-blink":{"0%":{},"50%":{visibility:"hidden"},"100%":{}},"@keyframes cm-blink2":{"0%":{},"50%":{visibility:"hidden"},"100%":{}},$cursor:{position:"absolute",borderLeft:"1.2px solid #aaa",marginLeft:"-0.6px",pointerEvents:"none"},"$$focused $cursor":{borderLeft:"1.2px solid black"},$placeholder:{color:"#888",display:"inline-block"},$button:{verticalAlign:"middle",color:"inherit",fontSize:"70%",padding:".2em 1em",borderRadius:"3px"},"$$light $button":{backgroundImage:"linear-gradient(#eff1f5, #d9d9df)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#b4b4b4, #d0d3d6)"}},"$$dark $button":{backgroundImage:"linear-gradient(#555, #111)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#111, #333)"}},$textfield:{verticalAlign:"middle",color:"inherit",fontSize:"70%",border:"1px solid silver",padding:".2em .5em"},"$$light $textfield":{backgroundColor:"white"},"$$dark $textfield":{border:"1px solid #555",backgroundColor:"inherit"}}),Ne=Ae("line"),ze=function(e){Object(s.a)(n,e);var t=Object(l.a)(n);function n(){var e;return Object(f.a)(this,n),(e=t.apply(this,arguments)).children=[],e.length=0,e.prevAttrs=void 0,e.attrs=null,e.breakAfter=0,e}return Object(d.a)(n,[{key:"merge",value:function(e,t,r,i,a,o){if(r){if(!(r instanceof n))return!1;this.dom||r.transferDOM(this)}return i&&this.setDeco(r?r.attrs:null),he(this,e,t,r?r.children:Ie,a,o),!0}},{key:"split",value:function(e){var t=new n;if(t.breakAfter=this.breakAfter,0==this.length)return t;var r=this.childPos(e),i=r.i,a=r.off;a&&(t.append(this.children[i].slice(a),0),this.children[i].merge(a,this.children[i].length,null,0,0),i++);for(var o=i;o0&&0==this.children[i-1].length;)this.children[i-1].parent=null,i--;return this.children.length=i,this.markDirty(),this.length=e,t}},{key:"transferDOM",value:function(e){this.dom&&(e.setDOM(this.dom),e.prevAttrs=void 0===this.prevAttrs?this.attrs:this.prevAttrs,this.prevAttrs=void 0,this.dom=null)}},{key:"setDeco",value:function(e){be(this.attrs,e)||(this.dom&&(this.prevAttrs=this.attrs,this.markDirty()),this.attrs=e)}},{key:"append",value:function(e,t){ve(this,e,t)}},{key:"addLineDeco",value:function(e){var t=e.spec.attributes;t&&(this.attrs=ge(t,this.attrs||{}))}},{key:"domAtPos",value:function(e){return pe(this.dom,this.children,e)}},{key:"sync",value:function(e){this.dom||(this.setDOM(document.createElement("div")),this.dom.className=Ne,this.prevAttrs=this.attrs?null:void 0),void 0!==this.prevAttrs&&(ye(this.dom,this.prevAttrs,this.attrs),this.dom.classList.add(Ne),this.prevAttrs=void 0),Object(a.a)(Object(o.a)(n.prototype),"sync",this).call(this,e);var t=this.dom.lastChild;if(!t||"BR"!=t.nodeName&&ne.get(t)instanceof fe){var r=document.createElement("BR");r.cmIgnore=!0,this.dom.appendChild(r)}}},{key:"measureTextSize",value:function(){if(0==this.children.length||this.length>20)return null;var e,t=0,n=Object(u.a)(this.children);try{for(n.s();!(e=n.n()).done;){var r=e.value;if(!(r instanceof le))return null;var i=Q(r.dom);if(1!=i.length)return null;t+=i[0].width}}catch(a){n.e(a)}finally{n.f()}return{lineHeight:this.dom.getBoundingClientRect().height,charWidth:t/this.length}}},{key:"coordsAt",value:function(e,t){return me(this,e,t)}},{key:"match",value:function(e){return!1}},{key:"type",get:function(){return Oe.Text}}],[{key:"find",value:function(e,t){for(var r=0,i=0;;r++){var a=e.children[r],o=i+a.length;if(o>=t){if(a instanceof n)return a;if(a.length)return null}i=o+a.breakAfter}}}]),n}(ne),Ie=[],Fe=function(e){Object(s.a)(n,e);var t=Object(l.a)(n);function n(e,r,i){var a;return Object(f.a)(this,n),(a=t.call(this)).widget=e,a.length=r,a.type=i,a.breakAfter=0,a}return Object(d.a)(n,[{key:"merge",value:function(e,t,r,i,a,o){return!(r&&(!(r instanceof n&&this.widget.compare(r.widget))||e>0&&a<=0||t=0;n--)e=new ce(t[n],[e],e.length);return e}},{key:"buildText",value:function(e,t,n){for(;e>0;){if(this.textOff==this.text.length){var r=this.cursor.next(this.skip),i=r.value,a=r.lineBreak,o=r.done;if(this.skip=0,o)throw new Error("Ran out of text content when drawing inline views");if(a){this.posCovered()||this.getLine(),this.content.length?this.content[this.content.length-1].breakAfter=1:this.breakAtStart=1,this.curLine=null,e--;continue}this.text=i,this.textOff=0}var s=Math.min(this.text.length-this.textOff,e);this.getLine().append(this.wrapMarks(new le(this.text.slice(this.textOff,this.textOff+s)),t),n),e-=s,this.textOff+=s}}},{key:"span",value:function(e,t,n,r){this.buildText(t-e,n,r),this.pos=t,this.openStart<0&&(this.openStart=r)}},{key:"point",value:function(e,t,n,r,i){var a=t-e;if(n instanceof Se)if(n.block){var o=n.type;o!=Oe.WidgetAfter||this.posCovered()||this.getLine(),this.addWidget(new Fe(n.widget||new Be("div"),a,o))}else{var s=this.wrapMarks(fe.create(n.widget||new Be("span"),a,n.startSide),r);this.getLine().append(s,i)}else this.doc.lineAt(this.pos).from==this.pos&&this.getLine().addLineDeco(n);a&&(this.textOff+a<=this.text.length?this.textOff+=a:(this.skip+=a-(this.text.length-this.textOff),this.text="",this.textOff=0),this.pos=t),this.openStart<0&&(this.openStart=i)}}],[{key:"build",value:function(t,n,r,i){var a=new e(t,n,r);return a.openEnd=m.b.spans(i,n,r,a),a.openStart<0&&(a.openStart=a.openEnd),a.finish(),a}}]),e}(),Be=function(e){Object(s.a)(n,e);var t=Object(l.a)(n);function n(e){var r;return Object(f.a)(this,n),(r=t.call(this)).tag=e,r}return Object(d.a)(n,[{key:"eq",value:function(e){return e.tag==this.tag}},{key:"toDOM",value:function(){return document.createElement(this.tag)}},{key:"updateDOM",value:function(e){return e.nodeName.toLowerCase()==this.tag}}]),n}(ke);!function(e){e[e.LTR=0]="LTR",e[e.RTL=1]="RTL"}(Re||(Re={}));var Qe=Re.LTR,We=Re.RTL;function He(e){for(var t=[],n=0;n=t){if(o.level==n)return a;(i<0||(0!=r?r<0?o.fromt:e[i].level>o.level))&&(i=a)}}if(i<0)throw new RangeError("Index out of range");return i}}]),e}(),Xe=[];function Ke(e,t){var n,r=e.length,i=t==Qe?1:2;if(!e||1==i&&!qe.test(e))return Ge(r);for(var a=0,o=i,s=i;aw;){for(var C=S,M=2!=Xe[--S];S>w&&M==(2!=Xe[S-1]);)S--;k.push(new Ye(S,C,M?2:1))}else k.push(new Ye(w,x,0))}else for(var E=0;E-1!=this.lineWrapping||this.direction!=n}},{key:"refresh",value:function(e,t,n,r,i,a){var o=tt.indexOf(e)>-1,s=Math.round(n)!=Math.round(this.lineHeight)||this.lineWrapping!=o||this.direction!=t;if(this.lineWrapping=o,this.direction=t,this.lineHeight=n,this.charWidth=r,this.lineLength=i,s){this.heightSamples={};for(var l=0;l2&&void 0!==arguments[2]?arguments[2]:2;Object(f.a)(this,e),this.length=t,this.height=n,this.flags=r}return Object(d.a)(e,[{key:"setHeight",value:function(e,t){this.height!=t&&(Math.abs(this.height-t)>1e-4&&(e.heightChanged=!0),this.height=t)}},{key:"replace",value:function(t,n,r){return e.of(r)}},{key:"decomposeLeft",value:function(e,t){t.push(this)}},{key:"decomposeRight",value:function(e,t){t.push(this)}},{key:"applyChanges",value:function(e,t,n,r){for(var i=this,a=r.length-1;a>=0;a--){var o=r[a],s=o.fromA,l=o.toA,c=o.fromB,u=o.toB,f=i.lineAt(s,et.ByPosNoHeight,t,0,0),d=f.to>=l?f:i.lineAt(l,et.ByPosNoHeight,t,0,0);for(u+=d.to-l,l=d.to;a>0&&f.from<=r[a-1].toA;)s=r[a-1].fromA,c=r[a-1].fromB,a--,s0},set:function(e){this.flags=(e?2:0)|-3&this.flags}}],[{key:"empty",value:function(){return new st(0,0)}},{key:"of",value:function(t){if(1==t.length)return t[0];for(var n=0,r=t.length,i=0,a=0;;)if(n==r)if(i>2*a){var o=t[n-1];o.break?t.splice(--n,1,o.left,null,o.right):t.splice(--n,1,o.left,o.right),r+=1+o.break,i-=o.size}else{if(!(a>2*i))break;var s=t[r];s.break?t.splice(r,1,s.left,null,s.right):t.splice(r,1,s.left,s.right),r+=2+s.break,a-=s.size}else if(i1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>3?arguments[3]:void 0;return n&&n.from<=t&&n.more&&this.setHeight(e,n.heights[n.index++]),this.outdated=!1,this}},{key:"toString",value:function(){return"block(".concat(this.length,")")}}]),n}(at),st=function(e){Object(s.a)(n,e);var t=Object(l.a)(n);function n(e,r){var i;return Object(f.a)(this,n),(i=t.call(this,e,r,Oe.Text)).collapsed=0,i.widgetHeight=0,i}return Object(d.a)(n,[{key:"replace",value:function(e,t,r){var i=r[0];return 1==r.length&&(i instanceof n||i instanceof lt&&4&i.flags)&&Math.abs(this.length-i.length)<10?(i instanceof lt?i=new n(i.length,this.height):i.height=this.height,this.outdated||(i.outdated=!1),i):at.of(r)}},{key:"updateHeight",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3?arguments[3]:void 0;return r&&r.from<=t&&r.more?this.setHeight(e,r.heights[r.index++]):(n||this.outdated)&&this.setHeight(e,Math.max(this.widgetHeight,e.heightForLine(this.length-this.collapsed))),this.outdated=!1,this}},{key:"toString",value:function(){return"line(".concat(this.length).concat(this.collapsed?-this.collapsed:"").concat(this.widgetHeight?":"+this.widgetHeight:"",")")}}]),n}(ot),lt=function(e){Object(s.a)(n,e);var t=Object(l.a)(n);function n(e){return Object(f.a)(this,n),t.call(this,e,0)}return Object(d.a)(n,[{key:"lines",value:function(e,t){var n=e.lineAt(t).number,r=e.lineAt(t+this.length).number;return{firstLine:n,lastLine:r,lineHeight:this.height/(r-n+1)}}},{key:"blockAt",value:function(e,t,n,r){var i=this.lines(t,r),a=i.firstLine,o=i.lastLine,s=i.lineHeight,l=Math.max(0,Math.min(o-a,Math.floor((e-n)/s))),c=t.line(a+l),u=c.from,f=c.length;return new it(u,f,n+s*l,s,Oe.Text)}},{key:"lineAt",value:function(e,t,n,r,i){if(t==et.ByHeight)return this.blockAt(e,n,r,i);if(t==et.ByPosNoHeight){var a=n.lineAt(e),o=a.from,s=a.to;return new it(o,s-o,0,0,Oe.Text)}var l=this.lines(n,i),c=l.firstLine,u=l.lineHeight,f=n.lineAt(e),d=f.from,h=f.length,p=f.number;return new it(d,h,r+u*(p-c),u,Oe.Text)}},{key:"forEachLine",value:function(e,t,n,r,i,a){for(var o=this.lines(n,i),s=o.firstLine,l=o.lineHeight,c=e;c0){var a=r[r.length-1];a instanceof n?r[r.length-1]=new n(a.length+i):r.push(null,new n(i-1))}if(e>0){var o=r[0];o instanceof n?r[0]=new n(e+o.length):r.unshift(new n(e-1),null)}return at.of(r)}},{key:"decomposeLeft",value:function(e,t){t.push(new n(e-1),null)}},{key:"decomposeRight",value:function(e,t){t.push(null,new n(this.length-e-1))}},{key:"updateHeight",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=arguments.length>3?arguments[3]:void 0,a=t+this.length;if(i&&i.from<=t+this.length&&i.more){var o=[],s=Math.max(t,i.from);for(i.from>t&&o.push(new n(i.from-t-1).updateHeight(e,t));s<=a&&i.more;){var l=e.doc.lineAt(s).length;o.length&&o.push(null);var c=new st(l,i.heights[i.index++]);c.outdated=!1,o.push(c),s+=l+1}return s<=a&&o.push(null,new n(a-s).updateHeight(e,s)),e.heightChanged=!0,at.of(o)}return(r||this.outdated)&&(this.setHeight(e,e.heightForGap(t,t+this.length)),this.outdated=!1),this}},{key:"toString",value:function(){return"gap(".concat(this.length,")")}}]),n}(at),ct=function(e){Object(s.a)(n,e);var t=Object(l.a)(n);function n(e,r,i){var a;return Object(f.a)(this,n),(a=t.call(this,e.length+r+i.length,e.height+i.height,r|(e.outdated||i.outdated?2:0))).left=e,a.right=i,a.size=e.size+i.size,a}return Object(d.a)(n,[{key:"blockAt",value:function(e,t,n,r){var i=n+this.left.height;return eo))return l;var c=t==et.ByPosNoHeight?et.ByPosNoHeight:et.ByPos;return s?l.join(this.right.lineAt(o,c,n,a,o)):this.left.lineAt(o,c,n,r,i).join(l)}},{key:"forEachLine",value:function(e,t,n,r,i,a){var o=r+this.left.height,s=i+this.left.length+this.break;if(this.break)e=s&&this.right.forEachLine(e,t,n,o,s,a);else{var l=this.lineAt(s,et.ByPos,n,r,i);e=e&&l.from<=t&&a(l),t>l.to&&this.right.forEachLine(l.to+1,t,n,o,s,a)}}},{key:"replace",value:function(e,t,n){var r=this.left.length+this.break;if(tthis.left.length)return this.balanced(this.left,this.right.replace(e-r,t-r,n));var i=[];e>0&&this.decomposeLeft(e,i);var a,o=i.length,s=Object(u.a)(n);try{for(s.s();!(a=s.n()).done;){var l=a.value;i.push(l)}}catch(f){s.e(f)}finally{s.f()}if(e>0&&ut(i,o-1),t=++n&&t.push(null),e>n&&this.right.decomposeLeft(e-n,t)}},{key:"decomposeRight",value:function(e,t){var n=this.left.length,r=n+this.break;if(e>=r)return this.right.decomposeRight(e-r,t);e2*t.size||t.size>2*e.size?at.of(this.break?[e,null,t]:[e,t]):(this.left=e,this.right=t,this.height=e.height+t.height,this.outdated=e.outdated||t.outdated,this.size=e.size+t.size,this.length=e.length+this.break+t.length,this)}},{key:"updateHeight",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3?arguments[3]:void 0,i=this.left,a=this.right,o=t+i.length+this.break,s=null;return r&&r.from<=t+i.length&&r.more?s=i=i.updateHeight(e,t,n,r):i.updateHeight(e,t,n),r&&r.from<=o+a.length&&r.more?s=a=a.updateHeight(e,o,n,r):a.updateHeight(e,o,n),s?this.balanced(i,a):(this.height=this.left.height+this.right.height,this.outdated=!1,this)}},{key:"toString",value:function(){return this.left+(this.break?" ":"-")+this.right}},{key:"break",get:function(){return 1&this.flags}}]),n}(at);function ut(e,t){var n,r;null==e[t]&&(n=e[t-1])instanceof lt&&(r=e[t+1])instanceof lt&&e.splice(t-1,3,new lt(n.length+1+r.length))}var ft=function(){function e(t,n){Object(f.a)(this,e),this.pos=t,this.oracle=n,this.nodes=[],this.lineStart=-1,this.lineEnd=-1,this.covering=null,this.writtenTo=t}return Object(d.a)(e,[{key:"span",value:function(e,t){if(this.lineStart>-1){var n=Math.min(t,this.lineEnd),r=this.nodes[this.nodes.length-1];r instanceof st?r.length+=n-this.pos:(n>this.pos||!this.isCovered)&&this.nodes.push(new st(n-this.pos,-1)),this.writtenTo=n,t>n&&(this.nodes.push(null),this.writtenTo++,this.lineStart=-1)}this.pos=t}},{key:"point",value:function(e,t,n){if(e=5)&&this.addLineDeco(r,i)}else t>e&&this.span(e,t);this.lineEnd>-1&&this.lineEnd-1)){var e=this.oracle.doc.lineAt(this.pos),t=e.from,n=e.to;this.lineStart=t,this.lineEnd=n,this.writtenTot&&this.nodes.push(new st(this.pos-t,-1)),this.writtenTo=this.pos}}},{key:"blankContent",value:function(e,t){var n=new lt(t-e);return this.oracle.doc.lineAt(e).to==t&&(n.flags|=4),n}},{key:"ensureLine",value:function(){this.enterLine();var e=this.nodes.length?this.nodes[this.nodes.length-1]:null;if(e instanceof st)return e;var t=new st(0,-1);return this.nodes.push(t),t}},{key:"addBlock",value:function(e){this.enterLine(),e.type!=Oe.WidgetAfter||this.isCovered||this.ensureLine(),this.nodes.push(e),this.writtenTo=this.pos=this.pos+e.length,e.type!=Oe.WidgetBefore&&(this.covering=e)}},{key:"addLineDeco",value:function(e,t){var n=this.ensureLine();n.length+=t,n.collapsed+=t,n.widgetHeight=Math.max(n.widgetHeight,e),this.writtenTo=this.pos=this.pos+t}},{key:"finish",value:function(e){var t=0==this.nodes.length?null:this.nodes[this.nodes.length-1];!(this.lineStart>-1)||t instanceof st||this.isCovered?(this.writtenTo0;t--){var r=e[t-1];if(!(r.fromA>n.toA)){if(r.toAu)break;a+=2}if(!l)return r;new e(l.fromA,l.toA,l.fromB,l.toB).addToSet(r),o=l.toA,s=l.toB}}}]),e}(),Nt=function(){function e(t,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:pt;Object(f.a)(this,e),this.view=t,this.state=n,this.transactions=r,this.flags=0,this.prevState=t.state,this.changes=p.b.empty(this.prevState.doc.length);var i,a=Object(u.a)(r);try{for(a.s();!(i=a.n()).done;){var o=i.value;this.changes=this.changes.compose(o.changes)}}catch(c){a.e(c)}finally{a.f()}var s=[];this.changes.iterChangedRanges((function(e,t,n,r){return s.push(new Lt(e,t,n,r))})),this.changedRanges=s;var l=t.hasFocus;l!=t.inputState.notifiedFocused&&(t.inputState.notifiedFocused=l,this.flags),this.docChanged&&(this.flags|=2)}return Object(d.a)(e,[{key:"viewportChanged",get:function(){return(4&this.flags)>0}},{key:"heightChanged",get:function(){return(2&this.flags)>0}},{key:"geometryChanged",get:function(){return this.docChanged||(18&this.flags)>0}},{key:"focusChanged",get:function(){return(1&this.flags)>0}},{key:"docChanged",get:function(){return this.transactions.some((function(e){return e.docChanged}))}},{key:"selectionSet",get:function(){return this.transactions.some((function(e){return e.selection}))}},{key:"empty",get:function(){return 0==this.flags&&0==this.transactions.length}}]),e}();var zt=function(){function e(t,n,r){Object(f.a)(this,e),this.from=t,this.to=n,this.size=r}return Object(d.a)(e,[{key:"draw",value:function(e){return xe.replace({widget:new It(this.size,e)}).range(this.from,this.to)}}],[{key:"same",value:function(e,t){if(e.length!=t.length)return!1;for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:null,n=this.state;this.state=e.state;var r=this.state.facet(At),i=e.changedRanges,a=Lt.extendWithRanges(i,dt(e.prevState.facet(At),r,e?e.changes:p.b.empty(this.state.doc.length))),o=this.heightMap.height;this.heightMap=this.heightMap.applyChanges(r,n.doc,this.heightOracle.setDoc(this.state.doc),a),this.heightMap.height!=o&&(e.flags|=2);var s=a.length?this.mapViewport(this.viewport,e.changes):this.viewport;(t&&(t.heads.to)||!this.viewportIsAppropriate(s))&&(s=this.getViewport(0,t)),s.eq(this.viewport)||(this.viewport=s,e.flags|=4),(this.lineGaps.length||this.viewport.to-this.viewport.from>15e3)&&(e.flags|=this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps,e.changes)))),this.computeVisibleRanges(),t&&(this.scrollTo=t),!this.mustEnforceCursorAssoc&&e.selectionSet&&e.view.lineWrapping&&e.state.selection.primary.empty&&e.state.selection.primary.assoc&&(this.mustEnforceCursorAssoc=!0)}},{key:"measure",value:function(e,t){var n=e.dom,r="",i=Re.LTR;if(!t){var a=window.getComputedStyle(n);r=a.whiteSpace,i="rtl"==a.direction?Re.RTL:Re.LTR,this.paddingTop=parseInt(a.paddingTop)||0,this.paddingBottom=parseInt(a.paddingBottom)||0}var o=this.printing?{top:-1e8,bottom:1e8,left:-1e8,right:1e8}:function(e,t){for(var n=e.getBoundingClientRect(),r=Math.max(0,n.left),i=Math.min(innerWidth,n.right),a=Math.max(0,n.top),o=Math.min(innerHeight,n.bottom),s=e.parentNode;s;)if(1==s.nodeType){if((s.scrollHeight>s.clientHeight||s.scrollWidth>s.clientWidth)&&"visible"!=window.getComputedStyle(s).overflow){var l=s.getBoundingClientRect();r=Math.max(r,l.left),i=Math.min(i,l.right),a=Math.max(a,l.top),o=Math.min(o,l.bottom)}s=s.parentNode}else{if(11!=s.nodeType)break;s=s.host}return{left:r-n.left,right:i-n.left,top:a-(n.top+t),bottom:o-(n.top+t)}}(n,this.paddingTop),s=o.top-this.pixelViewport.top,l=o.bottom-this.pixelViewport.bottom;if(this.pixelViewport=o,this.inView=this.pixelViewport.bottom>this.pixelViewport.top&&this.pixelViewport.right>this.pixelViewport.left,!this.inView)return 0;var c=e.measureVisibleLineHeights(),u=!1,f=0,d=0,h=this.heightOracle;if(!t){var p=e.dom.clientWidth;if(h.mustRefresh(c,r,i)||h.lineWrapping&&Math.abs(p-this.contentWidth)>h.charWidth){var v=e.measureTextSize(),m=v.lineHeight,g=v.charWidth;(u=h.refresh(r,i,m,g,p/g,c))&&(e.minWidth=0,d|=16)}this.contentWidth!=p&&(this.contentWidth=p,d|=16),s>0&&l>0?f=Math.max(s,l):s<0&&l<0&&(f=Math.min(s,l))}return h.heightChanged=!1,this.heightMap=this.heightMap.updateHeight(h,0,u,new rt(this.viewport.from,c)),h.heightChanged&&(d|=2),(!this.viewportIsAppropriate(this.viewport,f)||this.scrollTo&&(this.scrollTo.headthis.viewport.to))&&(this.viewport=this.getViewport(f,this.scrollTo),d|=4),(this.lineGaps.length||this.viewport.to-this.viewport.from>15e3)&&(d|=this.updateLineGaps(this.ensureLineGaps(u?[]:this.lineGaps))),this.computeVisibleRanges(),this.mustEnforceCursorAssoc&&(this.mustEnforceCursorAssoc=!1,e.enforceCursorAssoc()),d}},{key:"getViewport",value:function(e,t){var n=.5-Math.max(-.5,Math.min(.5,e/1e3/2)),r=this.heightMap,i=this.state.doc,a=this.pixelViewport,o=a.top,s=a.bottom,l=new $t(r.lineAt(o-1e3*n,et.ByHeight,i,0,0).from,r.lineAt(s+1e3*(1-n),et.ByHeight,i,0,0).to);if(t)if(t.headl.to){var u=r.lineAt(t.head,et.ByPos,i,0,0).bottom;l=new $t(r.lineAt(u-(s-o)-500,et.ByHeight,i,0,0).from,r.lineAt(u+500,et.ByHeight,i,0,0).to)}return l}},{key:"mapViewport",value:function(e,t){var n=t.mapPos(e.from,-1),r=t.mapPos(e.to,1);return new $t(this.heightMap.lineAt(n,et.ByPos,this.state.doc,0,0).from,this.heightMap.lineAt(r,et.ByPos,this.state.doc,0,0).to)}},{key:"viewportIsAppropriate",value:function(e){var t=e.from,n=e.to,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=this.heightMap.lineAt(t,et.ByPos,this.state.doc,0,0),a=i.top,o=this.heightMap.lineAt(n,et.ByPos,this.state.doc,0,0),s=o.bottom;return(0==t||a<=this.pixelViewport.top-Math.max(10,Math.min(-r,250)))&&(n==this.state.doc.length||s>=this.pixelViewport.bottom+Math.max(10,Math.min(r,250)))&&a>this.pixelViewport.top-2e3&&si&&(r.push({from:i,to:e}),a+=e-i),i=t},minPointSize:20}),i=r.from&&(a=l.from),l.from<=r.to&&l.to>=o&&(o=l.to);var c=a-1e4,u=o+1e4;c>r.from+5e3&&n.push(Wt(e,(function(e){return e.from==r.from&&e.to>c-5e3&&e.tou-5e3&&e.from=1)return r[r.length-1].to;for(var i=Math.floor(n*t),a=0;;a++){var o=r[a],s=o.from,l=o.to-s;if(i<=l)return s+i;i-=l}}function Qt(e,t){var n,r=0,i=Object(u.a)(e.ranges);try{for(i.s();!(n=i.n()).done;){var a=n.value,o=a.from,s=a.to;if(t<=s){r+=t-o;break}r+=s-o}}catch(l){i.e(l)}finally{i.f()}return r/e.total}function Wt(e,t){var n,r=Object(u.a)(e);try{for(r.s();!(n=r.n()).done;){var i=n.value;if(t(i))return i}}catch(a){r.e(a)}finally{r.f()}}var Ht=[],Vt=function(e){Object(s.a)(n,e);var t=Object(l.a)(n);function n(e){var r;return Object(f.a)(this,n),(r=t.call(this)).view=e,r.viewports=Ht,r.compositionDeco=xe.none,r.decorations=[],r.minWidth=0,r.minWidthFrom=0,r.minWidthTo=0,r.impreciseAnchor=null,r.impreciseHead=null,r.setDOM(e.contentDOM),r.children=[new ze],r.children[0].setParent(Object(i.a)(r)),r.updateInner([new Lt(0,0,0,e.state.doc.length)],r.updateDeco(),0),r}return Object(d.a)(n,[{key:"update",value:function(e){var t,n=this,r=e.changedRanges;this.minWidth>0&&r.length&&(r.every((function(e){var t=e.fromA;return e.toAn.minWidthTo}))?(this.minWidthFrom=e.changes.mapPos(this.minWidthFrom,1),this.minWidthTo=e.changes.mapPos(this.minWidthTo,1)):this.minWidth=0),(null===(t=this.view.inputState)||void 0===t?void 0:t.composing)?e.transactions.length&&(this.compositionDeco=function(e,t){var n=$(e.root),r=n.focusNode&&Xt(n.focusNode,n.focusOffset,0);if(!r)return xe.none;var i,a,o=e.docView.nearest(r),s=r;if(o instanceof se){for(;o.parent instanceof se;)o=o.parent;a=(i=o.posAtStart)+o.length,s=o.dom}else{if(!(o instanceof ze))return xe.none;for(;s.parentNode!=o.dom;)s=s.parentNode;for(var l=s.previousSibling;l&&!ne.get(l);)l=l.previousSibling;i=a=l?ne.get(l).posAtEnd:o.posAtStart}var c=t.mapPos(i,1),u=Math.max(c,t.mapPos(a,-1)),f=r.nodeValue,d=e.state;if(u-c=this.view.viewport.from&&e.state.selection.primary.to<=this.view.viewport.to?(this.updateSelection(i,l),!1):(this.updateInner(r,o,e.prevState.doc.length,i,l),!0)}},{key:"updateInner",value:function(e,t,n){var r=this,i=arguments.length>3&&void 0!==arguments[3]&&arguments[3],a=arguments.length>4&&void 0!==arguments[4]&&arguments[4];this.updateChildren(e,t,n),this.view.observer.ignore((function(){r.dom.style.height=r.view.viewState.heightMap.height+"px",r.dom.style.minWidth=r.minWidth?r.minWidth+"px":"";var e=F.chrome?{node:$(r.view.root).focusNode,written:!1}:void 0;r.sync(e),r.dirty=0,(null===e||void 0===e?void 0:e.written)&&(i=!0),r.updateSelection(i,a),r.dom.style.height=""}))}},{key:"updateChildren",value:function(e,t,n){for(var r=this.childCursor(n),i=e.length-1;;i--){var a=i>=0?e[i]:null;if(!a)break;var o=a.fromA,s=a.toA,l=a.fromB,c=a.toB,u=$e.build(this.view.state.doc,l,c,t),f=u.content,d=u.breakAtStart,h=u.openStart,p=u.openEnd,v=r.findPos(s,1),m=v.i,g=v.off,b=r.findPos(o,-1),y=b.i,O=b.off;this.replaceRange(y,O,m,g,f,d,h,p)}}},{key:"replaceRange",value:function(e,t,n,r,i,a,o,s){var l=this.children[e],c=i.length?i[i.length-1]:null,u=c?c.breakAfter:a;if(e!=n||a||u||!(i.length<2)||!l.merge(t,r,i.length?c:null,0==t,o,s)){var f=this.children[n];for(r0&&(!a&&i.length&&l.merge(t,l.length,i[0],!1,o,0)?l.breakAfter=i.shift().breakAfter:(t0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(t||this.mayControlSelection()){var n=this.view.state.selection.primary,r=this.domAtPos(n.anchor),i=this.domAtPos(n.head),a=$(this.root);(e||!a.focusNode||F.gecko&&n.empty&&Kt(a.focusNode,a.focusOffset)||!W(r.node,r.offset,a.anchorNode,a.anchorOffset)||!W(i.node,i.offset,a.focusNode,a.focusOffset))&&this.view.observer.ignore((function(){if(n.empty){if(F.gecko){var e=Kt(r.node,r.offset);if(e&&3!=e){var t=Xt(r.node,r.offset,1==e?1:-1);t&&(r=new ee(t,1==e?0:t.nodeValue.length))}}a.collapse(r.node,r.offset),null!=n.bidiLevel&&null!=a.cursorBidiLevel&&(a.cursorBidiLevel=n.bidiLevel)}else if(a.extend)a.collapse(r.node,r.offset),a.extend(i.node,i.offset);else{var o=document.createRange();if(n.anchor>n.head){var s=[i,r];r=s[0],i=s[1]}o.setEnd(i.node,i.offset),o.setStart(r.node,r.offset),a.removeAllRanges(),a.addRange(o)}})),this.impreciseAnchor=r.precise?null:new ee(a.anchorNode,a.anchorOffset),this.impreciseHead=i.precise?null:new ee(a.focusNode,a.focusOffset)}}},{key:"enforceCursorAssoc",value:function(){var e=this.view.state.selection.primary,t=$(this.root);if(e.empty&&e.assoc&&t.modify){var n=ze.find(this,e.head);if(n){var r=n.posAtStart;if(e.head!=r&&e.head!=r+n.length){var i=this.coordsAt(e.head,-1),a=this.coordsAt(e.head,1);if(i&&a&&!(i.bottom>a.top)){var o=this.domAtPos(e.head+e.assoc);t.collapse(o.node,o.offset),t.modify("move",e.assoc<0?"forward":"backward","lineboundary")}}}}}},{key:"mayControlSelection",value:function(){return this.view.state.facet(xt)?this.root.activeElement==this.dom:B(this.dom,$(this.root))}},{key:"nearest",value:function(e){for(var t=e;t;){var n=ne.get(t);if(n&&n.rootView==this)return n;t=t.parentNode}return null}},{key:"posFromDOM",value:function(e,t){var n=this.nearest(e);if(!n)throw new RangeError("Trying to find position for a DOM position outside of the document");return n.localPosFromDOM(e,t)+n.posAtStart}},{key:"domAtPos",value:function(e){for(var t=this.childCursor().findPos(e,-1),n=t.i,r=t.off;n=a&&i.type!=Oe.WidgetAfter)return i.coordsAt(e-a,t);n=a}}},{key:"measureVisibleLineHeights",value:function(){for(var e=[],t=this.view.viewState.viewport,n=t.from,r=t.to,i=Math.max(this.view.scrollDOM.clientWidth,this.minWidth)+1,a=0,o=0;or)break;if(a>=n){e.push(s.dom.getBoundingClientRect().height);var c=s.dom.scrollWidth;c>i&&(this.minWidth=i=c,this.minWidthFrom=a,this.minWidthTo=l)}a=l+s.breakAfter}return e}},{key:"measureTextSize",value:function(){var e,t=this,n=Object(u.a)(this.children);try{for(n.s();!(e=n.n()).done;){var r=e.value;if(r instanceof ze){var i=r.measureTextSize();if(i)return i}}}catch(l){n.e(l)}finally{n.f()}var a,o,s=document.createElement("div");return s.className="cm-line",s.textContent="abc def ghi jkl mno pqr stu",this.view.observer.ignore((function(){t.dom.appendChild(s);var e=Q(s.firstChild)[0];a=s.getBoundingClientRect().height,o=e?e.width/27:7,s.remove()})),{lineHeight:a,charWidth:o}}},{key:"childCursor",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.length,t=this.children.length;return t&&(e-=this.children[--t].length),new ae(this.children,e,t)}},{key:"computeBlockGapDeco",value:function(){var e=this.view.viewState.viewport,t=[e],n=this.view.state.selection.primary,r=n.head,i=n.anchor;if(re.to){var a=this.view.viewState.lineAt(r,0),o=a.from,s=a.to;t.push(new $t(o,s))}if(!t.some((function(e){var t=e.from,n=e.to;return i>=t&&i<=n}))){var l=this.view.viewState.lineAt(i,0),c=l.from,u=l.to;t.push(new $t(c,u))}this.viewports=t.sort((function(e,t){return e.from-t.from}));for(var f=[],d=0,h=0;;h++){var p=h==t.length?null:t[h],v=p?p.from-1:this.length;if(v>d){var m=this.view.viewState.lineAt(v,0).bottom-this.view.viewState.lineAt(d,0).top;f.push(xe.replace({widget:new qt(m),block:!0,inclusive:!0}).range(d,v))}if(!p)break;d=p.to+1}return xe.set(f)}},{key:"updateDeco",value:function(){return this.decorations=[this.computeBlockGapDeco(),this.view.viewState.lineGapDeco,this.compositionDeco].concat(Object(c.a)(this.view.state.facet(At)),Object(c.a)(this.view.pluginField(Et)))}},{key:"scrollPosIntoView",value:function(e,t){var n=this.coordsAt(e,t);if(n){var r,i=0,a=0,o=0,s=0,l=Object(u.a)(this.view.pluginField(jt.scrollMargins));try{for(l.s();!(r=l.n()).done;){var c=r.value;if(c){var f=c.left,d=c.right,h=c.top,p=c.bottom;null!=f&&(i=Math.max(i,f)),null!=d&&(a=Math.max(a,d)),null!=h&&(o=Math.max(o,h)),null!=p&&(s=Math.max(s,p))}}}catch(v){l.e(v)}finally{l.f()}!function(e,t){for(var n=e.ownerDocument.defaultView,r=e.parentNode;r;)if(1==r.nodeType){var i=void 0,a=r==document.body;if(a)i=Y(n);else{if(r.scrollHeight<=r.clientHeight&&r.scrollWidth<=r.clientWidth){r=r.parentNode;continue}var o=r.getBoundingClientRect();i={left:o.left,right:o.left+r.clientWidth,top:o.top,bottom:o.top+r.clientHeight}}var s=0,l=0;if(t.topi.bottom&&(l=t.bottom-i.bottom+5),t.lefti.right&&(s=t.right-i.right+5),s||l)if(a)n.scrollBy(s,l);else{if(l){var c=r.scrollTop;r.scrollTop+=l,l=r.scrollTop-c}if(s){var u=r.scrollLeft;r.scrollLeft+=s,s=r.scrollLeft-u}t={left:t.left-s,top:t.top-l,right:t.right-s,bottom:t.bottom-l}}if(a)break;r=r.parentNode}else{if(11!=r.nodeType)break;r=r.host}}(this.dom,{left:n.left-i,top:n.top-o,right:n.right+a,bottom:n.bottom+s})}}},{key:"root",get:function(){return this.view.root}},{key:"editorView",get:function(){return this.view}},{key:"length",get:function(){return this.view.state.doc.length}}]),n}(ne),Ut=1e7,qt=function(e){Object(s.a)(n,e);var t=Object(l.a)(n);function n(e){var r;return Object(f.a)(this,n),(r=t.call(this)).height=e,r}return Object(d.a)(n,[{key:"toDOM",value:function(){var e=document.createElement("div");return this.updateDOM(e),e}},{key:"eq",value:function(e){return e.height==this.height}},{key:"updateDOM",value:function(e){if(this.height0;t-=Ut){e.appendChild(document.createElement("div")).style.height=Math.min(t,Ut)+"px"}}return!0}},{key:"estimatedHeight",get:function(){return this.height}}]),n}(ke);var Yt=function(e){Object(s.a)(n,e);var t=Object(l.a)(n);function n(e,r){var i;return Object(f.a)(this,n),(i=t.call(this)).top=e,i.text=r,i}return Object(d.a)(n,[{key:"eq",value:function(e){return this.top==e.top&&this.text==e.text}},{key:"toDOM",value:function(){return this.top}},{key:"ignoreEvent",value:function(){return!1}},{key:"customView",get:function(){return de}}]),n}(ke);function Xt(e,t,n){for(;;){if(3==e.nodeType)return e;if(1==e.nodeType&&t>0&&n<=0)t=U(e=e.childNodes[t-1]);else{if(!(1==e.nodeType&&t=0))return null;e=e.childNodes[t],t=0}}}function Kt(e,t){return 1!=e.nodeType?0:(t&&"false"==e.childNodes[t-1].contentEditable?1:0)|(te?t.left-e:Math.max(0,e-t.right)}function Jt(e,t){return t.top>e?t.top-e:Math.max(0,e-t.bottom)}function en(e,t){return e.topt.top+1}function tn(e,t){return te.bottom?{top:e.top,left:e.left,right:e.right,bottom:t}:e}function rn(e,t,n){for(var r,i,a,o,s,l,c,u,f=e.firstChild;f;f=f.nextSibling)for(var d=Q(f),h=0;hm||o==m&&a>v)&&(r=f,i=p,a=v,o=m),0==v?n>p.bottom&&(!c||c.bottomp.top)&&(l=f,u=p):c&&en(c,p)?c=nn(c,p.bottom):u&&en(u,p)&&(u=tn(u,p.top))}if(c&&c.bottom>=n?(r=s,i=c):u&&u.top<=n&&(r=l,i=u),!r)return{node:e,offset:0};var g=Math.max(i.left,Math.min(i.right,t));return 3==r.nodeType?an(r,g,n):a||"true"!=r.contentEditable?{node:e,offset:Array.prototype.indexOf.call(e.childNodes,r)+(t>=(i.left+i.right)/2?1:0)}:rn(r,g,n)}function an(e,t,n){for(var r=e.nodeValue.length,i=J(),a=0;a=t&&l.top-1<=n&&l.bottom+1>=n)){var c=t>=(l.left+l.right)/2,u=c;if(F.chrome||F.gecko)i.setEnd(e,a),i.getBoundingClientRect().left==l.right&&(u=!c);return{node:e,offset:a+(u?1:0)}}}}return{node:e,offset:0}}function on(e,t){for(var n,r=t.x,i=t.y,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:-1,o=e.contentDOM.getBoundingClientRect(),s=e.defaultLineHeight/2,l=!1;;){if((n=e.blockAtHeight(i,o.top)).top>i||n.bottomi?-1:1,i=Math.min(n.bottom-s,Math.max(n.top+s,i)),l)return-1;l=!0}if(n.type==Oe.Text)break;i=a>0?n.bottom+s:n.top-s}var c=n.from;if(ce.viewport.to)return e.viewport.to==e.state.doc.length?e.state.doc.length:-1;r=Math.max(o.left+1,Math.min(o.right-1,r));var u,f=e.root,d=f.elementFromPoint(r,i),h=-1;if(d&&e.contentDOM.contains(d)&&!(e.docView.nearest(d)instanceof fe))if(f.caretPositionFromPoint){var p=f.caretPositionFromPoint(r,i);p&&(u=p.offsetNode,h=p.offset)}else if(f.caretRangeFromPoint){var v=f.caretRangeFromPoint(r,i);v&&(u=v.startContainer,h=v.startOffset)}if(!u||!e.docView.dom.contains(u)){var m=ze.find(e.docView,c),g=rn(m.dom,r,i);u=g.node,h=g.offset}return e.docView.posFromDOM(u,h)}function sn(e,t,n,r){var i=e.state.doc.lineAt(t.head),a=r&&e.lineWrapping?e.coordsAtPos(t.assoc<0&&t.head>i.from?t.head-1:t.head):null;if(a){var o=e.dom.getBoundingClientRect(),s=e.posAtCoords({x:n==(e.textDirection==Re.LTR)?o.right-1:o.left+1,y:(a.top+a.bottom)/2});if(s>-1)return p.d.cursor(s,n?-1:1)}var l=ze.find(e.docView,t.head),c=l?n?l.posAtEnd:l.posAtStart:n?i.to:i.from;return p.d.cursor(c,n?-1:1)}function ln(e,t,n,r){for(var i=e.state.doc.lineAt(t.head),a=e.bidiSpans(i),o=t,s=null;;){var l=Je(i,a,e.textDirection,o,n),c=Ze;if(!l){if(i.number==(n?e.state.doc.lines:1))return o;c="\n",i=e.state.doc.line(i.number+(n?1:-1)),a=e.bidiSpans(i),l=p.d.cursor(n?i.from:i.to)}if(s){if(!s(c))return o}else{if(!r)return l;s=r(c)}o=l}}var cn=function(){function e(t){var n=this;Object(f.a)(this,e),this.lastKeyCode=0,this.lastKeyTime=0,this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.scrollHandlers=[],this.registeredEvents=[],this.customHandlers=[],this.composing=!1,this.compositionEndedAt=0,this.mouseSelection=null;var r=function(e){var r=dn[e];t.contentDOM.addEventListener(e,(function(i){fn(t,i)&&!n.ignoreDuringComposition(i)&&(n.mustFlushObserver(i)&&t.observer.forceFlush(),n.runCustomHandlers(e,t,i)?i.preventDefault():r(t,i))})),n.registeredEvents.push(e)};for(var i in dn)r(i);t.contentDOM.addEventListener("keydown",(function(e){t.inputState.lastKeyCode=e.keyCode,t.inputState.lastKeyTime=Date.now()})),this.notifiedFocused=t.hasFocus,this.ensureHandlers(t)}return Object(d.a)(e,[{key:"setSelectionOrigin",value:function(e){this.lastSelectionOrigin=e,this.lastSelectionTime=Date.now()}},{key:"ensureHandlers",value:function(e){var t,n=this,r=this.customHandlers=e.pluginField(Tt),i=Object(u.a)(r);try{for(i.s();!(t=i.n()).done;){var a=t.value,o=function(t){n.registeredEvents.indexOf(t)<0&&"scroll"!=t&&(n.registeredEvents.push(t),e.contentDOM.addEventListener(t,(function(r){fn(e,r)&&n.runCustomHandlers(t,e,r)&&r.preventDefault()})))};for(var s in a.handlers)o(s)}}catch(l){i.e(l)}finally{i.f()}}},{key:"runCustomHandlers",value:function(e,t,n){var r,i=Object(u.a)(this.customHandlers);try{for(i.s();!(r=i.n()).done;){var a=r.value,o=a.handlers[e];if(o)try{if(o.call(a.plugin,n,t)||n.defaultPrevented)return!0}catch(s){kt(t.state,s)}}}catch(l){i.e(l)}finally{i.f()}return!1}},{key:"runScrollHandlers",value:function(e,t){var n,r=Object(u.a)(this.customHandlers);try{for(r.s();!(n=r.n()).done;){var i=n.value,a=i.handlers.scroll;if(a)try{a.call(i.plugin,t,e)}catch(o){kt(e.state,o)}}}catch(s){r.e(s)}finally{r.f()}}},{key:"ignoreDuringComposition",value:function(e){return!!/^key/.test(e.type)&&(!!this.composing||!!(F.safari&&e.timeStamp-this.compositionEndedAt<500)&&(this.compositionEndedAt=0,!0))}},{key:"mustFlushObserver",value:function(e){return"keydown"==e.type||"compositionend"==e.type}},{key:"startMouseSelection",value:function(e,t,n){this.mouseSelection&&this.mouseSelection.destroy(),this.mouseSelection=new un(this,e,t,n)}},{key:"update",value:function(e){this.mouseSelection&&this.mouseSelection.update(e),this.lastKeyCode=this.lastSelectionTime=0}},{key:"destroy",value:function(){this.mouseSelection&&this.mouseSelection.destroy()}}]),e}(),un=function(){function e(t,n,r,i){Object(f.a)(this,e),this.inputState=t,this.view=n,this.startEvent=r,this.style=i;var a=n.contentDOM.ownerDocument;a.addEventListener("mousemove",this.move=this.move.bind(this)),a.addEventListener("mouseup",this.up=this.up.bind(this)),this.extend=r.shiftKey,this.multiple=n.state.facet(p.e.allowMultipleSelections)&&function(e,t){var n=e.state.facet(vt);return n.length?n[0](t):F.mac?t.metaKey:t.ctrlKey}(n,r),this.dragMove=function(e,t){var n=e.state.facet(mt);return n.length?n[0](t):F.mac?!t.altKey:!t.ctrlKey}(n,r),this.dragging=!!function(e,t){if(e.state.selection.primary.empty)return!1;var n=$(e.root);if(0==n.rangeCount)return!0;for(var r=n.getRangeAt(0).getClientRects(),i=0;i=t.clientX&&a.top<=t.clientY&&a.bottom>=t.clientY)return!0}return!1}(n,r)&&null,!1===this.dragging&&(r.preventDefault(),this.select(r))}return Object(d.a)(e,[{key:"move",value:function(e){if(0==e.buttons)return this.destroy();!1===this.dragging&&this.select(e)}},{key:"up",value:function(e){null==this.dragging&&this.select(this.startEvent),this.dragging||e.preventDefault(),this.destroy()}},{key:"destroy",value:function(){var e=this.view.contentDOM.ownerDocument;e.removeEventListener("mousemove",this.move),e.removeEventListener("mouseup",this.up),this.inputState.mouseSelection=null}},{key:"select",value:function(e){var t=this.style.get(e,this.extend,this.multiple);t.eq(this.view.state.selection)&&t.primary.assoc==this.view.state.selection.primary.assoc||this.view.dispatch({selection:t,annotations:p.l.userEvent.of("pointerselection"),scrollIntoView:!0})}},{key:"update",value:function(e){e.docChanged&&this.dragging&&(this.dragging=this.dragging.map(e.changes)),this.style.update(e)}}]),e}();function fn(e,t){if(!t.bubbles)return!0;if(t.defaultPrevented)return!1;for(var n,r=t.target;r!=e.contentDOM;r=r.parentNode)if(!r||11==r.nodeType||(n=ne.get(r))&&n.ignoreEvent(t))return!1;return!0}var dn=Object.create(null),hn=F.ie&&F.ie_version<15||F.ios&&F.webkit_version<604;function pn(e,t){var n,r=e.state,i=1,a=r.toText(t),o=a.lines==r.selection.ranges.length;n=wn&&r.selection.ranges.every((function(e){return e.empty}))&&wn==a.toString()?{changes:r.selection.ranges.map((function(e){return r.doc.lineAt(e.from)})).filter((function(e,t,n){return 0==t||n[t-1]!=e})).map((function(e){return{from:e.from,insert:(o?a.line(i++).slice():t)+r.lineBreak}}))}:o?r.changeByRange((function(e){var t=a.line(i++);return{changes:{from:e.from,to:e.to,insert:t.slice()},range:p.d.cursor(e.from+t.length)}})):r.replaceSelection(a),e.dispatch(n,{annotations:p.l.userEvent.of("paste"),scrollIntoView:!0})}function vn(e,t,n,r){if(1==r)return p.d.cursor(t,n);if(2==r)return function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,r=e.charCategorizer(t),i=e.doc.lineAt(t),a=t-i.from;if(0==i.length)return p.d.cursor(t);0==a?n=1:a==i.length&&(n=-1);var o=a,s=a;n<0?o=i.findClusterBreak(a,!1):s=i.findClusterBreak(a,!0);for(var l=r(i.slice(o,s));o>0;){var c=i.findClusterBreak(o,!1);if(r(i.slice(c,o))!=l)break;o=c}for(;sDate.now()-400&&Math.abs(t.clientX-e.clientX)<2&&Math.abs(t.clientY-e.clientY)<2?(xn+1)%3:1}(t),i=e.state.selection,a=n,o=t;return{update:function(e){e.changes&&(n&&(n.pos=e.changes.mapPos(n.pos)),i=i.map(e.changes))},get:function(t,s,l){var c;if(t.clientX==o.clientX&&t.clientY==o.clientY?c=a:(c=a=yn(e,t),o=t),!c||!n)return i;var u=vn(e,c.pos,c.bias,r);if(n.pos!=c.pos&&!s){var f=vn(e,n.pos,n.bias,r),d=Math.min(f.from,u.from),h=Math.max(f.to,u.to);u=d=t.top&&e<=t.bottom},gn=function(e,t,n){return mn(t,n)&&e>=n.left&&e<=n.right};function bn(e,t,n,r){var i=ze.find(e.docView,t);if(!i)return 1;var a=t-i.posAtStart;if(0==a)return 1;if(a==i.length)return-1;var o=i.coordsAt(a,-1);if(o&&gn(n,r,o))return-1;var s=i.coordsAt(a,1);return s&&gn(n,r,s)?1:o&&mn(r,o)?-1:1}function yn(e,t){var n=e.posAtCoords({x:t.clientX,y:t.clientY});return n<0?null:{pos:n,bias:bn(e,n,t.clientX,t.clientY)}}var On=F.ie&&F.ie_version<=11,kn=null,xn=0;dn.dragstart=function(e,t){var n=e.state.selection.primary,r=e.inputState.mouseSelection;r&&(r.dragging=n),t.dataTransfer&&(t.dataTransfer.setData("Text",e.state.sliceDoc(n.from,n.to)),t.dataTransfer.effectAllowed="copyMove")},dn.drop=function(e,t){if(t.dataTransfer){var n=e.posAtCoords({x:t.clientX,y:t.clientY}),r=t.dataTransfer.getData("Text");if(!(n<0)&&r){t.preventDefault();var i=e.inputState.mouseSelection,a=i&&i.dragging&&i.dragMove?{from:i.dragging.from,to:i.dragging.to}:null,o={from:n,insert:r},s=e.state.changes(a?[a,o]:o);e.focus(),e.dispatch({changes:s,selection:{anchor:s.mapPos(n,-1),head:s.mapPos(n,1)},annotations:p.l.userEvent.of("drop")})}}},dn.paste=function(e,t){e.observer.flush();var n=hn?null:t.clipboardData,r=n&&n.getData("text/plain");r?(pn(e,r),t.preventDefault()):function(e){var t=e.dom.parentNode;if(t){var n=t.appendChild(document.createElement("textarea"));n.style.cssText="position: fixed; left: -10000px; top: 10px",n.focus(),setTimeout((function(){e.focus(),n.remove(),pn(e,n.value)}),50)}}(e)};var wn=null;function jn(e){e.docView.compositionDeco.size&&e.update([])}dn.copy=dn.cut=function(e,t){var n=function(e){var t,n=[],r=[],i=!1,a=Object(u.a)(e.selection.ranges);try{for(a.s();!(t=a.n()).done;){var o=t.value;o.empty||(n.push(e.sliceDoc(o.from,o.to)),r.push(o))}}catch(h){a.e(h)}finally{a.f()}if(!n.length){var s,l=-1,c=Object(u.a)(e.selection.ranges);try{for(c.s();!(s=c.n()).done;){var f=s.value.from,d=e.doc.lineAt(f);d.number>l&&(n.push(d.slice()),r.push({from:d.from,to:Math.min(e.doc.length,d.to+1)})),l=d.number}}catch(h){c.e(h)}finally{c.f()}i=!0}return{text:n.join(e.lineBreak),ranges:r,linewise:i}}(e.state),r=n.text,i=n.ranges,a=n.linewise;if(r){wn=a?r:null;var o=hn?null:t.clipboardData;o?(t.preventDefault(),o.clearData(),o.setData("text/plain",r)):function(e,t){var n=e.dom.parentNode;if(n){var r=n.appendChild(document.createElement("textarea"));r.style.cssText="position: fixed; left: -10000px; top: 10px",r.value=t,r.focus(),r.selectionEnd=t.length,r.selectionStart=0,setTimeout((function(){r.remove(),e.focus()}),50)}}(e,r),"cut"==t.type&&e.dispatch({changes:i,scrollIntoView:!0,annotations:p.l.userEvent.of("cut")})}},dn.focus=dn.blur=function(e){setTimeout((function(){e.hasFocus!=e.inputState.notifiedFocused&&e.update([])}),10)},dn.beforeprint=function(e){e.viewState.printing=!0,e.requestMeasure(),setTimeout((function(){e.viewState.printing=!1,e.requestMeasure()}),2e3)},dn.compositionstart=dn.compositionupdate=function(e){e.inputState.composing||(e.docView.compositionDeco.size&&(e.observer.flush(),jn(e)),e.inputState.composing=!0)},dn.compositionend=function(e){e.inputState.composing=!1,e.inputState.compositionEndedAt=Date.now(),setTimeout((function(){e.inputState.composing||jn(e)}),50)};var Sn={childList:!0,characterData:!0,subtree:!0,characterDataOldValue:!0},Cn=F.ie&&F.ie_version<=11,Mn=function(){function e(t,n,r){var i=this;Object(f.a)(this,e),this.view=t,this.onChange=n,this.onScrollChanged=r,this.active=!1,this.ignoreSelection=new K,this.delayedFlush=-1,this.queue=[],this.scrollTargets=[],this.intersection=null,this.intersecting=!1,this.parentCheck=-1,this.dom=t.contentDOM,this.observer=new MutationObserver((function(e){var t,n=Object(u.a)(e);try{for(n.s();!(t=n.n()).done;){var r=t.value;i.queue.push(r)}}catch(a){n.e(a)}finally{n.f()}F.ie&&F.ie_version<=11&&e.some((function(e){return"childList"==e.type&&e.removedNodes.length||"characterData"==e.type&&e.oldValue.length>e.target.nodeValue.length}))?i.flushSoon():i.flush()})),Cn&&(this.onCharData=function(e){i.queue.push({target:e.target,type:"characterData",oldValue:e.prevValue}),i.flushSoon()}),this.onSelectionChange=function(){if(i.view.root.activeElement==i.dom){if(F.ie&&F.ie_version<=11&&!i.view.state.selection.primary.empty){var e=$(i.view.root);if(e.focusNode&&W(e.focusNode,e.focusOffset,e.anchorNode,e.anchorOffset))return i.flushSoon()}i.flush()}},this.start(),this.onScroll=this.onScroll.bind(this),window.addEventListener("scroll",this.onScroll),"function"==typeof IntersectionObserver&&(this.intersection=new IntersectionObserver((function(e){i.parentCheck<0&&(i.parentCheck=setTimeout(i.listenForScroll.bind(i),1e3)),e[e.length-1].intersectionRatio>0!=i.intersecting&&(i.intersecting=!i.intersecting,i.onScrollChanged(document.createEvent("Event")))}),{}),this.intersection.observe(this.dom)),this.listenForScroll()}return Object(d.a)(e,[{key:"onScroll",value:function(e){this.intersecting&&(this.flush(),this.onScrollChanged(e))}},{key:"listenForScroll",value:function(){this.parentCheck=-1;for(var e=0,t=null,n=this.dom;n;)if(1==n.nodeType)!t&&e=0&&(window.clearTimeout(this.delayedFlush),this.delayedFlush=-1,this.flush())}},{key:"flush",value:function(){var e=this;if(!(this.delayedFlush>=0)){var t,n=this.queue,r=Object(u.a)(this.observer.takeRecords());try{for(r.s();!(t=r.n()).done;){var i=t.value;n.push(i)}}catch(m){r.e(m)}finally{r.f()}n.length&&(this.queue=[]);var a=$(this.view.root),o=!this.ignoreSelection.eq(a)&&B(this.dom,a);if(0!=n.length||o){var s,l=-1,c=-1,f=!1,d=Object(u.a)(n);try{for(d.s();!(s=d.n()).done;){var h=s.value,p=this.readMutation(h);p&&(p.typeOver&&(f=!0),-1==l?(l=p.from,c=p.to):(l=Math.min(p.from,l),c=Math.max(p.to,c)))}}catch(m){d.e(m)}finally{d.f()}var v=this.view.state;(l>-1||o)&&this.onChange(l,c,f),this.view.state==v&&(this.view.docView.dirty&&(this.ignore((function(){return e.view.docView.sync()})),this.view.docView.dirty=0),this.view.docView.updateSelection()),this.clearSelection()}}}},{key:"readMutation",value:function(e){var t=this.view.docView.nearest(e.target);if(!t||t.ignoreMutation(e))return null;if(t.markDirty(),"childList"==e.type){var n=En(t,e.previousSibling||e.target.previousSibling,-1),r=En(t,e.nextSibling||e.target.nextSibling,1);return{from:n?t.posAfter(n):t.posAtStart,to:r?t.posBefore(r):t.posAtEnd,typeOver:!1}}return{from:t.posAtStart,to:t.posAtEnd,typeOver:e.target.nodeValue==e.oldValue}}},{key:"destroy",value:function(){this.stop(),this.intersection&&this.intersection.disconnect();var e,t=Object(u.a)(this.scrollTargets);try{for(t.s();!(e=t.n()).done;){e.value.removeEventListener("scroll",this.onScroll)}}catch(n){t.e(n)}finally{t.f()}window.removeEventListener("scroll",this.onScroll),clearTimeout(this.parentCheck)}}]),e}();function En(e,t,n){for(;t;){var r=ne.get(t);if(r&&r.parent==e)return r;var i=t.parentNode;t=i!=e.dom?i:n>0?t.nextSibling:t.previousSibling}return null}var Tn="\ufdda";function Pn(e,t,n,r){var i,a,o,s=e.state.selection.primary;if(t>-1&&(o=e.docView.domBoundsAround(t,n,0))){var l=o,c=l.from,u=l.to,f=e.docView.impreciseHead||e.docView.impreciseAnchor?[]:function(e,t){var n=[];if(t.activeElement!=e)return n;var r=$(t),i=r.anchorNode,a=r.anchorOffset,o=r.focusNode,s=r.focusOffset;i&&(n.push(new An(i,a)),o==i&&s==a||n.push(new An(o,s)));return n}(e.contentDOM,e.root),d=new _n(f);d.readRange(o.startDOM,o.endDOM),a=function(e,t){if(0==e.length)return null;var n=e[0].pos,r=2==e.length?e[1].pos:n;return n>-1&&r>-1?p.d.single(n+t,r+t):null}(f,c);var h=s.from,v=null;8===e.inputState.lastKeyCode&&e.inputState.lastKeyTime>Date.now()-100&&(h=s.to,v="end");var m=function(e,t,n,r){var i=Math.min(e.length,t.length),a=0;for(;a0&&s>0&&e.charCodeAt(o-1)==t.charCodeAt(s-1);)o--,s--;if("end"==r){n-=o+Math.max(0,a-Math.min(o,s))-a}if(o=o?a-n:0)+(s-o),o=a}else if(s=s?a-n:0)+(o-s),s=a}return{from:a,toA:o,toB:s}}(e.state.doc.sliceString(c,u,Tn),d.text,h-c,v);m&&(i={from:c+m.from,to:c+m.toA,insert:p.k.of(d.text.slice(m.from,m.toB).split(Tn))})}else if(e.hasFocus){var g=$(e.root),b=e.docView,y=b.impreciseHead,O=b.impreciseAnchor,k=y&&y.node==g.focusNode&&y.offset==g.focusOffset?e.state.selection.primary.head:e.docView.posFromDOM(g.focusNode,g.focusOffset),x=O&&O.node==g.anchorNode&&O.offset==g.anchorOffset?e.state.selection.primary.anchor:function(e){var t=e.isCollapsed;return t&&F.chrome&&e.rangeCount&&!e.getRangeAt(0).collapsed&&(t=!1),t}(g)?k:e.docView.posFromDOM(g.anchorNode,g.anchorOffset);k==s.head&&x==s.anchor||(a=p.d.single(x,k))}if(i||a)if(!i&&r&&!s.empty&&a&&a.primary.empty&&(i={from:s.from,to:s.to,insert:e.state.doc.slice(s.from,s.to)}),i){var w=e.state;if(F.android&&(i.from==s.from&&i.to==s.to&&1==i.insert.length&&2==i.insert.lines&&Rn(e,"Enter",10)||i.from==s.from-1&&i.to==s.to&&0==i.insert.length&&Rn(e,"Backspace",8)||i.from==s.from&&i.to==s.to+1&&0==i.insert.length&&Rn(e,"Delete",46)))return;var j,S=i.insert.toString();if(e.state.facet(Ot).some((function(t){return t(e,i.from,i.to,S)})))return;if(i.from>=s.from&&i.to<=s.to&&i.to-i.from>=(s.to-s.from)/3){var C=s.fromi.to?w.doc.sliceString(i.to,s.to,Tn):"";j=w.replaceSelection(p.k.of((C+i.insert.sliceString(0,void 0,Tn)+M).split(Tn)))}else{var E=w.changes(i);j={changes:E,selection:a&&!w.selection.primary.eq(a.primary)&&a.primary.to<=E.newLength?w.selection.replaceRange(a.primary):void 0}}e.dispatch(j,{scrollIntoView:!0,annotations:p.l.userEvent.of("input")})}else if(a&&!a.primary.eq(s)){var T,P=!1;e.inputState.lastSelectionTime>Date.now()-50&&("keyboardselection"==e.inputState.lastSelectionOrigin?P=!0:T=p.l.userEvent.of(e.inputState.lastSelectionOrigin)),e.dispatch({selection:a,scrollIntoView:P,annotations:T})}}var _n=function(){function e(t){Object(f.a)(this,e),this.points=t,this.text=""}return Object(d.a)(e,[{key:"readRange",value:function(e,t){if(e){for(var n=e.parentNode,r=e;;){this.findPointBefore(n,r),this.readNode(r);var i=r.nextSibling;if(i==t)break;var a=ne.get(r),o=ne.get(i);((a?a.breakAfter:Dn(r))||(o?o.breakAfter:Dn(i))&&("BR"!=r.nodeName||r.cmIgnore))&&(this.text+=Tn),r=i}this.findPointBefore(n,t)}}},{key:"readNode",value:function(e){if(!e.cmIgnore){var t,n=ne.get(e),r=n&&n.overrideDOMText;null!=r?t=r.sliceString(0,void 0,Tn):3==e.nodeType?t=e.nodeValue:"BR"==e.nodeName?t=e.nextSibling?Tn:"":1==e.nodeType&&this.readRange(e.firstChild,null),null!=t&&(this.findPointIn(e,t.length),this.text+=t)}}},{key:"findPointBefore",value:function(e,t){var n,r=Object(u.a)(this.points);try{for(r.s();!(n=r.n()).done;){var i=n.value;i.node==e&&e.childNodes[i.offset]==t&&(i.pos=this.text.length)}}catch(a){r.e(a)}finally{r.f()}}},{key:"findPointIn",value:function(e,t){var n,r=Object(u.a)(this.points);try{for(r.s();!(n=r.n()).done;){var i=n.value;i.node==e&&(i.pos=this.text.length+Math.min(i.offset,t))}}catch(a){r.e(a)}finally{r.f()}}}]),e}();function Dn(e){return 1==e.nodeType&&/^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\d|SECTION|PRE)$/.test(e.nodeName)}var An=function e(t,n){Object(f.a)(this,e),this.node=t,this.offset=n,this.pos=-1};function Rn(e,t,n){var r={key:t,code:t,keyCode:n,which:n,cancelable:!0},i=new KeyboardEvent("keydown",r);e.contentDOM.dispatchEvent(i);var a=new KeyboardEvent("keyup",r);return e.contentDOM.dispatchEvent(a),i.defaultPrevented||a.defaultPrevented}var Ln=function(){function e(){var t=this,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};Object(f.a)(this,e),this.plugins=[],this.editorAttrs={},this.contentAttrs={},this.bidiCache=[],this.updateState=2,this.measureScheduled=-1,this.measureRequests=[],this.contentDOM=document.createElement("div"),this.scrollDOM=document.createElement("div"),this.scrollDOM.className=Ae("scroller"),this.scrollDOM.appendChild(this.contentDOM),this.dom=document.createElement("div"),this.dom.appendChild(this.scrollDOM),this._dispatch=n.dispatch||function(e){return t.update([e])},this.dispatch=this.dispatch.bind(this),this.root=n.root||document,this.viewState=new Ft(n.state||p.e.create()),this.plugins=this.state.facet(Ct).map((function(e){return Pt.create(e,t)})),this.observer=new Mn(this,(function(e,n,r){return Pn(t,e,n,r)}),(function(e){t.inputState.runScrollHandlers(t,e),t.measure()})),this.docView=new Vt(this),this.inputState=new cn(this),this.mountStyles(),this.updateAttrs(),this.updateState=0,Fn(),this.requestMeasure(),n.parent&&n.parent.appendChild(this.dom)}return Object(d.a)(e,[{key:"dispatch",value:function(){var e;this._dispatch(1==arguments.length&&(arguments.length<=0?void 0:arguments[0])instanceof p.l?arguments.length<=0?void 0:arguments[0]:(e=this.state).update.apply(e,arguments))}},{key:"update",value:function(e){if(0!=this.updateState)throw new Error("Calls to EditorView.update are not allowed while an update is in progress");this.updateState=2;var t,n=this.state,r=Object(u.a)(e);try{for(r.s();!(t=r.n()).done;){var i=t.value;if(i.startState!=n)throw new RangeError("Trying to update state with a transaction that doesn't start from the previous state.");n=i.state}}catch(f){r.e(f)}finally{r.f()}var a=new Nt(this,n,e),o=e.some((function(e){return e.scrollIntoView}))?n.selection.primary:null;this.viewState.update(a,o),this.bidiCache=Qn.update(this.bidiCache,a.changes),a.empty||this.updatePlugins(a);var s=this.docView.update(a);this.state.facet(Rt)!=this.styleModules&&this.mountStyles(),this.updateAttrs(),this.updateState=0,(s||o||this.viewState.mustEnforceCursorAssoc)&&this.requestMeasure();var l,c=Object(u.a)(this.state.facet(yt));try{for(c.s();!(l=c.n()).done;){(0,l.value)(a)}}catch(f){c.e(f)}finally{c.f()}}},{key:"setState",value:function(e){var t=this;if(0!=this.updateState)throw new Error("Calls to EditorView.setState are not allowed while an update is in progress");this.updateState=2;var n,r=Object(u.a)(this.plugins);try{for(r.s();!(n=r.n()).done;){n.value.destroy(this)}}catch(i){r.e(i)}finally{r.f()}this.viewState=new Ft(e),this.plugins=e.facet(Ct).map((function(e){return Pt.create(e,t)})),this.docView=new Vt(this),this.inputState.ensureHandlers(this),this.mountStyles(),this.updateAttrs(),this.bidiCache=[],this.updateState=0,this.requestMeasure()}},{key:"updatePlugins",value:function(e){var t=e.prevState.facet(Ct),n=e.state.facet(Ct);if(t!=n){var r,i=[],a=[],o=Object(u.a)(n);try{for(o.s();!(r=o.n()).done;){var s=r.value,l=t.indexOf(s);if(l<0)i.push(Pt.create(s,this));else{var c=this.plugins[l].update(e);a.push(c),i.push(c)}}}catch(v){o.e(v)}finally{o.f()}var f,d=Object(u.a)(this.plugins);try{for(d.s();!(f=d.n()).done;){var h=f.value;a.indexOf(h)<0&&h.destroy(this)}}catch(v){d.e(v)}finally{d.f()}this.plugins=i,this.inputState.ensureHandlers(this)}else for(var p=0;p-1&&cancelAnimationFrame(this.measureScheduled),this.measureScheduled=-1;for(var t=null,n=0;;n++){this.updateState=1;var r=this.viewState.measure(this.docView,n>0),i=this.measureRequests;if(!r&&!i.length&&null==this.viewState.scrollTo)break;if(this.measureRequests=[],n>5){console.warn("Viewport failed to stabilize");break}var a=i.map((function(t){try{return t.read(e)}catch(n){return kt(e.state,n),Bn}})),o=new Nt(this,this.state);o.flags|=r,t?t.flags|=r:t=o,this.updateState=2,this.updatePlugins(o),r&&this.docView.update(o);for(var s=0;s1&&void 0!==arguments[1]?arguments[1]:0;return this.docView.posFromDOM(e,t)}},{key:"readMeasured",value:function(){if(2==this.updateState)throw new Error("Reading the editor layout isn't allowed during an update");0==this.updateState&&this.measureScheduled>-1&&this.measure()}},{key:"requestMeasure",value:function(e){var t=this;if(this.measureScheduled<0&&(this.measureScheduled=requestAnimationFrame((function(){return t.measure()}))),e){if(null!=e.key)for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:0;return this.viewState.lineAt(e,t)}},{key:"viewportLines",value:function(e,t){var n=this.viewport,r=n.from,i=n.to;this.viewState.forEachLine(r,i,e,zn(t,this.contentDOM))}},{key:"moveByChar",value:function(e,t,n){return ln(this,e,t,n)}},{key:"moveByGroup",value:function(e,t){var n=this;return ln(this,e,t,(function(t){return function(e,t,n){var r=e.state.charCategorizer(t),i=r(n);return function(e){var t=r(e);return i==p.c.Space&&(i=t),i==t}}(n,e.head,t)}))}},{key:"moveToLineBoundary",value:function(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return sn(this,e,t,n)}},{key:"moveVertically",value:function(e,t,n){return function(e,t,n,r){var i,a=t.head,o=n?1:-1;if(a==(n?e.state.doc.length:0))return p.d.cursor(a);var s=e.coordsAtPos(a);if(s)for(var l=e.dom.getBoundingClientRect(),c=null!==(i=t.goalColumn)&&void 0!==i?i:s.left-l.left,u=l.left+c,f=null!==r&&void 0!==r?r:5,d=o<0?s.top:s.bottom,h=0;h<50;h+=10){var v=on(e,{x:u,y:d+(f+h)*o},o);if(v<0)break;if(v!=a)return p.d.cursor(v,void 0,void 0,c)}var m=e.state.doc,b=m.lineAt(a),y=e.state.tabSize,O=t.goalColumn,k=0;if(null==O){for(var x=m.iterRange(b.from,a);!x.next().done;)k=Object(g.d)(x.value,k,y);O=k*e.defaultCharacterWidth}else k=Math.round(O/e.defaultCharacterWidth);if(o<0&&0==b.from)return p.d.cursor(0);if(o>0&&b.to==m.length)return p.d.cursor(b.to);for(var w=m.line(b.number+o),j=w.from,S=0,C=m.iterRange(w.from,w.to);S>=k&&!C.next().done;){var M=Object(g.e)(C.value,S,k,y),E=M.offset;S=k-M.leftOver,j+=E}return p.d.cursor(j,void 0,void 0,O)}(this,e,t,n)}},{key:"scrollPosIntoView",value:function(e){this.viewState.scrollTo=p.d.cursor(e),this.requestMeasure()}},{key:"posAtCoords",value:function(e){return this.readMeasured(),on(this,e)}},{key:"coordsAtPos",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;this.readMeasured();var n=this.docView.coordsAt(e,t);if(!n||n.left==n.right)return n;var r=this.state.doc.lineAt(e),i=this.bidiSpans(r),a=i[Ye.find(i,e-r.from,-1,t)];return q(n,a.dir==Re.LTR==t>0)}},{key:"bidiSpans",value:function(e){if(e.length>Nn)return Ge(e.length);var t,n=this.textDirection,r=Object(u.a)(this.bidiCache);try{for(r.s();!(t=r.n()).done;){var i=t.value;if(i.from==e.from&&i.dir==n)return i.order}}catch(o){r.e(o)}finally{r.f()}var a=Ke(e.slice(),this.textDirection);return this.bidiCache.push(new Qn(e.from,e.to,n,a)),a}},{key:"focus",value:function(){var e=this;this.observer.ignore((function(){Z(e.contentDOM),e.docView.updateSelection()}))}},{key:"destroy",value:function(){var e,t=Object(u.a)(this.plugins);try{for(t.s();!(e=t.n()).done;){e.value.destroy(this)}}catch(n){t.e(n)}finally{t.f()}this.inputState.destroy(),this.dom.remove(),this.observer.destroy(),this.measureScheduled>-1&&cancelAnimationFrame(this.measureScheduled)}},{key:"state",get:function(){return this.viewState.state}},{key:"viewport",get:function(){return this.viewState.viewport}},{key:"visibleRanges",get:function(){return this.viewState.visibleRanges}},{key:"inView",get:function(){return this.viewState.inView}},{key:"composing",get:function(){return this.inputState.composing}},{key:"themeClasses",get:function(){return Pe+" "+(this.state.facet(Te)?"cm-dark":"cm-light")+" "+this.state.facet(Ee)}},{key:"contentHeight",get:function(){return this.viewState.heightMap.height+this.viewState.paddingTop+this.viewState.paddingBottom}},{key:"defaultCharacterWidth",get:function(){return this.viewState.heightOracle.charWidth}},{key:"defaultLineHeight",get:function(){return this.viewState.heightOracle.lineHeight}},{key:"textDirection",get:function(){return this.viewState.heightOracle.direction}},{key:"lineWrapping",get:function(){return this.viewState.heightOracle.lineWrapping}},{key:"hasFocus",get:function(){return this.root.activeElement==this.contentDOM}}],[{key:"domEventHandlers",value:function(e){return Mt.define((function(){return{}}),{eventHandlers:e})}},{key:"theme",value:function(e,t){var n=v.a.newName(),r=[Ee.of(n),Rt.of(De(".".concat(Pe,".").concat(n),e))];return t&&t.dark&&r.push(Te.of(!0)),r}},{key:"baseTheme",value:function(e){return Object(p.o)(Rt.of(De("."+Pe,e)),"fallback")}}]),e}();Ln.styleModule=Rt,Ln.inputHandler=Ot,Ln.exceptionSink=bt,Ln.updateListener=yt,Ln.editable=xt,Ln.dragMovesSelection=mt,Ln.clickAddsSelectionRange=vt,Ln.mouseSelectionStyle=gt,Ln.decorations=At,Ln.lineWrapping=Ln.theme({$content:{whiteSpace:"pre-wrap"}}),Ln.contentAttributes=Dt,Ln.editorAttributes=_t;var Nn=4096;function zn(e,t){return null==e?t.getBoundingClientRect().top:e}var In=-1;function Fn(){window.addEventListener("resize",(function(){-1==In&&(In=setTimeout($n,50))}))}function $n(){In=-1;for(var e=document.querySelectorAll(".cm-content"),t=0;t1&&void 0!==arguments[1]?arguments[1]:Wn,r=Object.create(null),i=Object.create(null),a=function(e,t){var n=i[e];if(null==n)i[e]=t;else if(n!=t)throw new Error("Key binding "+e+" is used both as a regular binding and as a multi-stroke prefix")},o=function(e,t,i,o){for(var s=r[e]||(r[e]=Object.create(null)),l=t.split(/ (?!$)/).map((function(e){return Hn(e,n)})),c=function(t){var n=l.slice(0,t).join(" ");a(n,!0),s[n]||(s[n]={preventDefault:!0,commands:[function(t){var r=Kn={view:t,prefix:n,scope:e};return setTimeout((function(){Kn==r&&(Kn=null)}),4e3),!0}]})},u=1;u0&&void 0!==arguments[0]?arguments[0]:{};return[er.of(e),rr,ar]}var nr=function(){function e(t,n,r,i,a){Object(f.a)(this,e),this.left=t,this.top=n,this.width=r,this.height=i,this.className=a}return Object(d.a)(e,[{key:"draw",value:function(){var e=document.createElement("div");return e.className=this.className,e.style.left=this.left+"px",e.style.top=this.top+"px",this.width>=0&&(e.style.width=this.width+"px"),e.style.height=this.height+"px",e}},{key:"eq",value:function(e){return this.left==e.left&&this.top==e.top&&this.width==e.width&&this.height==e.height&&this.className==e.className}}]),e}(),rr=Mt.fromClass(function(){function e(t){Object(f.a)(this,e),this.view=t,this.rangePieces=[],this.cursors=[],this.measureReq={read:this.readPos.bind(this),write:this.drawSel.bind(this)},this.selectionLayer=t.scrollDOM.appendChild(document.createElement("div")),this.selectionLayer.className=Ae("selectionLayer"),this.selectionLayer.setAttribute("aria-hidden","true"),this.cursorLayer=t.scrollDOM.appendChild(document.createElement("div")),this.cursorLayer.className=Ae("cursorLayer"),this.cursorLayer.setAttribute("aria-hidden","true"),t.requestMeasure(this.measureReq),this.setBlinkRate()}return Object(d.a)(e,[{key:"setBlinkRate",value:function(){this.cursorLayer.style.animationDuration=this.view.state.facet(er).cursorBlinkRate+"ms"}},{key:"update",value:function(e){var t=e.prevState.facet(er)!=e.state.facet(er);(t||e.selectionSet||e.geometryChanged||e.viewportChanged)&&this.view.requestMeasure(this.measureReq),e.transactions.some((function(e){return e.scrollIntoView}))&&(this.cursorLayer.style.animationName="cm-blink"==this.cursorLayer.style.animationName?"cm-blink2":"cm-blink"),t&&this.setBlinkRate()}},{key:"readPos",value:function(){var e,t=this,n=this.view.state,r=n.facet(er),i=n.selection.ranges.map((function(e){return e.empty?[]:function(e,t){if(t.to<=e.viewport.from||t.from>=e.viewport.to)return[];var n=Math.max(t.from,e.viewport.from),r=Math.min(t.to,e.viewport.to),i=e.textDirection==Re.LTR,a=e.contentDOM,o=a.getBoundingClientRect(),s=sr(e),l=window.getComputedStyle(a.firstChild),c=o.left+parseInt(l.paddingLeft),f=o.right-parseInt(l.paddingRight),d=e.visualLineAt(n),h=e.visualLineAt(r);if(d.from==h.from)return y(O(t.from,t.to));var v=O(t.from,null),m=O(null,t.to),g=[];return d.tod&&m.from=b)break;j>g&&s(Math.max(w,g),null==t&&w<=d,Math.min(j,b),null==n&&j>=h,x.dir)}}catch(C){k.e(C)}finally{k.f()}if((g=O.to+1)>=b)break}}}catch(C){v.e(C)}finally{v.f()}if(0==o.length){var S=e.coordsAtPos(d,-1);r=Math.min(S.top,r),a=Math.max(S.bottom,a)}return{top:r,bottom:a,horizontal:o}}}(t.view,e)})).reduce((function(e,t){return e.concat(t)})),a=[],o=Object(u.a)(n.selection.ranges);try{for(o.s();!(e=o.n()).done;){var s=e.value,l=s==n.selection.primary;if(s.empty?!l||Jn:r.drawRangeCursor){var c=ur(this.view,s,l);c&&a.push(c)}}}catch(f){o.e(f)}finally{o.f()}return{rangePieces:i,cursors:a}}},{key:"drawSel",value:function(e){var t=this,n=e.rangePieces,r=e.cursors;if(n.length!=this.rangePieces.length||n.some((function(e,n){return!e.eq(t.rangePieces[n])}))){this.selectionLayer.textContent="";var i,a=Object(u.a)(n);try{for(a.s();!(i=a.n()).done;){var o=i.value;this.selectionLayer.appendChild(o.draw())}}catch(f){a.e(f)}finally{a.f()}this.rangePieces=n}if(r.length!=this.cursors.length||r.some((function(e,n){return!e.eq(t.cursors[n])}))){this.cursorLayer.textContent="";var s,l=Object(u.a)(r);try{for(l.s();!(s=l.n()).done;){var c=s.value;this.cursorLayer.appendChild(c.draw())}}catch(f){l.e(f)}finally{l.f()}this.cursors=r}}},{key:"destroy",value:function(){this.selectionLayer.remove(),this.cursorLayer.remove()}}]),e}()),ir={$content:{"& ::selection":{backgroundColor:"transparent !important"}}};Jn&&(ir.$content.caretColor="transparent !important");var ar=Object(p.o)(Ln.theme(ir),"override"),or=Ae("selectionBackground");function sr(e){var t=e.scrollDOM.getBoundingClientRect();return{left:t.left-e.scrollDOM.scrollLeft,top:t.top-e.scrollDOM.scrollTop}}var lr=Ae("cursor.primary"),cr=Ae("cursor.secondary");function ur(e,t,n){var r=e.coordsAtPos(t.head,t.assoc||1);if(!r)return null;var i=sr(e);return new nr(r.left-i.left,r.top-i.top,-1,r.bottom-r.top,n?lr:cr)}var fr=/[\0-\x08\n-\x1F\x7F-\x9F\xAD\u061C\u200B\u200C\u200E\u200F\u2028\u2029\uFEFF\uFFF9-\uFFFC]/g,dr={0:"null",7:"bell",8:"backspace",10:"newline",11:"vertical tab",13:"carriage return",27:"escape",8203:"zero width space",8204:"zero width non-joiner",8205:"zero width joiner",8206:"left-to-right mark",8207:"right-to-left mark",8232:"line separator",8233:"paragraph separator",65279:"zero width no-break space",65532:"object replacement"},hr=null;function pr(){if(null==hr&&"undefined"!=typeof document&&document.body){var e=document.body.style;hr=null!=(e.tabSize||e.MozTabSize)}return hr||!1}var vr=null!=/x/.unicode?"gu":"g",mr=p.f.define({combine:function(e){var t=Object(p.m)(e,{render:null,specialChars:fr,addSpecialChars:null});return(t.replaceTabs=!pr())&&(t.specialChars=new RegExp("\t|"+t.specialChars.source,vr)),t.addSpecialChars&&(t.specialChars=new RegExp(t.specialChars.source+"|"+t.addSpecialChars.source,vr)),t}});function gr(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=[mr.of(e),br];return pr()||t.push(xr),t}var br=Mt.fromClass(function(){function e(t){Object(f.a)(this,e),this.view=t,this.decorations=xe.none,this.decorationCache=Object.create(null),this.recompute()}return Object(d.a)(e,[{key:"update",value:function(e){var t=e.prevState.facet(mr)!=e.state.facet(mr);t&&(this.decorationCache=Object.create(null)),(t||e.changes.length||e.viewportChanged)&&this.recompute()}},{key:"recompute",value:function(){var e,t=[],n=Object(u.a)(this.view.visibleRanges);try{for(n.s();!(e=n.n()).done;){var r=e.value,i=r.from,a=r.to;this.getDecorationsFor(i,a,t)}}catch(o){n.e(o)}finally{n.f()}this.decorations=xe.set(t)}},{key:"getDecorationsFor",value:function(e,t,n){for(var r,i=this.view.state.facet(mr),a=this.view.state.doc,o=e,s=a.iterRange(e,t);!s.next().done;){if(!s.lineBreak)for(;r=i.specialChars.exec(s.value);){var l=Object(g.b)(r[0],0),c=void 0;if(null!=l){if(9==l){var u=a.lineAt(o+r.index),f=this.view.state.tabSize,d=Object(g.d)(a.sliceString(u.from,o+r.index),0,f);c=xe.replace({widget:new Or((f-d%f)*this.view.defaultCharacterWidth)})}else c=this.decorationCache[l]||(this.decorationCache[l]=xe.replace({widget:new yr(i,l)}));n.push(c.range(o+r.index,o+r.index+r[0].length))}}o+=s.value.length}}}]),e}(),{decorations:function(e){return e.decorations}});var yr=function(e){Object(s.a)(n,e);var t=Object(l.a)(n);function n(e,r){var i;return Object(f.a)(this,n),(i=t.call(this)).options=e,i.code=r,i}return Object(d.a)(n,[{key:"eq",value:function(e){return e.code==this.code}},{key:"toDOM",value:function(){var e,t=((e=this.code)>=32?null:10==e?"\u2424":String.fromCharCode(9216+e))||"\u2022",n="Control character "+(dr[this.code]||this.code),r=this.options.render&&this.options.render(this.code,n,t);if(r)return r;var i=document.createElement("span");return i.textContent=t,i.title=n,i.setAttribute("aria-label",n),i.style.color="red",i}},{key:"ignoreEvent",value:function(){return!1}}]),n}(ke),Or=function(e){Object(s.a)(n,e);var t=Object(l.a)(n);function n(e){var r;return Object(f.a)(this,n),(r=t.call(this)).width=e,r}return Object(d.a)(n,[{key:"eq",value:function(e){return e.width==this.width}},{key:"toDOM",value:function(){var e=document.createElement("span");return e.textContent="\t",e.className=kr,e.style.width=this.width+"px",e}},{key:"ignoreEvent",value:function(){return!1}}]),n}(ke),kr=v.a.newName(),xr=Ln.styleModule.of(new v.a(Object(r.a)({},"."+kr,{display:"inline-block",overflow:"hidden",verticalAlign:"bottom"})));function wr(){return p.e.transactionFilter.of((function(e){if(!e.docChanged||"input"!=e.annotation(p.l.userEvent))return e;var t=e.startState.languageDataAt("indentOnInput",e.startState.selection.primary.head);if(!t.length)return e;var n=e.newDoc,r=e.newSelection.primary.head,i=n.lineAt(r);if(r>i.from+200)return e;var a=n.sliceString(i.from,r);if(!t.some((function(e){return e.test(a)})))return e;var o,s=e.state,l=-1,f=[],d=Object(u.a)(s.selection.ranges);try{var h=function(){var e=o.value.head,t=s.doc.lineAt(e);if(t.from==l)return"continue";l=t.from;var n=Math.max.apply(Math,Object(c.a)(s.facet(p.e.indentation).map((function(e){return e(new p.g(s),t.from)}))));if(n<0)return"continue";var r=/^\s*/.exec(t.slice(0,Math.min(t.length,200)))[0],i=s.indentString(n);r!=i&&f.push({from:t.from,to:t.from+r.length,insert:i})};for(d.s();!(o=d.n()).done;)h()}catch(v){d.e(v)}finally{d.f()}return f.length?[e,{changes:f}]:e}))}},function(e,t,n){"use strict";var r=n(2),i=n(8),a=n(0),o=n.n(a),s=(n(12),n(94)),l=n.n(s),c=n(192),u=n(223),f=n(151),d=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return function(n){var a=t.defaultTheme,s=t.withTheme,d=void 0!==s&&s,h=t.name,p=Object(i.a)(t,["defaultTheme","withTheme","name"]);var v=h,m=Object(c.a)(e,Object(r.a)({defaultTheme:a,Component:n,name:h||n.displayName,classNamePrefix:v},p)),g=o.a.forwardRef((function(e,t){e.classes;var s,l=e.innerRef,c=Object(i.a)(e,["classes","innerRef"]),p=m(Object(r.a)(Object(r.a)({},n.defaultProps),e)),v=c;return("string"===typeof h||d)&&(s=Object(f.a)()||a,h&&(v=Object(u.a)({theme:s,name:h,props:c})),d&&!v.theme&&(v.theme=s)),o.a.createElement(n,Object(r.a)({ref:l||t,classes:p},v))}));return l()(g,n),g}},h=n(65);t.a=function(e,t){return d(e,Object(r.a)({defaultTheme:h.a},t))}},function(e,t,n){e.exports=n(177)()},function(e,t,n){"use strict";function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}n.d(t,"a",(function(){return r}))},function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));var r=n(13);function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;te)return u[t-1]<=e;return!1}function h(e){return e>=127462&&e<=127487}function p(e,t){if(t==e.length)return t;t&&m(e.charCodeAt(t))&&g(e.charCodeAt(t-1))&&t--;var n=b(e,t);for(t+=O(n);t=0&&h(b(e,a));)i++,a-=2;if(i%2==0)break;t+=2}}return t}function v(e,t){for(;t>0;){var n=p(e,t-2);if(n=56320&&e<57344}function g(e){return e>=55296&&e<56320}function b(e,t){var n=e.charCodeAt(t);if(!g(n)||t+1==e.length)return n;var r=e.charCodeAt(t+1);return m(r)?r-56320+(n-55296<<10)+65536:n}function y(e){return e<=65535?String.fromCharCode(e):(e-=65536,String.fromCharCode(55296+(e>>10),56320+(1023&e)))}function O(e){return e<65536?1:2}function k(e,t,n){for(var r=0;r=n)return{offset:i,leftOver:0};t+=9==e.charCodeAt(i)?r-t%r:1,i=p(e,i)}return{offset:e.length,leftOver:n-t}}var w=function(){function e(){Object(l.a)(this,e)}return Object(c.a)(e,[{key:"lineAt",value:function(e){if(e<0||e>this.length)throw new RangeError("Invalid position ".concat(e," in document of length ").concat(this.length));var t,n=Object(s.a)(j);try{for(n.s();!(t=n.n()).done;){var r=t.value;if(r.doc==this&&r.from<=e&&r.to>=e)return r}}catch(i){n.e(i)}finally{n.f()}return C(this.lineInner(e,!1,1,0).finish(this))}},{key:"line",value:function(e){if(e<1||e>this.lines)throw new RangeError("Invalid line number ".concat(e," in ").concat(this.lines,"-line document"));var t,n=Object(s.a)(j);try{for(n.s();!(t=n.n()).done;){var r=t.value;if(r.doc==this&&r.number==e)return r}}catch(i){n.e(i)}finally{n.f()}return C(this.lineInner(e,!0,1,0).finish(this))}},{key:"replace",value:function(e,t,n){var r=[];return this.decompose(0,e,r),r.push(n),this.decompose(t,this.length,r),E.from(r,this.length-(t-e)+n.length)}},{key:"append",value:function(e){return 0==this.length?e:0==e.length?this:E.from([this,e],this.length+e.length)}},{key:"slice",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.length,n=[];return this.decompose(e,t,n),E.from(n,t-e)}},{key:"eq",value:function(e){return this==e||function(e,t){if(e.length!=t.length||e.lines!=t.lines)return!1;for(var n=new D(e),r=new D(t),i=0,a=0;;){if(n.lineBreak!=r.lineBreak||n.done!=r.done)return!1;if(n.done)return!0;if(n.lineBreak)n.next(),r.next(),i=a=0;else{var o=n.value.slice(i),s=r.value.slice(a);if(o.length==s.length){if(o!=s)return!1;n.next(),r.next(),i=a=0}else if(o.length>s.length){if(o.slice(0,s.length)!=s)return!1;i+=s.length,r.next(),a=0}else{if(s.slice(0,o.length)!=o)return!1;a+=o.length,n.next(),i=0}}}}(this,e)}},{key:"iter",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;return new D(this,e)}},{key:"iterRange",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.length;return new A(this,e,t)}},{key:"iterLines",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return new R(this,e)}},{key:"toString",value:function(){return this.sliceString(0)}},{key:"toJSON",value:function(){for(var e=[],t=this.iterLines();!t.next().done;)e.push(t.value);return e}}],[{key:"of",value:function(t){if(0==t.length)throw new RangeError("A document must have at least one line");if(1==t.length&&!t[0]&&e.empty)return e.empty;var n=T(t);return n<1024?new M(t,n):E.from(M.split(t,[]),n)}}]),e}();"undefined"!=typeof Symbol&&(w.prototype[Symbol.iterator]=function(){return this.iter()});var j=[],S=-1;function C(e){return j[S=(S+1)%10]=e}var M=function(e){Object(a.a)(n,e);var t=Object(o.a)(n);function n(e){var r,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:T(e);return Object(l.a)(this,n),(r=t.call(this)).text=e,r.length=i,r}return Object(c.a)(n,[{key:"lineInner",value:function(e,t,n,r){for(var i=0;;i++){var a=this.text[i],o=r+a.length;if((t?n:o)>=e)return new L(r,o,n,a);r=o+1,n++}}},{key:"decompose",value:function(e,t,r){r.push(new n(_(this.text,e,t),Math.min(t,this.length)-Math.max(0,e)))}},{key:"lastLineLength",value:function(){return this.text[this.text.length-1].length}},{key:"firstLineLength",value:function(){return this.text[0].length}},{key:"replace",value:function(e,t,a){var o=this.length+a.length-(t-e);return o>=1024||!(a instanceof n)?Object(r.a)(Object(i.a)(n.prototype),"replace",this).call(this,e,t,a):new n(P(this.text,P(a.text,_(this.text,0,e)),t),o)}},{key:"sliceString",value:function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.length,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"\n",r="",i=0,a=0;i<=t&&ae&&a&&(r+=n),ei&&(r+=o.slice(Math.max(0,e-i),t-i)),i=s+1}return r}},{key:"flatten",value:function(e){e[e.length-1]+=this.text[0];for(var t=1;t=56320&&f<57344&&u++,i.push(l.slice(0,u)),t.push(new n(i,512)),l=l.slice(u),a=-1,i=[]}}catch(d){o.e(d)}finally{o.f()}return-1!=a&&t.push(new n(i,a)),t}}]),n}(w),E=function(e){Object(a.a)(n,e);var t=Object(o.a)(n);function n(e,r){var i;Object(l.a)(this,n),(i=t.call(this)).children=e,i.length=r,i.lines=1;var a,o=Object(s.a)(e);try{for(o.s();!(a=o.n()).done;){var c=a.value;i.lines+=c.lines-1}}catch(u){o.e(u)}finally{o.f()}return i}return Object(c.a)(n,[{key:"lineInner",value:function(e,t,n,r){for(var i=0;;i++){var a=this.children[i],o=r+a.length,s=n+a.lines-1;if((t?s:o)>=e){var l=a.lineInner(e,t,n,r),c=void 0;return l.from==r&&(c=this.lineLengthTo(i))&&(l.from-=c,l.content=null),l.to==o&&(c=this.lineLengthFrom(i+1))&&(l.to+=c,l.content=null),l}r=o,n=s}}},{key:"decompose",value:function(e,t,n){for(var r=0,i=0;ii&&(i>=e&&o<=t?n.push(a):a.decompose(e-i,t-i,n)),i=o}}},{key:"lineLengthTo",value:function(e){for(var t=0,n=e-1;n>=0;n--){var r=this.children[n];if(r.lines>1)return t+r.lastLineLength();t+=r.length}return t}},{key:"lastLineLength",value:function(){return this.lineLengthTo(this.children.length)}},{key:"lineLengthFrom",value:function(e){for(var t=0,n=e;n1)return t+r.firstLineLength();t+=r.length}return t}},{key:"firstLineLength",value:function(){return this.lineLengthFrom(0)}},{key:"replace",value:function(e,t,a){if(a.length<512&&t-e<512)for(var o=a.length-(t-e),s=0,l=0;s=l&&t<=u&&c.length+o>2&&c.length+o>0){var f=this.children.slice();return f[s]=c.replace(e-l,t-l,a),new n(f,this.length+o)}l=u}return Object(r.a)(Object(i.a)(n.prototype),"replace",this).call(this,e,t,a)}},{key:"sliceString",value:function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.length,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"\n",r="",i=0,a=0;aa){var l=o.sliceString(e-a,t-a,n);if(e>=a&&t<=s)return l;r+=l}a=s}return r}},{key:"flatten",value:function(e){var t,n=Object(s.a)(this.children);try{for(n.s();!(t=n.n()).done;){t.value.flatten(e)}}catch(r){n.e(r)}finally{n.f()}}}],[{key:"from",value:function(e,t){if(!e.every((function(e){return e instanceof w})))throw new Error("NOP");if(t<1024){var r,i=[""],a=Object(s.a)(e);try{for(a.s();!(r=a.n()).done;){r.value.flatten(i)}}catch(g){a.e(g)}finally{a.f()}return new M(i,t)}var o=Math.max(512,t>>3),l=o<<1,c=o>>1,u=[],f=0,d=[];function h(e){var t,r=e.length;if(r)if(r>l&&e instanceof n){var i,a=Object(s.a)(e.children);try{for(a.s();!(i=a.n()).done;){h(i.value)}}catch(g){a.e(g)}finally{a.f()}}else r>c&&(f>c||0==f)?(p(),u.push(e)):e instanceof M&&f>0&&(t=d[d.length-1])instanceof M&&e.length+t.length<=512?(f+=r,d[d.length-1]=new M(P(e.text,t.text.slice()),e.length+t.length)):(f+r>o&&p(),f+=r,d.push(e))}function p(){0!=f&&(u.push(1==d.length?d[0]:n.from(d,f)),f=0,d.length=0)}var v,m=Object(s.a)(e);try{for(m.s();!(v=m.n()).done;){h(v.value)}}catch(g){m.e(g)}finally{m.f()}return p(),1==u.length?u[0]:new n(u,t)}}]),n}(w);function T(e){var t,n=-1,r=Object(s.a)(e);try{for(r.s();!(t=r.n()).done;){n+=t.value.length+1}}catch(i){r.e(i)}finally{r.f()}return n}function P(e,t){for(var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1e9,i=0,a=0,o=!0;a=n&&(l>r&&(s=s.slice(0,r-i)),i1&&void 0!==arguments[1]?arguments[1]:1;Object(l.a)(this,e),this.dir=n,this.done=!1,this.lineBreak=!1,this.value="",this.nodes=[t],this.offsets=[n>0?0:t instanceof M?t.text.length:t.children.length]}return Object(c.a)(e,[{key:"next",value:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;;){var t=this.nodes.length-1;if(t<0)return this.done=!0,this.value="",this.lineBreak=!1,this;var n=this.nodes[t],r=this.offsets[t];if(n instanceof M){if(r!=(this.dir>0?0:n.text.length)&&!this.lineBreak){if(this.lineBreak=!0,0==e)return this.value="\n",this;e--;continue}var i=n.text[r-(this.dir<0?1:0)];if(this.offsets[t]=r+=this.dir,r==(this.dir>0?n.text.length:0)&&(this.nodes.pop(),this.offsets.pop()),this.lineBreak=!1,i.length>Math.max(0,e))return this.value=0==e?i:this.dir>0?i.slice(e):i.slice(0,i.length-e),this;e-=i.length}else if(r==(this.dir>0?n.children.length:0))this.nodes.pop(),this.offsets.pop();else{var a=n.children[this.dir>0?r:r-1],o=a.length;this.offsets[t]=r+this.dir,e>o?e-=o:(this.nodes.push(a),this.offsets.push(this.dir>0?0:a instanceof M?a.text.length:a.children.length))}}}}]),e}(),A=function(){function e(t,n,r){Object(l.a)(this,e),this.value="",this.cursor=new D(t,n>r?-1:1),n>r?(this.skip=t.length-n,this.limit=n-r):(this.skip=n,this.limit=r-n)}return Object(c.a)(e,[{key:"next",value:function(){if(this.limit<=0)this.limit=-1;else{var e=this.cursor.next(this.skip),t=e.value,n=e.lineBreak,r=e.done;this.skip=0,this.value=t;var i=n?1:t.length;i>this.limit&&(this.value=this.cursor.dir>0?t.slice(0,this.limit):t.slice(i-this.limit)),r||0==this.value.length?this.limit=-1:this.limit-=this.value.length}return this}},{key:"lineBreak",get:function(){return this.cursor.lineBreak}},{key:"done",get:function(){return this.limit<0}}]),e}(),R=function(){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;Object(l.a)(this,e),this.value="",this.done=!1,this.cursor=t.iter(),this.skip=n}return Object(c.a)(e,[{key:"next",value:function(){if(this.cursor.done)return this.done=!0,this.value="",this;for(this.value="";;){var e=this.cursor.next(this.skip),t=e.value,n=e.lineBreak,r=e.done;if(this.skip=0,r||n)return this;this.value+=t}}},{key:"lineBreak",get:function(){return!1}}]),e}(),L=function(){function e(t,n,r,i){Object(l.a)(this,e),this.from=t,this.to=n,this.number=r,this.content=i}return Object(c.a)(e,[{key:"slice",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.length;if(e==t)return"";if("string"==typeof this.content)return this.content.slice(e,t);this.content||(this.content=new N(this.doc,this.from));var n=this.content.slice(e,t);return 0==e&&t==this.length&&(this.content=n),n}},{key:"finish",value:function(e){return this.doc=e,this}},{key:"findClusterBreak",value:function(e,t){if(e<0||e>this.length)throw new RangeError("Invalid position given to Line.findClusterBreak");var n,r;return"string"==this.content?(n=this.from,r=this.content):(n=Math.max(0,e-256),r=this.slice(n,Math.min(this.length,n+512))),(t?p:v)(r,e-n)+n}},{key:"length",get:function(){return this.to-this.from}}]),e}(),N=function(){function e(t,n){Object(l.a)(this,e),this.doc=t,this.start=n,this.cursor=null,this.strings=null}return Object(c.a)(e,[{key:"slice",value:function(e,t){this.cursor||(this.cursor=this.doc.iter(),this.strings=[this.cursor.next(this.start).value]);for(var n="",r=0,i=0;;i++){if(i==this.strings.length){var a=this.cursor.next().value;if(!a)return n;this.strings.push(a)}var o=this.strings[i],s=r;if(!((r+=o.length)<=e)&&(n+=o.slice(Math.max(0,e-s),Math.min(o.length,t-s)),r>=t))return n}}}]),e}()},function(e,t,n){"use strict";function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}n.d(t,"a",(function(){return r}))},,function(e,t,n){"use strict";n.d(t,"d",(function(){return s})),n.d(t,"b",(function(){return c})),n.d(t,"c",(function(){return u})),n.d(t,"a",(function(){return f})),n.d(t,"e",(function(){return d}));var r=n(152);function i(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;return Math.min(Math.max(t,e),n)}function a(e){if(e.type)return e;if("#"===e.charAt(0))return a(function(e){e=e.substr(1);var t=new RegExp(".{1,".concat(e.length>=6?2:1,"}"),"g"),n=e.match(t);return n&&1===n[0].length&&(n=n.map((function(e){return e+e}))),n?"rgb".concat(4===n.length?"a":"","(").concat(n.map((function(e,t){return t<3?parseInt(e,16):Math.round(parseInt(e,16)/255*1e3)/1e3})).join(", "),")"):""}(e));var t=e.indexOf("("),n=e.substring(0,t);if(-1===["rgb","rgba","hsl","hsla"].indexOf(n))throw new Error(Object(r.a)(3,e));var i=e.substring(t+1,e.length-1).split(",");return{type:n,values:i=i.map((function(e){return parseFloat(e)}))}}function o(e){var t=e.type,n=e.values;return-1!==t.indexOf("rgb")?n=n.map((function(e,t){return t<3?parseInt(e,10):e})):-1!==t.indexOf("hsl")&&(n[1]="".concat(n[1],"%"),n[2]="".concat(n[2],"%")),"".concat(t,"(").concat(n.join(", "),")")}function s(e,t){var n=l(e),r=l(t);return(Math.max(n,r)+.05)/(Math.min(n,r)+.05)}function l(e){var t="hsl"===(e=a(e)).type?a(function(e){var t=(e=a(e)).values,n=t[0],r=t[1]/100,i=t[2]/100,s=r*Math.min(i,1-i),l=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:(e+n/30)%12;return i-s*Math.max(Math.min(t-3,9-t,1),-1)},c="rgb",u=[Math.round(255*l(0)),Math.round(255*l(8)),Math.round(255*l(4))];return"hsla"===e.type&&(c+="a",u.push(t[3])),o({type:c,values:u})}(e)).values:e.values;return t=t.map((function(e){return(e/=255)<=.03928?e/12.92:Math.pow((e+.055)/1.055,2.4)})),Number((.2126*t[0]+.7152*t[1]+.0722*t[2]).toFixed(3))}function c(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:.15;return l(e)>.5?f(e,t):d(e,t)}function u(e,t){return e=a(e),t=i(t),"rgb"!==e.type&&"hsl"!==e.type||(e.type+="a"),e.values[3]=t,o(e)}function f(e,t){if(e=a(e),t=i(t),-1!==e.type.indexOf("hsl"))e.values[2]*=1-t;else if(-1!==e.type.indexOf("rgb"))for(var n=0;n<3;n+=1)e.values[n]*=1-t;return o(e)}function d(e,t){if(e=a(e),t=i(t),-1!==e.type.indexOf("hsl"))e.values[2]+=(100-e.values[2])*t;else if(-1!==e.type.indexOf("rgb"))for(var n=0;n<3;n+=1)e.values[n]+=(255-e.values[n])*t;return o(e)}},function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));var r=n(0),i=n(38);function a(e,t){return r.useMemo((function(){return null==e&&null==t?null:function(n){Object(i.a)(e,n),Object(i.a)(t,n)}}),[e,t])}},function(e,t,n){"use strict";n.d(t,"a",(function(){return l})),n.d(t,"c",(function(){return f})),n.d(t,"d",(function(){return h})),n.d(t,"b",(function(){return p})),n.d(t,"e",(function(){return m})),n.d(t,"f",(function(){return y}));var r=n(16),i=n(15),a=n(7),o=n(4),s=n(6),l=1024,c=function(){function e(t,n){Object(o.a)(this,e),this.enter=t,this.leave=n,this.result=void 0}return Object(s.a)(e,[{key:"doEnter",value:function(e,t,n){var r=this.enter(e,t,n);return void 0===r||(!1!==r&&(this.result=r),!1)}},{key:"done",get:function(){return void 0!==this.result}}]),e}(),u=0,f=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t.deserialize;Object(o.a)(this,e),this.id=u++,this.deserialize=n||function(){throw new Error("This node type doesn't define a deserialize function")}}return Object(s.a)(e,[{key:"set",value:function(e,t){return e[this.id]=t,e}},{key:"add",value:function(e){return new d(this,"function"==typeof e?e:h.match(e))}}],[{key:"string",value:function(){return new e({deserialize:function(e){return e}})}},{key:"number",value:function(){return new e({deserialize:Number})}},{key:"flag",value:function(){return new e({deserialize:function(){return!0}})}}]),e}();f.error=f.flag(),f.skipped=f.flag(),f.closedBy=new f({deserialize:function(e){return e.split(" ")}}),f.openedBy=new f({deserialize:function(e){return e.split(" ")}}),f.top=f.flag();var d=function e(t,n){Object(o.a)(this,e),this.prop=t,this.f=n},h=function(){function e(t,n,r){Object(o.a)(this,e),this.name=t,this.props=n,this.id=r}return Object(s.a)(e,[{key:"prop",value:function(e){return this.props[e.id]}}],[{key:"match",value:function(e){var t=Object.create(null);for(var n in e){var r,i=Object(a.a)(n.split(" "));try{for(i.s();!(r=i.n()).done;){var o=r.value;t[o]=e[n]}}catch(s){i.e(s)}finally{i.f()}}return function(e){return t[e.name]}}}]),e}();h.none=new h("",Object.create(null),0);var p=function(){function e(t){Object(o.a)(this,e),this.types=t;for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:0,n=this.resolveAt(e);if(0!=t)for(;;){var r=t<0?n.childBefore(e):n.childAfter(e);if(!r||(t<0?r.end:r.start)!=e)break;n=r}return n}},{key:"name",get:function(){return this.type.name}},{key:"depth",get:function(){for(var e=0,t=this.parent;t;t=t.parent)e++;return e}},{key:"root",get:function(){for(var e=this;e.parent;)e=e.parent;return e}},{key:"firstChild",get:function(){return this.childAfter(this.start-1)}},{key:"lastChild",get:function(){return this.childBefore(this.end+1)}}]),e}(),m=function(e){Object(r.a)(n,e);var t=Object(i.a)(n);function n(e,r,i,a){var s;return Object(o.a)(this,n),(s=t.call(this)).type=e,s.children=r,s.positions=i,s.length=a,s}return Object(s.a)(n,[{key:"toString",value:function(){var e=this.children.map((function(e){return e.toString()})).join();return this.name?(/\W/.test(this.name)&&!this.type.prop(f.error)?JSON.stringify(this.name):this.name)+(e.length?"("+e+")":""):e}},{key:"partial",value:function(e,t,r,i,a){for(var o=0;ot)break;var l=this.children[o],c=s+l.length;c=c?(i.push(l),a.push(s+r)):l instanceof n&&l.partial(e-s,t-s,r+s,i,a))}}},{key:"applyChanges",value:function(e){if(0==e.length)return this;var t=[],r=[];function i(e,t,n){var r=-1;return e.iterate({from:t,to:n<0?0:e.length,enter:function(){return r<0&&void 0},leave:function(e,i,a){r<0&&(n<0?a<=t:i>=t)&&!e.prop(f.error)&&(r=n<0?Math.min(t,a-1):Math.max(t,i+1))}}),r>-1?r:n<0?0:e.length}for(var a=0,o=0,s=0;;o++){var l=o==e.length?null:e[o],c=l?i(this,l.fromA,-1):this.length;if(c>s&&this.partial(s,c,a,t,r),!l)break;s=i(this,l.toA,1),a+=l.toB-l.fromB-(l.toA-l.fromA)}return new n(h.none,t,r,this.length+a)}},{key:"cut",value:function(e){if(e>=this.length)return this;for(var t=[],r=[],i=0;i=e)break;var o=this.children[i],s=a+o.length;t.push(s<=e?o:o.cut(e-a)),r.push(a)}return new n(this.type,t,r,e)}},{key:"iterate",value:function(e){var t=e.from,n=void 0===t?this.start:t,r=e.to,i=void 0===r?this.end:r,a=e.enter,o=e.leave,s=new c(a,o);return this.iterInner(n,i,0,s),s.result}},{key:"iterInner",value:function(e,t,n,r){if(!this.type.name||r.doEnter(this.type,n,n+this.length)){if(e<=t)for(var i=0;it)break;s=0&&!r.done;l--){var c=this.children[l],u=this.positions[l]+n;if(u+c.lengthe||c.iterInner(e,t,u,r)}r.leave&&this.type.name&&r.leave(this.type,n,n+this.length)}}},{key:"resolveAt",value:function(e){if(g==this)for(var t=b;;){var n=t.parent;if(!n)break;if(t.starte)return t.resolve(e);t=n}return g=this,b=this.resolveInner(e,0,this)}},{key:"childBefore",value:function(e){return this.findChild(e,-1,0,this)}},{key:"childAfter",value:function(e){return this.findChild(e,1,0,this)}},{key:"findChild",value:function(e,t,r,i){for(var a=0;a=e)if(t<0&&a>0)s=a-1;else{if(!(t>0))break;s=a}if(s<0&&(o+this.children[a].length>e||t<0&&a==this.children.length-1)&&(s=a),s>=0){var l=this.children[s],c=this.positions[s]+r;if(0==l.length&&c==e)continue;if(l instanceof n)return l.type.name?new O(l,c,i):l.findChild(e,t,c,i);var u=l.findIndex(e,t,c,0,l.buffer.length);if(u>-1)return new k(l,c,u,i)}}return null}},{key:"resolveInner",value:function(e,t,n){var r=this.findChild(e,0,t,n);return r?r.resolveAt(e):n}},{key:"append",value:function(e){if(e.children.length&&e.positions[0]0&&void 0!==arguments[0]?arguments[0]:l;return this.children.length<=w?this:S(this.type,h.none,this.children,this.positions,0,this.children.length,0,e,this.length)}},{key:"start",get:function(){return 0}},{key:"end",get:function(){return this.length}}],[{key:"build",value:function(e){return j(e)}}]),n}(v);m.empty=new m(h.none,[],[],0),m.prototype.parent=null;var g=m.empty,b=m.empty,y=function(){function e(t,n,r){var i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:h.none;Object(o.a)(this,e),this.buffer=t,this.length=n,this.group=r,this.type=i}return Object(s.a)(e,[{key:"toString",value:function(){for(var e=[],t=0;t(e+=4)){for(var o=[];et)return this.buffer.length;if(s>=e&&i.doEnter(a,o,s)){for(;r0?(l=s.pop(),c=o.buffer[l+3]):c=-1};u();e:for(var f=i;f>r&&!a.done;){for(;c==f;){var d=l,h=this.buffer[d],p=this.buffer[d+1]+n,v=this.buffer[d+2]+n;if(u(),p<=e&&v>=t&&!a.doEnter(this.group.types[h],p,v)){for(f=d;c>d;)u();continue e}}var m=this.buffer[--f],g=this.buffer[--f]+n,b=this.buffer[--f]+n,y=this.buffer[--f];b>e||g=e){if(t>0&&!u)return o;break}if(c>e)return o;u||(a=o),o=s[o+3]}return t<0?a:-1}}]),e}(),O=function(e){Object(r.a)(n,e);var t=Object(i.a)(n);function n(e,r,i){var a;return Object(o.a)(this,n),(a=t.call(this)).node=e,a.start=r,a.parent=i,a}return Object(s.a)(n,[{key:"resolveAt",value:function(e){return e<=this.start||e>=this.end?this.parent.resolveAt(e):this.node.resolveInner(e,this.start,this)}},{key:"childBefore",value:function(e){return this.node.findChild(e,-1,this.start,this)}},{key:"childAfter",value:function(e){return this.node.findChild(e,1,this.start,this)}},{key:"toString",value:function(){return this.node.toString()}},{key:"iterate",value:function(e){var t=e.from,n=void 0===t?this.start:t,r=e.to,i=void 0===r?this.end:r,a=e.enter,o=e.leave,s=new c(a,o);return this.node.iterInner(n,i,this.start,s),s.result}},{key:"type",get:function(){return this.node.type}},{key:"end",get:function(){return this.start+this.node.length}}]),n}(v),k=function(e){Object(r.a)(n,e);var t=Object(i.a)(n);function n(e,r,i,a){var s;return Object(o.a)(this,n),(s=t.call(this)).buffer=e,s.bufferStart=r,s.index=i,s.parent=a,s}return Object(s.a)(n,[{key:"childBefore",value:function(e){var t=this.buffer.findIndex(e,-1,this.bufferStart,this.index+4,this.endIndex);return t<0?null:new n(this.buffer,this.bufferStart,t,this)}},{key:"childAfter",value:function(e){var t=this.buffer.findIndex(e,1,this.bufferStart,this.index+4,this.endIndex);return t<0?null:new n(this.buffer,this.bufferStart,t,this)}},{key:"iterate",value:function(e){var t=e.from,n=void 0===t?this.start:t,r=e.to,i=void 0===r?this.end:r,a=e.enter,o=e.leave,s=new c(a,o);return n<=i?this.buffer.iterChild(n,i,this.bufferStart,this.index,s):this.buffer.iterRev(n,i,this.bufferStart,this.index,this.endIndex,s),s.result}},{key:"resolveAt",value:function(e){if(e<=this.start||e>=this.end)return this.parent.resolveAt(e);var t=this.buffer.findIndex(e,0,this.bufferStart,this.index+4,this.endIndex);return t<0?this:new n(this.buffer,this.bufferStart,t,this).resolveAt(e)}},{key:"toString",value:function(){var e=[];return this.buffer.childToString(this.index,e),e.join("")}},{key:"type",get:function(){return this.buffer.group.types[this.buffer.buffer[this.index]]}},{key:"start",get:function(){return this.buffer.buffer[this.index+1]+this.bufferStart}},{key:"end",get:function(){return this.buffer.buffer[this.index+2]+this.bufferStart}},{key:"endIndex",get:function(){return this.buffer.buffer[this.index+3]}}]),n}(v),x=function(){function e(t,n){Object(o.a)(this,e),this.buffer=t,this.index=n}return Object(s.a)(e,[{key:"next",value:function(){this.index-=4}},{key:"fork",value:function(){return new e(this.buffer,this.index)}},{key:"id",get:function(){return this.buffer[this.index-4]}},{key:"start",get:function(){return this.buffer[this.index-3]}},{key:"end",get:function(){return this.buffer[this.index-2]}},{key:"size",get:function(){return this.buffer[this.index-1]}},{key:"pos",get:function(){return this.index}}]),e}(),w=8;function j(e){var t=e.buffer,n=e.group,r=e.topID,i=void 0===r?0:r,a=e.maxBufferLength,o=void 0===a?l:a,s=e.reused,c=void 0===s?[]:s,u=e.minRepeatType,f=void 0===u?n.types.length:u,d=Array.isArray(t)?new x(t,t.length):t,p=n.types;function v(e,t,r,i,a){for(var s=d.id,l=d.start,u=d.end,b=d.size;s==a;)d.next(),s=d.id,l=d.start,u=d.end,b=d.size;var O=l-e;if(b<0)return r.push(c[s]),i.push(O),void d.next();var k,x,j=p[s];if(u-l<=o&&(x=function(e,t){var n=d.fork(),r=0,i=0,a=0,s=n.end-o,l={size:0,start:0,skip:0};e:for(var c=n.pos-e;n.pos>c;)if(n.id!=t){var u=n.size,h=n.pos-u;if(u<0||h=f?4:0,v=n.start;for(n.next();n.pos>h;){if(n.size<0)break e;n.id>=f&&(p+=4),n.next()}i=v,r+=u,a+=p}else l.size=r,l.start=i,l.skip=a,a+=4,r+=4,n.next();(t<0||r==e)&&(l.size=r,l.start=i,l.skip=a);return l.size>4?l:void 0}(d.pos-t,a))){for(var C=new Uint16Array(x.size-x.skip),M=d.pos-x.size,E=C.length;d.pos>M;)E=g(x.start,C,E,a);k=new y(C,u-x.start,n,a<0?h.none:p[a]),O=x.start-e}else{var T=d.pos-b;d.next();for(var P=[],_=[],D=s>=f?s:-1;d.pos>T;)v(l,T,P,_,D);P.reverse(),_.reverse(),k=D>-1&&P.length>w?S(j,j,P,_,0,P.length,0,o,u-l):new m(j,P,_,u-l)}r.push(k),i.push(O)}function g(e,t,n,r){var i=d.id,a=d.start,o=d.end,s=d.size;if(d.next(),i==r)return n;var l=n;if(s>4)for(var c=d.pos-(s-4);d.pos>c;)n=g(e,t,n,r);return i0;)v(0,0,b,O,-1);var k=b.length?O[0]+b[0].length:0;return new m(n.types[i],b.reverse(),O.reverse(),k)}function S(e,t,n,r,i,a,o,s,l){var c=[],u=[];if(l<=s)for(var f=i;fd)break}if(p==v+1){var b=n[v];if(b instanceof m&&b.type==t&&b.length>d<<1){for(var y=0;y1&&void 0!==arguments[1]?arguments[1]:e;return new l(e,t,this)}}]),e}();s.prototype.startSide=s.prototype.endSide=0,s.prototype.point=!1,s.prototype.mapMode=o.h.TrackDel;var l=function e(t,n,r){Object(i.a)(this,e),this.from=t,this.to=n,this.value=r};function c(e,t){return e.from-t.from||e.value.startSide-t.value.startSide}var u=500,f=1e9,d=function(){function e(t,n,r,a){Object(i.a)(this,e),this.from=t,this.to=n,this.value=r,this.maxPoint=a}return Object(a.a)(e,[{key:"findIndex",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t*f,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0;if(e<=0)return r;for(var i=t<0?this.to:this.from,a=r,o=i.length;;){if(a==o)return a;var s=a+o>>1,l=i[s]-e||(t<0?this.value[s].startSide:this.value[s].endSide)-n;if(s==a)return l>=0?a:o;l>=0?o=s:a=s+1}}},{key:"between",value:function(e,t,n,r){for(var i=this.findIndex(t,-1),a=this.findIndex(n,1,void 0,i);i(h=n.mapPos(f,c.endSide))||d==h&&c.startSide>0&&c.endSide<=0)continue;(h-d||c.endSide-c.startSide)<0||(o<0&&(o=d),c.point&&(s=Math.max(s,h-d)),r.push(c),i.push(d-o),a.push(h-o))}return{mapped:r.length?new e(i,a,r,s):null,pos:o}}},{key:"length",get:function(){return this.to[this.to.length-1]}}]),e}(),h=function(){function e(t,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.empty,a=arguments.length>3?arguments[3]:void 0;Object(i.a)(this,e),this.chunkPos=t,this.chunk=n,this.nextLayer=r,this.maxPoint=a}return Object(a.a)(e,[{key:"chunkEnd",value:function(e){return this.chunkPos[e]+this.chunk[e].length}},{key:"update",value:function(t){var n=t.add,r=void 0===n?[]:n,i=t.sort,a=void 0!==i&&i,o=t.filter,s=t.filterFrom,u=void 0===s?0:s,f=t.filterTo,d=void 0===f?this.length:f;if(0==r.length&&!o)return this;if(a&&r.slice().sort(c),this==e.empty)return r.length?e.of(r):this;for(var h=new v(this,null,-1).goto(0),m=0,g=[],b=new p;h.value||m=0){var y=r[m++];b.addInner(y.from,y.to,y.value)||g.push(y)}else 1==h.rangeIndex&&h.chunkIndexthis.chunkEnd(h.chunkIndex)||dh.to||d=a&&t<=a+o.length&&!1===o.between(a,t-a,n-a,r))return}this.nextLayer.between(t,n,r)}}},{key:"iter",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return m.from([this]).goto(e)}},{key:"length",get:function(){var e=this.chunk.length-1;return e<0?0:Math.max(this.chunkEnd(e),this.nextLayer.length)}},{key:"size",get:function(){if(this==e.empty)return 0;var t,n=this.nextLayer.size,i=Object(r.a)(this.chunk);try{for(i.s();!(t=i.n()).done;){n+=t.value.value.length}}catch(a){i.e(a)}finally{i.f()}return n}}],[{key:"iter",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return m.from(e).goto(t)}},{key:"compare",value:function(t,n,i,a){var o,s=null!==(o=a.minPointSize)&&void 0!==o?o:-1,l=t.filter((function(t){return t.maxPoint>=500||t!=e.empty&&n.indexOf(t)<0&&t.maxPoint>=s})),c=n.filter((function(n){return n.maxPoint>=500||n!=e.empty&&t.indexOf(n)<0&&n.maxPoint>=s})),f=function(e,t){var n,i=new Map,a=Object(r.a)(e);try{for(a.s();!(n=a.n()).done;)for(var o=n.value,s=0;sl?1:0)):l>o&&(r.span(o,l,a.active,s),s=a.openEnd(l)),a.to>n)break;o=a.to,a.next()}return s}},{key:"of",value:function(e){var t,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=new p,a=Object(r.a)(e instanceof l?[e]:n?e.slice().sort(c):e);try{for(a.s();!(t=a.n()).done;){var o=t.value;i.add(o.from,o.to,o.value)}}catch(s){a.e(s)}finally{a.f()}return i.finish()}}]),e}();h.empty=new h([],[],null,-1),h.empty.nextLayer=h.empty;var p=function(){function e(){Object(i.a)(this,e),this.chunks=[],this.chunkPos=[],this.chunkStart=-1,this.last=null,this.lastFrom=-f,this.lastTo=-f,this.from=[],this.to=[],this.value=[],this.maxPoint=-1,this.setMaxPoint=-1,this.nextLayer=null}return Object(a.a)(e,[{key:"finishChunk",value:function(e){this.chunks.push(new d(this.from,this.to,this.value,this.maxPoint)),this.chunkPos.push(this.chunkStart),this.chunkStart=-1,this.setMaxPoint=Math.max(this.setMaxPoint,this.maxPoint),this.maxPoint=-1,e&&(this.from=[],this.to=[],this.value=[])}},{key:"add",value:function(t,n,r){this.addInner(t,n,r)||(this.nextLayer||(this.nextLayer=new e)).add(t,n,r)}},{key:"addInner",value:function(e,t,n){var r=e-this.lastTo||n.startSide-this.last.endSide;if(r<=0&&(e-this.lastFrom||n.startSide-this.last.startSide)<0)throw new Error("Ranges must be added sorted by `from` position and `startSide`");return!(r<0)&&(250==this.from.length&&this.finishChunk(!0),this.chunkStart<0&&(this.chunkStart=e),this.from.push(e-this.chunkStart),this.to.push(t-this.chunkStart),this.last=n,this.lastFrom=e,this.lastTo=t,this.value.push(n),n.point&&(this.maxPoint=Math.max(this.maxPoint,t-e)),!0)}},{key:"addChunk",value:function(e,t){if((e-this.lastTo||t.value[0].startSide-this.last.endSide)<0)return!1;this.from.length&&this.finishChunk(!0),this.setMaxPoint=Math.max(this.setMaxPoint,t.maxPoint),this.chunks.push(t),this.chunkPos.push(e);var n=t.value.length-1;return this.last=t.value[n],this.lastFrom=t.from[n]+e,this.lastTo=t.to[n]+e,!0}},{key:"finish",value:function(){return this.finishInner(h.empty)}},{key:"finishInner",value:function(e){if(this.from.length&&this.finishChunk(!1),0==this.chunks.length)return e;var t=new h(this.chunkPos,this.chunks,this.nextLayer?this.nextLayer.finishInner(e):e,this.setMaxPoint);return this.from=null,t}}]),e}();var v=function(){function e(t,n,r){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0;Object(i.a)(this,e),this.layer=t,this.skip=n,this.minPoint=r,this.rank=a}return Object(a.a)(e,[{key:"goto",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-f;return this.chunkIndex=this.rangeIndex=0,this.gotoInner(e,t,!1),this}},{key:"gotoInner",value:function(e,t,n){for(;this.chunkIndex=this.minPoint)break}}},{key:"nextChunk",value:function(){this.chunkIndex++,this.rangeIndex=0,this.next()}},{key:"compare",value:function(e){return this.from-e.from||this.startSide-e.startSide||this.to-e.to||this.endSide-e.endSide}},{key:"startSide",get:function(){return this.value?this.value.startSide:0}},{key:"endSide",get:function(){return this.value?this.value.endSide:0}}]),e}(),m=function(){function e(t){Object(i.a)(this,e),this.heap=t}return Object(a.a)(e,[{key:"goto",value:function(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-f,i=Object(r.a)(this.heap);try{for(i.s();!(t=i.n()).done;){var a=t.value;a.goto(e,n)}}catch(s){i.e(s)}finally{i.f()}for(var o=this.heap.length>>1;o>=0;o--)g(this.heap,o);return this.next(),this}},{key:"forward",value:function(e,t){var n,i=Object(r.a)(this.heap);try{for(i.s();!(n=i.n()).done;){n.value.forward(e,t)}}catch(o){i.e(o)}finally{i.f()}for(var a=this.heap.length>>1;a>=0;a--)g(this.heap,a);(this.to-e||this.value.endSide-t)<0&&this.next()}},{key:"next",value:function(){if(0==this.heap.length)this.from=this.to=f,this.value=null,this.rank=-1;else{var e=this.heap[0];this.from=e.from,this.to=e.to,this.value=e.value,this.rank=e.rank,e.value&&e.next(),g(this.heap,0)}}},{key:"startSide",get:function(){return this.value?this.value.startSide:0}}],[{key:"from",value:function(t){for(var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:-1,i=[],a=0;a=r&&i.push(new v(o,n,r,a));return 1==i.length?i[0]:new e(i)}}]),e}();function g(e,t){for(var n=e[t];;){var r=1+(t<<1);if(r>=e.length)break;var i=e[r];if(r+1=0&&(i=e[r+1],r++),n.compare(i)<0)break;e[r]=n,e[t]=i,t=r}}var b=function(){function e(t,n,r){Object(i.a)(this,e),this.minPoint=r,this.active=[],this.activeTo=[],this.activeRank=[],this.minActive=-1,this.point=null,this.pointFrom=0,this.pointRank=0,this.to=-f,this.endSide=0,this.openStart=-1,this.cursor=m.from(t,n,r)}return Object(a.a)(e,[{key:"goto",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-f;return this.cursor.goto(e,t),this.active.length=this.activeTo.length=this.activeRank.length=0,this.minActive=-1,this.to=e,this.endSide=t,this.openStart=-1,this.next(),this}},{key:"forward",value:function(e,t){for(;this.minActive>-1&&(this.activeTo[this.minActive]-e||this.active[this.minActive].endSide-t)<0;)this.removeActive(this.minActive);this.cursor.forward(e,t)}},{key:"removeActive",value:function(e){k(this.active,e),k(this.activeTo,e),k(this.activeRank,e),this.minActive=w(this.active,this.activeTo)}},{key:"addActive",value:function(e){for(var t=0,n=this.cursor,r=n.value,i=n.to,a=n.rank;t-1&&(this.activeTo[r]-this.cursor.from||this.active[r].endSide-this.cursor.startSide)<0){if(this.activeTo[r]>e){this.to=this.activeTo[r],this.endSide=this.active[r].endSide;break}this.removeActive(r),t&&k(t,r)}else{if(!this.cursor.value){this.to=this.endSide=f;break}if(this.cursor.from>e){this.to=this.cursor.from,this.endSide=this.cursor.startSide;break}var i=this.cursor.value;if(i.point){this.point=i,this.pointFrom=this.cursor.from,this.pointRank=this.cursor.rank,this.to=this.cursor.to,this.endSide=i.endSide,this.cursor.frome&&this.forward(this.to,this.endSide);break}this.addActive(t),this.cursor.next()}}if(t){for(var a=0;athis.pointRank);n++)(this.activeTo[n]>e||this.activeTo[n]==e&&this.active[n].endSide>this.point.endSide)&&t.push(this.active[n]);return t}},{key:"openEnd",value:function(e){for(var t=0;te;)t++;return t}}]),e}();function y(e,t,n,r,i,a){e.goto(t),n.goto(r);for(var o=r+i,s=r,l=r-t;;){var c=e.to+l-n.to||e.endSide-n.endSide,u=c<0?e.to+l:n.to,f=Math.min(u,o);if(e.point||n.point?e.point&&n.point&&(e.point==n.point||e.point.eq(n.point))||a.comparePoint(s,f,e.point,n.point):f>s&&!O(e.active,n.active)&&a.compareRange(s,f,e.active,n.active),u>o)break;s=u,c<=0&&e.next(),c>=0&&n.next()}}function O(e,t){if(e.length!=t.length)return!1;for(var n=0;n=t;r--)e[r+1]=e[r];e[t]=n}function w(e,t){for(var n=-1,r=f,i=0;i-1?n.panels[r]:null}var d=o.f.fromClass(function(){function e(t){Object(r.a)(this,e),this.specs=t.state.facet(u),this.panels=this.specs.map((function(e){return e(t)}));var n=t.state.facet(l);this.top=new p(t,!0,n.topContainer),this.bottom=new p(t,!1,n.bottomContainer),this.top.sync(this.panels.filter((function(e){return e.top}))),this.bottom.sync(this.panels.filter((function(e){return!e.top})));var i,o=Object(a.a)(this.panels);try{for(o.s();!(i=o.n()).done;){var s=i.value;s.dom.className+=" "+h(s),s.mount&&s.mount()}}catch(c){o.e(c)}finally{o.f()}}return Object(i.a)(e,[{key:"update",value:function(e){var t=e.state.facet(l);this.top.container!=t.topContainer&&(this.top.sync([]),this.top=new p(e.view,!0,t.topContainer)),this.bottom.container!=t.bottomContainer&&(this.bottom.sync([]),this.bottom=new p(e.view,!1,t.bottomContainer)),this.top.syncClasses(),this.bottom.syncClasses();var n=e.state.facet(u);if(n!=this.specs){var r,i=[],o=[],s=[],c=[],f=Object(a.a)(n);try{for(f.s();!(r=f.n()).done;){var d=r.value,v=this.specs.indexOf(d),m=void 0;v<0?(m=d(e.view),c.push(m)):(m=this.panels[v]).update&&m.update(e),i.push(m),(m.top?o:s).push(m)}}catch(w){f.e(w)}finally{f.f()}this.specs=n,this.panels=i,this.top.sync(o),this.bottom.sync(s);for(var g=0,b=c;g0&&void 0!==arguments[0]?arguments[0]:["all"],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.duration,s=void 0===n?a.standard:n,l=t.easing,c=void 0===l?i.easeInOut:l,u=t.delay,f=void 0===u?0:u;Object(r.a)(t,["duration","easing","delay"]);return(Array.isArray(e)?e:[e]).map((function(e){return"".concat(e," ").concat("string"===typeof s?s:o(s)," ").concat(c," ").concat("string"===typeof f?f:o(f))})).join(",")},getAutoHeightDuration:function(e){if(!e)return 0;var t=e/36;return Math.round(10*(4+15*Math.pow(t,.25)+t/5))}}},function(e,t,n){e.exports=function(){"use strict";var e=1e3,t=6e4,n=36e5,r="millisecond",i="second",a="minute",o="hour",s="day",l="week",c="month",u="quarter",f="year",d="date",h="Invalid Date",p=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,v=/\[([^\]]+)]|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,m={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("_")},g=function(e,t,n){var r=String(e);return!r||r.length>=t?e:""+Array(t+1-r.length).join(n)+e},b={s:g,z:function(e){var t=-e.utcOffset(),n=Math.abs(t),r=Math.floor(n/60),i=n%60;return(t<=0?"+":"-")+g(r,2,"0")+":"+g(i,2,"0")},m:function e(t,n){if(t.date()1&&void 0!==arguments[1]?arguments[1]:166;function r(){for(var r=arguments.length,i=new Array(r),a=0;a=0||(i[n]=e[n]);return i}n.d(t,"a",(function(){return r}))},function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var r=n(83);var i=n(92),a=n(76);function o(e){return function(e){if(Array.isArray(e))return Object(r.a)(e)}(e)||Object(i.a)(e)||Object(a.a)(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}},function(e,t,n){"use strict";n.d(t,"b",(function(){return a}));var r=n(0),i=r.createContext();function a(){return r.useContext(i)}t.a=i},function(e,t,n){"use strict";function r(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}n.d(t,"a",(function(){return r}))},function(e,t,n){"use strict";(function(e){n.d(t,"a",(function(){return l}));var r=n(4),i=n(6),a="undefined"==typeof Symbol?"__\u037c":Symbol.for("\u037c"),o="undefined"==typeof Symbol?"__styleSet"+Math.floor(1e8*Math.random()):Symbol("styleSet"),s="undefined"==typeof e?window:e,l=function(){function e(t,n){Object(r.a)(this,e),this.rules=[];var i=n||{},a=i.process,o=i.extend;function s(e){if(/^@/.test(e))return[e];var t=e.split(",");return a?t.map(a):t}function l(e,t,n){var r=[],i=/^@(\w+)\b/.exec(e[0]);if(i&&null==t)return n.push(e[0]+";");var a=function(a){var c=t[a];if(/&/.test(a))l(e.map((function(e){return o?o(a,e):a.replace(/&/,e)})),c,n);else if(c&&"object"==typeof c){if(!i)throw new RangeError("The value of a property ("+a+") should be a primitive value.");l("keyframes"==i[1]?[a]:s(a),c,r)}else null!=c&&r.push(a.replace(/_.*/,"").replace(/[A-Z]/g,(function(e){return"-"+e.toLowerCase()}))+": "+c+";")};for(var c in t)a(c);(r.length||i&&"keyframes"==i[1])&&n.push(e.join(",")+" {"+r.join(" ")+"}")}for(var c in t)l(s(c),t[c],this.rules)}return Object(i.a)(e,null,[{key:"newName",value:function(){var e=s[a]||1;return s[a]=e+1,"\u037c"+e.toString(36)}},{key:"mount",value:function(e,t){(e[o]||new u(e)).mount(Array.isArray(t)?t:[t])}}]),e}(),c=null,u=function(){function e(t){if(Object(r.a)(this,e),t.adoptedStyleSheets&&"undefined"!=typeof CSSStyleSheet){if(c)return t.adoptedStyleSheets=[c.sheet].concat(t.adoptedStyleSheets),t[o]=c;this.sheet=new CSSStyleSheet,t.adoptedStyleSheets=[this.sheet].concat(t.adoptedStyleSheets),c=this}else{this.styleTag=(t.ownerDocument||t).createElement("style");var n=t.head||t;n.insertBefore(this.styleTag,n.firstChild)}this.modules=[],t[o]=this}return Object(i.a)(e,[{key:"mount",value:function(e){for(var t=this.sheet,n=0,r=0,i=0;i-1&&(this.modules.splice(o,1),r--,o=-1),-1==o){if(this.modules.splice(r++,0,a),t)for(var s=0;s0&&m(t.state,l.head-1,1,o)||o.afterCursor&&(m(t.state,l.head,1,o)||l.head0&&void 0!==arguments[0]?arguments[0]:{};return[u.of(e),h]}function v(e,t,n){var r=e.prop(t<0?o.c.openedBy:o.c.closedBy);if(r)return r;if(1==e.name.length){var i=n.indexOf(e.name);if(i>-1&&i%2==(t<0?1:0))return[n[i+t]]}return null}function m(e,t,n){var r,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=i.maxScanDistance||l,o=i.brackets||c,s=e.tree,u=s.resolve(t,n);return(r=v(u.type,n,o))?g(e,t,n,u,r,o):b(e,t,n,s,u.type,a,o)}function g(e,t,n,r,i,a){var o=r.parent,s={from:r.start,to:r.end},l=0;return o&&o.iterate({from:n<0?r.start:r.end,to:n<0?o.start:o.end,enter:function(e,t,o){if(!(n<0?o>r.start:t-1)return{start:s,end:{from:t,to:o},matched:!0};if(v(e,n,a))l++;else if(v(e,-n,a)&&0==--l)return{start:s,end:{from:t,to:o},matched:!1};return!1}}})||{start:s,matched:!1}}function b(e,t,n,r,i,a,o){var s=n<0?e.sliceDoc(t-1,t):e.sliceDoc(t,t+1),l=o.indexOf(s);if(l<0||l%2==0!=n>0)return null;for(var c={from:n<0?t-1:t,to:n>0?t+1:t},u=e.doc.iterRange(t,n>0?e.doc.length:0),f=0,d=0;!u.next().done&&d<=a;){var h=u.value;n<0&&(d+=h.length);for(var p=t+d*n,v=n>0?0:h.length-1,m=n>0?h.length:-1;v!=m;v+=n){var g=o.indexOf(h[v]);if(!(g<0||r.resolve(p+v,1).type!=i))if(g%2==0==n>0)f++;else{if(1==f)return{start:c,end:{from:p+v,to:p+v+1},matched:g>>1==l>>1};f--}}n>0&&(d+=h.length)}return u.done?{start:c,matched:!1}:null}},function(e,t,n){"use strict";n.d(t,"a",(function(){return p}));var r=n(0),i=n(26),a=!0,o=!1,s=null,l={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function c(e){e.metaKey||e.altKey||e.ctrlKey||(a=!0)}function u(){a=!1}function f(){"hidden"===this.visibilityState&&o&&(a=!0)}function d(e){var t=e.target;try{return t.matches(":focus-visible")}catch(n){}return a||function(e){var t=e.type,n=e.tagName;return!("INPUT"!==n||!l[t]||e.readOnly)||"TEXTAREA"===n&&!e.readOnly||!!e.isContentEditable}(t)}function h(){o=!0,window.clearTimeout(s),s=window.setTimeout((function(){o=!1}),100)}function p(){return{isFocusVisible:d,onBlurVisible:h,ref:r.useCallback((function(e){var t,n=i.findDOMNode(e);null!=n&&((t=n.ownerDocument).addEventListener("keydown",c,!0),t.addEventListener("mousedown",u,!0),t.addEventListener("pointerdown",u,!0),t.addEventListener("touchstart",u,!0),t.addEventListener("visibilitychange",f,!0))}),[])}}},function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var r=n(29);function i(e){return Object(r.a)(e).defaultView||window}},function(e,t,n){"use strict";var r=n(147),i=Object(r.a)();t.a=i},function(e,t,n){"use strict";var r=n(191);t.a=function(e,t){return t?Object(r.a)(e,t,{clone:!1}):e}},function(e,t,n){"use strict";var r=n(0),i=r.createContext();t.a=i},,function(e,t,n){"use strict";e.exports=n(179)},function(e,t,n){"use strict";function r(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}n.d(t,"a",(function(){return r}))},function(e,t,n){"use strict";function r(e){return null!=e&&!(Array.isArray(e)&&0===e.length)}function i(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return e&&(r(e.value)&&""!==e.value||t&&r(e.defaultValue)&&""!==e.defaultValue)}function a(e){return e.startAdornment}n.d(t,"b",(function(){return i})),n.d(t,"a",(function(){return a}))},function(e,t,n){"use strict";n.d(t,"a",(function(){return J})),n.d(t,"b",(function(){return ee})),n.d(t,"c",(function(){return K}));n(17);var r=n(25),i=n(16),a=n(15),o=n(7),s=n(4),l=n(6),c=n(84),u=n(5),f=n(10),d=n(19),h=function(){function e(t,n,r){Object(s.a)(this,e),this.state=t,this.pos=n,this.explicit=r,this.abortListeners=[]}return Object(l.a)(e,[{key:"tokenBefore",value:function(e){for(var t=this.state.tree.resolve(this.pos,-1);t&&e.indexOf(t.name)<0;)t=t.parent;return t?{from:t.start,to:this.pos,text:this.state.sliceDoc(t.start,this.pos),type:t.type}:null}},{key:"matchBefore",value:function(e){var t=this.state.doc.lineAt(this.pos),n=Math.max(t.from,this.pos-250),r=t.slice(n-t.from,this.pos-t.from),i=r.search(m(e,!1));return i<0?null:{from:n+i,to:this.pos,text:r.slice(i)}}},{key:"addEventListener",value:function(e,t){this.abortListeners&&this.abortListeners.push(t)}},{key:"aborted",get:function(){return null==this.abortListeners}}]),e}(),p=function e(t,n,r){Object(s.a)(this,e),this.completion=t,this.source=n,this.match=r};function v(e){return e.selection.primary.head}function m(e,t){var n,r=e.source,i=t&&"^"!=r[0],a="$"!=r[r.length-1];return i||a?new RegExp("".concat(i?"^":"","(?:").concat(r,")").concat(a?"$":""),null!==(n=e.flags)&&void 0!==n?n:e.ignoreCase?"i":""):e}function g(e,t){var n=t.completion.apply||t.completion.label,r=t.source;"string"==typeof n?e.dispatch({changes:{from:r.from,to:r.to,insert:n},selection:{anchor:r.from+n.length}}):n(e,t.completion,r.from,r.to)}var b=function(){function e(t){Object(s.a)(this,e),this.pattern=t,this.chars=[],this.folded=[],this.any=[],this.precise=[],this.byWord=[];for(var n=0;n=48&&w<=57||w>=97&&w<=122?2:w>=65&&w<=90?1:0:(j=Object(d.f)(w))!=j.toLowerCase()?1:j!=j.toUpperCase()?2:0;(1==S||0==x&&0!=S&&(this.chars[v]==w||this.folded[v]==w&&(m=!0)))&&(a[v++]=O),x=S,O+=Object(d.c)(w)}return v==l&&0==a[0]?this.result((m?-200:0)-100,a,e):g==l&&0==b?[-200,0,y]:s>-1?[-700,s,s+this.pattern.length]:g==l?[-900,b,y]:v==l?this.result((m?-200:0)-100-700,a,e):2==t.length?null:this.result((r[0]?-700:0)-200-1100,r,e)}},{key:"result",value:function(e,t,n){var r,i=[e],a=1,s=Object(o.a)(t);try{for(s.s();!(r=s.n()).done;){var l=r.value,c=l+(this.astral?Object(d.c)(Object(d.b)(n,l)):1);a>1&&i[a-1]==l?i[a-1]=c:(i[a++]=l,i[a++]=c)}}catch(u){s.e(u)}finally{s.f()}return i}}]),e}(),y=u.f.define({combine:function(e){return Object(u.m)(e,{activateOnTyping:!0,override:null,maxRenderedOptions:100})}}),O=f.d.baseTheme({"$tooltip.autocomplete":{"& > ul":{fontFamily:"monospace",overflowY:"auto",whiteSpace:"nowrap",maxHeight:"10em",listStyle:"none",margin:0,padding:0,"& > li":{cursor:"pointer",padding:"1px 1em 1px 3px",lineHeight:1.2},"& > li[aria-selected]":{background_fallback:"#bdf",backgroundColor:"Highlight",color_fallback:"white",color:"HighlightText"}}},"$completionListIncompleteTop:before, $completionListIncompleteBottom:after":{content:'"\xb7\xb7\xb7"',opacity:.5,display:"block",textAlign:"center"},"$tooltip.completionInfo":{position:"absolute",padding:"3px 9px",width:"max-content",maxWidth:"300px"},"$tooltip.completionInfo.left":{right:"100%"},"$tooltip.completionInfo.right":{left:"100%"},"$$light $snippetField":{backgroundColor:"#ddd"},"$$dark $snippetField":{backgroundColor:"#333"},$snippetFieldPosition:{verticalAlign:"text-top",width:0,height:"1.15em",margin:"0 -0.7px -.7em",borderLeft:"1.4px dotted #888"},$completionMatchedText:{textDecoration:"underline"},$completionDetail:{marginLeft:"0.5em",fontStyle:"italic"},$completionIcon:{fontSize:"90%",width:".8em",display:"inline-block",textAlign:"center",paddingRight:".6em",opacity:"0.6"},"$completionIcon.function, $completionIcon.method":{"&:after":{content:"'\u0192'"}},"$completionIcon.class":{"&:after":{content:"'\u25cb'"}},"$completionIcon.interface":{"&:after":{content:"'\u25cc'"}},"$completionIcon.variable":{"&:after":{content:"'\ud835\udc65'"}},"$completionIcon.constant":{"&:after":{content:"'\ud835\udc36'"}},"$completionIcon.type":{"&:after":{content:"'\ud835\udc61'"}},"$completionIcon.enum":{"&:after":{content:"'\u222a'"}},"$completionIcon.property":{"&:after":{content:"'\u25a1'"}},"$completionIcon.keyword":{"&:after":{content:"'\ud83d\udd11\ufe0e'"}},"$completionIcon.namespace":{"&:after":{content:"'\u25a2'"}},"$completionIcon.text":{"&:after":{content:"'abc'",fontSize:"50%",verticalAlign:"middle"}}});function k(e,t,n){var r=document.createElement("ul");r.id=t,r.setAttribute("role","listbox"),r.setAttribute("aria-expanded","true");for(var i=n.from;ip&&u.appendChild(document.createTextNode(d.slice(p,m)));var b=u.appendChild(document.createElement("span"));b.appendChild(document.createTextNode(d.slice(m,g))),b.className=Object(f.n)("completionMatchedText"),p=g}if(p>1){var r=Math.floor(t/n);return{from:r*n,to:(r+1)*n}}var i=Math.floor((e-t)/n);return{from:e-(i+1)*n,to:e-i*n}}var w=function(){function e(t,n){var r=this;Object(s.a)(this,e),this.view=t,this.stateField=n,this.info=null,this.placeInfo={read:function(){return r.measureInfo()},write:function(e){return r.positionInfo(e)},key:this};var i=t.state.field(n),a=i.open,o=a.options,l=a.selected,c=t.state.facet(y);this.range=x(o.length,l,c.maxRenderedOptions),this.dom=document.createElement("div"),this.dom.addEventListener("mousedown",(function(e){for(var n=r.range.from,i=e.target;i&&i!=r.list&&i.parentNode!=r.list;)i=i.parentNode;for(;i=i.previousSibling;)n++;n>=0&&n=this.range.to)&&(this.range=x(n.options.length,n.selected,this.view.state.facet(y).maxRenderedOptions),this.list.remove(),this.list=this.dom.appendChild(k(n.options,t.id,this.range)),this.list.addEventListener("scroll",(function(){e.info&&e.view.requestMeasure(e.placeInfo)}))),this.updateSelectedOption(n.selected)){this.info&&(this.info.remove(),this.info=null);var r=n.options[n.selected];r.completion.info&&(this.info=this.dom.appendChild(function(e){var t=document.createElement("div");t.className=Object(f.n)("tooltip.completionInfo");var n=e.completion.info;return"string"==typeof n?t.textContent=n:t.appendChild(n(e.completion)),t}(r)),this.view.requestMeasure(this.placeInfo))}}},{key:"updateSelectedOption",value:function(e){for(var t=null,n=this.list.firstChild,r=this.range.from;n;n=n.nextSibling,r++)r==e?n.hasAttribute("aria-selected")||(n.setAttribute("aria-selected","true"),t=n):n.hasAttribute("aria-selected")&&n.removeAttribute("aria-selected");return t&&function(e,t){var n=e.getBoundingClientRect(),r=t.getBoundingClientRect();r.topn.bottom&&(e.scrollTop+=r.bottom-n.bottom)}(this.list,t),t}},{key:"measureInfo",value:function(){var e=this.dom.querySelector("[aria-selected]");if(!e)return null;var t=this.dom.getBoundingClientRect(),n=e.getBoundingClientRect().top-t.top;if(n<0||n>this.list.clientHeight-10)return null;var r=this.view.textDirection==f.c.RTL,i=t.left,a=innerWidth-t.right;return r&&i=this.options.length?this:new e(this.options,C(n,t),this.tooltip,this.timestamp,t)}},{key:"map",value:function(t){return new e(this.options,this.attrs,[Object.assign(Object.assign({},this.tooltip[0]),{pos:t.mapPos(this.tooltip[0].pos)})],this.timestamp,this.selected)}}],[{key:"build",value:function(t,n,r,i){var a=function(e,t){var n,r=[],i=Object(o.a)(e);try{for(i.s();!(n=i.n()).done;){var a=n.value;if(a.hasResult()){var s,l=new b(t.sliceDoc(a.from,a.to)),c=void 0,u=Object(o.a)(a.result.options);try{for(u.s();!(s=u.n()).done;){var f=s.value;(c=l.match(f.label))&&(null!=f.boost&&(c[0]+=f.boost),r.push(new p(f,a,c)))}}catch(d){u.e(d)}finally{u.f()}}}}catch(d){i.e(d)}finally{i.f()}return r.sort(T),r.length>300?r.slice(0,300):r}(t,n);if(!a.length)return null;var s,l=0;if(i)for(var c=i.options[i.selected].completion,u=0;ua?new P(this.source,"input"==t&&r.activateOnTyping?1:0,!1):this.span&&(i==a||this.span.test(e.state.sliceDoc(i,a)))?new n(this.source,this.explicit,this.result,i,a,this.span):new P(this.source,1,this.explicit)}},{key:"handleChange",value:function(e){return e.changes.touchesRange(this.from,this.to)?new P(this.source,0,!1):new n(this.source,this.explicit,this.result,e.changes.mapPos(this.from),e.changes.mapPos(this.to,1),this.span)}},{key:"map",value:function(e){return new n(this.source,this.explicit,this.result,e.mapPos(this.from),e.mapPos(this.to,1),this.span)}}]),n}(P),D=u.i.define(),A=u.i.define({map:function(e,t){return e.map((function(e){return e.hasResult()&&!t.empty?e.map(t):e}))}}),R=u.i.define(),L=u.j.define({create:function(){return S.start()},update:function(e,t){return e.update(t)},provide:[c.b.nFrom((function(e){return e.tooltip})),f.d.contentAttributes.from((function(e){return e.attrs}))]});function N(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"option";return function(n){var r=n.state.field(L,!1);if(!r||!r.open||Date.now()-r.open.timestamp<75)return!1;var i,a=1;"page"==t&&(i=n.dom.querySelector(".cm-tooltip-autocomplete"))&&(a=Math.max(2,Math.floor(i.offsetHeight/i.firstChild.offsetHeight)));var o=r.open.selected+a*(e?1:-1),s=r.open.options.length;return o<0?o="page"==t?0:s-1:o>=s&&(o="page"==t?s-1:0),n.dispatch({effects:R.of(o)}),!0}}var z=function(e){var t=e.state.field(L,!1);return!(!t||!t.open||Date.now()-t.open.timestamp<75)&&(g(e,t.open.options[t.open.selected]),!0)},I=function e(t,n){Object(s.a)(this,e),this.source=t,this.context=n,this.time=Date.now(),this.updates=[],this.done=void 0},F=f.f.fromClass(function(){function e(t){Object(s.a)(this,e),this.view=t,this.debounceUpdate=-1,this.running=[],this.debounceAccept=-1;var n,r=Object(o.a)(t.state.field(L).active);try{for(r.s();!(n=r.n()).done;){var i=n.value;1==i.state&&this.startQuery(i)}}catch(a){r.e(a)}finally{r.f()}}return Object(l.a)(e,[{key:"update",value:function(e){var t=this,n=e.state.field(L);if(e.selectionSet||e.docChanged||e.prevState.field(L)!=n){for(var i=e.transactions.some((function(e){var t=e.annotation(u.l.userEvent);return(e.selection||e.docChanged)&&"input"!=t&&"delete"!=t})),a=0;a50&&s.time-Date.now()>1e3){var l,c=Object(o.a)(s.context.abortListeners);try{for(c.s();!(l=c.n()).done;){var d=l.value;try{d()}catch(p){Object(f.l)(this.view.state,p)}}}catch(v){c.e(v)}finally{c.f()}s.context.abortListeners=null,this.running.splice(a--,1)}else{var h;(h=s.updates).push.apply(h,Object(r.a)(e.transactions))}}this.debounceUpdate>-1&&clearTimeout(this.debounceUpdate),this.debounceUpdate=n.active.some((function(e){return 1==e.state&&!t.running.some((function(t){return t.source==e.source}))}))?setTimeout((function(){return t.startUpdate()}),50):-1}}},{key:"startUpdate",value:function(){var e=this;this.debounceUpdate=-1;var t,n=this.view.state.field(L),r=Object(o.a)(n.active);try{var i=function(){var n=t.value;1!=n.state||e.running.some((function(e){return e.source==n.source}))||e.startQuery(n)};for(r.s();!(t=r.n()).done;)i()}catch(a){r.e(a)}finally{r.f()}}},{key:"startQuery",value:function(e){var t=this,n=this.view.state,r=v(n),i=new h(n,r,e.explicit),a=new I(e.source,i);this.running.push(a),Promise.resolve(e.source(i)).then((function(e){a.context.aborted||(a.done=e||null,t.scheduleAccept())}),(function(e){t.view.dispatch({effects:D.of(!1)}),Object(f.l)(t.view.state,e)}))}},{key:"scheduleAccept",value:function(){var e=this;this.running.every((function(e){return void 0!==e.done}))?this.accept():this.debounceAccept<0&&(this.debounceAccept=setTimeout((function(){return e.accept()}),50))}},{key:"accept",value:function(){var e,t=this;this.debounceAccept>-1&&clearTimeout(this.debounceAccept),this.debounceAccept=-1;for(var n=[],r=this.view.state.facet(y),i=function(i){var s=t.running[i];if(void 0===s.done)return a=i,"continue";if(t.running.splice(i--,1),s.done){var l,c=new _(s.source,s.context.explicit,s.done,s.done.from,null!==(e=s.done.to)&&void 0!==e?e:v(s.updates.length?s.updates[0].startState:t.view.state),s.done.span?m(s.done.span,!0):null),u=Object(o.a)(s.updates);try{for(u.s();!(l=u.n()).done;){var f=l.value;c=c.update(f,r)}}catch(y){u.e(y)}finally{u.f()}if(c.hasResult())return n.push(c),a=i,"continue"}var d=t.view.state.field(L).active.find((function(e){return e.source==s.source}));if(d&&1==d.state)if(null==s.done){var h,p=new P(s.source,0,!1),g=Object(o.a)(s.updates);try{for(g.s();!(h=g.n()).done;){var b=h.value;p=p.update(b,r)}}catch(y){g.e(y)}finally{g.f()}1!=p.state&&n.push(p)}else t.startQuery(d);a=i},a=0;a=e.to}))}))}}]),e}(),U=u.i.define({map:function(e,t){return e&&e.map(t)}}),q=u.i.define(),Y=u.j.define({create:function(){return null},update:function(e,t){var n,r=Object(o.a)(t.effects);try{for(r.s();!(n=r.n()).done;){var i=n.value;if(i.is(U))return i.value;if(i.is(q)&&e)return new V(e.ranges,i.value)}}catch(a){r.e(a)}finally{r.f()}return e&&t.docChanged&&(e=e.map(t.changes)),e&&t.selection&&!e.selectionInsideField(t.selection)&&(e=null),e},provide:[f.d.decorations.from((function(e){return e?e.deco:f.b.none}))]});function X(e,t){return u.d.create(e.filter((function(e){return e.field==t})).map((function(e){return u.d.range(e.from,e.to)})))}function K(e){var t=Q.parse(e);return function(e,n,r,i){var a=t.instantiate(e.state,r),o=a.text,s=a.ranges,l={changes:{from:r,to:i,insert:u.k.of(o)}};s.length&&(l.selection=X(s,0)),s.length>1&&(l.effects=U.of(new V(s,0)),void 0===e.state.field(Y,!1)&&(l.reconfigure={append:[Y,Z,O]})),e.dispatch(e.state.update(l))}}function G(e){return function(t){var n=t.state,r=t.dispatch,i=n.field(Y,!1);if(!i||e<0&&0==i.active)return!1;var a=i.active+e,o=e>0&&!i.ranges.some((function(t){return t.field==a+e}));return r(n.update({selection:X(i.ranges,a),effects:U.of(o?null:new V(i.ranges,a))})),!0}}var Z=Object(u.o)(Object(f.k)([{key:"Tab",run:G(1),shift:G(-1)},{key:"Escape",run:function(e){var t=e.state,n=e.dispatch;return!!t.field(Y,!1)&&(n(t.update({effects:U.of(null)})),!0)}}]),"override");function J(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return[L,y.of(e),F,O,Object(c.c)(),Object(u.o)(Object(f.k)([{key:"ArrowDown",run:N(!0)},{key:"ArrowUp",run:N(!1)},{key:"PageDown",run:N(!0,"page")},{key:"PageUp",run:N(!1,"page")},{key:"Enter",run:z}]),"override")]}var ee=[{key:"Mod-Space",run:function(e){return!!e.state.field(L,!1)&&(e.dispatch({effects:D.of(!0)}),!0)}},{key:"Escape",run:function(e){var t=e.state.field(L,!1);return!(!t||!t.active.some((function(e){return 0!=e.state})))&&(e.dispatch({effects:D.of(!1)}),!0)}}]},,,function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var r=n(82);function i(e,t){if(e){if("string"===typeof e)return Object(r.a)(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Object(r.a)(e,t):void 0}}},function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var r=n(83);function i(e,t){if(e){if("string"===typeof e)return Object(r.a)(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Object(r.a)(e,t):void 0}}},function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var r=n(0);function i(e,t){return r.isValidElement(e)&&-1!==t.indexOf(e.type.muiName)}},function(e,t,n){"use strict";var r=n(0),i=n.n(r);t.a=i.a.createContext(null)},function(e,t,n){var r;!function(i,a,o,s){"use strict";var l,c=["","webkit","Moz","MS","ms","o"],u=a.createElement("div"),f=Math.round,d=Math.abs,h=Date.now;function p(e,t,n){return setTimeout(k(e,n),t)}function v(e,t,n){return!!Array.isArray(e)&&(m(e,n[t],n),!0)}function m(e,t,n){var r;if(e)if(e.forEach)e.forEach(t,n);else if(e.length!==s)for(r=0;r\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",a=i.console&&(i.console.warn||i.console.log);return a&&a.call(i.console,r,n),e.apply(this,arguments)}}l="function"!==typeof Object.assign?function(e){if(e===s||null===e)throw new TypeError("Cannot convert undefined or null to object");for(var t=Object(e),n=1;n-1}function E(e){return e.trim().split(/\s+/g)}function T(e,t,n){if(e.indexOf&&!n)return e.indexOf(t);for(var r=0;rn[t]})):r.sort()),r}function D(e,t){for(var n,r,i=t[0].toUpperCase()+t.slice(1),a=0;a1&&!n.firstMultiple?n.firstMultiple=V(t):1===i&&(n.firstMultiple=!1);var a=n.firstInput,o=n.firstMultiple,l=o?o.center:a.center,c=t.center=U(r);t.timeStamp=h(),t.deltaTime=t.timeStamp-a.timeStamp,t.angle=K(l,c),t.distance=X(l,c),function(e,t){var n=t.center,r=e.offsetDelta||{},i=e.prevDelta||{},a=e.prevInput||{};1!==t.eventType&&4!==a.eventType||(i=e.prevDelta={x:a.deltaX||0,y:a.deltaY||0},r=e.offsetDelta={x:n.x,y:n.y});t.deltaX=i.x+(n.x-r.x),t.deltaY=i.y+(n.y-r.y)}(n,t),t.offsetDirection=Y(t.deltaX,t.deltaY);var u=q(t.deltaTime,t.deltaX,t.deltaY);t.overallVelocityX=u.x,t.overallVelocityY=u.y,t.overallVelocity=d(u.x)>d(u.y)?u.x:u.y,t.scale=o?(f=o.pointers,p=r,X(p[0],p[1],Q)/X(f[0],f[1],Q)):1,t.rotation=o?function(e,t){return K(t[1],t[0],Q)+K(e[1],e[0],Q)}(o.pointers,r):0,t.maxPointers=n.prevInput?t.pointers.length>n.prevInput.maxPointers?t.pointers.length:n.prevInput.maxPointers:t.pointers.length,function(e,t){var n,r,i,a,o=e.lastInterval||t,l=t.timeStamp-o.timeStamp;if(8!=t.eventType&&(l>25||o.velocity===s)){var c=t.deltaX-o.deltaX,u=t.deltaY-o.deltaY,f=q(l,c,u);r=f.x,i=f.y,n=d(f.x)>d(f.y)?f.x:f.y,a=Y(c,u),e.lastInterval=t}else n=o.velocity,r=o.velocityX,i=o.velocityY,a=o.direction;t.velocity=n,t.velocityX=r,t.velocityY=i,t.direction=a}(n,t);var f,p;var v=e.element;C(t.srcEvent.target,v)&&(v=t.srcEvent.target);t.target=v}(e,n),e.emit("hammer.input",n),e.recognize(n),e.session.prevInput=n}function V(e){for(var t=[],n=0;n=d(t)?e<0?2:4:t<0?8:16}function X(e,t,n){n||(n=B);var r=t[n[0]]-e[n[0]],i=t[n[1]]-e[n[1]];return Math.sqrt(r*r+i*i)}function K(e,t,n){n||(n=B);var r=t[n[0]]-e[n[0]],i=t[n[1]]-e[n[1]];return 180*Math.atan2(i,r)/Math.PI}W.prototype={handler:function(){},init:function(){this.evEl&&j(this.element,this.evEl,this.domHandler),this.evTarget&&j(this.target,this.evTarget,this.domHandler),this.evWin&&j(R(this.element),this.evWin,this.domHandler)},destroy:function(){this.evEl&&S(this.element,this.evEl,this.domHandler),this.evTarget&&S(this.target,this.evTarget,this.domHandler),this.evWin&&S(R(this.element),this.evWin,this.domHandler)}};var G={mousedown:1,mousemove:2,mouseup:4},Z="mousedown",J="mousemove mouseup";function ee(){this.evEl=Z,this.evWin=J,this.pressed=!1,W.apply(this,arguments)}O(ee,W,{handler:function(e){var t=G[e.type];1&t&&0===e.button&&(this.pressed=!0),2&t&&1!==e.which&&(t=4),this.pressed&&(4&t&&(this.pressed=!1),this.callback(this.manager,t,{pointers:[e],changedPointers:[e],pointerType:F,srcEvent:e}))}});var te={pointerdown:1,pointermove:2,pointerup:4,pointercancel:8,pointerout:8},ne={2:I,3:"pen",4:F,5:"kinect"},re="pointerdown",ie="pointermove pointerup pointercancel";function ae(){this.evEl=re,this.evWin=ie,W.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}i.MSPointerEvent&&!i.PointerEvent&&(re="MSPointerDown",ie="MSPointerMove MSPointerUp MSPointerCancel"),O(ae,W,{handler:function(e){var t=this.store,n=!1,r=e.type.toLowerCase().replace("ms",""),i=te[r],a=ne[e.pointerType]||e.pointerType,o=a==I,s=T(t,e.pointerId,"pointerId");1&i&&(0===e.button||o)?s<0&&(t.push(e),s=t.length-1):12&i&&(n=!0),s<0||(t[s]=e,this.callback(this.manager,i,{pointers:t,changedPointers:[e],pointerType:a,srcEvent:e}),n&&t.splice(s,1))}});var oe={touchstart:1,touchmove:2,touchend:4,touchcancel:8},se="touchstart",le="touchstart touchmove touchend touchcancel";function ce(){this.evTarget=se,this.evWin=le,this.started=!1,W.apply(this,arguments)}function ue(e,t){var n=P(e.touches),r=P(e.changedTouches);return 12&t&&(n=_(n.concat(r),"identifier",!0)),[n,r]}O(ce,W,{handler:function(e){var t=oe[e.type];if(1===t&&(this.started=!0),this.started){var n=ue.call(this,e,t);12&t&&n[0].length-n[1].length===0&&(this.started=!1),this.callback(this.manager,t,{pointers:n[0],changedPointers:n[1],pointerType:I,srcEvent:e})}}});var fe={touchstart:1,touchmove:2,touchend:4,touchcancel:8},de="touchstart touchmove touchend touchcancel";function he(){this.evTarget=de,this.targetIds={},W.apply(this,arguments)}function pe(e,t){var n=P(e.touches),r=this.targetIds;if(3&t&&1===n.length)return r[n[0].identifier]=!0,[n,n];var i,a,o=P(e.changedTouches),s=[],l=this.target;if(a=n.filter((function(e){return C(e.target,l)})),1===t)for(i=0;i-1&&r.splice(e,1)}),2500)}}function be(e){for(var t=e.srcEvent.clientX,n=e.srcEvent.clientY,r=0;r-1&&this.requireFail.splice(t,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(e){return!!this.simultaneous[e.id]},emit:function(e){var t=this,n=this.state;function r(n){t.manager.emit(n,e)}n<8&&r(t.options.event+_e(n)),r(t.options.event),e.additionalEvent&&r(e.additionalEvent),n>=8&&r(t.options.event+_e(n))},tryEmit:function(e){if(this.canEmit())return this.emit(e);this.state=Te},canEmit:function(){for(var e=0;et.threshold&&i&t.direction},attrTest:function(e){return Re.prototype.attrTest.call(this,e)&&(2&this.state||!(2&this.state)&&this.directionTest(e))},emit:function(e){this.pX=e.deltaX,this.pY=e.deltaY;var t=De(e.direction);t&&(e.additionalEvent=this.options.event+t),this._super.emit.call(this,e)}}),O(Ne,Re,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[je]},attrTest:function(e){return this._super.attrTest.call(this,e)&&(Math.abs(e.scale-1)>this.options.threshold||2&this.state)},emit:function(e){if(1!==e.scale){var t=e.scale<1?"in":"out";e.additionalEvent=this.options.event+t}this._super.emit.call(this,e)}}),O(ze,Pe,{defaults:{event:"press",pointers:1,time:251,threshold:9},getTouchAction:function(){return[xe]},process:function(e){var t=this.options,n=e.pointers.length===t.pointers,r=e.distancet.time;if(this._input=e,!r||!n||12&e.eventType&&!i)this.reset();else if(1&e.eventType)this.reset(),this._timer=p((function(){this.state=8,this.tryEmit()}),t.time,this);else if(4&e.eventType)return 8;return Te},reset:function(){clearTimeout(this._timer)},emit:function(e){8===this.state&&(e&&4&e.eventType?this.manager.emit(this.options.event+"up",e):(this._input.timeStamp=h(),this.manager.emit(this.options.event,this._input)))}}),O(Ie,Re,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[je]},attrTest:function(e){return this._super.attrTest.call(this,e)&&(Math.abs(e.rotation)>this.options.threshold||2&this.state)}}),O(Fe,Re,{defaults:{event:"swipe",threshold:10,velocity:.3,direction:30,pointers:1},getTouchAction:function(){return Le.prototype.getTouchAction.call(this)},attrTest:function(e){var t,n=this.options.direction;return 30&n?t=e.overallVelocity:6&n?t=e.overallVelocityX:n&$&&(t=e.overallVelocityY),this._super.attrTest.call(this,e)&&n&e.offsetDirection&&e.distance>this.options.threshold&&e.maxPointers==this.options.pointers&&d(t)>this.options.velocity&&4&e.eventType},emit:function(e){var t=De(e.offsetDirection);t&&this.manager.emit(this.options.event+t,e),this.manager.emit(this.options.event,e)}}),O($e,Pe,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[we]},process:function(e){var t=this.options,n=e.pointers.length===t.pointers,r=e.distancee.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n=t.bottom||s.right<=t.left||s.left>=t.right)a.style.top="-10000px";else{var c=l.right-l.left,u=l.bottom-l.top,f=this.view.textDirection==o.c.LTR?Math.min(s.left,e.innerWidth-c):Math.max(0,s.left-c),d=!!r.above;!r.strictSide&&(d?s.top-(l.bottom-l.top)<0:s.bottom+(l.bottom-l.top)>e.innerHeight)&&(d=!d),a.style.top=(d?s.top-u:s.bottom)+"px",a.style.left=f+"px",a.classList.toggle("cm-tooltip-above",d),a.classList.toggle("cm-tooltip-below",!d),i.positioned&&i.positioned()}}}},{key:"maybeMeasure",value:function(){this.tooltips.length&&((this.view.inView||this.inView)&&this.view.requestMeasure(this.measureReq),this.inView=this.view.inView)}}]),e}(),{eventHandlers:{scroll:function(){this.maybeMeasure()}}}),c=o.d.baseTheme({$tooltip:{position:"fixed",border:"1px solid #ddd",backgroundColor:"#f5f5f5",zIndex:100}});function u(){return[l,c]}var f=s.f.define(),d=function(){function e(t,n,r,a){Object(i.a)(this,e),this.view=t,this.source=n,this.field=r,this.setHover=a,this.lastMouseMove=null,this.hoverTimeout=-1,this.mouseInside=!1,this.checkHover=this.checkHover.bind(this),t.dom.addEventListener("mouseenter",this.mouseenter=this.mouseenter.bind(this)),t.dom.addEventListener("mouseleave",this.mouseleave=this.mouseleave.bind(this)),t.dom.addEventListener("mousemove",this.mousemove=this.mousemove.bind(this))}return Object(a.a)(e,[{key:"checkHover",value:function(){var e=this;if(this.hoverTimeout=-1,this.mouseInside&&!this.active){var t=Date.now(),n=this.lastMouseMove;if(t-n.timeStamp<750)this.hoverTimeout=setTimeout(this.checkHover,750-(t-n.timeStamp));else{var r=this.view.contentDOM.contains(n.target)?this.view.posAtCoords({x:n.clientX,y:n.clientY}):-1,i=r<0?null:this.source(this.view,(function(t,i){return t<=r&&i>=r&&(t==i||h(e.view,t,i,n.clientX,n.clientY))}));i&&this.view.dispatch({effects:this.setHover.of(i)})}}}},{key:"mousemove",value:function(e){var t;this.lastMouseMove=e,this.hoverTimeout<0&&(this.hoverTimeout=setTimeout(this.checkHover,750));var n=this.active;if(n&&!function(e){for(var t=e;t;t=t.parentNode)if(1==t.nodeType&&t.classList.contains("cm-tooltip"))return!0;return!1}(e.target)){var r=n.pos,i=null!==(t=n.end)&&void 0!==t?t:r;(r==i?this.view.posAtCoords({x:e.clientX,y:e.clientY})==r:h(this.view,r,i,e.clientX,e.clientY,10))||this.view.dispatch({effects:this.setHover.of(null)})}}},{key:"mouseenter",value:function(){this.mouseInside=!0}},{key:"mouseleave",value:function(){this.mouseInside=!1,this.active&&this.view.dispatch({effects:this.setHover.of(null)})}},{key:"destroy",value:function(){this.view.dom.removeEventListener("mouseenter",this.mouseenter),this.view.dom.removeEventListener("mouseleave",this.mouseleave),this.view.dom.removeEventListener("mousemove",this.mousemove)}},{key:"active",get:function(){return this.view.state.field(this.field)}}]),e}();function h(e,t,n,r,i){var a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,o=document.createRange(),s=e.domAtPos(t),l=e.domAtPos(n);o.setEnd(l.node,l.offset),o.setStart(s.node,s.offset);for(var c=o.getClientRects(),u=0;u1&&void 0!==arguments[1]?arguments[1]:{},n=s.i.define(),i=s.j.define({create:function(){return null},update:function(e,i){if(e&&t.hideOnChange&&(i.docChanged||i.selection))return null;var a,o=Object(r.a)(i.effects);try{for(o.s();!(a=o.n()).done;){var l=a.value;if(l.is(n))return l.value}}catch(f){o.e(f)}finally{o.f()}if(e&&i.docChanged){var c=i.changes.mapPos(e.pos,-1,s.h.TrackDel);if(c<0)return null;var u=Object.assign(Object.create(null),e);return u.pos=c,null!=e.end&&(u.end=i.changes.mapPos(e.end)),u}return e},provide:[f.nFrom((function(e){return e?[e]:[]}))]});return[i,o.f.define((function(t){return new d(t,e,i,n)})),u()]}},function(e,t,n){"use strict";var r=n(2),i=n(8),a=n(0),o=(n(12),n(9)),s=n(11),l=n(18),c={h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",subtitle1:"h6",subtitle2:"h6",body1:"p",body2:"p"},u=a.forwardRef((function(e,t){var n=e.align,s=void 0===n?"inherit":n,u=e.classes,f=e.className,d=e.color,h=void 0===d?"initial":d,p=e.component,v=e.display,m=void 0===v?"initial":v,g=e.gutterBottom,b=void 0!==g&&g,y=e.noWrap,O=void 0!==y&&y,k=e.paragraph,x=void 0!==k&&k,w=e.variant,j=void 0===w?"body1":w,S=e.variantMapping,C=void 0===S?c:S,M=Object(i.a)(e,["align","classes","className","color","component","display","gutterBottom","noWrap","paragraph","variant","variantMapping"]),E=p||(x?"p":C[j]||c[j])||"span";return a.createElement(E,Object(r.a)({className:Object(o.a)(u.root,f,"inherit"!==j&&u[j],"initial"!==h&&u["color".concat(Object(l.a)(h))],O&&u.noWrap,b&&u.gutterBottom,x&&u.paragraph,"inherit"!==s&&u["align".concat(Object(l.a)(s))],"initial"!==m&&u["display".concat(Object(l.a)(m))]),ref:t},M))}));t.a=Object(s.a)((function(e){return{root:{margin:0},body2:e.typography.body2,body1:e.typography.body1,caption:e.typography.caption,button:e.typography.button,h1:e.typography.h1,h2:e.typography.h2,h3:e.typography.h3,h4:e.typography.h4,h5:e.typography.h5,h6:e.typography.h6,subtitle1:e.typography.subtitle1,subtitle2:e.typography.subtitle2,overline:e.typography.overline,srOnly:{position:"absolute",height:1,width:1,overflow:"hidden"},alignLeft:{textAlign:"left"},alignCenter:{textAlign:"center"},alignRight:{textAlign:"right"},alignJustify:{textAlign:"justify"},noWrap:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},gutterBottom:{marginBottom:"0.35em"},paragraph:{marginBottom:16},colorInherit:{color:"inherit"},colorPrimary:{color:e.palette.primary.main},colorSecondary:{color:e.palette.secondary.main},colorTextPrimary:{color:e.palette.text.primary},colorTextSecondary:{color:e.palette.text.secondary},colorError:{color:e.palette.error.main},displayInline:{display:"inline"},displayBlock:{display:"block"}}}),{name:"MuiTypography"})(u)},function(e,t,n){"use strict";var r=n(2),i=n(8),a=n(0),o=(n(12),n(26)),s=n(9),l=n(23),c=n(31),u=n(11),f=n(63),d=n(56),h=n(264),p="undefined"===typeof window?a.useEffect:a.useLayoutEffect;var v=function(e){var t=e.classes,n=e.pulsate,r=void 0!==n&&n,i=e.rippleX,o=e.rippleY,l=e.rippleSize,u=e.in,f=e.onExited,d=void 0===f?function(){}:f,h=e.timeout,v=a.useState(!1),m=v[0],g=v[1],b=Object(s.a)(t.ripple,t.rippleVisible,r&&t.ripplePulsate),y={width:l,height:l,top:-l/2+o,left:-l/2+i},O=Object(s.a)(t.child,m&&t.childLeaving,r&&t.childPulsate),k=Object(c.a)(d);return p((function(){if(!u){g(!0);var e=setTimeout(k,h);return function(){clearTimeout(e)}}}),[k,u,h]),a.createElement("span",{className:b,style:y},a.createElement("span",{className:O}))},m=a.forwardRef((function(e,t){var n=e.center,o=void 0!==n&&n,l=e.classes,c=e.className,u=Object(i.a)(e,["center","classes","className"]),f=a.useState([]),p=f[0],m=f[1],g=a.useRef(0),b=a.useRef(null);a.useEffect((function(){b.current&&(b.current(),b.current=null)}),[p]);var y=a.useRef(!1),O=a.useRef(null),k=a.useRef(null),x=a.useRef(null);a.useEffect((function(){return function(){clearTimeout(O.current)}}),[]);var w=a.useCallback((function(e){var t=e.pulsate,n=e.rippleX,r=e.rippleY,i=e.rippleSize,o=e.cb;m((function(e){return[].concat(Object(d.a)(e),[a.createElement(v,{key:g.current,classes:l,timeout:550,pulsate:t,rippleX:n,rippleY:r,rippleSize:i})])})),g.current+=1,b.current=o}),[l]),j=a.useCallback((function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0,r=t.pulsate,i=void 0!==r&&r,a=t.center,s=void 0===a?o||t.pulsate:a,l=t.fakeElement,c=void 0!==l&&l;if("mousedown"===e.type&&y.current)y.current=!1;else{"touchstart"===e.type&&(y.current=!0);var u,f,d,h=c?null:x.current,p=h?h.getBoundingClientRect():{width:0,height:0,left:0,top:0};if(s||0===e.clientX&&0===e.clientY||!e.clientX&&!e.touches)u=Math.round(p.width/2),f=Math.round(p.height/2);else{var v=e.touches?e.touches[0]:e,m=v.clientX,g=v.clientY;u=Math.round(m-p.left),f=Math.round(g-p.top)}if(s)(d=Math.sqrt((2*Math.pow(p.width,2)+Math.pow(p.height,2))/3))%2===0&&(d+=1);else{var b=2*Math.max(Math.abs((h?h.clientWidth:0)-u),u)+2,j=2*Math.max(Math.abs((h?h.clientHeight:0)-f),f)+2;d=Math.sqrt(Math.pow(b,2)+Math.pow(j,2))}e.touches?null===k.current&&(k.current=function(){w({pulsate:i,rippleX:u,rippleY:f,rippleSize:d,cb:n})},O.current=setTimeout((function(){k.current&&(k.current(),k.current=null)}),80)):w({pulsate:i,rippleX:u,rippleY:f,rippleSize:d,cb:n})}}),[o,w]),S=a.useCallback((function(){j({},{pulsate:!0})}),[j]),C=a.useCallback((function(e,t){if(clearTimeout(O.current),"touchend"===e.type&&k.current)return e.persist(),k.current(),k.current=null,void(O.current=setTimeout((function(){C(e,t)})));k.current=null,m((function(e){return e.length>0?e.slice(1):e})),b.current=t}),[]);return a.useImperativeHandle(t,(function(){return{pulsate:S,start:j,stop:C}}),[S,j,C]),a.createElement("span",Object(r.a)({className:Object(s.a)(l.root,c),ref:x},u),a.createElement(h.a,{component:null,exit:!0},p))})),g=Object(u.a)((function(e){return{root:{overflow:"hidden",pointerEvents:"none",position:"absolute",zIndex:0,top:0,right:0,bottom:0,left:0,borderRadius:"inherit"},ripple:{opacity:0,position:"absolute"},rippleVisible:{opacity:.3,transform:"scale(1)",animation:"$enter ".concat(550,"ms ").concat(e.transitions.easing.easeInOut)},ripplePulsate:{animationDuration:"".concat(e.transitions.duration.shorter,"ms")},child:{opacity:1,display:"block",width:"100%",height:"100%",borderRadius:"50%",backgroundColor:"currentColor"},childLeaving:{opacity:0,animation:"$exit ".concat(550,"ms ").concat(e.transitions.easing.easeInOut)},childPulsate:{position:"absolute",left:0,top:0,animation:"$pulsate 2500ms ".concat(e.transitions.easing.easeInOut," 200ms infinite")},"@keyframes enter":{"0%":{transform:"scale(0)",opacity:.1},"100%":{transform:"scale(1)",opacity:.3}},"@keyframes exit":{"0%":{opacity:1},"100%":{opacity:0}},"@keyframes pulsate":{"0%":{transform:"scale(1)"},"50%":{transform:"scale(0.92)"},"100%":{transform:"scale(1)"}}}}),{flip:!1,name:"MuiTouchRipple"})(a.memo(m)),b=a.forwardRef((function(e,t){var n=e.action,u=e.buttonRef,d=e.centerRipple,h=void 0!==d&&d,p=e.children,v=e.classes,m=e.className,b=e.component,y=void 0===b?"button":b,O=e.disabled,k=void 0!==O&&O,x=e.disableRipple,w=void 0!==x&&x,j=e.disableTouchRipple,S=void 0!==j&&j,C=e.focusRipple,M=void 0!==C&&C,E=e.focusVisibleClassName,T=e.onBlur,P=e.onClick,_=e.onFocus,D=e.onFocusVisible,A=e.onKeyDown,R=e.onKeyUp,L=e.onMouseDown,N=e.onMouseLeave,z=e.onMouseUp,I=e.onTouchEnd,F=e.onTouchMove,$=e.onTouchStart,B=e.onDragLeave,Q=e.tabIndex,W=void 0===Q?0:Q,H=e.TouchRippleProps,V=e.type,U=void 0===V?"button":V,q=Object(i.a)(e,["action","buttonRef","centerRipple","children","classes","className","component","disabled","disableRipple","disableTouchRipple","focusRipple","focusVisibleClassName","onBlur","onClick","onFocus","onFocusVisible","onKeyDown","onKeyUp","onMouseDown","onMouseLeave","onMouseUp","onTouchEnd","onTouchMove","onTouchStart","onDragLeave","tabIndex","TouchRippleProps","type"]),Y=a.useRef(null);var X=a.useRef(null),K=a.useState(!1),G=K[0],Z=K[1];k&&G&&Z(!1);var J=Object(f.a)(),ee=J.isFocusVisible,te=J.onBlurVisible,ne=J.ref;function re(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:S;return Object(c.a)((function(r){return t&&t(r),!n&&X.current&&X.current[e](r),!0}))}a.useImperativeHandle(n,(function(){return{focusVisible:function(){Z(!0),Y.current.focus()}}}),[]),a.useEffect((function(){G&&M&&!w&&X.current.pulsate()}),[w,M,G]);var ie=re("start",L),ae=re("stop",B),oe=re("stop",z),se=re("stop",(function(e){G&&e.preventDefault(),N&&N(e)})),le=re("start",$),ce=re("stop",I),ue=re("stop",F),fe=re("stop",(function(e){G&&(te(e),Z(!1)),T&&T(e)}),!1),de=Object(c.a)((function(e){Y.current||(Y.current=e.currentTarget),ee(e)&&(Z(!0),D&&D(e)),_&&_(e)})),he=function(){var e=o.findDOMNode(Y.current);return y&&"button"!==y&&!("A"===e.tagName&&e.href)},pe=a.useRef(!1),ve=Object(c.a)((function(e){M&&!pe.current&&G&&X.current&&" "===e.key&&(pe.current=!0,e.persist(),X.current.stop(e,(function(){X.current.start(e)}))),e.target===e.currentTarget&&he()&&" "===e.key&&e.preventDefault(),A&&A(e),e.target===e.currentTarget&&he()&&"Enter"===e.key&&!k&&(e.preventDefault(),P&&P(e))})),me=Object(c.a)((function(e){M&&" "===e.key&&X.current&&G&&!e.defaultPrevented&&(pe.current=!1,e.persist(),X.current.stop(e,(function(){X.current.pulsate(e)}))),R&&R(e),P&&e.target===e.currentTarget&&he()&&" "===e.key&&!e.defaultPrevented&&P(e)})),ge=y;"button"===ge&&q.href&&(ge="a");var be={};"button"===ge?(be.type=U,be.disabled=k):("a"===ge&&q.href||(be.role="button"),be["aria-disabled"]=k);var ye=Object(l.a)(u,t),Oe=Object(l.a)(ne,Y),ke=Object(l.a)(ye,Oe),xe=a.useState(!1),we=xe[0],je=xe[1];a.useEffect((function(){je(!0)}),[]);var Se=we&&!w&&!k;return a.createElement(ge,Object(r.a)({className:Object(s.a)(v.root,m,G&&[v.focusVisible,E],k&&v.disabled),onBlur:fe,onClick:P,onFocus:de,onKeyDown:ve,onKeyUp:me,onMouseDown:ie,onMouseLeave:se,onMouseUp:oe,onDragLeave:ae,onTouchEnd:ce,onTouchMove:ue,onTouchStart:le,ref:ke,tabIndex:k?-1:W},be,q),p,Se?a.createElement(g,Object(r.a)({ref:X,center:h},H)):null)}));t.a=Object(u.a)({root:{display:"inline-flex",alignItems:"center",justifyContent:"center",position:"relative",WebkitTapHighlightColor:"transparent",backgroundColor:"transparent",outline:0,border:0,margin:0,borderRadius:0,padding:0,cursor:"pointer",userSelect:"none",verticalAlign:"middle","-moz-appearance":"none","-webkit-appearance":"none",textDecoration:"none",color:"inherit","&::-moz-focus-inner":{borderStyle:"none"},"&$disabled":{pointerEvents:"none",cursor:"default"},"@media print":{colorAdjust:"exact"}},disabled:{},focusVisible:{}},{name:"MuiButtonBase"})(b)},function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));var r=n(0);function i(e){var t=r.useState(e),n=t[0],i=t[1],a=e||n;return r.useEffect((function(){null==n&&i("mui-".concat(Math.round(1e5*Math.random())))}),[n]),a}},function(e,t,n){"use strict";function r(e){if(Array.isArray(e))return e}n.d(t,"a",(function(){return r}))},function(e,t,n){"use strict";function r(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}n.d(t,"a",(function(){return r}))},function(e,t,n){"use strict";var r=n(0),i=n.n(r).a.createContext(null);t.a=i},function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));n(56),n(2);var r=n(60),i=(n(12),n(66),{xs:0,sm:600,md:960,lg:1280,xl:1920}),a={keys:["xs","sm","md","lg","xl"],up:function(e){return"@media (min-width:".concat(i[e],"px)")}};function o(e,t,n){if(Array.isArray(t)){var i=e.theme.breakpoints||a;return t.reduce((function(e,r,a){return e[i.up(i.keys[a])]=n(t[a]),e}),{})}if("object"===Object(r.a)(t)){var o=e.theme.breakpoints||a;return Object.keys(t).reduce((function(e,r){return e[o.up(r)]=n(t[r]),e}),{})}return n(t)}},function(e,t,n){"use strict";function r(e){if("undefined"!==typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}n.d(t,"a",(function(){return r}))},function(e,t,n){"use strict";t.a={mobileStepper:1e3,speedDial:1050,appBar:1100,drawer:1200,modal:1300,snackbar:1400,tooltip:1500}},function(e,t,n){"use strict";var r=n(69),i={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},o={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function l(e){return r.isMemo(e)?o:s[e.$$typeof]||i}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=o;var c=Object.defineProperty,u=Object.getOwnPropertyNames,f=Object.getOwnPropertySymbols,d=Object.getOwnPropertyDescriptor,h=Object.getPrototypeOf,p=Object.prototype;e.exports=function e(t,n,r){if("string"!==typeof n){if(p){var i=h(n);i&&i!==p&&e(t,i,r)}var o=u(n);f&&(o=o.concat(f(n)));for(var s=l(t),v=l(n),m=0;m0&&void 0!==arguments[0]?arguments[0]:Date.now(),t=this,n=0;t._charts.forEach((function(r,i){if(r.running&&r.items.length){for(var a,o=r.items,s=o.length-1,l=!1;s>=0;--s)(a=o[s])._active?(a._total>r.duration&&(r.duration=a._total),a.tick(e),l=!0):(o[s]=o[o.length-1],o.pop());l&&(i.draw(),t._notify(i,r,e,"progress")),o.length||(r.running=!1,t._notify(i,r,e,"complete"),r.initial=!1),n+=o.length}})),t._lastDate=e,0===n&&(t._running=!1)}},{key:"_getAnims",value:function(e){var t=this._charts,n=t.get(e);return n||(n={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},t.set(e,n)),n}},{key:"listen",value:function(e,t,n){this._getAnims(e).listeners[t].push(n)}},{key:"add",value:function(e,t){var n;t&&t.length&&(n=this._getAnims(e).items).push.apply(n,Object(f.a)(t))}},{key:"has",value:function(e){return this._getAnims(e).items.length>0}},{key:"start",value:function(e){var t=this._charts.get(e);t&&(t.running=!0,t.start=Date.now(),t.duration=t.items.reduce((function(e,t){return Math.max(e,t._duration)}),0),this._refresh())}},{key:"running",value:function(e){if(!this._running)return!1;var t=this._charts.get(e);return!!(t&&t.running&&t.items.length)}},{key:"stop",value:function(e){var t=this._charts.get(e);if(t&&t.items.length){for(var n=t.items,r=n.length-1;r>=0;--r)n[r].cancel();t.items=[],this._notify(e,t,Date.now(),"complete")}}},{key:"remove",value:function(e){return this._charts.delete(e)}}]),e}()),m="transparent",g={boolean:function(e,t,n){return n>.5?t:e},color:function(e,t,n){var r=Object(p.wb)(e||m),i=r.valid&&Object(p.wb)(t||m);return i&&i.valid?i.mix(r,n).hexString():t},number:function(e,t,n){return e+(t-e)*n}},b=function(){function e(t,n,r,i){Object(d.a)(this,e);var a=n[r];i=Object(p.C)([t.to,i,a,t.from]);var o=Object(p.C)([t.from,a,i]);this._active=!0,this._fn=t.fn||g[t.type||typeof o],this._easing=p.yb[t.easing]||p.yb.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=n,this._prop=r,this._from=o,this._to=i,this._promises=void 0}return Object(h.a)(e,[{key:"active",value:function(){return this._active}},{key:"update",value:function(e,t,n){var r=this;if(r._active){r._notify(!1);var i=r._target[r._prop],a=n-r._start,o=r._duration-a;r._start=n,r._duration=Math.floor(Math.max(o,e.duration)),r._total+=a,r._loop=!!e.loop,r._to=Object(p.C)([e.to,t,i,e.from]),r._from=Object(p.C)([e.from,i,t])}}},{key:"cancel",value:function(){var e=this;e._active&&(e.tick(Date.now()),e._active=!1,e._notify(!1))}},{key:"tick",value:function(e){var t,n=this,r=e-n._start,i=n._duration,a=n._prop,o=n._from,s=n._loop,l=n._to;if(n._active=o!==l&&(s||r1?2-t:t,t=n._easing(Math.min(1,Math.max(0,t))),n._target[a]=n._fn(o,l,t))}},{key:"wait",value:function(){var e=this._promises||(this._promises=[]);return new Promise((function(t,n){e.push({res:t,rej:n})}))}},{key:"_notify",value:function(e){for(var t=e?"res":"rej",n=this._promises||[],r=0;r=0;--n){var l=o[n];if("$"!==l.charAt(0))if("options"!==l){var c=t[l],u=a[l],d=r.get(l);if(u){if(d&&u.active()){u.update(d,c,s);continue}u.cancel()}d&&d.duration?(a[l]=u=new b(d,e,l,c),i.push(u)):e[l]=c}else i.push.apply(i,Object(f.a)(this._animateOptions(e,t)))}return i}},{key:"update",value:function(e,t){if(0!==this._properties.size){var n=this._createAnimations(e,t);return n.length?(v.add(this._chart,n),!0):void 0}Object.assign(e,t)}}]),e}();function k(e,t){var n=e&&e.options||{},r=n.reverse,i=void 0===n.min?t:0,a=void 0===n.max?t:0;return{start:r?a:i,end:r?i:a}}function x(e,t){var n,r,i=[],a=e._getSortedDatasetMetas(t);for(n=0,r=a.length;n0||!n&&o<0)return a.index}}catch(s){i.e(s)}finally{i.f()}return null}function M(e,t){for(var n,r=e.chart,i=e._cachedMeta,a=r._stacks||(r._stacks={}),o=i.iScale,s=i.vScale,l=i.index,c=o.axis,u=s.axis,f=function(e,t,n){return"".concat(e.id,".").concat(t.id,".").concat(n.stack||n.type)}(o,s,i),d=t.length,h=0;h0&&o._parsed[e-1];if(!1===a._parsing)o._parsed=s,o._sorted=!0,i=s;else{i=Object(p.vb)(s[e])?a.parseArrayData(o,s,e,t):Object(p.Cb)(s[e])?a.parseObjectData(o,s,e,t):a.parsePrimitiveData(o,s,e,t);for(n=0;na||g=0;--n)if(!b()){o.updateRangeFromParsed(h,e,i,d);break}return h}},{key:"getAllParsedValues",value:function(e){var t,n,r,i=this._cachedMeta._parsed,a=[];for(t=0,n=i.length;t=0&&e1&&void 0!==arguments[1]?arguments[1]:"default",n=arguments.length>2?arguments[2]:void 0,r=this,i="active"===t,a=r._cachedDataOpts,o=e+"-"+t,s=a[o],l=r.enableOptionSharing&&Object(p.Bb)(n);if(s)return _(s,l);var c=r.chart.config,u=c.datasetElementScopeKeys(r._type,e),f=i?["".concat(e,"Hover"),"hover",e,""]:[e,""],d=c.getOptionScopes(r.getDataset(),u),h=Object.keys(p.xb.elements[e]),v=function(){return r.getContext(n,i)},m=c.resolveNamedOptions(d,h,v,f);return m.$shared&&(m.$shared=l,a[o]=Object.freeze(_(m,l))),m}},{key:"_resolveAnimations",value:function(e,t,n){var r,i=this,a=i.chart,o=i._cachedDataOpts,s="animation-".concat(t),l=o[s];if(l)return l;if(!1!==a.options.animation){var c=i.chart.config,u=c.datasetAnimationScopeKeys(i._type,t),f=c.getOptionScopes(i.getDataset(),u);r=c.createResolver(f,i.getContext(e,n,t))}var d=new O(a,r&&r.animations);return r&&r._cacheable&&(o[s]=Object.freeze(d)),d}},{key:"getSharedOptions",value:function(e){if(e.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},e))}},{key:"includeOptions",value:function(e,t){return!t||P(e)||this.chart._animationsDisabled}},{key:"updateElement",value:function(e,t,n,r){P(r)?Object.assign(e,n):this._resolveAnimations(t,r).update(e,n)}},{key:"updateSharedOptions",value:function(e,t,n){e&&!P(t)&&this._resolveAnimations(void 0,t).update(e,n)}},{key:"_setStyle",value:function(e,t,n,r){e.active=r;var i=this.getStyle(t,r);this._resolveAnimations(t,n,r).update(e,{options:!r&&this.getSharedOptions(i)||i})}},{key:"removeHoverStyle",value:function(e,t,n){this._setStyle(e,n,"active",!1)}},{key:"setHoverStyle",value:function(e,t,n){this._setStyle(e,n,"active",!0)}},{key:"_removeDatasetHoverStyle",value:function(){var e=this._cachedMeta.dataset;e&&this._setStyle(e,void 0,"active",!1)}},{key:"_setDatasetHoverStyle",value:function(){var e=this._cachedMeta.dataset;e&&this._setStyle(e,void 0,"active",!0)}},{key:"_resyncElements",value:function(e){var t,n=this,r=n._data,i=n._cachedMeta.data,a=Object(u.a)(n._syncList);try{for(a.s();!(t=a.n()).done;){var o=Object(l.a)(t.value,3),s=o[0],c=o[1],f=o[2];n[s](c,f)}}catch(v){a.e(v)}finally{a.f()}n._syncList=[];var d=i.length,h=r.length,p=Math.min(h,d);p&&n.parse(0,p),h>d?n._insertElements(d,h-d,e):h2&&void 0!==arguments[2])||arguments[2],i=this,a=i._cachedMeta,o=a.data,s=e+t,l=function(e){for(e.length+=t,n=e.length-1;n>=s;n--)e[n]=e[n-t]};for(l(o),n=e;nMath.abs(s)&&(l=s,c=o),t[n.axis]=c,t._custom={barStart:l,barEnd:c,start:i,end:a,min:o,max:s}}(e,t,n,r):t[n.axis]=n.parse(e,r),t}function L(e,t,n,r){var i,a,o,s,l=e.iScale,c=e.vScale,u=l.getLabels(),f=l===c,d=[];for(i=n,a=n+r;ie.x,n="left",r="right"):(t=e.base=n?1:-1)}(n,a,u)*c,v===u&&(y-=n/2),t=y+n),y===a.getPixelForValue(u)){var O=Object(p.Mb)(n)*a.getLineWidthForValue(u)/2;y+=O,n-=O}return{size:n,base:y,head:t,center:t+n/2}}},{key:"_calculateBarIndexPixels",value:function(e,t){var n,r,i=this,a=t.scale,o=i.options,s=o.skipNull,l=Object(p.Pb)(o.maxBarThickness,1/0);if(t.grouped){var c=s?i._getStackCount(e):t.stackCount,u="flex"===o.barThickness?function(e,t,n,r){var i=t.pixels,a=i[e],o=e>0?i[e-1]:null,s=e=0;--i)r=Math.max(r,t[i].size()/2,n[i]._custom);return r>0&&r}},{key:"getLabelAndValue",value:function(e){var t=this._cachedMeta,n=t.xScale,r=t.yScale,i=this.getParsed(e),a=n.getLabelForValue(i.x),o=r.getLabelForValue(i.y),s=i._custom;return{label:t.label,value:"("+a+", "+o+(s?", "+s:"")+")"}}},{key:"update",value:function(e){var t=this._cachedMeta.data;this.updateElements(t,0,t.length,e)}},{key:"updateElements",value:function(e,t,n,r){for(var i=this,a="reset"===r,o=i._cachedMeta,s=o.iScale,l=o.vScale,c=i.resolveDataElementOptions(t,r),u=i.getSharedOptions(c),f=i.includeOptions(r,u),d=s.axis,h=l.axis,p=t;p0&&!isNaN(e)?p.u*(Math.abs(e)/t):0}},{key:"getLabelAndValue",value:function(e){var t=this._cachedMeta,n=this.chart,r=n.data.labels||[],i=Object(p.Hb)(t._parsed[e],n.options.locale);return{label:r[e]||"",value:i}}},{key:"getMaxBorderWidth",value:function(e){var t,n,r,i,a,o=0,s=this.chart;if(!e)for(t=0,n=s.data.datasets.length;t0&&i.getParsed(t-1),O=t;O0&&x[h]-y[h]>g,w.parsed=x,d&&(w.options=f||i.resolveDataElementOptions(O,k.active?"active":r)),b||i.updateElement(k,O,w,r),y=x}i.updateSharedOptions(f,r,u)}},{key:"getMaxOverflow",value:function(){var e=this,t=e._cachedMeta,n=t.dataset,r=n.options&&n.options.borderWidth||0,i=t.data||[];if(!i.length)return r;var a=i[0].size(e.resolveDataElementOptions(0)),o=i[i.length-1].size(e.resolveDataElementOptions(i.length-1));return Math.max(r,a,o)/2}},{key:"draw",value:function(){var e=this._cachedMeta;e.dataset.updateControlPoints(this.chart.chartArea,e.iScale.axis),Object(i.a)(Object(a.a)(n.prototype),"draw",this).call(this)}}]),n}(D);W.id="line",W.defaults={datasetElementType:"line",dataElementType:"point",showLine:!0,spanGaps:!1},W.overrides={scales:{_index_:{type:"category"},_value_:{type:"linear"}}};var H=function(e){Object(o.a)(n,e);var t=Object(s.a)(n);function n(e,r){var i;return Object(d.a)(this,n),(i=t.call(this,e,r)).innerRadius=void 0,i.outerRadius=void 0,i}return Object(h.a)(n,[{key:"getLabelAndValue",value:function(e){var t=this._cachedMeta,n=this.chart,r=n.data.labels||[],i=Object(p.Hb)(t._parsed[e].r,n.options.locale);return{label:r[e]||"",value:i}}},{key:"update",value:function(e){var t=this._cachedMeta.data;this._updateRadius(),this.updateElements(t,0,t.length,e)}},{key:"_updateRadius",value:function(){var e=this,t=e.chart,n=t.chartArea,r=t.options,i=Math.min(n.right-n.left,n.bottom-n.top),a=Math.max(i/2,0),o=(a-Math.max(r.cutoutPercentage?a/100*r.cutoutPercentage:1,0))/t.getVisibleDatasetCount();e.outerRadius=a-o*e.index,e.innerRadius=e.outerRadius-o}},{key:"updateElements",value:function(e,t,n,r){var i,a=this,o="reset"===r,s=a.chart,l=a.getDataset(),c=s.options.animation,u=a._cachedMeta.rScale,f=u.xCenter,d=u.yCenter,h=u.getIndexAngle(0)-.5*p.q,v=h,m=360/a.countVisibleElements();for(i=0;i0){var s=o[0].datasetIndex,l=e.getDatasetMeta(s).data;o=[];for(var c=0;c1){var o=Math.max(Math.abs(n[0].value),Math.abs(n[n.length-1].value));(o<1e-4||o>1e15)&&(r="scientific"),a=function(e,t){var n=t.length>3?t[2].value-t[1].value:t[1].value-t[0].value;Math.abs(n)>=1&&e!==Math.floor(e)&&(n=e-Math.floor(e));return n}(e,n)}var s=Object(p.k)(Math.abs(a)),l=Math.max(Math.min(-1*Math.floor(s),20),0),c={notation:r,minimumFractionDigits:l,maximumFractionDigits:l};return Object.assign(c,this.options.ticks.format),Object(p.Hb)(e,i,c)},logarithmic:function(e,t,n){if(0===e)return"0";var r=e/Math.pow(10,Math.floor(Object(p.k)(e)));return 1===r||2===r||5===r?Ne.numeric.call(this,e,t,n):""}};var ze={formatters:Ne};function Ie(e,t){var n=e.options.ticks,r=n.maxTicksLimit||function(e){var t=e.options.offset,n=e._tickSize(),r=e._length/n+(t?0:1),i=e._maxLength/n;return Math.floor(Math.min(r,i))}(e),i=n.major.enabled?function(e){var t,n,r=[];for(t=0,n=e.length;tr)return function(e,t,n,r){var i,a=0,o=n[0];for(r=Math.ceil(r),i=0;ii)return l}return Math.max(i,1)}(i,t,r);if(a>0){var u,f,d=a>1?Math.round((s-o)/(a-1)):null;for(Fe(t,l,c,Object(p.Db)(d)?0:o-d,o),u=0,f=a-1;us+l)))return c}function We(e){return e.drawTicks?e.tickLength:0}function He(e,t){if(!e.display)return 0;var n=Object(p.y)(e.font,t),r=Object(p.b)(e.padding);return(Object(p.vb)(e.text)?e.text.length:1)*n.lineHeight+r.height}function Ve(e,t,n){var r=Object(p.z)(e);return(n&&"right"!==t||!n&&"right"===t)&&(r=function(e){return"left"===e?"right":"right"===e?"left":e}(r)),r}var Ue=function(e){Object(o.a)(n,e);var t=Object(s.a)(n);function n(e){var r;return Object(d.a)(this,n),(r=t.call(this)).id=e.id,r.type=e.type,r.options=void 0,r.ctx=e.ctx,r.chart=e.chart,r.top=void 0,r.bottom=void 0,r.left=void 0,r.right=void 0,r.width=void 0,r.height=void 0,r._margins={left:0,right:0,top:0,bottom:0},r.maxWidth=void 0,r.maxHeight=void 0,r.paddingTop=void 0,r.paddingBottom=void 0,r.paddingLeft=void 0,r.paddingRight=void 0,r.axis=void 0,r.labelRotation=void 0,r.min=void 0,r.max=void 0,r._range=void 0,r.ticks=[],r._gridLineItems=null,r._labelItems=null,r._labelSizes=null,r._length=0,r._maxLength=0,r._longestTextCache={},r._startPixel=void 0,r._endPixel=void 0,r._reversePixels=!1,r._userMax=void 0,r._userMin=void 0,r._suggestedMax=void 0,r._suggestedMin=void 0,r._ticksLength=0,r._borderValue=0,r._cache={},r._dataLimitsCached=!1,r.$context=void 0,r}return Object(h.a)(n,[{key:"init",value:function(e){var t=this;t.options=e.setContext(t.getContext()),t.axis=e.axis,t._userMin=t.parse(e.min),t._userMax=t.parse(e.max),t._suggestedMin=t.parse(e.suggestedMin),t._suggestedMax=t.parse(e.suggestedMax)}},{key:"parse",value:function(e,t){return e}},{key:"getUserBounds",value:function(){var e=this._userMin,t=this._userMax,n=this._suggestedMin,r=this._suggestedMax;return e=Object(p.m)(e,Number.POSITIVE_INFINITY),t=Object(p.m)(t,Number.NEGATIVE_INFINITY),n=Object(p.m)(n,Number.POSITIVE_INFINITY),r=Object(p.m)(r,Number.NEGATIVE_INFINITY),{min:Object(p.m)(e,n),max:Object(p.m)(t,r),minDefined:Object(p.Ab)(e),maxDefined:Object(p.Ab)(t)}}},{key:"getMinMax",value:function(e){var t,n=this,r=n.getUserBounds(),i=r.min,a=r.max,o=r.minDefined,s=r.maxDefined;if(o&&s)return{min:i,max:a};for(var l=n.getMatchingVisibleMetas(),c=0,u=l.length;c=l||o<=1||!r.isHorizontal())r.labelRotation=s;else{var u=r._getLabelSizes(),f=u.widest.width,d=u.highest.height,h=Object(p.Kb)(r.chart.width-f,0,r.maxWidth);f+6>(e=i.offset?r.maxWidth/o:h/(o-1))&&(e=h/(o-(i.offset?.5:1)),t=r.maxHeight-We(i.grid)-a.padding-He(i.title,r.chart.options.font),n=Math.sqrt(f*f+d*d),c=Object(p.p)(Math.min(Math.asin(Object(p.Kb)((u.highest.height+6)/e,-1,1)),Math.asin(Object(p.Kb)(t/n,-1,1))-Math.asin(Object(p.Kb)(d/n,-1,1)))),c=Math.max(s,Math.min(l,c))),r.labelRotation=c}}},{key:"afterCalculateLabelRotation",value:function(){Object(p.n)(this.options.afterCalculateLabelRotation,[this])}},{key:"beforeFit",value:function(){Object(p.n)(this.options.beforeFit,[this])}},{key:"fit",value:function(){var e=this,t={width:0,height:0},n=e.chart,r=e.options,i=r.ticks,a=r.title,o=r.grid,s=e._isVisible(),l=e.isHorizontal();if(s){var c=He(a,n.options.font);if(l?(t.width=e.maxWidth,t.height=We(o)+c):(t.height=e.maxHeight,t.width=We(o)+c),i.display&&e.ticks.length){var u=e._getLabelSizes(),f=u.first,d=u.last,h=u.widest,v=u.highest,m=2*i.padding,g=Object(p.Nb)(e.labelRotation),b=Math.cos(g),y=Math.sin(g);if(l){var O=i.mirror?0:y*h.width+b*v.height;t.height=Math.min(e.maxHeight,t.height+O+m)}else{var k=i.mirror?0:b*h.width+y*v.height;t.width=Math.min(e.maxWidth,t.width+k+m)}e._calculatePadding(f,d,y,b)}}e._handleMargins(),l?(e.width=e._length=n.width-e._margins.left-e._margins.right,e.height=t.height):(e.width=t.width,e.height=e._length=n.height-e._margins.top-e._margins.bottom)}},{key:"_calculatePadding",value:function(e,t,n,r){var i=this,a=i.options,o=a.ticks,s=o.align,l=o.padding,c=a.position,u=0!==i.labelRotation,f="top"!==c&&"x"===i.axis;if(i.isHorizontal()){var d=i.getPixelForTick(0)-i.left,h=i.right-i.getPixelForTick(i.ticks.length-1),p=0,v=0;u?f?(p=r*e.width,v=n*t.height):(p=n*e.height,v=r*t.width):"start"===s?v=t.width:"end"===s?p=e.width:(p=e.width/2,v=t.width/2),i.paddingLeft=Math.max((p-d+l)*i.width/(i.width-d),0),i.paddingRight=Math.max((v-h+l)*i.width/(i.width-h),0)}else{var m=t.height/2,g=e.height/2;"start"===s?(m=0,g=e.height):"end"===s&&(m=t.height,g=0),i.paddingTop=m+l,i.paddingBottom=g+l}}},{key:"_handleMargins",value:function(){var e=this;e._margins&&(e._margins.left=Math.max(e.paddingLeft,e._margins.left),e._margins.top=Math.max(e.paddingTop,e._margins.top),e._margins.right=Math.max(e.paddingRight,e._margins.right),e._margins.bottom=Math.max(e.paddingBottom,e._margins.bottom))}},{key:"afterFit",value:function(){Object(p.n)(this.options.afterFit,[this])}},{key:"isHorizontal",value:function(){var e=this.options,t=e.axis,n=e.position;return"top"===n||"bottom"===n||"x"===t}},{key:"isFullSize",value:function(){return this.options.fullSize}},{key:"_convertTicksToLabels",value:function(e){var t,n,r=this;for(r.beforeTickToLabelConversion(),r.generateTickLabels(e),t=0,n=e.length;tt){for(n=0;nt.length-1?null:this.getPixelForValue(t[e].value)}},{key:"getPixelForDecimal",value:function(e){var t=this;t._reversePixels&&(e=1-e);var n=t._startPixel+e*t._length;return Object(p.s)(t._alignToPixels?Object(p.t)(t.chart,n,0):n)}},{key:"getDecimalForPixel",value:function(e){var t=(e-this._startPixel)/this._length;return this._reversePixels?1-t:t}},{key:"getBasePixel",value:function(){return this.getPixelForValue(this.getBaseValue())}},{key:"getBaseValue",value:function(){var e=this.min,t=this.max;return e<0&&t<0?t:e>0&&t>0?e:0}},{key:"getContext",value:function(e){var t,n,r=this,i=r.ticks||[];if(e>=0&&es*i?s/r:l/i:l*i0}},{key:"_computeGridLineItems",value:function(e){var t,n,r,i,a,o,s,l,c,u,f,d,h=this,v=h.axis,m=h.chart,g=h.options,b=g.grid,y=g.position,O=b.offset,k=h.isHorizontal(),x=h.ticks.length+(O?1:0),w=We(b),j=[],S=b.setContext(h.getContext()),C=S.drawBorder?S.borderWidth:0,M=C/2,E=function(e){return Object(p.t)(m,e,C)};if("top"===y)t=E(h.bottom),o=h.bottom-w,l=t-M,u=E(e.top)+M,d=e.bottom;else if("bottom"===y)t=E(h.top),u=e.top,d=E(e.bottom)-M,o=t+M,l=h.top+w;else if("left"===y)t=E(h.right),a=h.right-w,s=t-M,c=E(e.left)+M,f=e.right;else if("right"===y)t=E(h.left),c=e.left,f=E(e.right)-M,a=t+M,s=h.left+w;else if("x"===v){if("center"===y)t=E((e.top+e.bottom)/2+.5);else if(Object(p.Cb)(y)){var T=Object.keys(y)[0],P=y[T];t=E(h.chart.scales[T].getPixelForValue(P))}u=e.top,d=e.bottom,l=(o=t+M)+w}else if("y"===v){if("center"===y)t=E((e.left+e.right)/2);else if(Object(p.Cb)(y)){var _=Object.keys(y)[0],D=y[_];t=E(h.chart.scales[_].getPixelForValue(D))}s=(a=t-M)-w,c=e.left,f=e.right}var A=Object(p.Pb)(g.ticks.maxTicksLimit,x),R=Math.max(1,Math.ceil(x/A));for(n=0;n=0?n.setContext(t.getContext(r)).lineWidth:0}},{key:"drawGrid",value:function(e){var t,n,r=this,i=r.options.grid,a=r.ctx,o=r._gridLineItems||(r._gridLineItems=r._computeGridLineItems(e)),s=function(e,t,n){n.width&&n.color&&(a.save(),a.lineWidth=n.width,a.strokeStyle=n.color,a.setLineDash(n.borderDash||[]),a.lineDashOffset=n.borderDashOffset,a.beginPath(),a.moveTo(e.x,e.y),a.lineTo(t.x,t.y),a.stroke(),a.restore())};if(i.display)for(t=0,n=o.length;t3&&void 0!==arguments[3]?arguments[3]:[""],i={$shared:!0},a=st(this._resolverCache,e,r),o=a.resolver,s=a.subPrefixes,l=o;if(lt(o,t)){i.$shared=!1,n=Object(p.G)(n)?n():n;var c=this.createResolver(e,n,s);l=Object(p.H)(o,n,c)}var f,d=Object(u.a)(t);try{for(d.s();!(f=d.n()).done;){var h=f.value;i[h]=l[h]}}catch(v){d.e(v)}finally{d.f()}return i}},{key:"createResolver",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[""],r=arguments.length>3?arguments[3]:void 0,i=st(this._resolverCache,e,n),a=i.resolver;return Object(p.Cb)(t)?Object(p.H)(a,t,void 0,r):a}},{key:"platform",get:function(){return this._config.platform}},{key:"type",get:function(){return this._config.type},set:function(e){this._config.type=e}},{key:"data",get:function(){return this._config.data},set:function(e){this._config.data=tt(e)}},{key:"options",get:function(){return this._config.options},set:function(e){this._config.options=e}},{key:"plugins",get:function(){return this._config.plugins}}]),e}();function st(e,t,n){var r=e.get(t);r||(r=new Map,e.set(t,r));var i=n.join(),a=r.get(i);a||(a={resolver:Object(p.I)(t,n),subPrefixes:n.filter((function(e){return!e.toLowerCase().includes("hover")}))},r.set(i,a));return a}function lt(e,t){var n,r=Object(p.J)(e),i=r.isScriptable,a=r.isIndexable,o=Object(u.a)(t);try{for(o.s();!(n=o.n()).done;){var s=n.value;if(i(s)&&Object(p.G)(e[s])||a(s)&&Object(p.vb)(e[s]))return!0}}catch(l){o.e(l)}finally{o.f()}return!1}var ct=["top","bottom","left","right","chartArea"];function ut(e,t){return"top"===e||"bottom"===e||-1===ct.indexOf(e)&&"x"===t}function ft(e,t){return function(n,r){return n[e]===r[e]?n[t]-r[t]:n[e]-r[e]}}function dt(e){var t=e.chart,n=t.options.animation;t.notifyPlugins("afterRender"),Object(p.n)(n&&n.onComplete,[e],t)}function ht(e){var t=e.chart,n=t.options.animation;Object(p.n)(n&&n.onProgress,[e],t)}function pt(e){return Object(p.j)()&&"string"===typeof e?e=document.getElementById(e):e&&e.length&&(e=e[0]),e&&e.canvas&&(e=e.canvas),e}var vt={},mt=function(e){var t=pt(e);return Object.values(vt).filter((function(e){return e.canvas===t})).pop()},gt=function(){function e(t,n){var r=this;Object(d.a)(this,e);var i=this,a=this.config=new ot(n),o=pt(t),s=mt(o);if(s)throw new Error("Canvas is already in use. Chart with ID '"+s.id+"' must be destroyed before the canvas can be reused.");var l=a.createResolver(a.chartOptionScopes(),i.getContext());this.platform=new(a.platform||function(e){return!Object(p.j)()||"undefined"!==typeof OffscreenCanvas&&e instanceof OffscreenCanvas?ke:Re}(o));var c=i.platform.acquireContext(o,l.aspectRatio),u=c&&c.canvas,f=u&&u.height,h=u&&u.width;this.id=Object(p.L)(),this.ctx=c,this.canvas=u,this.width=h,this.height=f,this._options=l,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new Xe,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=Object(p.M)((function(){return r.update("resize")}),l.resizeDelay||0),vt[i.id]=i,c&&u?(v.listen(i,"complete",dt),v.listen(i,"progress",ht),i._initialize(),i.attached&&i.update()):console.error("Failed to create chart: can't acquire context from the given item")}return Object(h.a)(e,[{key:"_initialize",value:function(){var e=this;return e.notifyPlugins("beforeInit"),e.options.responsive?e.resize():Object(p.V)(e,e.options.devicePixelRatio),e.bindEvents(),e.notifyPlugins("afterInit"),e}},{key:"clear",value:function(){return Object(p.W)(this.canvas,this.ctx),this}},{key:"stop",value:function(){return v.stop(this),this}},{key:"resize",value:function(e,t){v.running(this)?this._resizeBeforeDraw={width:e,height:t}:this._resize(e,t)}},{key:"_resize",value:function(e,t){var n=this,r=n.options,i=n.canvas,a=r.maintainAspectRatio&&n.aspectRatio,o=n.platform.getMaximumSize(i,e,t,a),s=r.devicePixelRatio||n.platform.getDevicePixelRatio();n.width=o.width,n.height=o.height,n._aspectRatio=n.aspectRatio,Object(p.V)(n,s,!0)&&(n.notifyPlugins("resize",{size:o}),Object(p.n)(r.onResize,[n,o],n),n.attached&&n._doResize()&&n.render())}},{key:"ensureScalesHaveIDs",value:function(){var e=this.options.scales||{};Object(p.c)(e,(function(e,t){e.id=t}))}},{key:"buildOrUpdateScales",value:function(){var e=this,t=e.options,n=t.scales,r=e.scales,i=Object.keys(r).reduce((function(e,t){return e[t]=!1,e}),{}),a=[];n&&(a=a.concat(Object.keys(n).map((function(e){var t=n[e],r=Je(e,t),i="r"===r,a="x"===r;return{options:t,dposition:i?"chartArea":a?"bottom":"left",dtype:i?"radialLinear":a?"category":"linear"}})))),Object(p.c)(a,(function(n){var a=n.options,o=a.id,s=Je(o,a),l=Object(p.Pb)(a.type,n.dtype);void 0!==a.position&&ut(a.position,s)===ut(n.dposition)||(a.position=n.dposition),i[o]=!0;var c=null;o in r&&r[o].type===l?c=r[o]:(c=new(Ye.getScale(l))({id:o,type:l,ctx:e.ctx,chart:e}),r[c.id]=c);c.init(a,t)})),Object(p.c)(i,(function(e,t){e||delete r[t]})),Object(p.c)(r,(function(t){be(e,t,t.options),me(e,t)}))}},{key:"_updateMetasets",value:function(){var e=this,t=e._metasets,n=e.data.datasets.length,r=t.length;if(t.sort((function(e,t){return e.index-t.index})),r>n){for(var i=n;in.length&&delete e._stacks,t.forEach((function(t,r){0===n.filter((function(e){return e===t._dataset})).length&&e._destroyDatasetMeta(r)}))}},{key:"buildOrUpdateControllers",value:function(){var e,t,n=this,r=[],i=n.data.datasets;for(n._removeUnreferencedMetasets(),e=0,t=i.length;e=0;--n)e._drawDataset(t[n]);e.notifyPlugins("afterDatasetsDraw")}}},{key:"_drawDataset",value:function(e){var t=this,n=t.ctx,r=e._clip,i=!r.disabled,a=t.chartArea,o={meta:e,index:e.index,cancelable:!0};!1!==t.notifyPlugins("beforeDatasetDraw",o)&&(i&&Object(p.v)(n,{left:!1===r.left?0:a.left-r.left,right:!1===r.right?t.width:a.right+r.right,top:!1===r.top?0:a.top-r.top,bottom:!1===r.bottom?t.height:a.bottom+r.bottom}),e.controller.draw(),i&&Object(p.x)(n),o.cancelable=!1,t.notifyPlugins("afterDatasetDraw",o))}},{key:"getElementsAtEventForMode",value:function(e,t,n,r){var i=re.modes[t];return"function"===typeof i?i(this,e,n,r):[]}},{key:"getDatasetMeta",value:function(e){var t=this.data.datasets[e],n=this._metasets,r=n.filter((function(e){return e&&e._dataset===t})).pop();return r||(r={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:t&&t.order||0,index:e,_dataset:t,_parsed:[],_sorted:!1},n.push(r)),r}},{key:"getContext",value:function(){return this.$context||(this.$context={chart:this,type:"chart"})}},{key:"getVisibleDatasetCount",value:function(){return this.getSortedVisibleDatasetMetas().length}},{key:"isDatasetVisible",value:function(e){var t=this.data.datasets[e];if(!t)return!1;var n=this.getDatasetMeta(e);return"boolean"===typeof n.hidden?!n.hidden:!t.hidden}},{key:"setDatasetVisibility",value:function(e,t){this.getDatasetMeta(e).hidden=!t}},{key:"toggleDataVisibility",value:function(e){this._hiddenIndices[e]=!this._hiddenIndices[e]}},{key:"getDataVisibility",value:function(e){return!this._hiddenIndices[e]}},{key:"_updateVisibility",value:function(e,t,n){var r=this,i=n?"show":"hide",a=r.getDatasetMeta(e),o=a.controller._resolveAnimations(void 0,i);Object(p.Bb)(t)?(a.data[t].hidden=!n,r.update()):(r.setDatasetVisibility(e,n),o.update(a,{visible:n}),r.update((function(t){return t.datasetIndex===e?i:void 0})))}},{key:"hide",value:function(e,t){this._updateVisibility(e,t,!1)}},{key:"show",value:function(e,t){this._updateVisibility(e,t,!0)}},{key:"_destroyDatasetMeta",value:function(e){var t=this,n=t._metasets&&t._metasets[e];n&&n.controller&&(n.controller._destroy(),delete t._metasets[e])}},{key:"destroy",value:function(){var e,t,n=this,r=n.canvas,i=n.ctx;for(n.stop(),v.remove(n),e=0,t=n.data.datasets.length;ei?(c=i/l,e.arc(a,o,l,n+c,r-c,!0)):e.arc(a,o,i,n+p.i,r-p.i),e.closePath(),e.clip()}function kt(e,t,n,r){var i,a=(i=e.options.borderRadius,Object(p.ab)(i,["outerStart","outerEnd","innerStart","innerEnd"])),o=(n-t)/2,s=Math.min(o,r*t/2),l=function(e){var t=(n-Math.min(o,e))*r/2;return Object(p.Kb)(e,0,Math.min(o,t))};return{outerStart:l(a.outerStart),outerEnd:l(a.outerEnd),innerStart:Object(p.Kb)(a.innerStart,0,s),innerEnd:Object(p.Kb)(a.innerEnd,0,s)}}function xt(e,t,n,r){return{x:n+e*Math.cos(t),y:r+e*Math.sin(t)}}function wt(e,t,n,r,i){var a=t.x,o=t.y,s=t.startAngle,l=t.pixelMargin,c=t.innerRadius,u=Math.max(t.outerRadius+r+n-l,0),f=c>0?c+r+n+l:0,d=0,h=i-s;if(r){var v=((c>0?c-r:0)+(u>0?u-r:0))/2;d=(h-(0!==v?h*v/(v+r):h))/2}var m=(h-Math.max(.001,h*u-n/p.q)/u)/2,g=s+m+d,b=i-m-d,y=kt(t,f,u,b-g),O=y.outerStart,k=y.outerEnd,x=y.innerStart,w=y.innerEnd,j=u-O,S=u-k,C=g+O/j,M=b-k/S,E=f+x,T=f+w,P=g+x/E,_=b-w/T;if(e.beginPath(),e.arc(a,o,u,C,M),k>0){var D=xt(S,M,a,o);e.arc(D.x,D.y,k,M,b+p.i)}var A=xt(T,b,a,o);if(e.lineTo(A.x,A.y),w>0){var R=xt(T,_,a,o);e.arc(R.x,R.y,w,b+p.i,_+Math.PI)}if(e.arc(a,o,f,b-w/f,g+x/f,!0),x>0){var L=xt(E,P,a,o);e.arc(L.x,L.y,x,P+Math.PI,g-p.i)}var N=xt(j,g,a,o);if(e.lineTo(N.x,N.y),O>0){var z=xt(j,C,a,o);e.arc(z.x,z.y,O,g-p.i,C)}e.closePath()}function jt(e,t,n,r,i){var a=t.options,o="inner"===a.borderAlign;a.borderWidth&&(o?(e.lineWidth=2*a.borderWidth,e.lineJoin="round"):(e.lineWidth=a.borderWidth,e.lineJoin="bevel"),t.fullCircles&&function(e,t,n){var r,i=t.x,a=t.y,o=t.startAngle,s=t.pixelMargin,l=t.fullCircles,c=Math.max(t.outerRadius-s,0),u=t.innerRadius+s;for(n&&Ot(e,t,o+p.u),e.beginPath(),e.arc(i,a,u,o+p.u,o,!0),r=0;r=p.u||Object(p.Ib)(a,l,c))&&(o>=u+h&&o<=f+h)}},{key:"getCenterPoint",value:function(e){var t=this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius","circumference"],e),n=t.x,r=t.y,i=t.startAngle,a=t.endAngle,o=t.innerRadius,s=t.outerRadius,l=this.options,c=l.offset,u=(i+a)/2,f=(o+s+l.spacing+c)/2;return{x:n+Math.cos(u)*f,y:r+Math.sin(u)*f}}},{key:"tooltipPosition",value:function(e){return this.getCenterPoint(e)}},{key:"draw",value:function(e){var t=this,n=t.options,r=t.circumference,i=(n.offset||0)/2,a=(n.spacing||0)/2;if(t.pixelMargin="inner"===n.borderAlign?.33:0,t.fullCircles=r>p.u?Math.floor(r/p.u):0,!(0===r||t.innerRadius<0||t.outerRadius<0)){e.save();var o=0;if(i){o=i/2;var s=(t.startAngle+t.endAngle)/2;e.translate(Math.cos(s)*o,Math.sin(s)*o),t.circumference>=p.q&&(o=i)}e.fillStyle=n.backgroundColor,e.strokeStyle=n.borderColor;var l=function(e,t,n,r){var i=t.fullCircles,a=t.startAngle,o=t.circumference,s=t.endAngle;if(i){wt(e,t,n,r,a+p.u);for(var l=0;l2&&void 0!==arguments[2]?arguments[2]:t;e.lineCap=Object(p.Pb)(n.borderCapStyle,t.borderCapStyle),e.setLineDash(Object(p.Pb)(n.borderDash,t.borderDash)),e.lineDashOffset=Object(p.Pb)(n.borderDashOffset,t.borderDashOffset),e.lineJoin=Object(p.Pb)(n.borderJoinStyle,t.borderJoinStyle),e.lineWidth=Object(p.Pb)(n.borderWidth,t.borderWidth),e.strokeStyle=Object(p.Pb)(n.borderColor,t.borderColor)}function Mt(e,t,n){e.lineTo(n.x,n.y)}function Et(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=e.length,i=n.start,a=void 0===i?0:i,o=n.end,s=void 0===o?r-1:o,l=t.start,c=t.end,u=Math.max(a,l),f=Math.min(s,c),d=ac&&s>c;return{count:r,start:u,loop:t.loop,ilen:fl&&(l=j),y=(O*y+w)/++O):(x(),e.lineTo(w,j),o=S,O=0,s=l=j),c=j}x()}function _t(e){var t=e.options,n=t.borderDash&&t.borderDash.length;return!e._decimated&&!e._loop&&!t.tension&&"monotone"!==t.cubicInterpolationMode&&!t.stepped&&!n?Pt:Tt}St.id="arc",St.defaults={borderAlign:"center",borderColor:"#fff",borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0},St.defaultRoutes={backgroundColor:"backgroundColor"};var Dt="function"===typeof Path2D;function At(e,t,n,r){Dt&&1===t.segments.length?function(e,t,n,r){var i=t._path;i||(i=t._path=new Path2D,t.path(i,n,r)&&i.closePath()),Ct(e,t.options),e.stroke(i)}(e,t,n,r):function(e,t,n,r){var i,a=t.segments,o=t.options,s=_t(t),l=Object(u.a)(a);try{for(l.s();!(i=l.n()).done;){var c=i.value;Ct(e,o,c.style),e.beginPath(),s(e,t,c,{start:n,end:n+r-1})&&e.closePath(),e.stroke()}}catch(f){l.e(f)}finally{l.f()}}(e,t,n,r)}var Rt=function(e){Object(o.a)(n,e);var t=Object(s.a)(n);function n(e){var i;return Object(d.a)(this,n),(i=t.call(this)).animated=!0,i.options=void 0,i._loop=void 0,i._fullLoop=void 0,i._path=void 0,i._points=void 0,i._segments=void 0,i._decimated=!1,i._pointsUpdated=!1,i._datasetIndex=void 0,e&&Object.assign(Object(r.a)(i),e),i}return Object(h.a)(n,[{key:"updateControlPoints",value:function(e,t){var n=this,r=n.options;if((r.tension||"monotone"===r.cubicInterpolationMode)&&!r.stepped&&!n._pointsUpdated){var i=r.spanGaps?n._loop:n._fullLoop;Object(p.bb)(n._points,r,e,i,t),n._pointsUpdated=!0}}},{key:"first",value:function(){var e=this.segments,t=this.points;return e.length&&t[e[0].start]}},{key:"last",value:function(){var e=this.segments,t=this.points,n=e.length;return n&&t[e[n-1].end]}},{key:"interpolate",value:function(e,t){var n=this,r=n.options,i=e[t],a=n.points,o=Object(p.db)(n,{property:t,start:i,end:i});if(o.length){var s,l,c=[],u=function(e){return e.stepped?p.eb:e.tension||"monotone"===e.cubicInterpolationMode?p.fb:p.gb}(r);for(s=0,l=o.length;s=o.left&&t<=o.right)&&(a||n>=o.top&&n<=o.bottom)}function Bt(e,t){e.rect(t.x,t.y,t.w,t.h)}function Qt(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=e.x!==n.x?-t:0,i=e.y!==n.y?-t:0,a=(e.x+e.w!==n.x+n.w?t:0)-r,o=(e.y+e.h!==n.y+n.h?t:0)-i;return{x:e.x+r,y:e.y+i,w:e.w+a,h:e.h+o,radius:e.radius}}Nt.id="point",Nt.defaults={borderWidth:1,hitRadius:1,hoverBorderWidth:1,hoverRadius:4,pointStyle:"circle",radius:3,rotation:0},Nt.defaultRoutes={backgroundColor:"backgroundColor",borderColor:"borderColor"};var Wt=function(e){Object(o.a)(n,e);var t=Object(s.a)(n);function n(e){var i;return Object(d.a)(this,n),(i=t.call(this)).options=void 0,i.horizontal=void 0,i.base=void 0,i.width=void 0,i.height=void 0,e&&Object.assign(Object(r.a)(i),e),i}return Object(h.a)(n,[{key:"draw",value:function(e){var t,n=this.options,r=Ft(this),i=r.inner,a=r.outer,o=(t=a.radius).topLeft||t.topRight||t.bottomLeft||t.bottomRight?p.kb:Bt,s=.33;e.save(),a.w===i.w&&a.h===i.h||(e.beginPath(),o(e,Qt(a,s,i)),e.clip(),o(e,Qt(i,-.33,a)),e.fillStyle=n.borderColor,e.fill("evenodd")),e.beginPath(),o(e,Qt(i,s,a)),e.fillStyle=n.backgroundColor,e.fill(),e.restore()}},{key:"inRange",value:function(e,t,n){return $t(this,e,t,n)}},{key:"inXRange",value:function(e,t){return $t(this,e,null,t)}},{key:"inYRange",value:function(e,t){return $t(this,null,e,t)}},{key:"getCenterPoint",value:function(e){var t=this.getProps(["x","y","base","horizontal"],e),n=t.x,r=t.y,i=t.base,a=t.horizontal;return{x:a?(n+i)/2:n,y:a?r:(r+i)/2}}},{key:"getRange",value:function(e){return"x"===e?this.width/2:this.height/2}}]),n}(Le);Wt.id="bar",Wt.defaults={borderSkipped:"start",borderWidth:0,borderRadius:0,enableBorderRadius:!0,pointStyle:void 0},Wt.defaultRoutes={backgroundColor:"backgroundColor",borderColor:"borderColor"};new WeakMap;var Ht={average:function(e){if(!e.length)return!1;var t,n,r=0,i=0,a=0;for(t=0,n=e.length;t-1?e.split("\n"):e}function qt(e,t){var n=t.element,r=t.datasetIndex,i=t.index,a=e.getDatasetMeta(r).controller,o=a.getLabelAndValue(i),s=o.label,l=o.value;return{chart:e,label:s,parsed:a.getParsed(i),raw:e.data.datasets[r].data[i],formattedValue:l,dataset:a.getDataset(),dataIndex:i,datasetIndex:r,element:n}}function Yt(e,t){var n=e._chart.ctx,r=e.body,i=e.footer,a=e.title,o=t.boxWidth,s=t.boxHeight,l=Object(p.y)(t.bodyFont),c=Object(p.y)(t.titleFont),u=Object(p.y)(t.footerFont),f=a.length,d=i.length,h=r.length,v=Object(p.b)(t.padding),m=v.height,g=0,b=r.reduce((function(e,t){return e+t.before.length+t.lines.length+t.after.length}),0);(b+=e.beforeBody.length+e.afterBody.length,f&&(m+=f*c.lineHeight+(f-1)*t.titleSpacing+t.titleMarginBottom),b)&&(m+=h*(t.displayColors?Math.max(s,l.lineHeight):l.lineHeight)+(b-h)*l.lineHeight+(b-1)*t.bodySpacing);d&&(m+=t.footerMarginTop+d*u.lineHeight+(d-1)*t.footerSpacing);var y=0,O=function(e){g=Math.max(g,n.measureText(e).width+y)};return n.save(),n.font=c.string,Object(p.c)(e.title,O),n.font=l.string,Object(p.c)(e.beforeBody.concat(e.afterBody),O),y=t.displayColors?o+2:0,Object(p.c)(r,(function(e){Object(p.c)(e.before,O),Object(p.c)(e.lines,O),Object(p.c)(e.after,O)})),y=0,n.font=u.string,Object(p.c)(e.footer,O),n.restore(),{width:g+=v.width,height:m}}function Xt(e,t,n,r){var i=n.x,a=n.width,o=e.width,s=e.chartArea,l=s.left,c=s.right,u="center";return"center"===r?u=i<=(l+c)/2?"left":"right":i<=a/2?u="left":i>=o-a/2&&(u="right"),function(e,t,n,r){var i=r.x,a=r.width,o=n.caretSize+n.caretPadding;return"left"===e&&i+a+o>t.width||"right"===e&&i-a-o<0||void 0}(u,e,t,n)&&(u="center"),u}function Kt(e,t,n){var r=t.yAlign||function(e,t){var n=t.y,r=t.height;return ne.height-r/2?"bottom":"center"}(e,n);return{xAlign:t.xAlign||Xt(e,t,n,r),yAlign:r}}function Gt(e,t,n,r){var i=e.caretSize,a=e.caretPadding,o=e.cornerRadius,s=n.xAlign,l=n.yAlign,c=i+a,u=o+a,f=function(e,t){var n=e.x,r=e.width;return"right"===t?n-=r:"center"===t&&(n-=r/2),n}(t,s),d=function(e,t,n){var r=e.y,i=e.height;return"top"===t?r+=n:r-="bottom"===t?i+n:i/2,r}(t,l,c);return"center"===l?"left"===s?f+=c:"right"===s&&(f-=c):"left"===s?f-=u:"right"===s&&(f+=u),{x:Object(p.Kb)(f,0,r.width-t.width),y:Object(p.Kb)(d,0,r.height-t.height)}}function Zt(e,t,n){var r=Object(p.b)(n.padding);return"center"===t?e.x+e.width/2:"right"===t?e.x+e.width-r.right:e.x+r.left}function Jt(e){return Vt([],Ut(e))}function en(e,t){var n=t&&t.dataset&&t.dataset.tooltip&&t.dataset.tooltip.callbacks;return n?e.override(n):e}var tn=function(e){Object(o.a)(n,e);var t=Object(s.a)(n);function n(e){var r;return Object(d.a)(this,n),(r=t.call(this)).opacity=0,r._active=[],r._chart=e._chart,r._eventPosition=void 0,r._size=void 0,r._cachedAnimations=void 0,r._tooltipItems=[],r.$animations=void 0,r.$context=void 0,r.options=e.options,r.dataPoints=void 0,r.title=void 0,r.beforeBody=void 0,r.body=void 0,r.afterBody=void 0,r.footer=void 0,r.xAlign=void 0,r.yAlign=void 0,r.x=void 0,r.y=void 0,r.height=void 0,r.width=void 0,r.caretX=void 0,r.caretY=void 0,r.labelColors=void 0,r.labelPointStyles=void 0,r.labelTextColors=void 0,r}return Object(h.a)(n,[{key:"initialize",value:function(e){this.options=e,this._cachedAnimations=void 0,this.$context=void 0}},{key:"_resolveAnimations",value:function(){var e=this,t=e._cachedAnimations;if(t)return t;var n=e._chart,r=e.options.setContext(e.getContext()),i=r.enabled&&n.options.animation&&r.animations,a=new O(e._chart,i);return i._cacheable&&(e._cachedAnimations=Object.freeze(a)),a}},{key:"getContext",value:function(){var e,t,n,r=this;return r.$context||(r.$context=(e=r._chart.getContext(),t=r,n=r._tooltipItems,Object.assign(Object.create(e),{tooltip:t,tooltipItems:n,type:"tooltip"})))}},{key:"getTitle",value:function(e,t){var n=this,r=t.callbacks,i=r.beforeTitle.apply(n,[e]),a=r.title.apply(n,[e]),o=r.afterTitle.apply(n,[e]),s=[];return s=Vt(s,Ut(i)),s=Vt(s,Ut(a)),s=Vt(s,Ut(o))}},{key:"getBeforeBody",value:function(e,t){return Jt(t.callbacks.beforeBody.apply(this,[e]))}},{key:"getBody",value:function(e,t){var n=this,r=t.callbacks,i=[];return Object(p.c)(e,(function(e){var t={before:[],lines:[],after:[]},a=en(r,e);Vt(t.before,Ut(a.beforeLabel.call(n,e))),Vt(t.lines,a.label.call(n,e)),Vt(t.after,Ut(a.afterLabel.call(n,e))),i.push(t)})),i}},{key:"getAfterBody",value:function(e,t){return Jt(t.callbacks.afterBody.apply(this,[e]))}},{key:"getFooter",value:function(e,t){var n=this,r=t.callbacks,i=r.beforeFooter.apply(n,[e]),a=r.footer.apply(n,[e]),o=r.afterFooter.apply(n,[e]),s=[];return s=Vt(s,Ut(i)),s=Vt(s,Ut(a)),s=Vt(s,Ut(o))}},{key:"_createItems",value:function(e){var t,n,r=this,i=r._active,a=r._chart.data,o=[],s=[],l=[],c=[];for(t=0,n=i.length;t0&&t.stroke()}},{key:"_updateAnimationTarget",value:function(e){var t=this,n=t._chart,r=t.$animations,i=r&&r.x,a=r&&r.y;if(i||a){var o=Ht[e.position].call(t,t._active,t._eventPosition);if(!o)return;var s=t._size=Yt(t,e),l=Object.assign({},o,t._size),c=Kt(n,e,l),u=Gt(e,l,c,n);i._to===u.x&&a._to===u.y||(t.xAlign=c.xAlign,t.yAlign=c.yAlign,t.width=s.width,t.height=s.height,t.caretX=o.x,t.caretY=o.y,t._resolveAnimations().update(t,u))}}},{key:"draw",value:function(e){var t=this,n=t.options.setContext(t.getContext()),r=t.opacity;if(r){t._updateAnimationTarget(n);var i={width:t.width,height:t.height},a={x:t.x,y:t.y};r=Math.abs(r)<.001?0:r;var o=Object(p.b)(n.padding),s=t.title.length||t.beforeBody.length||t.body.length||t.afterBody.length||t.footer.length;n.enabled&&s&&(e.save(),e.globalAlpha=r,t.drawBackground(a,e,i,n),Object(p.qb)(e,n.textDirection),a.y+=o.top,t.drawTitle(a,e,n),t.drawBody(a,e,n),t.drawFooter(a,e,n),Object(p.sb)(e,n.textDirection),e.restore())}}},{key:"getActiveElements",value:function(){return this._active||[]}},{key:"setActiveElements",value:function(e,t){var n=this,r=n._active,i=e.map((function(e){var t=e.datasetIndex,r=e.index,i=n._chart.getDatasetMeta(t);if(!i)throw new Error("Cannot find a dataset at index "+t);return{datasetIndex:t,element:i.data[r],index:r}})),a=!Object(p.Y)(r,i),o=n._positionChanged(i,t);(a||o)&&(n._active=i,n._eventPosition=t,n.update(!0))}},{key:"handleEvent",value:function(e,t){var n,r=this,i=r.options,a=r._active||[],o=[];"mouseout"!==e.type&&(o=r._chart.getElementsAtEventForMode(e,i.mode,i,t),i.reverse&&o.reverse());var s=r._positionChanged(o,e);return(n=t||!Object(p.Y)(o,a)||s)&&(r._active=o,(i.enabled||i.external)&&(r._eventPosition={x:e.x,y:e.y},r.update(!0,t))),n}},{key:"_positionChanged",value:function(e,t){var n=this.caretX,r=this.caretY,i=this.options,a=Ht[i.position].call(this,e,t);return!1!==a&&(n!==a.x||r!==a.y)}}]),n}(Le);tn.positioners=Ht;p.tb,p.tb,p.tb,p.tb,p.tb,p.tb,p.tb,p.tb,p.tb;function nn(e,t,n){var r=e.indexOf(t);return-1===r?function(e,t,n){return"string"===typeof t?e.push(t)-1:isNaN(t)?null:n}(e,t,n):r!==e.lastIndexOf(t)?n:r}var rn=function(e){Object(o.a)(n,e);var t=Object(s.a)(n);function n(e){var r;return Object(d.a)(this,n),(r=t.call(this,e))._startValue=void 0,r._valueRange=0,r}return Object(h.a)(n,[{key:"parse",value:function(e,t){if(Object(p.Db)(e))return null;var n=this.getLabels();return function(e,t){return null===e?null:Object(p.Kb)(Math.round(e),0,t)}(t=isFinite(t)&&n[t]===e?t:nn(n,e,Object(p.Pb)(t,e)),n.length-1)}},{key:"determineDataLimits",value:function(){var e=this,t=e.getUserBounds(),n=t.minDefined,r=t.maxDefined,i=e.getMinMax(!0),a=i.min,o=i.max;"ticks"===e.options.bounds&&(n||(a=0),r||(o=e.getLabels().length-1)),e.min=a,e.max=o}},{key:"buildTicks",value:function(){var e=this,t=e.min,n=e.max,r=e.options.offset,i=[],a=e.getLabels();a=0===t&&n===a.length-1?a:a.slice(t,n+1),e._valueRange=Math.max(a.length-(r?0:1),1),e._startValue=e.min-(r?.5:0);for(var o=t;o<=n;o++)i.push({value:o});return i}},{key:"getLabelForValue",value:function(e){var t=this.getLabels();return e>=0&&et.length-1?null:this.getPixelForValue(t[e].value)}},{key:"getValueForPixel",value:function(e){var t=this;return Math.round(t._startValue+t.getDecimalForPixel(e)*t._valueRange)}},{key:"getBasePixel",value:function(){return this.bottom}}]),n}(Ue);function an(e,t,n){var r=n.horizontal,i=n.minRotation,a=Object(p.Nb)(i),o=(r?Math.sin(a):Math.cos(a))||.001,s=.75*t*(""+e).length;return Math.min(t/o,s)}rn.id="category",rn.defaults={ticks:{callback:rn.prototype.getLabelForValue}};var on=function(e){Object(o.a)(n,e);var t=Object(s.a)(n);function n(e){var r;return Object(d.a)(this,n),(r=t.call(this,e)).start=void 0,r.end=void 0,r._startValue=void 0,r._endValue=void 0,r._valueRange=0,r}return Object(h.a)(n,[{key:"parse",value:function(e,t){return Object(p.Db)(e)||("number"===typeof e||e instanceof Number)&&!isFinite(+e)?null:+e}},{key:"handleTickRangeOptions",value:function(){var e=this,t=e.options.beginAtZero,n=e.getUserBounds(),r=n.minDefined,i=n.maxDefined,a=e.min,o=e.max,s=function(e){return a=r?a:e},l=function(e){return o=i?o:e};if(t){var c=Object(p.Mb)(a),u=Object(p.Mb)(o);c<0&&u<0?l(0):c>0&&u>0&&s(0)}if(a===o){var f=1;(o>=Number.MAX_SAFE_INTEGER||a<=Number.MIN_SAFE_INTEGER)&&(f=Math.abs(.05*o)),l(o+f),t||s(a-f)}e.min=a,e.max=o}},{key:"getTickLimit",value:function(){var e,t=this,n=t.options.ticks,r=n.maxTicksLimit,i=n.stepSize;return i?e=Math.ceil(t.max/i)-Math.floor(t.min/i)+1:(e=t.computeTickLimit(),r=r||11),r&&(e=Math.min(r,e)),e}},{key:"computeTickLimit",value:function(){return Number.POSITIVE_INFINITY}},{key:"buildTicks",value:function(){var e=this,t=e.options,n=t.ticks,r=e.getTickLimit(),i=function(e,t){var n,r,i,a,o=[],s=e.bounds,l=e.step,c=e.min,u=e.max,f=e.precision,d=e.count,h=e.maxTicks,v=e.maxDigits,m=e.includeBounds,g=l||1,b=h-1,y=t.min,O=t.max,k=!Object(p.Db)(c),x=!Object(p.Db)(u),w=!Object(p.Db)(d),j=(O-y)/(v+1),S=Object(p.O)((O-y)/b/g)*g;if(S<1e-14&&!k&&!x)return[{value:y},{value:O}];(a=Math.ceil(O/S)-Math.floor(y/S))>b&&(S=Object(p.O)(a*S/b/g)*g),Object(p.Db)(f)||(n=Math.pow(10,f),S=Math.ceil(S*n)/n),"ticks"===s?(r=Math.floor(y/S)*S,i=Math.ceil(O/S)*S):(r=y,i=O),k&&x&&l&&Object(p.P)((u-c)/l,S/1e3)?(S=(u-c)/(a=Math.round(Math.min((u-c)/S,h))),r=c,i=u):w?S=((i=x?u:i)-(r=k?c:r))/(a=d-1):(a=(i-r)/S,a=Object(p.Q)(a,Math.round(a),S/1e3)?Math.round(a):Math.ceil(a));var C=Math.max(Object(p.R)(S),Object(p.R)(r));n=Math.pow(10,Object(p.Db)(f)?C:f),r=Math.round(r*n)/n,i=Math.round(i*n)/n;var M=0;for(k&&(m&&r!==c?(o.push({value:c}),r0?n:null;this._zero=!0}},{key:"determineDataLimits",value:function(){var e=this,t=e.getMinMax(!0),n=t.min,r=t.max;e.min=Object(p.Ab)(n)?Math.max(0,n):null,e.max=Object(p.Ab)(r)?Math.max(0,r):null,e.options.beginAtZero&&(e._zero=!0),e.handleTickRangeOptions()}},{key:"handleTickRangeOptions",value:function(){var e=this,t=e.getUserBounds(),n=t.minDefined,r=t.maxDefined,i=e.min,a=e.max,o=function(e){return i=n?i:e},s=function(e){return a=r?a:e},l=function(e,t){return Math.pow(10,Math.floor(Object(p.k)(e))+t)};i===a&&(i<=0?(o(1),s(10)):(o(l(i,-1)),s(l(a,1)))),i<=0&&o(l(a,-1)),a<=0&&s(l(i,1)),e._zero&&e.min!==e._suggestedMin&&i===l(e.min,0)&&o(l(i,-1)),e.min=i,e.max=a}},{key:"buildTicks",value:function(){var e=this,t=e.options,n=function(e,t){var n=Math.floor(Object(p.k)(t.max)),r=Math.ceil(t.max/Math.pow(10,n)),i=[],a=Object(p.m)(e.min,Math.pow(10,Math.floor(Object(p.k)(t.min)))),o=Math.floor(Object(p.k)(a)),s=Math.floor(a/Math.pow(10,o)),l=o<0?Math.pow(10,Math.abs(o)):1;do{i.push({value:a,major:ln(a)}),10===++s&&(s=1,l=++o>=0?1:l),a=Math.round(s*Math.pow(10,o)*l)/l}while(oi?{start:t-n,end:t}:{start:t,end:t+n}}function dn(e){for(var t,n,r,i={l:0,r:e.width,t:0,b:e.height-e.paddingTop},a={},o=[],s=[],l=e.getLabels().length,c=0;ci.r&&(i.r=g.end,a.r=v),b.starti.b&&(i.b=b.end,a.b=v)}e._setReductions(e.drawingArea,i,a),e._pointLabelItems=function(e,t,n){for(var r=[],i=e.getLabels().length,a=e.options,o=un(a),s=e.getDistanceFromCenterForValue(a.ticks.reverse?e.min:e.max),l=0;l270||n<90)&&(e-=t),e}function mn(e,t,n,r){var i=e.ctx;if(n)i.arc(e.xCenter,e.yCenter,t,0,p.u);else{var a=e.getPointPosition(0,t);i.moveTo(a.x,a.y);for(var o=1;o=0&&e=0;i--){var a=r.setContext(e.getPointLabelContext(i)),o=Object(p.y)(a.font),s=e._pointLabelItems[i],l=s.x,c=s.y,u=s.textAlign,f=s.left,d=s.top,h=s.right,v=s.bottom,m=a.backdropColor;if(!Object(p.Db)(m)){var g=Object(p.b)(a.backdropPadding);n.fillStyle=m,n.fillRect(f-g.left,d-g.top,h-f+g.width,v-d+g.height)}Object(p.w)(n,e._pointLabels[i],l,c+o.lineHeight/2,o,{color:a.color,textAlign:u,textBaseline:"middle"})}}(r,l),s.display&&r.ticks.forEach((function(e,n){if(0!==n){t=r.getDistanceFromCenterForValue(e.value);var i=s.setContext(r.getContext(n-1));!function(e,t,n,r){var i=e.ctx,a=t.circular,o=t.color,s=t.lineWidth;!a&&!r||!o||!s||n<0||(i.save(),i.strokeStyle=o,i.lineWidth=s,i.setLineDash(t.borderDash),i.lineDashOffset=t.borderDashOffset,i.beginPath(),mn(e,n,a,r),i.closePath(),i.stroke(),i.restore())}(r,i,t,l)}})),o.display){for(i.save(),e=r.getLabels().length-1;e>=0;e--){var c=o.setContext(r.getPointLabelContext(e)),u=c.color,f=c.lineWidth;f&&u&&(i.lineWidth=f,i.strokeStyle=u,i.setLineDash(c.borderDash),i.lineDashOffset=c.borderDashOffset,t=r.getDistanceFromCenterForValue(a.ticks.reverse?r.min:r.max),n=r.getPointPosition(e,t),i.beginPath(),i.moveTo(r.xCenter,r.yCenter),i.lineTo(n.x,n.y),i.stroke())}i.restore()}}},{key:"drawBorder",value:function(){}},{key:"drawLabels",value:function(){var e=this,t=e.ctx,n=e.options,r=n.ticks;if(r.display){var i,a,o=e.getIndexAngle(0);t.save(),t.translate(e.xCenter,e.yCenter),t.rotate(o),t.textAlign="center",t.textBaseline="middle",e.ticks.forEach((function(o,s){if(0!==s||n.reverse){var l=r.setContext(e.getContext(s)),c=Object(p.y)(l.font);if(i=e.getDistanceFromCenterForValue(e.ticks[s].value),l.showLabelBackdrop){t.font=c.string,a=t.measureText(o.label).width,t.fillStyle=l.backdropColor;var u=Object(p.b)(l.backdropPadding);t.fillRect(-a/2-u.left,-i-c.size/2-u.top,a+u.width,c.size+u.height)}Object(p.w)(t,o.label,0,-i,c,{color:l.color})}})),t.restore()}}},{key:"drawTitle",value:function(){}}]),n}(on);bn.id="radialLinear",bn.defaults={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,lineWidth:1,borderDash:[],borderDashOffset:0},grid:{circular:!1},startAngle:0,ticks:{showLabelBackdrop:!0,callback:ze.formatters.numeric},pointLabels:{backdropColor:void 0,backdropPadding:2,display:!0,font:{size:10},callback:function(e){return e},padding:5}},bn.defaultRoutes={"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"},bn.descriptors={angleLines:{_fallback:"grid"}};var yn={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},On=Object.keys(yn);function kn(e,t){return e-t}function xn(e,t){if(Object(p.Db)(t))return null;var n=e._adapter,r=e._parseOpts,i=r.parser,a=r.round,o=r.isoWeekday,s=t;return"function"===typeof i&&(s=i(s)),Object(p.Ab)(s)||(s="string"===typeof i?n.parse(s,i):n.parse(s)),null===s?null:(a&&(s="week"!==a||!Object(p.Jb)(o)&&!0!==o?n.startOf(s,a):n.startOf(s,"isoWeek",o)),+s)}function wn(e,t,n,r){for(var i=On.length,a=On.indexOf(e);a=t?n[i]:n[a]]=!0}}else e[t]=!0}function Sn(e,t,n){var r,i,a=[],o={},s=t.length;for(r=0;r=0&&(t[a].major=!0);return t}(e,a,o,n):a}var Cn=function(e){Object(o.a)(n,e);var t=Object(s.a)(n);function n(e){var r;return Object(d.a)(this,n),(r=t.call(this,e))._cache={data:[],labels:[],all:[]},r._unit="day",r._majorUnit=void 0,r._offsets={},r._normalized=!1,r._parseOpts=void 0,r}return Object(h.a)(n,[{key:"init",value:function(e,t){var r=e.time||(e.time={}),o=this._adapter=new K._date(e.adapters.date);Object(p.K)(r.displayFormats,o.formats()),this._parseOpts={parser:r.parser,round:r.round,isoWeekday:r.isoWeekday},Object(i.a)(Object(a.a)(n.prototype),"init",this).call(this,e),this._normalized=t.normalized}},{key:"parse",value:function(e,t){return void 0===e?null:xn(this,e)}},{key:"beforeLayout",value:function(){Object(i.a)(Object(a.a)(n.prototype),"beforeLayout",this).call(this),this._cache={data:[],labels:[],all:[]}}},{key:"determineDataLimits",value:function(){var e=this,t=e.options,n=e._adapter,r=t.time.unit||"day",i=e.getUserBounds(),a=i.min,o=i.max,s=i.minDefined,l=i.maxDefined;function c(e){s||isNaN(e.min)||(a=Math.min(a,e.min)),l||isNaN(e.max)||(o=Math.max(o,e.max))}s&&l||(c(e._getLabelBounds()),"ticks"===t.bounds&&"labels"===t.ticks.source||c(e.getMinMax(!1))),a=Object(p.Ab)(a)&&!isNaN(a)?a:+n.startOf(Date.now(),r),o=Object(p.Ab)(o)&&!isNaN(o)?o:+n.endOf(Date.now(),r)+1,e.min=Math.min(a,o-1),e.max=Math.max(a+1,o)}},{key:"_getLabelBounds",value:function(){var e=this.getLabelTimestamps(),t=Number.POSITIVE_INFINITY,n=Number.NEGATIVE_INFINITY;return e.length&&(t=e[0],n=e[e.length-1]),{min:t,max:n}}},{key:"buildTicks",value:function(){var e=this,t=e.options,n=t.time,r=t.ticks,i="labels"===r.source?e.getLabelTimestamps():e._generate();"ticks"===t.bounds&&i.length&&(e.min=e._userMin||i[0],e.max=e._userMax||i[i.length-1]);var a=e.min,o=e.max,s=Object(p.T)(i,a,o);return e._unit=n.unit||(r.autoSkip?wn(n.minUnit,e.min,e.max,e._getLabelCapacity(a)):function(e,t,n,r,i){for(var a=On.length-1;a>=On.indexOf(n);a--){var o=On[a];if(yn[o].common&&e._adapter.diff(i,r,o)>=t-1)return o}return On[n?On.indexOf(n):0]}(e,s.length,n.minUnit,e.min,e.max)),e._majorUnit=r.major.enabled&&"year"!==e._unit?function(e){for(var t=On.indexOf(e)+1,n=On.length;t1e5*c)throw new Error(i+" and "+a+" are too far apart with stepSize of "+c+" "+l);var v="data"===o.ticks.source&&n.getDataTimestamps();for(e=h,t=0;e0?s:1}},{key:"getDataTimestamps",value:function(){var e,t,n=this,r=n._cache.data||[];if(r.length)return r;var i=n.getMatchingVisibleMetas();if(n._normalized&&i.length)return n._cache.data=i[0].controller.getAllParsedValues(n);for(e=0,t=i.length;e=e[s].pos&&t<=e[l].pos){var c=Object(p.Qb)(e,"pos",t);s=c.lo,l=c.hi}var u=e[s];r=u.pos,a=u.time;var f=e[l];i=f.pos,o=f.time}else{if(t>=e[s].time&&t<=e[l].time){var d=Object(p.Qb)(e,"time",t);s=d.lo,l=d.hi}var h=e[s];r=h.time,a=h.pos;var v=e[l];i=v.time,o=v.pos}var m=i-r;return m?a+(o-a)*(t-r)/m:a}Cn.id="time",Cn.defaults={bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{source:"auto",major:{enabled:!1}}};var En=function(e){Object(o.a)(n,e);var t=Object(s.a)(n);function n(e){var r;return Object(d.a)(this,n),(r=t.call(this,e))._table=[],r._minPos=void 0,r._tableRange=void 0,r}return Object(h.a)(n,[{key:"initOffsets",value:function(){var e=this,t=e._getTimestampsForTable(),r=e._table=e.buildLookupTable(t);e._minPos=Mn(r,e.min),e._tableRange=Mn(r,e.max)-e._minPos,Object(i.a)(Object(a.a)(n.prototype),"initOffsets",this).call(this,t)}},{key:"buildLookupTable",value:function(e){var t,n,r,i,a,o=this.min,s=this.max,l=[],c=[];for(t=0,n=e.length;t=o&&i<=s&&l.push(i);if(l.length<2)return[{time:o,pos:0},{time:s,pos:1}];for(t=0,n=l.length;t2||/[^\s,.;:]/.test(e.sliceDoc(t.start,t.end)))||t.firstChild}function b(e,t,n){for(var r=e.tree.resolve(t.head),a=n?l.c.closedBy:l.c.openedBy,o=t.head;;){var c=n?r.childAfter(o):r.childBefore(o);if(!c)break;g(e,c,a)?r=c:o=n?c.end:c.start}var u,f;return f=r.type.prop(a)&&(u=n?Object(s.b)(e,r.start,1):Object(s.b)(e,r.end,-1))&&u.matched?n?u.end.to:u.end.from:n?r.end:r.start,i.d.cursor(f,n?-1:1)}function y(e,t){return f(e,(function(n){return n.empty?e.moveVertically(n,t):d(n,t)}))}var O=function(e){return y(e,!1)},k=function(e){return y(e,!0)};function x(e,t){return f(e,(function(n){return n.empty?e.moveVertically(n,t,e.dom.clientHeight):d(n,t)}))}var w=function(e){return x(e,!1)},j=function(e){return x(e,!0)};function S(e,t,n){var r=e.visualLineAt(t.head),a=e.moveToLineBoundary(t,n);if(a.head==t.head&&a.head!=(n?r.to:r.from)&&(a=e.moveToLineBoundary(t,n,!1)),!n&&a.head==r.from&&r.length){var o=/^\s*/.exec(e.state.sliceDoc(r.from,Math.min(r.from+100,r.to)))[0].length;o&&t.head>r.from+o&&(a=i.d.cursor(r.from+o))}return a}var C=function(e){return f(e,(function(t){return i.d.cursor(e.visualLineAt(t.head).from,1)}))},M=function(e){return f(e,(function(t){return i.d.cursor(e.visualLineAt(t.head).to,-1)}))};function E(e,t,n){var r=!1,a=c(e.selection,(function(t){var a=Object(s.b)(e,t.head,-1)||Object(s.b)(e,t.head,1)||t.head>0&&Object(s.b)(e,t.head-1,1)||t.headl.from&&r-1)return o}}catch(s){a.e(s)}finally{a.f()}return-1}function ne(e,t){var n=-1;return e.changeByRange((function(r){for(var a=[],o=e.doc.lineAt(r.from);o.number>n&&(t(o,a,r),n=o.number),!(r.to<=o.to);)o=e.doc.lineAt(o.to+1);var s=e.changes(a);return{changes:a,range:i.d.range(s.mapPos(r.anchor,1),s.mapPos(r.head,1))}}))}var re=[{key:"ArrowLeft",run:p,shift:_},{key:"Mod-ArrowLeft",mac:"Alt-ArrowLeft",run:function(e){return m(e,e.textDirection!=o.c.LTR)},shift:function(e){return A(e,e.textDirection!=o.c.LTR)}},{mac:"Cmd-ArrowLeft",run:C,shift:$},{key:"ArrowRight",run:v,shift:D},{key:"Mod-ArrowRight",mac:"Alt-ArrowRight",run:function(e){return m(e,e.textDirection==o.c.LTR)},shift:function(e){return A(e,e.textDirection==o.c.LTR)}},{mac:"Cmd-ArrowRight",run:M,shift:B},{key:"ArrowUp",run:O,shift:L},{mac:"Cmd-ArrowUp",run:Q,shift:H},{mac:"Ctrl-ArrowUp",run:w,shift:I},{key:"ArrowDown",run:k,shift:N},{mac:"Cmd-ArrowDown",run:W,shift:V},{mac:"Ctrl-ArrowDown",run:j,shift:F},{key:"PageUp",run:w,shift:I},{key:"PageDown",run:j,shift:F},{key:"Home",run:function(e){return f(e,(function(t){return S(e,t,!1)}))},shift:function(e){return T(e,(function(t){return S(e,t,!1)}))}},{key:"Mod-Home",run:Q,shift:H},{key:"End",run:function(e){return f(e,(function(t){return S(e,t,!0)}))},shift:function(e){return T(e,(function(t){return S(e,t,!0)}))}},{key:"Mod-End",run:W,shift:V},{key:"Enter",run:function(e){var t=e.state,n=e.dispatch,r=t.changeByRange((function(e){var n=e.from,r=e.to,o=n==r&&function(e,t){if(/\(\)|\[\]|\{\}/.test(e.sliceDoc(t-1,t+1)))return{from:t,to:t};var n,r=e.tree.resolve(t),i=r.childBefore(t),a=r.childAfter(t);return i&&a&&i.end<=t&&a.start>=t&&(n=i.type.prop(l.c.closedBy))&&n.indexOf(a.name)>-1?{from:i.end,to:a.start}:null}(t,n),s=new i.g(t,{simulateBreak:n,simulateDoubleBreak:!!o}),c=te(s,n);c<0&&(c=/^\s*/.exec(t.doc.lineAt(n).slice(0,50))[0].length);for(var u=t.doc.lineAt(n);ru.from&&n",run:W},{key:"Ctrl-v",run:j},{key:"Alt-v",run:w}].map((function(e){return{mac:e.key,run:e.run,shift:e.shift}}))),ie=[{key:"Alt-ArrowLeft",mac:"Ctrl-ArrowLeft",run:function(e){return f(e,(function(t){return b(e.state,t,e.textDirection!=o.c.LTR)}))},shift:function(e){return T(e,(function(t){return b(e.state,t,e.textDirection!=o.c.LTR)}))}},{key:"Alt-ArrowRight",mac:"Ctrl-ArrowRight",run:function(e){return f(e,(function(t){return b(e.state,t,e.textDirection==o.c.LTR)}))},shift:function(e){return T(e,(function(t){return b(e.state,t,e.textDirection==o.c.LTR)}))}},{key:"Alt-ArrowUp",run:function(e){return J(e.state,e.dispatch,!1)}},{key:"Shift-Alt-ArrowUp",run:function(e){return ee(e.state,e.dispatch,!1)}},{key:"Alt-ArrowDown",run:function(e){return J(e.state,e.dispatch,!0)}},{key:"Shift-Alt-ArrowDown",run:function(e){return ee(e.state,e.dispatch,!0)}},{key:"Escape",run:function(e){var t=e.state,n=e.dispatch,r=t.selection,a=null;return r.ranges.length>1?a=new i.d([r.primary]):r.primary.empty||(a=new i.d([i.d.cursor(r.primary.head)])),!!a&&(n(u(t,a)),!0)}},{key:"Mod-l",run:function(e){var t=e.state,n=e.dispatch,r=Z(t).map((function(e){var n=e.from,r=e.to;return i.d.range(n,Math.min(r+1,t.doc.length))}));return n(t.update({selection:new i.d(r),annotations:i.l.userEvent.of("keyboardselection")})),!0}},{key:"Mod-i",run:function(e){var t=e.state,n=e.dispatch,r=c(t.selection,(function(e){for(var n,r=t.tree.resolve(e.head,1);!(r.start=e.to||r.end>e.to&&r.start<=e.from)&&(null===(n=r.parent)||void 0===n?void 0:n.parent);)r=r.parent;return i.d.range(r.end,r.start)}));return n(u(t,r)),!0}},{key:"Mod-[",run:function(e){var t=e.state;return(0,e.dispatch)(t.update(ne(t,(function(e,n){var r=e.slice(0,Math.min(e.length,200)),i=/^\s*/.exec(r)[0];if(i){for(var o=Object(a.d)(i,0,t.tabSize),s=t.indentString(Math.max(0,o-t.indentUnit)),l=0;l0?n--:r30||this.typeNames.length>Math.pow(2,30-this.flags.length))throw new RangeError("Too many style tag flags to fit in a 30-bit integer")}return Object(a.a)(e,[{key:"get",value:function(e){var t,n=0,i=Object(r.a)(e.split(" "));try{for(i.s();!(t=i.n()).done;){var a=t.value;if(a){var o=this.flags.indexOf(a);if(o>-1)n+=1<>this.typeShift)throw new RangeError("Multiple tag types specified in '".concat(e,"'"));n+=s<1&&void 0!==arguments[1]?arguments[1]:{},n=this.getWithMode(e),r=n.mode,i=n.tag;return this.prop.set(t,new h(i,r,d))}},{key:"add",value:function(e){var t=Object.create(null);for(var n in e){var i,a=e[n],o=this.getWithMode(a),s=o.mode,l=o.tag,c=Object(r.a)(n.split(" "));try{for(c.s();!(i=c.n()).done;){var u=i.value.split("/"),f=u[u.length-1],p=u.length>1?u.slice(0,u.length-1).map((function(e){return"*"==e?null:e})):d,v=new h(l,s,p);t[f]=v.sort(t[f])}}catch(m){c.e(m)}finally{c.f()}}return this.prop.add(t)}},{key:"highlighter",value:function(e){var t=this,n=new m(this,e);return[Object(c.o)(l.f.define((function(e){return new g(e,t.prop,n)}),{decorations:function(e){return e.decorations}}),"fallback"),l.d.styleModule.of(n.module)]}},{key:"specificity",value:function(e){for(var t=e&this.flagMask,n=0,r=1;r<=this.flags.length;r++)t&1<>this.typeShift;i;i=this.parents[i])n+=/#/.test(this.typeNames[i])?500:1e3;return n}}]),e}())({flags:["invalid","meta","standard","definition","constant","local","control","link","strong","emphasis","monospace","changed","inserted","deleted"],subtypes:7,types:["comment","lineComment=comment","blockComment=comment","docComment=comment","name","variableName=name","typeName=name","propertyName=name","className=name","labelName=name","functionName=name","namespace=name","literal","string=literal","docString=string","character=string","number=literal","integer=number","float=number","bool=literal","regexp=literal","escape=literal","color=literal","content","heading=content","list=content","quote=content","keyword","self=keyword","null=keyword","atom=keyword","unit=keyword","modifier=keyword","operatorKeyword=keyword","operator","derefOperator=operator","arithmeticOperator=operator","logicOperator=operator","bitwiseOperator=operator","compareOperator=operator","updateOperator=operator","typeOperator=operator","punctuation","separator=punctuation","bracket=punctuation","angleBracket=bracket","squareBracket=bracket","paren=bracket","brace=bracket"]}),d=[],h=function(){function e(t,n,r,a){Object(i.a)(this,e),this.tag=t,this.mode=n,this.context=r,this.next=a}return Object(a.a)(e,[{key:"sort",value:function(e){return!e||e.context.length>t.typeShift,h&t.flagMask,t.specificity(h),c))}}catch(p){f.e(p)}finally{f.f()}}this.rules=o.sort((function(e,t){return t.specificity-e.specificity})),this.module=new s.a(a)}return Object(a.a)(e,[{key:"match",value:function(e){var t=this.cache[e];if(null!=t)return t;for(var n="",i=e>>this.tags.typeShift,a=e&this.tags.flagMask;;){var o,s=Object(r.a)(this.rules);try{for(s.s();!(o=s.n()).done;){var l=o.value;if(l.type==i&&(l.flags&a)==l.flags&&(n&&(n+=" "),n+=l.cls,a&=~l.flags,i))break}}catch(c){s.e(c)}finally{s.f()}if(!i)break;i=this.tags.parents[i]}return this.cache[e]=n}}]),e}(),g=function(){function e(t,n,r){Object(i.a)(this,e),this.prop=n,this.styling=r,this.nodeStack=[""],this.classStack=[""],this.inheritStack=[""],this.tree=t.state.tree,this.decorations=this.buildDeco(t.visibleRanges,this.tree)}return Object(a.a)(e,[{key:"update",value:function(e){var t=e.state.facet(c.e.syntax);t.length?t[0].parsePos(e.state)n&&t&&s.add(n,e,l.b.mark({class:t})),n=e}var f,d=this.nodeStack,h=this.classStack,p=this.inheritStack,v=Object(r.a)(e);try{var m=function(){var e=f.value,r=e.from,s=e.to;i="",a=0,n=r,t.iterate({from:r,to:s,enter:function(e,t){a++;for(var n=p[a-1],r=n,s=e.prop(o.prop),l=!1;s;){if(!s.context.length||b(s.context,d,a)){var u=o.styling.match(s.tag);u&&(r&&(r+=" "),r+=u,1==s.mode?n=r:0==s.mode&&(l=!0));break}s=s.next}if(r!=i&&(c(t,i),i=r),l)return a--,!1;h[a]=r,p[a]=n,d[a]=e.name},leave:function(e,t,n){a--;var r=h[a];r!=i&&(c(Math.min(s,n),i),i=r)}})};for(v.s();!(f=v.n()).done;)m()}catch(g){v.e(g)}finally{v.f()}return s.finish()}}]),e}();function b(e,t,n){if(e.length>n-1)return!1;for(var r=n-1,i=e.length-1;i>=0;i--,r--){var a=e[i];if(a&&a!=t[r])return!1}return!0}var y,O=(y={deleted:{textDecoration:"line-through"},inserted:{textDecoration:"underline"},link:{textDecoration:"underline"},strong:{fontWeight:"bold"},emphasis:{fontStyle:"italic"},keyword:{color:"#708"},"atom, bool":{color:"#219"},number:{color:"#164"},string:{color:"#a11"},"regexp, escape, string#2":{color:"#e40"},"variableName definition":{color:"#00f"},typeName:{color:"#085"},className:{color:"#167"},"name#2":{color:"#256"},"propertyName definition":{color:"#00c"},comment:{color:"#940"},meta:{color:"#555"},invalid:{color:"#f00"}},f.highlighter(y))},function(e,t,n){"use strict";n.d(t,"a",(function(){return w})),n.d(t,"b",(function(){return S}));var r=n(16),i=n(15),a=n(6),o=n(7),s=n(4),l=n(10),c=n(5),u=n(84),f=n(35),d=function e(t,n,r){Object(s.a)(this,e),this.from=t,this.to=n,this.diagnostic=r},h=function e(t,n,r){Object(s.a)(this,e),this.diagnostics=t,this.panel=n,this.selected=r};function p(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=null;return e.between(n,e.length,(function(e,n,i){var a=i.spec;if(!t||a.diagnostic==t)return r=new d(e,n,a.diagnostic),!1})),r}function v(e){return e.field(y,!1)?void 0:{append:[y,l.d.decorations.compute([y],(function(e){var t=e.field(y),n=t.selected,r=t.panel;return n&&r&&n.from!=n.to?l.b.set([O.range(n.from,n.to)]):l.b.none})),Object(f.b)(),Object(u.a)(k),_]}}var m=c.i.define(),g=c.i.define(),b=c.i.define(),y=c.j.define({create:function(){return new h(l.b.none,null,null)},update:function(e,t){if(t.docChanged){var n=e.diagnostics.map(t.changes),r=null;if(e.selected){var i=t.changes.mapPos(e.selected.from,1);r=p(n,e.selected.diagnostic,i)||p(n,null,i)}e=new h(n,e.panel,r)}var a,s=Object(o.a)(t.effects);try{for(s.s();!(a=s.n()).done;){var c=a.value;if(c.is(m)){var u=l.b.set(c.value.map((function(e){return e.fromi&&(e.items.splice(i,u-i),a=!0)),r&&l.diagnostic==r.diagnostic?l.dom.hasAttribute("aria-selected")||(l.dom.setAttribute("aria-selected","true"),o=l):l.dom.hasAttribute("aria-selected")&&l.dom.removeAttribute("aria-selected"),i++}));ir.bottom&&(e.list.scrollTop+=n.bottom-r.bottom)}})):this.items.length||this.list.removeAttribute("aria-activedescendant"),a&&this.sync()}},{key:"sync",value:function(){var e=this.list.firstChild;function t(){var t=e;e=t.nextSibling,t.remove()}var n,r=Object(o.a)(this.items);try{for(r.s();!(n=r.n()).done;){var i=n.value;if(i.dom.parentNode==this.list){for(;e!=i.dom;)t();e=i.dom.nextSibling}else this.list.insertBefore(i.dom,e)}}catch(a){r.e(a)}finally{r.f()}for(;e;)t();this.list.firstChild||this.list.appendChild(C(this.view,{severity:"info",message:this.view.state.phrase("No diagnostics")}))}},{key:"moveSelection",value:function(e){if(0!=this.items.length){var t=p(this.view.state.field(y).diagnostics,this.items[e].diagnostic);t&&this.view.dispatch({selection:{anchor:t.from,head:t.to},scrollIntoView:!0,effects:b.of(t)})}}},{key:"selectedIndex",get:function(){var e=this.view.state.field(y).selected;if(!e)return-1;for(var t=0;t\n ');return"url('data:image/svg+xml;base64,".concat(btoa(t),"')")}var _=l.d.baseTheme({$diagnostic:{padding:"3px 6px 3px 8px",marginLeft:"-1px",display:"block"},"$diagnostic.error":{borderLeft:"5px solid #d11"},"$diagnostic.warning":{borderLeft:"5px solid orange"},"$diagnostic.info":{borderLeft:"5px solid #999"},$diagnosticAction:{font:"inherit",border:"none",padding:"2px 4px",backgroundColor:"#444",color:"white",borderRadius:"3px",marginLeft:"8px"},$lintRange:{backgroundPosition:"left bottom",backgroundRepeat:"repeat-x"},"$lintRange.error":{backgroundImage:P("#d11")},"$lintRange.warning":{backgroundImage:P("orange")},"$lintRange.info":{backgroundImage:P("#999")},"$lintRange.active":{backgroundColor:"#ffdd9980"},$lintPoint:{position:"relative","&:after":{content:'""',position:"absolute",bottom:0,left:"-2px",borderLeft:"3px solid transparent",borderRight:"3px solid transparent",borderBottom:"4px solid #d11"}},"$lintPoint.warning":{"&:after":{borderBottomColor:"orange"}},"$lintPoint.info":{"&:after":{borderBottomColor:"#999"}},"$panel.lint":{position:"relative","& ul":{maxHeight:"100px",overflowY:"auto","& [aria-selected]":{backgroundColor:"#ddd"},"&:focus [aria-selected]":{background_fallback:"#bdf",backgroundColor:"Highlight",color_fallback:"white",color:"HighlightText"},padding:0,margin:0},"& [name=close]":{position:"absolute",top:"0",right:"2px",background:"inherit",border:"none",font:"inherit",padding:0,margin:0}},"$tooltip.lint":{padding:0,margin:0}})},function(e,t,n){"use strict";function r(){var e=document.createElement("div");e.style.width="99px",e.style.height="99px",e.style.position="absolute",e.style.top="-9999px",e.style.overflow="scroll",document.body.appendChild(e);var t=e.offsetWidth-e.clientWidth;return document.body.removeChild(e),t}n.d(t,"a",(function(){return r}))},function(e,t,n){"use strict";var r=n(0),i=r.createContext({});t.a=i},function(e,t,n){"use strict";function r(e,t){if(null==e)return{};var n,r,i=function(e,t){if(null==e)return{};var n,r,i={},a=Object.keys(e);for(r=0;r=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}n.d(t,"a",(function(){return r}))},function(e,t,n){"use strict";(function(e){n.d(t,"b",(function(){return x}));var r=n(24);n.d(t,"a",(function(){return r.c}));var i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(e,t)};var a,o=function(){function e(e,t,n,r,i,a,o,s,l){this.cx=e,this.stack=t,this.state=n,this.reducePos=r,this.pos=i,this.score=a,this.buffer=o,this.bufferBase=s,this.parent=l}return e.prototype.toString=function(){return"["+this.stack.filter((function(e,t){return t%3==0})).concat(this.state)+"]@"+this.pos+(this.score?"!"+this.score:"")},e.start=function(t,n,r){return void 0===r&&(r=0),new e(t,[],n,r,r,0,[],0,null)},e.prototype.pushState=function(e,t){this.stack.push(this.state,t,this.bufferBase+this.buffer.length),this.state=e},e.prototype.reduce=function(e){var t=e>>19,n=65535&e,r=this.cx.parser,i=r.dynamicPrecedence(n);if(i&&(this.score+=i),0==t)return na;)this.stack.pop()},e.prototype.storeNode=function(e,t,n,r,i){if(void 0===r&&(r=4),void 0===i&&(i=!1),0==e){var a=this,o=this.buffer.length;if(0==o&&a.parent&&(o=a.bufferBase-a.parent.bufferBase,a=a.parent),o>0&&0==a.buffer[o-4]&&a.buffer[o-1]>-1){if(t==n)return;if(a.buffer[o-2]>=t)return void(a.buffer[o-2]=n)}}if(i&&this.pos!=n){var s=this.buffer.length;if(s>0&&0!=this.buffer[s-4])for(;s>0&&this.buffer[s-2]>n;)this.buffer[s]=this.buffer[s-4],this.buffer[s+1]=this.buffer[s-3],this.buffer[s+2]=this.buffer[s-2],this.buffer[s+3]=this.buffer[s-1],s-=4,r>4&&(r-=4);this.buffer[s]=e,this.buffer[s+1]=t,this.buffer[s+2]=n,this.buffer[s+3]=r}else this.buffer.push(e,t,n,r)},e.prototype.shift=function(e,t,n){if(131072&e)this.pushState(65535&e,this.pos);else if(0==(262144&e)){var r=this.pos,i=e,a=this.cx.parser;(n>this.pos||t<=a.maxNode)&&(this.pos=n,a.stateFlag(i,1)||(this.reducePos=n)),this.pushState(i,r),t<=a.maxNode&&this.buffer.push(t,r,n,4)}else t<=this.cx.parser.maxNode&&this.buffer.push(t,this.pos,n,4),this.pos=n},e.prototype.apply=function(e,t,n){65536&e?this.reduce(e):this.shift(e,t,n)},e.prototype.useNode=function(e,t){var n=this.cx.reused.length-1;(n<0||this.cx.reused[n]!=e)&&(this.cx.reused.push(e),n++);var r=this.pos;this.reducePos=this.pos=r+e.length,this.pushState(t,r),this.buffer.push(n,r,this.reducePos,-1)},e.prototype.split=function(){for(var t=this,n=t.buffer.length;n>0&&t.buffer[n-2]>t.reducePos;)n-=4;for(var r=t.buffer.slice(n),i=t.bufferBase+n;t&&i==t.bufferBase;)t=t.parent;return new e(this.cx,this.stack.slice(),this.state,this.reducePos,this.pos,this.score,r,i,t)},e.prototype.recoverByDelete=function(e,t){var n=e<=this.cx.parser.maxNode;n&&this.storeNode(e,this.pos,t),this.storeNode(0,this.pos,t,n?8:4),this.pos=this.reducePos=t,this.score-=200},e.prototype.canShift=function(e){for(var t=new s(this);;){var n=this.cx.parser.stateSlot(t.top,4)||this.cx.parser.hasAction(t.top,e);if(0==(65536&n))return!0;if(0==n)return!1;t.reduce(n)}},Object.defineProperty(e.prototype,"ruleStart",{get:function(){for(var e=this.state,t=this.stack.length;;){var n=this.cx.parser.stateSlot(e,5);if(!(65536&n))return 0;if(t-=3*(n>>19),(65535&n)>19,o=65535&i;if(e.indexOf(o)>-1){var s=n-3*(i>>19);return this.stack[s+1]}if(0==n)return-1;0==a?(n-=3,t=this.stack[n]):(n-=3*(a-1),t=r.getGoto(this.stack[n-3],o,!0))}},e.prototype.recoverByInsert=function(e){var t=this;if(this.stack.length>=300)return[];var n=this.cx.parser.nextStates(this.state);if(n.length>4||this.stack.length>=120){var r=n.filter((function(n){return n!=t.state&&t.cx.parser.hasAction(n,e)}));if(this.stack.length<120)for(var i=0;r.length<4&&i>19;0==n?(this.rest==this.stack.stack&&(this.rest=this.rest.slice()),this.rest.push(this.top,0,0),this.offset+=3):this.offset-=3*(n-1);var r=this.stack.cx.parser.getGoto(this.rest[this.offset-3],t,!0);this.top=r},e}(),l=function(){function e(e,t,n){this.stack=e,this.pos=t,this.index=n,this.buffer=e.buffer,0==this.index&&this.maybeNext()}return e.create=function(t){return new e(t,t.bufferBase+t.buffer.length,t.buffer.length)},e.prototype.maybeNext=function(){var e=this.stack.parent;null!=e&&(this.index=this.stack.bufferBase-e.bufferBase,this.stack=e,this.buffer=e.buffer)},Object.defineProperty(e.prototype,"id",{get:function(){return this.buffer[this.index-4]},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"start",{get:function(){return this.buffer[this.index-3]},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"end",{get:function(){return this.buffer[this.index-2]},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"size",{get:function(){return this.buffer[this.index-1]},enumerable:!0,configurable:!0}),e.prototype.next=function(){this.index-=4,this.pos-=4,0==this.index&&this.maybeNext()},e.prototype.fork=function(){return new e(this.stack,this.pos,this.index)},e}(),c=function(){function e(){this.start=-1,this.value=-1,this.end=-1}return e.prototype.accept=function(e,t){this.value=e,this.end=t},e}(),u=function(){function e(e,t){void 0===t&&(t=e.length),this.string=e,this.length=t}return e.prototype.get=function(e){return e<0||e>=this.length?-1:this.string.charCodeAt(e)},e.prototype.read=function(e,t){return this.string.slice(e,Math.min(this.length,t))},e.prototype.clip=function(t){return new e(this.string,t)},e}(),f=function(){function e(e,t){this.data=e,this.id=t}return e.prototype.token=function(e,t,n){!function(e,t,n,r,i){var a=0,o=1<0){var f=e[u];if(s.allows(f)&&(-1==n.value||n.value==f||r.cx.parser.overrides(f,n.value))){n.accept(f,l);break}}for(var d=t.get(l++),h=0,p=e[a+2];h>1,m=c+v+(v<<1),g=e[m],b=e[m+1];if(d=b)){a=e[m+2];continue e}h=v+1}}break}}(this.data,e,t,n,this.id)},e}();f.prototype.contextual=f.prototype.fallback=f.prototype.extend=!1;function d(e,t){if(void 0===t&&(t=Uint16Array),"string"!=typeof e)return e;for(var n=null,r=0,i=0;r=92&&o--,o>=34&&o--;var l=o-32;if(l>=46&&(l-=46,s=!0),a+=l,s)break;a*=46}n?n[i++]=a:n=new t(a)}return n}var h="undefined"!=typeof e&&/\bparse\b/.test(Object({NODE_ENV:"production",PUBLIC_URL:".",WDS_SOCKET_HOST:void 0,WDS_SOCKET_PATH:void 0,WDS_SOCKET_PORT:void 0,FAST_REFRESH:!0}).LOG),p=null,v=function(){function e(e){this.start=[0],this.index=[0],this.nextStart=0,this.trees=[e]}return e.prototype.nodeAt=function(e){if(e=e)return o==e?a:null;a instanceof r.f?(this.index[t]++,this.nextStart=o+a.length):(this.index[t]++,o+a.length>=e&&(this.trees.push(a),this.start.push(o),this.index.push(0)))}else this.trees.pop(),this.start.pop(),this.index.pop()}},e}(),m=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.extended=-1,t.mask=0,t}return function(e,t){function n(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}(t,e),t.prototype.clear=function(e){this.start=e,this.value=this.extended=-1},t}(c),g=new c,b=function(){function e(e){this.tokens=[],this.mainToken=g,this.actions=[],this.tokens=e.tokenizers.map((function(e){return new m}))}return e.prototype.getActions=function(e,t){for(var n=0,r=null,i=e.cx.parser,a=i.tokenizers,o=i.stateSlot(e.state,3),s=0;s-1&&(n=this.addActions(e,c.extended,c.end,n)),n=this.addActions(e,c.value,c.end,n),!l.extend&&(r=c,n>u))break}}for(;this.actions.length>n;)this.actions.pop();return r||((r=g).start=e.pos,e.pos==t.length?r.accept(e.cx.parser.eofTerm,e.pos):r.accept(0,e.pos+1)),this.mainToken=r,this.actions},e.prototype.updateCachedToken=function(e,t,n,r){if(e.clear(n.pos),t.token(r,e,n),e.value>-1){for(var i=n.cx.parser,a=0;a=0&&n.cx.dialect.allows(o>>1)){0==(1&o)?e.value=o>>1:e.extended=o>>1;break}}}else n.pos==r.length?e.accept(n.cx.parser.eofTerm,n.pos):e.accept(0,n.pos+1)},e.prototype.putAction=function(e,t,n,r){for(var i=0;it)this.putStack(a);else{var o=this.advanceStack(a,e);if(o){a=o;continue}n||(n=[],r=[]),n.push(a);var s=a.cx.tokens.mainToken;r.push(s.value,s.end)}break}if(!this.stacks.length){var l;if(l=n&&function(e){for(var t=null,n=0,r=e;nc&&(this.stacks.sort((function(e,t){return t.score-e.score})),this.stacks.length=c),this.stacks.some((function(e){return e.reducePos>t}))&&this.recovering--}else if(this.stacks.length>1)e:for(i=0;i200&&f.buffer.length>200){if(!((a.score-f.score||a.buffer.length-f.buffer.length)>0)){this.stacks.splice(i--,1);continue e}this.stacks.splice(u--,1)}}}return this.tokenCount++,null},e.prototype.advanceStack=function(e,t){var n=e.pos,i=e.cx,a=i.input,s=i.parser,l=h?this.stackID(e)+" -> ":"";if(this.cache)for(var c=this.cache.nodeAt(n);c;){var u=s.group.types[c.type.id]==c.type?s.getGoto(e.state,c.type.id):-1;if(u>-1)return e.useNode(c,u),h&&console.log(l+this.stackID(e)+" (via reuse of "+s.getName(c.type.id)+")"),e;if(!(c instanceof r.e)||0==c.children.length||c.positions[0]>0)break;var f=c.children[0];if(!(f instanceof r.e))break;c=f}var d=s.startNested(e.state);e:if(d>-1){var p=s.nested[d],v=p.grammar,m=p.end,g=p.placeholder,b=void 0,O=null,k=void 0,x=void 0,w=void 0,j=void 0;if("function"==typeof v){var S=v(a,e);if(S.stay)break e;O=S.parseNode,k=S.parser,x=S.top,w=S.dialect,b=S.filterEnd,j=S.wrapType}else k=v;var C=this.scanForNestEnd(e,m,b),M=e.cx.input.clip(C);if(O||!k){var E=O?O(M,e.pos):r.e.empty;return E.length!=C-e.pos&&(E=new r.e(E.type,E.children,E.positions,C-e.pos)),null!=j&&(E=new r.e(s.group.types[j],[E],[0],E.length)),e.useNode(E,s.getGoto(e.state,g,!0)),e}var T=x?k.topRules[x]:k.defaultTop,P=o.start(new y(k,e.cx.maxBufferLength,M,T[1],k.parseDialect(w),e,j),T[0],e.pos);return h&&console.log(l+this.stackID(P)+" (nested)"),P}var _=s.stateSlot(e.state,4);if(_>0)return e.reduce(_),h&&console.log(l+this.stackID(e)+" (via always-reduce "+s.getName(65535&_)+")"),e;for(var D=e.cx.tokens.getActions(e,a),A=0;An?this.putStack(z):t.push(z)}return e.cx.parent&&e.pos==a.length?this.finishNested(e):null},e.prototype.advanceFully=function(e){for(var t=e.pos;;){var n=this.advanceStack(e,null);if(!n)return e;if(n.pos>t)return this.putStackDedup(n),null;e=n}},e.prototype.runRecovery=function(e,t){for(var n=null,r=!1,i=0;i ":"";if(a.deadEnd){if(r)continue;if(r=!0,a.restart(),h&&console.log(l+this.stackID(a)+" (restarted)"),!(d=this.advanceFully(a)))continue;a=d}for(var c=a.split(),u=l,f=0;c.forceReduce()&&f<10;f++){var d;if(h&&console.log(u+this.stackID(c)+" (via force-reduce)"),!(d=this.advanceFully(c)))break;c=d,h&&(u=this.stackID(d)+" -> ")}for(var p=0,v=a.recoverByInsert(o);pa.pos?(s==a.pos&&(s++,o=0),a.recoverByDelete(o,s),h&&console.log(l+this.stackID(a)+" (via recover-delete "+a.cx.parser.getName(o)+")"),this.putStackDedup(a)):a.cx.parent||n&&!(n.score-1&&(!n||n(r.read(i,g.end))))return i;return r.length},e.prototype.finishNested=function(e){if(-2==e.cx.wrapType)return null;var t=e.cx.parent,n=e.forceAll().toTree(),i=t.cx.parser,a=i.nested[i.startNested(t.state)];return n=new r.e(n.type,n.children,n.positions.map((function(e){return e-t.pos})),e.pos-t.pos),e.cx.wrapType>-1&&(n=new r.e(i.group.types[e.cx.wrapType],[n],[0],n.length)),e.cx.wrapType=-2,t.useNode(n,i.getGoto(t.state,a.placeholder,!0)),h&&console.log(this.stackID(t)+" (via unnest "+(e.cx.wrapType>-1?i.getName(e.cx.wrapType):n.type.name)+")"),t},e.prototype.stackID=function(e){var t=(p||(p=new WeakMap)).get(e);return t||p.set(e,t=String.fromCodePoint(this.nextStackID++)),t+e},e}(),k=function(){function e(e,t,n){this.source=e,this.flags=t,this.disabled=n}return e.prototype.allows=function(e){return!this.disabled||0==this.disabled[e]},e}(),x=function(){function e(e){this.nextStateCache=[],this.cachedDialect=null;var t=d(e.tokenData),n=e.nodeNames.split(" ");this.minRepeatTerm=n.length;for(var i=0;i=r[0])return-1;for(var i=r[t+1];;){var a=r[i++],o=1&a,s=r[i++];if(o&&n)return s;for(var l=i+(a>>1);i0},e.prototype.startNested=function(e){var t=this.stateSlot(e,0);return 4&t?t>>10:-1},e.prototype.validAction=function(e,t){if(t==this.stateSlot(e,4))return!0;for(var n=this.stateSlot(e,1);;n+=3){if(65535==this.data[n]){if(1!=this.data[n+1])return!1;n=w(this.data,n+2)}if(t==w(this.data,n+1))return!0}},e.prototype.nextStates=function(e){var t=this.nextStateCache[e];if(t)return t;for(var n=[],r=this.stateSlot(e,1);;r+=3){if(65535==this.data[r]){if(1!=this.data[r+1])break;r=w(this.data,r+2)}0==(1&this.data[r+2])&&n.indexOf(this.data[r+1])<0&&n.push(this.data[r+1])}for(var i=this.goto,a=i[0],o=0;o>1);s0},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"defaultTop",{get:function(){return this.topRules[Object.keys(this.topRules)[0]]},enumerable:!0,configurable:!0}),e.prototype.dynamicPrecedence=function(e){var t=this.dynamicPrecedences;return null==t?0:t[e]||0},Object.defineProperty(e.prototype,"topType",{get:function(){return this.group.types[this.defaultTop[1]]},enumerable:!0,configurable:!0}),e.prototype.parseDialect=function(e){if(this.cachedDialect&&this.cachedDialect.source==e)return this.cachedDialect;var t=Object.keys(this.dialects),n=t.map((function(){return!1}));if(e)for(var r=0,i=e.split(" ");r=0&&(n[c]=!0)}for(var o=null,s=0;s-1},P.prototype.set=function(e,t){var n=this.__data__,r=D(n,e);return r<0?n.push([e,t]):n[r][1]=t,this},_.prototype.clear=function(){this.__data__={hash:new T,map:new(S||P),string:new T}},_.prototype.delete=function(e){return L(this,e).delete(e)},_.prototype.get=function(e){return L(this,e).get(e)},_.prototype.has=function(e){return L(this,e).has(e)},_.prototype.set=function(e,t){return L(this,e).set(e,t),this};var z=F((function(e){var t;e=null==(t=e)?"":function(e){if("string"==typeof e)return e;if(Q(e))return E?E.call(e):"";var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}(t);var n=[];return s.test(e)&&n.push(""),e.replace(l,(function(e,t,r,i){n.push(r?i.replace(c,"$1"):t||e)})),n}));function I(e){if("string"==typeof e||Q(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function F(e,t){if("function"!=typeof e||t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function n(){var r=arguments,i=t?t.apply(this,r):r[0],a=n.cache;if(a.has(i))return a.get(i);var o=e.apply(this,r);return n.cache=a.set(i,o),o};return n.cache=new(F.Cache||_),n}F.Cache=_;var $=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)&&"[object Symbol]"==k.call(e)}e.exports=function(e,t,n){var r=null==e?void 0:A(e,t);return void 0===r?n:r}}).call(this,n(110))},function(e,t,n){e.exports=n(187)},,,,,,,,,,function(e,t,n){"use strict";var r=Object.prototype.hasOwnProperty,i=function(){for(var e=[],t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e}(),a=function(e,t){for(var n=t&&t.plainObjects?Object.create(null):{},r=0;r=48&&a<=57||a>=65&&a<=90||a>=97&&a<=122?n+=t.charAt(r):a<128?n+=i[a]:a<2048?n+=i[192|a>>6]+i[128|63&a]:a<55296||a>=57344?n+=i[224|a>>12]+i[128|a>>6&63]+i[128|63&a]:(r+=1,a=65536+((1023&a)<<10|1023&t.charCodeAt(r)),n+=i[240|a>>18]+i[128|a>>12&63]+i[128|a>>6&63]+i[128|63&a])}return n},isBuffer:function(e){return null!==e&&"undefined"!==typeof e&&!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))},isRegExp:function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},merge:function e(t,n,i){if(!n)return t;if("object"!==typeof n){if(Array.isArray(t))t.push(n);else{if("object"!==typeof t)return[t,n];(i.plainObjects||i.allowPrototypes||!r.call(Object.prototype,n))&&(t[n]=!0)}return t}if("object"!==typeof t)return[t].concat(n);var o=t;return Array.isArray(t)&&!Array.isArray(n)&&(o=a(t,i)),Array.isArray(t)&&Array.isArray(n)?(n.forEach((function(n,a){r.call(t,a)?t[a]&&"object"===typeof t[a]?t[a]=e(t[a],n,i):t.push(n):t[a]=n})),t):Object.keys(n).reduce((function(t,a){var o=n[a];return r.call(t,a)?t[a]=e(t[a],o,i):t[a]=o,t}),o)}}},function(e,t,n){"use strict";var r=String.prototype.replace,i=/%20/g;e.exports={default:"RFC3986",formatters:{RFC1738:function(e){return r.call(e,i,"+")},RFC3986:function(e){return e}},RFC1738:"RFC1738",RFC3986:"RFC3986"}},function(e,t,n){e.exports=function(){"use strict";var e,t,n=1e3,r=6e4,i=36e5,a=864e5,o=/\[([^\]]+)]|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,s=31536e6,l=2592e6,c=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,u={years:s,months:l,days:a,hours:i,minutes:r,seconds:n,milliseconds:1,weeks:6048e5},f=function(e){return e instanceof b},d=function(e,t,n){return new b(e,n,t.$l)},h=function(e){return t.p(e)+"s"},p=function(e){return e<0},v=function(e){return p(e)?Math.ceil(e):Math.floor(e)},m=function(e){return Math.abs(e)},g=function(e,t){return e?p(e)?{negative:!0,format:""+m(e)+t}:{negative:!1,format:""+e+t}:{negative:!1,format:""}},b=function(){function p(e,t,n){var r=this;if(this.$d={},this.$l=n,void 0===e&&(this.$ms=0,this.parseFromMilliseconds()),t)return d(e*u[h(t)],this);if("number"==typeof e)return this.$ms=e,this.parseFromMilliseconds(),this;if("object"==typeof e)return Object.keys(e).forEach((function(t){r.$d[h(t)]=e[t]})),this.calMilliseconds(),this;if("string"==typeof e){var i=e.match(c);if(i){var a=i.slice(2).map((function(e){return null!=e?Number(e):0}));return this.$d.years=a[0],this.$d.months=a[1],this.$d.weeks=a[2],this.$d.days=a[3],this.$d.hours=a[4],this.$d.minutes=a[5],this.$d.seconds=a[6],this.calMilliseconds(),this}}return this}var m=p.prototype;return m.calMilliseconds=function(){var e=this;this.$ms=Object.keys(this.$d).reduce((function(t,n){return t+(e.$d[n]||0)*u[n]}),0)},m.parseFromMilliseconds=function(){var e=this.$ms;this.$d.years=v(e/s),e%=s,this.$d.months=v(e/l),e%=l,this.$d.days=v(e/a),e%=a,this.$d.hours=v(e/i),e%=i,this.$d.minutes=v(e/r),e%=r,this.$d.seconds=v(e/n),e%=n,this.$d.milliseconds=e},m.toISOString=function(){var e=g(this.$d.years,"Y"),t=g(this.$d.months,"M"),n=+this.$d.days||0;this.$d.weeks&&(n+=7*this.$d.weeks);var r=g(n,"D"),i=g(this.$d.hours,"H"),a=g(this.$d.minutes,"M"),o=this.$d.seconds||0;this.$d.milliseconds&&(o+=this.$d.milliseconds/1e3);var s=g(o,"S"),l=e.negative||t.negative||r.negative||i.negative||a.negative||s.negative,c=i.format||a.format||s.format?"T":"",u=(l?"-":"")+"P"+e.format+t.format+r.format+c+i.format+a.format+s.format;return"P"===u||"-P"===u?"P0D":u},m.toJSON=function(){return this.toISOString()},m.format=function(e){var n=e||"YYYY-MM-DDTHH:mm:ss",r={Y:this.$d.years,YY:t.s(this.$d.years,2,"0"),YYYY:t.s(this.$d.years,4,"0"),M:this.$d.months,MM:t.s(this.$d.months,2,"0"),D:this.$d.days,DD:t.s(this.$d.days,2,"0"),H:this.$d.hours,HH:t.s(this.$d.hours,2,"0"),m:this.$d.minutes,mm:t.s(this.$d.minutes,2,"0"),s:this.$d.seconds,ss:t.s(this.$d.seconds,2,"0"),SSS:t.s(this.$d.milliseconds,3,"0")};return n.replace(o,(function(e,t){return t||String(r[e])}))},m.as=function(e){return this.$ms/u[h(e)]},m.get=function(e){var t=this.$ms,n=h(e);return"milliseconds"===n?t%=1e3:t="weeks"===n?v(t/u[n]):this.$d[n],0===t?0:t},m.add=function(e,t,n){var r;return r=t?e*u[h(t)]:f(e)?e.$ms:d(e,this).$ms,d(this.$ms+r*(n?-1:1),this)},m.subtract=function(e,t){return this.add(e,t,!0)},m.locale=function(e){var t=this.clone();return t.$l=e,t},m.clone=function(){return d(this.$ms,this)},m.humanize=function(t){return e().add(this.$ms,"ms").locale(this.$l).fromNow(!t)},m.milliseconds=function(){return this.get("milliseconds")},m.asMilliseconds=function(){return this.as("milliseconds")},m.seconds=function(){return this.get("seconds")},m.asSeconds=function(){return this.as("seconds")},m.minutes=function(){return this.get("minutes")},m.asMinutes=function(){return this.as("minutes")},m.hours=function(){return this.get("hours")},m.asHours=function(){return this.as("hours")},m.days=function(){return this.get("days")},m.asDays=function(){return this.as("days")},m.weeks=function(){return this.get("weeks")},m.asWeeks=function(){return this.as("weeks")},m.months=function(){return this.get("months")},m.asMonths=function(){return this.as("months")},m.years=function(){return this.get("years")},m.asYears=function(){return this.as("years")},p}();return function(n,r,i){e=i,t=i().$utils(),i.duration=function(e,t){var n=i.locale();return d(e,{$l:n},t)},i.isDuration=f;var a=r.prototype.add,o=r.prototype.subtract;r.prototype.add=function(e,t){return f(e)&&(e=e.asMilliseconds()),a.bind(this)(e,t)},r.prototype.subtract=function(e,t){return f(e)&&(e=e.asMilliseconds()),o.bind(this)(e,t)}}}()},function(e,t,n){e.exports=function(){"use strict";var e="minute",t=/[+-]\d\d(?::?\d\d)?/g,n=/([+-]|\d\d)/g;return function(r,i,a){var o=i.prototype;a.utc=function(e){return new i({date:e,utc:!0,args:arguments})},o.utc=function(t){var n=a(this.toDate(),{locale:this.$L,utc:!0});return t?n.add(this.utcOffset(),e):n},o.local=function(){return a(this.toDate(),{locale:this.$L,utc:!1})};var s=o.parse;o.parse=function(e){e.utc&&(this.$u=!0),this.$utils().u(e.$offset)||(this.$offset=e.$offset),s.call(this,e)};var l=o.init;o.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 l.call(this)};var c=o.utcOffset;o.utcOffset=function(r,i){var a=this.$utils().u;if(a(r))return this.$u?0:a(this.$offset)?c.call(this):this.$offset;if("string"==typeof r&&null===(r=function(e){void 0===e&&(e="");var r=e.match(t);if(!r)return null;var i=(""+r[0]).match(n)||["-",0,0],a=i[0],o=60*+i[1]+ +i[2];return 0===o?0:"+"===a?o:-o}(r)))return this;var o=Math.abs(r)<=16?60*r:r,s=this;if(i)return s.$offset=o,s.$u=0===r,s;if(0!==r){var l=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(s=this.local().add(o+l,e)).$offset=o,s.$x.$localOffset=l}else s=this.utc();return s};var u=o.format;o.format=function(e){var t=e||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return u.call(this,t)},o.valueOf=function(){var e=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||(new Date).getTimezoneOffset());return this.$d.valueOf()-6e4*e},o.isUTC=function(){return!!this.$u},o.toISOString=function(){return this.toDate().toISOString()},o.toString=function(){return this.toDate().toUTCString()};var f=o.toDate;o.toDate=function(e){return"s"===e&&this.$offset?a(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():f.call(this)};var d=o.diff;o.diff=function(e,t,n){if(e&&this.$u===e.$u)return d.call(this,e,t,n);var r=this.local(),i=a(e).local();return d.call(r,i,t,n)}}}()},function(e,t,n){"use strict";var r=n(180),i=n(181),a=n(125);e.exports={formats:a,parse:i,stringify:r}},function(e,t,n){"use strict";(function(e){var n="undefined"!==typeof window&&"undefined"!==typeof document&&"undefined"!==typeof navigator,r=function(){for(var e=["Edge","Trident","Firefox"],t=0;t=0)return 1;return 0}();var i=n&&window.Promise?function(e){var t=!1;return function(){t||(t=!0,window.Promise.resolve().then((function(){t=!1,e()})))}}:function(e){var t=!1;return function(){t||(t=!0,setTimeout((function(){t=!1,e()}),r))}};function a(e){return e&&"[object Function]"==={}.toString.call(e)}function o(e,t){if(1!==e.nodeType)return[];var n=e.ownerDocument.defaultView.getComputedStyle(e,null);return t?n[t]:n}function s(e){return"HTML"===e.nodeName?e:e.parentNode||e.host}function l(e){if(!e)return document.body;switch(e.nodeName){case"HTML":case"BODY":return e.ownerDocument.body;case"#document":return e.body}var t=o(e),n=t.overflow,r=t.overflowX,i=t.overflowY;return/(auto|scroll|overlay)/.test(n+i+r)?e:l(s(e))}function c(e){return e&&e.referenceNode?e.referenceNode:e}var u=n&&!(!window.MSInputMethodContext||!document.documentMode),f=n&&/MSIE 10/.test(navigator.userAgent);function d(e){return 11===e?u:10===e?f:u||f}function h(e){if(!e)return document.documentElement;for(var t=d(10)?document.body:null,n=e.offsetParent||null;n===t&&e.nextElementSibling;)n=(e=e.nextElementSibling).offsetParent;var r=n&&n.nodeName;return r&&"BODY"!==r&&"HTML"!==r?-1!==["TH","TD","TABLE"].indexOf(n.nodeName)&&"static"===o(n,"position")?h(n):n:e?e.ownerDocument.documentElement:document.documentElement}function p(e){return null!==e.parentNode?p(e.parentNode):e}function v(e,t){if(!e||!e.nodeType||!t||!t.nodeType)return document.documentElement;var n=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,r=n?e:t,i=n?t:e,a=document.createRange();a.setStart(r,0),a.setEnd(i,0);var o=a.commonAncestorContainer;if(e!==o&&t!==o||r.contains(i))return function(e){var t=e.nodeName;return"BODY"!==t&&("HTML"===t||h(e.firstElementChild)===e)}(o)?o:h(o);var s=p(e);return s.host?v(s.host,t):v(e,p(t).host)}function m(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"top",n="top"===t?"scrollTop":"scrollLeft",r=e.nodeName;if("BODY"===r||"HTML"===r){var i=e.ownerDocument.documentElement,a=e.ownerDocument.scrollingElement||i;return a[n]}return e[n]}function g(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=m(t,"top"),i=m(t,"left"),a=n?-1:1;return e.top+=r*a,e.bottom+=r*a,e.left+=i*a,e.right+=i*a,e}function b(e,t){var n="x"===t?"Left":"Top",r="Left"===n?"Right":"Bottom";return parseFloat(e["border"+n+"Width"])+parseFloat(e["border"+r+"Width"])}function y(e,t,n,r){return Math.max(t["offset"+e],t["scroll"+e],n["client"+e],n["offset"+e],n["scroll"+e],d(10)?parseInt(n["offset"+e])+parseInt(r["margin"+("Height"===e?"Top":"Left")])+parseInt(r["margin"+("Height"===e?"Bottom":"Right")]):0)}function O(e){var t=e.body,n=e.documentElement,r=d(10)&&getComputedStyle(n);return{height:y("Height",t,n,r),width:y("Width",t,n,r)}}var k=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},x=function(){function e(e,t){for(var n=0;n2&&void 0!==arguments[2]&&arguments[2],r=d(10),i="HTML"===t.nodeName,a=C(e),s=C(t),c=l(e),u=o(t),f=parseFloat(u.borderTopWidth),h=parseFloat(u.borderLeftWidth);n&&i&&(s.top=Math.max(s.top,0),s.left=Math.max(s.left,0));var p=S({top:a.top-s.top-f,left:a.left-s.left-h,width:a.width,height:a.height});if(p.marginTop=0,p.marginLeft=0,!r&&i){var v=parseFloat(u.marginTop),m=parseFloat(u.marginLeft);p.top-=f-v,p.bottom-=f-v,p.left-=h-m,p.right-=h-m,p.marginTop=v,p.marginLeft=m}return(r&&!n?t.contains(c):t===c&&"BODY"!==c.nodeName)&&(p=g(p,t)),p}function E(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=e.ownerDocument.documentElement,r=M(e,n),i=Math.max(n.clientWidth,window.innerWidth||0),a=Math.max(n.clientHeight,window.innerHeight||0),o=t?0:m(n),s=t?0:m(n,"left"),l={top:o-r.top+r.marginTop,left:s-r.left+r.marginLeft,width:i,height:a};return S(l)}function T(e){var t=e.nodeName;if("BODY"===t||"HTML"===t)return!1;if("fixed"===o(e,"position"))return!0;var n=s(e);return!!n&&T(n)}function P(e){if(!e||!e.parentElement||d())return document.documentElement;for(var t=e.parentElement;t&&"none"===o(t,"transform");)t=t.parentElement;return t||document.documentElement}function _(e,t,n,r){var i=arguments.length>4&&void 0!==arguments[4]&&arguments[4],a={top:0,left:0},o=i?P(e):v(e,c(t));if("viewport"===r)a=E(o,i);else{var u=void 0;"scrollParent"===r?"BODY"===(u=l(s(t))).nodeName&&(u=e.ownerDocument.documentElement):u="window"===r?e.ownerDocument.documentElement:r;var f=M(u,o,i);if("HTML"!==u.nodeName||T(o))a=f;else{var d=O(e.ownerDocument),h=d.height,p=d.width;a.top+=f.top-f.marginTop,a.bottom=h+f.top,a.left+=f.left-f.marginLeft,a.right=p+f.left}}var m="number"===typeof(n=n||0);return a.left+=m?n:n.left||0,a.top+=m?n:n.top||0,a.right-=m?n:n.right||0,a.bottom-=m?n:n.bottom||0,a}function D(e){return e.width*e.height}function A(e,t,n,r,i){var a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;if(-1===e.indexOf("auto"))return e;var o=_(n,r,a,i),s={top:{width:o.width,height:t.top-o.top},right:{width:o.right-t.right,height:o.height},bottom:{width:o.width,height:o.bottom-t.bottom},left:{width:t.left-o.left,height:o.height}},l=Object.keys(s).map((function(e){return j({key:e},s[e],{area:D(s[e])})})).sort((function(e,t){return t.area-e.area})),c=l.filter((function(e){var t=e.width,r=e.height;return t>=n.clientWidth&&r>=n.clientHeight})),u=c.length>0?c[0].key:l[0].key,f=e.split("-")[1];return u+(f?"-"+f:"")}function R(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,i=r?P(t):v(t,c(n));return M(n,i,r)}function L(e){var t=e.ownerDocument.defaultView.getComputedStyle(e),n=parseFloat(t.marginTop||0)+parseFloat(t.marginBottom||0),r=parseFloat(t.marginLeft||0)+parseFloat(t.marginRight||0);return{width:e.offsetWidth+r,height:e.offsetHeight+n}}function N(e){var t={left:"right",right:"left",bottom:"top",top:"bottom"};return e.replace(/left|right|bottom|top/g,(function(e){return t[e]}))}function z(e,t,n){n=n.split("-")[0];var r=L(e),i={width:r.width,height:r.height},a=-1!==["right","left"].indexOf(n),o=a?"top":"left",s=a?"left":"top",l=a?"height":"width",c=a?"width":"height";return i[o]=t[o]+t[l]/2-r[l]/2,i[s]=n===s?t[s]-r[c]:t[N(s)],i}function I(e,t){return Array.prototype.find?e.find(t):e.filter(t)[0]}function F(e,t,n){return(void 0===n?e:e.slice(0,function(e,t,n){if(Array.prototype.findIndex)return e.findIndex((function(e){return e[t]===n}));var r=I(e,(function(e){return e[t]===n}));return e.indexOf(r)}(e,"name",n))).forEach((function(e){e.function&&console.warn("`modifier.function` is deprecated, use `modifier.fn`!");var n=e.function||e.fn;e.enabled&&a(n)&&(t.offsets.popper=S(t.offsets.popper),t.offsets.reference=S(t.offsets.reference),t=n(t,e))})),t}function $(){if(!this.state.isDestroyed){var e={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};e.offsets.reference=R(this.state,this.popper,this.reference,this.options.positionFixed),e.placement=A(this.options.placement,e.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),e.originalPlacement=e.placement,e.positionFixed=this.options.positionFixed,e.offsets.popper=z(this.popper,e.offsets.reference,e.placement),e.offsets.popper.position=this.options.positionFixed?"fixed":"absolute",e=F(this.modifiers,e),this.state.isCreated?this.options.onUpdate(e):(this.state.isCreated=!0,this.options.onCreate(e))}}function B(e,t){return e.some((function(e){var n=e.name;return e.enabled&&n===t}))}function Q(e){for(var t=[!1,"ms","Webkit","Moz","O"],n=e.charAt(0).toUpperCase()+e.slice(1),r=0;r1&&void 0!==arguments[1]&&arguments[1],n=ee.indexOf(e),r=ee.slice(n+1).concat(ee.slice(0,n));return t?r.reverse():r}var ne="flip",re="clockwise",ie="counterclockwise";function ae(e,t,n,r){var i=[0,0],a=-1!==["right","left"].indexOf(r),o=e.split(/(\+|\-)/).map((function(e){return e.trim()})),s=o.indexOf(I(o,(function(e){return-1!==e.search(/,|\s/)})));o[s]&&-1===o[s].indexOf(",")&&console.warn("Offsets separated by white space(s) are deprecated, use a comma (,) instead.");var l=/\s*,\s*|\s+/,c=-1!==s?[o.slice(0,s).concat([o[s].split(l)[0]]),[o[s].split(l)[1]].concat(o.slice(s+1))]:[o];return(c=c.map((function(e,r){var i=(1===r?!a:a)?"height":"width",o=!1;return e.reduce((function(e,t){return""===e[e.length-1]&&-1!==["+","-"].indexOf(t)?(e[e.length-1]=t,o=!0,e):o?(e[e.length-1]+=t,o=!1,e):e.concat(t)}),[]).map((function(e){return function(e,t,n,r){var i=e.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),a=+i[1],o=i[2];if(!a)return e;if(0===o.indexOf("%")){var s=void 0;switch(o){case"%p":s=n;break;case"%":case"%r":default:s=r}return S(s)[t]/100*a}if("vh"===o||"vw"===o)return("vh"===o?Math.max(document.documentElement.clientHeight,window.innerHeight||0):Math.max(document.documentElement.clientWidth,window.innerWidth||0))/100*a;return a}(e,i,t,n)}))}))).forEach((function(e,t){e.forEach((function(n,r){X(n)&&(i[t]+=n*("-"===e[r-1]?-1:1))}))})),i}var oe={placement:"bottom",positionFixed:!1,eventsEnabled:!0,removeOnDestroy:!1,onCreate:function(){},onUpdate:function(){},modifiers:{shift:{order:100,enabled:!0,fn:function(e){var t=e.placement,n=t.split("-")[0],r=t.split("-")[1];if(r){var i=e.offsets,a=i.reference,o=i.popper,s=-1!==["bottom","top"].indexOf(n),l=s?"left":"top",c=s?"width":"height",u={start:w({},l,a[l]),end:w({},l,a[l]+a[c]-o[c])};e.offsets.popper=j({},o,u[r])}return e}},offset:{order:200,enabled:!0,fn:function(e,t){var n=t.offset,r=e.placement,i=e.offsets,a=i.popper,o=i.reference,s=r.split("-")[0],l=void 0;return l=X(+n)?[+n,0]:ae(n,a,o,s),"left"===s?(a.top+=l[0],a.left-=l[1]):"right"===s?(a.top+=l[0],a.left+=l[1]):"top"===s?(a.left+=l[0],a.top-=l[1]):"bottom"===s&&(a.left+=l[0],a.top+=l[1]),e.popper=a,e},offset:0},preventOverflow:{order:300,enabled:!0,fn:function(e,t){var n=t.boundariesElement||h(e.instance.popper);e.instance.reference===n&&(n=h(n));var r=Q("transform"),i=e.instance.popper.style,a=i.top,o=i.left,s=i[r];i.top="",i.left="",i[r]="";var l=_(e.instance.popper,e.instance.reference,t.padding,n,e.positionFixed);i.top=a,i.left=o,i[r]=s,t.boundaries=l;var c=t.priority,u=e.offsets.popper,f={primary:function(e){var n=u[e];return u[e]l[e]&&!t.escapeWithReference&&(r=Math.min(u[n],l[e]-("right"===e?u.width:u.height))),w({},n,r)}};return c.forEach((function(e){var t=-1!==["left","top"].indexOf(e)?"primary":"secondary";u=j({},u,f[t](e))})),e.offsets.popper=u,e},priority:["left","right","top","bottom"],padding:5,boundariesElement:"scrollParent"},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,n=t.popper,r=t.reference,i=e.placement.split("-")[0],a=Math.floor,o=-1!==["top","bottom"].indexOf(i),s=o?"right":"bottom",l=o?"left":"top",c=o?"width":"height";return n[s]a(r[s])&&(e.offsets.popper[l]=a(r[s])),e}},arrow:{order:500,enabled:!0,fn:function(e,t){var n;if(!Z(e.instance.modifiers,"arrow","keepTogether"))return e;var r=t.element;if("string"===typeof r){if(!(r=e.instance.popper.querySelector(r)))return e}else if(!e.instance.popper.contains(r))return console.warn("WARNING: `arrow.element` must be child of its popper element!"),e;var i=e.placement.split("-")[0],a=e.offsets,s=a.popper,l=a.reference,c=-1!==["left","right"].indexOf(i),u=c?"height":"width",f=c?"Top":"Left",d=f.toLowerCase(),h=c?"left":"top",p=c?"bottom":"right",v=L(r)[u];l[p]-vs[p]&&(e.offsets.popper[d]+=l[d]+v-s[p]),e.offsets.popper=S(e.offsets.popper);var m=l[d]+l[u]/2-v/2,g=o(e.instance.popper),b=parseFloat(g["margin"+f]),y=parseFloat(g["border"+f+"Width"]),O=m-e.offsets.popper[d]-b-y;return O=Math.max(Math.min(s[u]-v,O),0),e.arrowElement=r,e.offsets.arrow=(w(n={},d,Math.round(O)),w(n,h,""),n),e},element:"[x-arrow]"},flip:{order:600,enabled:!0,fn:function(e,t){if(B(e.instance.modifiers,"inner"))return e;if(e.flipped&&e.placement===e.originalPlacement)return e;var n=_(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement,e.positionFixed),r=e.placement.split("-")[0],i=N(r),a=e.placement.split("-")[1]||"",o=[];switch(t.behavior){case ne:o=[r,i];break;case re:o=te(r);break;case ie:o=te(r,!0);break;default:o=t.behavior}return o.forEach((function(s,l){if(r!==s||o.length===l+1)return e;r=e.placement.split("-")[0],i=N(r);var c=e.offsets.popper,u=e.offsets.reference,f=Math.floor,d="left"===r&&f(c.right)>f(u.left)||"right"===r&&f(c.left)f(u.top)||"bottom"===r&&f(c.top)f(n.right),v=f(c.top)f(n.bottom),g="left"===r&&h||"right"===r&&p||"top"===r&&v||"bottom"===r&&m,b=-1!==["top","bottom"].indexOf(r),y=!!t.flipVariations&&(b&&"start"===a&&h||b&&"end"===a&&p||!b&&"start"===a&&v||!b&&"end"===a&&m),O=!!t.flipVariationsByContent&&(b&&"start"===a&&p||b&&"end"===a&&h||!b&&"start"===a&&m||!b&&"end"===a&&v),k=y||O;(d||g||k)&&(e.flipped=!0,(d||g)&&(r=o[l+1]),k&&(a=function(e){return"end"===e?"start":"start"===e?"end":e}(a)),e.placement=r+(a?"-"+a:""),e.offsets.popper=j({},e.offsets.popper,z(e.instance.popper,e.offsets.reference,e.placement)),e=F(e.instance.modifiers,e,"flip"))})),e},behavior:"flip",padding:5,boundariesElement:"viewport",flipVariations:!1,flipVariationsByContent:!1},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,n=t.split("-")[0],r=e.offsets,i=r.popper,a=r.reference,o=-1!==["left","right"].indexOf(n),s=-1===["top","left"].indexOf(n);return i[o?"left":"top"]=a[n]-(s?i[o?"width":"height"]:0),e.placement=N(t),e.offsets.popper=S(i),e}},hide:{order:800,enabled:!0,fn:function(e){if(!Z(e.instance.modifiers,"hide","preventOverflow"))return e;var t=e.offsets.reference,n=I(e.instance.modifiers,(function(e){return"preventOverflow"===e.name})).boundaries;if(t.bottomn.right||t.top>n.bottom||t.right2&&void 0!==arguments[2]?arguments[2]:{};k(this,e),this.scheduleUpdate=function(){return requestAnimationFrame(r.update)},this.update=i(this.update.bind(this)),this.options=j({},e.Defaults,o),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=t&&t.jquery?t[0]:t,this.popper=n&&n.jquery?n[0]:n,this.options.modifiers={},Object.keys(j({},e.Defaults.modifiers,o.modifiers)).forEach((function(t){r.options.modifiers[t]=j({},e.Defaults.modifiers[t]||{},o.modifiers?o.modifiers[t]:{})})),this.modifiers=Object.keys(this.options.modifiers).map((function(e){return j({name:e},r.options.modifiers[e])})).sort((function(e,t){return e.order-t.order})),this.modifiers.forEach((function(e){e.enabled&&a(e.onLoad)&&e.onLoad(r.reference,r.popper,r.options,e,r.state)})),this.update();var s=this.options.eventsEnabled;s&&this.enableEventListeners(),this.state.eventsEnabled=s}return x(e,[{key:"update",value:function(){return $.call(this)}},{key:"destroy",value:function(){return W.call(this)}},{key:"enableEventListeners",value:function(){return q.call(this)}},{key:"disableEventListeners",value:function(){return Y.call(this)}}]),e}();se.Utils=("undefined"!==typeof window?window:e).PopperUtils,se.placements=J,se.Defaults=oe,t.a=se}).call(this,n(110))},function(e,t,n){"use strict";var r=n(47),i=n(48);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var a=i(n(0)),o=(0,r(n(49)).default)(a.createElement("path",{d:"M10 20h4V4h-4v16zm-6 0h4v-8H4v8zM16 9v11h4V9h-4z"}),"Equalizer");t.default=o},function(e,t,n){"use strict";var r=n(47),i=n(48);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var a=i(n(0)),o=(0,r(n(49)).default)(a.createElement("path",{d:"M3.5 18.49l6-6.01 4 4L22 6.92l-1.41-1.41-7.09 7.97-4-4L2 16.99z"}),"ShowChart");t.default=o},function(e,t,n){"use strict";var r=n(47),i=n(48);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var a=i(n(0)),o=(0,r(n(49)).default)(a.createElement("path",{d:"M9.4 16.6L4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0l4.6-4.6-4.6-4.6L16 6l6 6-6 6-1.4-1.4z"}),"Code");t.default=o},function(e,t,n){"use strict";var r=n(47),i=n(48);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var a=i(n(0)),o=(0,r(n(49)).default)(a.createElement("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"}),"TableChart");t.default=o},function(e,t,n){var r;window,r=function(e,t){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s="./react/uplot-react.tsx")}({"./common/index.ts":function(e,t,n){"use strict";n.r(t),n.d(t,"optionsUpdateState",(function(){return i})),n.d(t,"dataMatch",(function(){return a}));var r=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"===typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i=g&&!a||"t"===a?(m+=d.abbreviations.trillion,t/=g):o=b&&!a||"b"===a?(m+=d.abbreviations.billion,t/=b):o=y&&!a||"m"===a?(m+=d.abbreviations.million,t/=y):(o=O&&!a||"k"===a)&&(m+=d.abbreviations.thousand,t/=O)),e._.includes(n,"[.]")&&(p=!0,n=n.replace("[.]",".")),s=t.toString().split(".")[0],l=n.split(".")[1],u=n.indexOf(","),v=(n.split(".")[0].split(",")[0].match(/0/g)||[]).length,l?(e._.includes(l,"[")?(l=(l=l.replace("]","")).split("["),k=e._.toFixed(t,l[0].length+l[1].length,r,l[1].length)):k=e._.toFixed(t,l.length,r),s=k.split(".")[0],k=e._.includes(k,".")?d.delimiters.decimal+k.split(".")[1]:"",p&&0===Number(k.slice(1))&&(k="")):s=e._.toFixed(t,0,r),m&&!a&&Number(s)>=1e3&&m!==d.abbreviations.trillion)switch(s=String(Number(s)/1e3),m){case d.abbreviations.thousand:m=d.abbreviations.million;break;case d.abbreviations.million:m=d.abbreviations.billion;break;case d.abbreviations.billion:m=d.abbreviations.trillion}if(e._.includes(s,"-")&&(s=s.slice(1),x=!0),s.length0;w--)s="0"+s;return u>-1&&(s=s.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+d.delimiters.thousands)),0===n.indexOf(".")&&(s=""),f=s+k+(m||""),h?f=(h&&x?"(":"")+f+(h&&x?")":""):c>=0?f=0===c?(x?"-":"+")+f:f+(x?"-":"+"):x&&(f="-"+f),f},stringToNumber:function(e){var t,n,r,a=i[o.currentLocale],s=e,l={thousand:3,million:6,billion:9,trillion:12};if(o.zeroFormat&&e===o.zeroFormat)n=0;else if(o.nullFormat&&e===o.nullFormat||!e.replace(/[^0-9]+/g,"").length)n=null;else{for(t in n=1,"."!==a.delimiters.decimal&&(e=e.replace(/\./g,"").replace(a.delimiters.decimal,".")),l)if(r=new RegExp("[^a-zA-Z]"+a.abbreviations[t]+"(?:\\)|(\\"+a.currency.symbol+")?(?:\\))?)?$"),s.match(r)){n*=Math.pow(10,l[t]);break}n*=(e.split("-").length+Math.min(e.split("(").length-1,e.split(")").length-1))%2?1:-1,e=e.replace(/[^0-9\.]+/g,""),n*=Number(e)}return n},isNaN:function(e){function t(t){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}((function(e){return"number"===typeof e&&isNaN(e)})),includes:function(e,t){return-1!==e.indexOf(t)},insert:function(e,t,n){return e.slice(0,n)+t+e.slice(n)},reduce:function(e,t){if(null===this)throw new TypeError("Array.prototype.reduce called on null or undefined");if("function"!==typeof t)throw new TypeError(t+" is not a function");var n,r=Object(e),i=r.length>>>0,a=0;if(3===arguments.length)n=arguments[2];else{for(;a=i)throw new TypeError("Reduce of empty array with no initial value");n=r[a++]}for(;ar?e:r}),1)},toFixed:function(e,t,n,r){var i,a,o,s,l=e.toString().split("."),c=t-(r||0);return i=2===l.length?Math.min(Math.max(l[1].length,c),t):c,o=Math.pow(10,i),s=(n(e+"e+"+i)/o).toFixed(i),r>t-i&&(a=new RegExp("\\.?0{1,"+(r-(t-i))+"}$"),s=s.replace(a,"")),s}},e.options=o,e.formats=r,e.locales=i,e.locale=function(e){return e&&(o.currentLocale=e.toLowerCase()),o.currentLocale},e.localeData=function(e){if(!e)return i[o.currentLocale];if(e=e.toLowerCase(),!i[e])throw new Error("Unknown locale : "+e);return i[e]},e.reset=function(){for(var e in a)o[e]=a[e]},e.zeroFormat=function(e){o.zeroFormat="string"===typeof e?e:null},e.nullFormat=function(e){o.nullFormat="string"===typeof e?e:null},e.defaultFormat=function(e){o.defaultFormat="string"===typeof e?e:"0.0"},e.register=function(e,t,n){if(t=t.toLowerCase(),this[e+"s"][t])throw new TypeError(t+" "+e+" already registered.");return this[e+"s"][t]=n,n},e.validate=function(t,n){var r,i,a,o,s,l,c,u;if("string"!==typeof t&&(t+="",console.warn&&console.warn("Numeral.js: Value is not string. It has been co-erced to: ",t)),(t=t.trim()).match(/^\d+$/))return!0;if(""===t)return!1;try{c=e.localeData(n)}catch(f){c=e.localeData(e.locale())}return a=c.currency.symbol,s=c.abbreviations,r=c.delimiters.decimal,i="."===c.delimiters.thousands?"\\.":c.delimiters.thousands,(null===(u=t.match(/^[^\d]+/))||(t=t.substr(1),u[0]===a))&&(null===(u=t.match(/[^\d]+$/))||(t=t.slice(0,-1),u[0]===s.thousand||u[0]===s.million||u[0]===s.billion||u[0]===s.trillion))&&(l=new RegExp(i+"{2}"),!t.match(/[^\d.,]/g)&&!((o=t.split(r)).length>2)&&(o.length<2?!!o[0].match(/^\d+.*\d$/)&&!o[0].match(l):1===o[0].length?!!o[0].match(/^\d+$/)&&!o[0].match(l)&&!!o[1].match(/^\d+$/):!!o[0].match(/^\d+.*\d$/)&&!o[0].match(l)&&!!o[1].match(/^\d+$/)))},e.fn=s.prototype={clone:function(){return e(this)},format:function(t,n){var i,a,s,l=this._value,c=t||o.defaultFormat;if(n=n||Math.round,0===l&&null!==o.zeroFormat)a=o.zeroFormat;else if(null===l&&null!==o.nullFormat)a=o.nullFormat;else{for(i in r)if(c.match(r[i].regexps.format)){s=r[i].format;break}a=(s=s||e._.numberToFormat)(l,c,n)}return a},value:function(){return this._value},input:function(){return this._input},set:function(e){return this._value=Number(e),this},add:function(e){var n=t.correctionFactor.call(null,this._value,e);function r(e,t,r,i){return e+Math.round(n*t)}return this._value=t.reduce([this._value,e],r,0)/n,this},subtract:function(e){var n=t.correctionFactor.call(null,this._value,e);function r(e,t,r,i){return e-Math.round(n*t)}return this._value=t.reduce([e],r,Math.round(this._value*n))/n,this},multiply:function(e){function n(e,n,r,i){var a=t.correctionFactor(e,n);return Math.round(e*a)*Math.round(n*a)/Math.round(a*a)}return this._value=t.reduce([this._value,e],n,1),this},divide:function(e){function n(e,n,r,i){var a=t.correctionFactor(e,n);return Math.round(e*a)/Math.round(n*a)}return this._value=t.reduce([this._value,e],n),this},difference:function(t){return Math.abs(e(this._value).subtract(t).value())}},e.register("locale","en",{delimiters:{thousands:",",decimal:"."},abbreviations:{thousand:"k",million:"m",billion:"b",trillion:"t"},ordinal:function(e){var t=e%10;return 1===~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th"},currency:{symbol:"$"}}),e.register("format","bps",{regexps:{format:/(BPS)/,unformat:/(BPS)/},format:function(t,n,r){var i,a=e._.includes(n," BPS")?" ":"";return t*=1e4,n=n.replace(/\s?BPS/,""),i=e._.numberToFormat(t,n,r),e._.includes(i,")")?((i=i.split("")).splice(-1,0,a+"BPS"),i=i.join("")):i=i+a+"BPS",i},unformat:function(t){return+(1e-4*e._.stringToNumber(t)).toFixed(15)}}),function(){var t={base:1e3,suffixes:["B","KB","MB","GB","TB","PB","EB","ZB","YB"]},n={base:1024,suffixes:["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"]},r=t.suffixes.concat(n.suffixes.filter((function(e){return t.suffixes.indexOf(e)<0}))).join("|");r="("+r.replace("B","B(?!PS)")+")",e.register("format","bytes",{regexps:{format:/([0\s]i?b)/,unformat:new RegExp(r)},format:function(r,i,a){var o,s,l,c=e._.includes(i,"ib")?n:t,u=e._.includes(i," b")||e._.includes(i," ib")?" ":"";for(i=i.replace(/\s?i?b/,""),o=0;o<=c.suffixes.length;o++)if(s=Math.pow(c.base,o),l=Math.pow(c.base,o+1),null===r||0===r||r>=s&&r0&&(r/=s);break}return e._.numberToFormat(r,i,a)+u},unformat:function(r){var i,a,o=e._.stringToNumber(r);if(o){for(i=t.suffixes.length-1;i>=0;i--){if(e._.includes(r,t.suffixes[i])){a=Math.pow(t.base,i);break}if(e._.includes(r,n.suffixes[i])){a=Math.pow(n.base,i);break}}o*=a||1}return o}})}(),e.register("format","currency",{regexps:{format:/(\$)/},format:function(t,n,r){var i,a,o=e.locales[e.options.currentLocale],s={before:n.match(/^([\+|\-|\(|\s|\$]*)/)[0],after:n.match(/([\+|\-|\)|\s|\$]*)$/)[0]};for(n=n.replace(/\s?\$\s?/,""),i=e._.numberToFormat(t,n,r),t>=0?(s.before=s.before.replace(/[\-\(]/,""),s.after=s.after.replace(/[\-\)]/,"")):t<0&&!e._.includes(s.before,"-")&&!e._.includes(s.before,"(")&&(s.before="-"+s.before),a=0;a=0;a--)switch(s.after[a]){case"$":i=a===s.after.length-1?i+o.currency.symbol:e._.insert(i,o.currency.symbol,-(s.after.length-(1+a)));break;case" ":i=a===s.after.length-1?i+" ":e._.insert(i," ",-(s.after.length-(1+a)+o.currency.symbol.length-1))}return i}}),e.register("format","exponential",{regexps:{format:/(e\+|e-)/,unformat:/(e\+|e-)/},format:function(t,n,r){var i=("number"!==typeof t||e._.isNaN(t)?"0e+0":t.toExponential()).split("e");return n=n.replace(/e[\+|\-]{1}0/,""),e._.numberToFormat(Number(i[0]),n,r)+"e"+i[1]},unformat:function(t){var n=e._.includes(t,"e+")?t.split("e+"):t.split("e-"),r=Number(n[0]),i=Number(n[1]);function a(t,n,r,i){var a=e._.correctionFactor(t,n);return t*a*(n*a)/(a*a)}return i=e._.includes(t,"e-")?i*=-1:i,e._.reduce([r,Math.pow(10,i)],a,1)}}),e.register("format","ordinal",{regexps:{format:/(o)/},format:function(t,n,r){var i=e.locales[e.options.currentLocale],a=e._.includes(n," o")?" ":"";return n=n.replace(/\s?o/,""),a+=i.ordinal(t),e._.numberToFormat(t,n,r)+a}}),e.register("format","percentage",{regexps:{format:/(%)/,unformat:/(%)/},format:function(t,n,r){var i,a=e._.includes(n," %")?" ":"";return e.options.scalePercentBy100&&(t*=100),n=n.replace(/\s?\%/,""),i=e._.numberToFormat(t,n,r),e._.includes(i,")")?((i=i.split("")).splice(-1,0,a+"%"),i=i.join("")):i=i+a+"%",i},unformat:function(t){var n=e._.stringToNumber(t);return e.options.scalePercentBy100?.01*n:n}}),e.register("format","time",{regexps:{format:/(:)/,unformat:/(:)/},format:function(e,t,n){var r=Math.floor(e/60/60),i=Math.floor((e-60*r*60)/60),a=Math.round(e-60*r*60-60*i);return r+":"+(i<10?"0"+i:i)+":"+(a<10?"0"+a:a)},unformat:function(e){var t=e.split(":"),n=0;return 3===t.length?(n+=60*Number(t[0])*60,n+=60*Number(t[1]),n+=Number(t[2])):2===t.length&&(n+=60*Number(t[0]),n+=Number(t[1])),Number(n)}}),e})?r.call(t,n,t,e):r)||(e.exports=i)},function(e,t,n){"use strict";var r=n(47),i=n(48);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var a=i(n(0)),o=(0,r(n(49)).default)(a.createElement("path",{d:"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"}),"Person");t.default=o},function(e,t,n){"use strict";var r=n(47),i=n(48);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var a=i(n(0)),o=(0,r(n(49)).default)(a.createElement("path",{d:"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z"}),"Lock");t.default=o},function(e,t,n){"use strict";var r=n(47),i=n(48);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var a=i(n(0)),o=(0,r(n(49)).default)(a.createElement("path",{d:"M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z"}),"ExpandMore");t.default=o},function(e,t,n){"use strict";var r=n(47),i=n(48);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var a=i(n(0)),o=(0,r(n(49)).default)(a.createElement("path",{d:"M10 16.5l6-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"}),"PlayCircleOutline");t.default=o},function(e,t,n){"use strict";var r=n(47),i=n(48);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var a=i(n(0)),o=(0,r(n(49)).default)(a.createElement("path",{d:"M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm0 10.99h7c-.53 4.12-3.28 7.79-7 8.94V12H5V6.3l7-3.11v8.8z"}),"Security");t.default=o},function(e,t,n){"use strict";var r=n(47),i=n(48);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var a=i(n(0)),o=(0,r(n(49)).default)(a.createElement("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"}),"Settings");t.default=o},function(e,t,n){"use strict";function r(e,t,n,r,i,a,o){try{var s=e[a](o),l=s.value}catch(c){return void n(c)}s.done?t(l):Promise.resolve(l).then(r,i)}function i(e){return function(){var t=this,n=arguments;return new Promise((function(i,a){var o=e.apply(t,n);function s(e){r(o,i,a,s,l,"next",e)}function l(e){r(o,i,a,s,l,"throw",e)}s(void 0)}))}}n.d(t,"a",(function(){return i}))},function(e,t,n){"use strict";var r=n(47),i=n(48);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var a=i(n(0)),o=(0,r(n(49)).default)(a.createElement("path",{d:"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4l6 6v10c0 1.1-.9 2-2 2H7.99C6.89 23 6 22.1 6 21l.01-14c0-1.1.89-2 1.99-2h7zm-1 7h5.5L14 6.5V12z"}),"FileCopy");t.default=o},function(e,t,n){"use strict";var r=n(44),i=n.n(r),a=n(145),o=n.n(a),s=n(146),l=n.n(s);i.a.extend(o.a),i.a.extend(l.a);var c=function(){function e(e){var t=void 0===e?{}:e,n=t.locale,r=t.instance,a=t.dayjs;this.yearFormat="YYYY",this.yearMonthFormat="MMMM YYYY",this.dateTime12hFormat="MMMM Do hh:mm a",this.dateTime24hFormat="MMMM Do HH:mm",this.time12hFormat="hh:mm A",this.time24hFormat="HH:mm",this.dateFormat="MMMM Do",this.dayjs=function(e,t){return t?function(){for(var n=[],r=0;r68?1900:2e3)},s=function(e){return function(t){this[e]=+t}},l=[/[+-]\d\d:?(\d\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if("Z"===e)return 0;var t=e.match(/([+-]|\d\d)/g),n=60*t[1]+(+t[2]||0);return 0===n?0:"+"===t[0]?-n:n}(e)}],c=function(e){var t=a[e];return t&&(t.indexOf?t:t.s.concat(t.f))},u=function(e,t){var n,r=a.meridiem;if(r){for(var i=1;i<=24;i+=1)if(e.indexOf(r(i,0,t))>-1){n=i>12;break}}else n=e===(t?"pm":"PM");return n},f={A:[i,function(e){this.afternoon=u(e,!1)}],a:[i,function(e){this.afternoon=u(e,!0)}],S:[/\d/,function(e){this.milliseconds=100*+e}],SS:[n,function(e){this.milliseconds=10*+e}],SSS:[/\d{3}/,function(e){this.milliseconds=+e}],s:[r,s("seconds")],ss:[r,s("seconds")],m:[r,s("minutes")],mm:[r,s("minutes")],H:[r,s("hours")],h:[r,s("hours")],HH:[r,s("hours")],hh:[r,s("hours")],D:[r,s("day")],DD:[n,s("day")],Do:[i,function(e){var t=a.ordinal,n=e.match(/\d+/);if(this.day=n[0],t)for(var r=1;r<=31;r+=1)t(r).replace(/\[|\]/g,"")===e&&(this.day=r)}],M:[r,s("month")],MM:[n,s("month")],MMM:[i,function(e){var t=c("months"),n=(c("monthsShort")||t.map((function(e){return e.substr(0,3)}))).indexOf(e)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[i,function(e){var t=c("months").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\d+/,s("year")],YY:[n,function(e){this.year=o(e)}],YYYY:[/\d{4}/,s("year")],Z:l,ZZ:l};function d(n){var r,i;r=n,i=a&&a.formats;for(var o=(n=r.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var a=r&&r.toUpperCase();return n||i[r]||e[r]||i[a].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))).match(t),s=o.length,l=0;l-1)return new Date(("X"===t?1e3:1)*e);var r=d(t)(e),i=r.year,a=r.month,o=r.day,s=r.hours,l=r.minutes,c=r.seconds,u=r.milliseconds,f=r.zone,h=new Date,p=o||(i||a?1:h.getDate()),v=i||h.getFullYear(),m=0;i&&!a||(m=a>0?a-1:h.getMonth());var g=s||0,b=l||0,y=c||0,O=u||0;return f?new Date(Date.UTC(v,m,p,g,b,y,O+60*f.offset*1e3)):n?new Date(Date.UTC(v,m,p,g,b,y,O)):new Date(v,m,p,g,b,y,O)}catch(e){return new Date("")}}(t,s,r),this.init(),f&&!0!==f&&(this.$L=this.locale(f).$L),u&&t!=this.format(s)&&(this.$d=new Date("")),a={}}else if(s instanceof Array)for(var h=s.length,p=1;p<=h;p+=1){o[1]=s[p-1];var v=n.apply(this,o);if(v.isValid()){this.$d=v.$d,this.$L=v.$L,this.init();break}p===h&&(this.$d=new Date(""))}else i.call(this,e)}}}()},function(e,t,n){e.exports=function(){"use strict";return function(e,t,n){var r=t.prototype,i=r.format;n.en.ordinal=function(e){var t=["th","st","nd","rd"],n=e%100;return"["+e+(t[(n-20)%10]||t[n]||t[0])+"]"},r.format=function(e){var t=this,n=this.$locale();if(!this.isValid())return i.bind(this)(e);var r=this.$utils(),a=(e||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,(function(e){switch(e){case"Q":return Math.ceil((t.$M+1)/3);case"Do":return n.ordinal(t.$D);case"gggg":return t.weekYear();case"GGGG":return t.isoWeekYear();case"wo":return n.ordinal(t.week(),"W");case"w":case"ww":return r.s(t.week(),"w"===e?1:2,"0");case"W":case"WW":return r.s(t.isoWeek(),"W"===e?1:2,"0");case"k":case"kk":return r.s(String(0===t.$H?24:t.$H),"k"===e?1:2,"0");case"X":return Math.floor(t.$d.getTime()/1e3);case"x":return t.$d.getTime();case"z":return"["+t.offsetName()+"]";case"zzz":return"["+t.offsetName("long")+"]";default:return e}}));return i.bind(this)(a)}}}()},function(e,t,n){"use strict";var r=n(20),i=n(8),a=n(191),o=n(2),s=["xs","sm","md","lg","xl"];function l(e){var t=e.values,n=void 0===t?{xs:0,sm:600,md:960,lg:1280,xl:1920}:t,r=e.unit,a=void 0===r?"px":r,l=e.step,c=void 0===l?5:l,u=Object(i.a)(e,["values","unit","step"]);function f(e){var t="number"===typeof n[e]?n[e]:e;return"@media (min-width:".concat(t).concat(a,")")}function d(e,t){var r=s.indexOf(t);return r===s.length-1?f(e):"@media (min-width:".concat("number"===typeof n[e]?n[e]:e).concat(a,") and ")+"(max-width:".concat((-1!==r&&"number"===typeof n[s[r+1]]?n[s[r+1]]:t)-c/100).concat(a,")")}return Object(o.a)({keys:s,values:n,up:f,down:function(e){var t=s.indexOf(e)+1,r=n[s[t]];return t===s.length?f("xs"):"@media (max-width:".concat(("number"===typeof r&&t>0?r:e)-c/100).concat(a,")")},between:d,only:function(e){return d(e,e)},width:function(e){return n[e]}},u)}function c(e,t,n){var i;return Object(o.a)({gutters:function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Object(o.a)({paddingLeft:t(2),paddingRight:t(2)},n,Object(r.a)({},e.up("sm"),Object(o.a)({paddingLeft:t(3),paddingRight:t(3)},n[e.up("sm")])))},toolbar:(i={minHeight:56},Object(r.a)(i,"".concat(e.up("xs")," and (orientation: landscape)"),{minHeight:48}),Object(r.a)(i,e.up("sm"),{minHeight:64}),i)},n)}var u=n(152),f={black:"#000",white:"#fff"},d={50:"#fafafa",100:"#f5f5f5",200:"#eeeeee",300:"#e0e0e0",400:"#bdbdbd",500:"#9e9e9e",600:"#757575",700:"#616161",800:"#424242",900:"#212121",A100:"#d5d5d5",A200:"#aaaaaa",A400:"#303030",A700:"#616161"},h={50:"#e8eaf6",100:"#c5cae9",200:"#9fa8da",300:"#7986cb",400:"#5c6bc0",500:"#3f51b5",600:"#3949ab",700:"#303f9f",800:"#283593",900:"#1a237e",A100:"#8c9eff",A200:"#536dfe",A400:"#3d5afe",A700:"#304ffe"},p={50:"#fce4ec",100:"#f8bbd0",200:"#f48fb1",300:"#f06292",400:"#ec407a",500:"#e91e63",600:"#d81b60",700:"#c2185b",800:"#ad1457",900:"#880e4f",A100:"#ff80ab",A200:"#ff4081",A400:"#f50057",A700:"#c51162"},v={50:"#ffebee",100:"#ffcdd2",200:"#ef9a9a",300:"#e57373",400:"#ef5350",500:"#f44336",600:"#e53935",700:"#d32f2f",800:"#c62828",900:"#b71c1c",A100:"#ff8a80",A200:"#ff5252",A400:"#ff1744",A700:"#d50000"},m={50:"#fff3e0",100:"#ffe0b2",200:"#ffcc80",300:"#ffb74d",400:"#ffa726",500:"#ff9800",600:"#fb8c00",700:"#f57c00",800:"#ef6c00",900:"#e65100",A100:"#ffd180",A200:"#ffab40",A400:"#ff9100",A700:"#ff6d00"},g={50:"#e3f2fd",100:"#bbdefb",200:"#90caf9",300:"#64b5f6",400:"#42a5f5",500:"#2196f3",600:"#1e88e5",700:"#1976d2",800:"#1565c0",900:"#0d47a1",A100:"#82b1ff",A200:"#448aff",A400:"#2979ff",A700:"#2962ff"},b={50:"#e8f5e9",100:"#c8e6c9",200:"#a5d6a7",300:"#81c784",400:"#66bb6a",500:"#4caf50",600:"#43a047",700:"#388e3c",800:"#2e7d32",900:"#1b5e20",A100:"#b9f6ca",A200:"#69f0ae",A400:"#00e676",A700:"#00c853"},y=n(22),O={text:{primary:"rgba(0, 0, 0, 0.87)",secondary:"rgba(0, 0, 0, 0.54)",disabled:"rgba(0, 0, 0, 0.38)",hint:"rgba(0, 0, 0, 0.38)"},divider:"rgba(0, 0, 0, 0.12)",background:{paper:f.white,default:d[50]},action:{active:"rgba(0, 0, 0, 0.54)",hover:"rgba(0, 0, 0, 0.04)",hoverOpacity:.04,selected:"rgba(0, 0, 0, 0.08)",selectedOpacity:.08,disabled:"rgba(0, 0, 0, 0.26)",disabledBackground:"rgba(0, 0, 0, 0.12)",disabledOpacity:.38,focus:"rgba(0, 0, 0, 0.12)",focusOpacity:.12,activatedOpacity:.12}},k={text:{primary:f.white,secondary:"rgba(255, 255, 255, 0.7)",disabled:"rgba(255, 255, 255, 0.5)",hint:"rgba(255, 255, 255, 0.5)",icon:"rgba(255, 255, 255, 0.5)"},divider:"rgba(255, 255, 255, 0.12)",background:{paper:d[800],default:"#303030"},action:{active:f.white,hover:"rgba(255, 255, 255, 0.08)",hoverOpacity:.08,selected:"rgba(255, 255, 255, 0.16)",selectedOpacity:.16,disabled:"rgba(255, 255, 255, 0.3)",disabledBackground:"rgba(255, 255, 255, 0.12)",disabledOpacity:.38,focus:"rgba(255, 255, 255, 0.12)",focusOpacity:.12,activatedOpacity:.24}};function x(e,t,n,r){var i=r.light||r,a=r.dark||1.5*r;e[t]||(e.hasOwnProperty(n)?e[t]=e[n]:"light"===t?e.light=Object(y.e)(e.main,i):"dark"===t&&(e.dark=Object(y.a)(e.main,a)))}function w(e){var t=e.primary,n=void 0===t?{light:h[300],main:h[500],dark:h[700]}:t,r=e.secondary,s=void 0===r?{light:p.A200,main:p.A400,dark:p.A700}:r,l=e.error,c=void 0===l?{light:v[300],main:v[500],dark:v[700]}:l,w=e.warning,j=void 0===w?{light:m[300],main:m[500],dark:m[700]}:w,S=e.info,C=void 0===S?{light:g[300],main:g[500],dark:g[700]}:S,M=e.success,E=void 0===M?{light:b[300],main:b[500],dark:b[700]}:M,T=e.type,P=void 0===T?"light":T,_=e.contrastThreshold,D=void 0===_?3:_,A=e.tonalOffset,R=void 0===A?.2:A,L=Object(i.a)(e,["primary","secondary","error","warning","info","success","type","contrastThreshold","tonalOffset"]);function N(e){return Object(y.d)(e,k.text.primary)>=D?k.text.primary:O.text.primary}var z=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:500,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:300,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:700;if(!(e=Object(o.a)({},e)).main&&e[t]&&(e.main=e[t]),!e.main)throw new Error(Object(u.a)(4,t));if("string"!==typeof e.main)throw new Error(Object(u.a)(5,JSON.stringify(e.main)));return x(e,"light",n,R),x(e,"dark",r,R),e.contrastText||(e.contrastText=N(e.main)),e},I={dark:k,light:O};return Object(a.a)(Object(o.a)({common:f,type:P,primary:z(n),secondary:z(s,"A400","A200","A700"),error:z(c),warning:z(j),info:z(C),success:z(E),grey:d,contrastThreshold:D,getContrastText:N,augmentColor:z,tonalOffset:R},I[P]),L)}function j(e){return Math.round(1e5*e)/1e5}var S={textTransform:"uppercase"},C='"Roboto", "Helvetica", "Arial", sans-serif';function M(e,t){var n="function"===typeof t?t(e):t,r=n.fontFamily,s=void 0===r?C:r,l=n.fontSize,c=void 0===l?14:l,u=n.fontWeightLight,f=void 0===u?300:u,d=n.fontWeightRegular,h=void 0===d?400:d,p=n.fontWeightMedium,v=void 0===p?500:p,m=n.fontWeightBold,g=void 0===m?700:m,b=n.htmlFontSize,y=void 0===b?16:b,O=n.allVariants,k=n.pxToRem,x=Object(i.a)(n,["fontFamily","fontSize","fontWeightLight","fontWeightRegular","fontWeightMedium","fontWeightBold","htmlFontSize","allVariants","pxToRem"]);var w=c/14,M=k||function(e){return"".concat(e/y*w,"rem")},E=function(e,t,n,r,i){return Object(o.a)({fontFamily:s,fontWeight:e,fontSize:M(t),lineHeight:n},s===C?{letterSpacing:"".concat(j(r/t),"em")}:{},i,O)},T={h1:E(f,96,1.167,-1.5),h2:E(f,60,1.2,-.5),h3:E(h,48,1.167,0),h4:E(h,34,1.235,.25),h5:E(h,24,1.334,0),h6:E(v,20,1.6,.15),subtitle1:E(h,16,1.75,.15),subtitle2:E(v,14,1.57,.1),body1:E(h,16,1.5,.15),body2:E(h,14,1.43,.15),button:E(v,14,1.75,.4,S),caption:E(h,12,1.66,.4),overline:E(h,12,2.66,1,S)};return Object(a.a)(Object(o.a)({htmlFontSize:y,pxToRem:M,round:j,fontFamily:s,fontSize:c,fontWeightLight:f,fontWeightRegular:h,fontWeightMedium:v,fontWeightBold:g},T),x,{clone:!1})}function E(){return["".concat(arguments.length<=0?void 0:arguments[0],"px ").concat(arguments.length<=1?void 0:arguments[1],"px ").concat(arguments.length<=2?void 0:arguments[2],"px ").concat(arguments.length<=3?void 0:arguments[3],"px rgba(0,0,0,").concat(.2,")"),"".concat(arguments.length<=4?void 0:arguments[4],"px ").concat(arguments.length<=5?void 0:arguments[5],"px ").concat(arguments.length<=6?void 0:arguments[6],"px ").concat(arguments.length<=7?void 0:arguments[7],"px rgba(0,0,0,").concat(.14,")"),"".concat(arguments.length<=8?void 0:arguments[8],"px ").concat(arguments.length<=9?void 0:arguments[9],"px ").concat(arguments.length<=10?void 0:arguments[10],"px ").concat(arguments.length<=11?void 0:arguments[11],"px rgba(0,0,0,").concat(.12,")")].join(",")}var T=["none",E(0,2,1,-1,0,1,1,0,0,1,3,0),E(0,3,1,-2,0,2,2,0,0,1,5,0),E(0,3,3,-2,0,3,4,0,0,1,8,0),E(0,2,4,-1,0,4,5,0,0,1,10,0),E(0,3,5,-1,0,5,8,0,0,1,14,0),E(0,3,5,-1,0,6,10,0,0,1,18,0),E(0,4,5,-2,0,7,10,1,0,2,16,1),E(0,5,5,-3,0,8,10,1,0,3,14,2),E(0,5,6,-3,0,9,12,1,0,3,16,2),E(0,6,6,-3,0,10,14,1,0,4,18,3),E(0,6,7,-4,0,11,15,1,0,4,20,3),E(0,7,8,-4,0,12,17,2,0,5,22,4),E(0,7,8,-4,0,13,19,2,0,5,24,4),E(0,7,9,-4,0,14,21,2,0,5,26,4),E(0,8,9,-5,0,15,22,2,0,6,28,5),E(0,8,10,-5,0,16,24,2,0,6,30,5),E(0,8,11,-5,0,17,26,2,0,6,32,5),E(0,9,11,-5,0,18,28,2,0,7,34,6),E(0,9,12,-6,0,19,29,2,0,7,36,6),E(0,10,13,-6,0,20,31,3,0,8,38,7),E(0,10,13,-6,0,21,33,3,0,8,40,7),E(0,10,14,-6,0,22,35,3,0,8,42,7),E(0,11,14,-7,0,23,36,3,0,9,44,8),E(0,11,15,-7,0,24,38,3,0,9,46,8)],P={borderRadius:4},_=n(270);function D(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:8;if(e.mui)return e;var t=Object(_.a)({spacing:e}),n=function(){for(var e=arguments.length,n=new Array(e),r=0;r0&&void 0!==arguments[0]?arguments[0]:{},t=e.breakpoints,n=void 0===t?{}:t,r=e.mixins,o=void 0===r?{}:r,s=e.palette,u=void 0===s?{}:s,f=e.spacing,d=e.typography,h=void 0===d?{}:d,p=Object(i.a)(e,["breakpoints","mixins","palette","spacing","typography"]),v=w(u),m=l(n),g=D(f),b=Object(a.a)({breakpoints:m,direction:"ltr",mixins:c(m,g,o),overrides:{},palette:v,props:{},shadows:T,typography:M(v,h),spacing:g,shape:P,transitions:A.a,zIndex:R.a},p),y=arguments.length,O=new Array(y>1?y-1:0),k=1;k-1;return function(e){return b(e,!0,1,void 0,a&&!function(e){var t,n;return e.pos==(null===(t=e.options)||void 0===t?void 0:t.simulateBreak)&&(null===(n=e.options)||void 0===n?void 0:n.simulateDoubleBreak)}(e)?i.start:void 0)}}return null==e.parent?v:null}function v(){return 0}var m=function(e){Object(s.a)(n,e);var t=Object(l.a)(n);function n(e,i,a){var o;return Object(r.a)(this,n),(o=t.call(this,e.state,e.options)).pos=i,o.node=a,o}return Object(i.a)(n,[{key:"textAfter",get:function(){return this.textAfterPos(this.pos)}},{key:"baseIndent",get:function(){for(var e=this.state.doc.lineAt(this.node.start);;){for(var t=this.node.resolve(e.from);t.parent&&t.parent.start==t.start;)t=t.parent;if(g(t,this.node))break;e=this.state.doc.lineAt(t.start)}return this.lineIndent(e)}}]),n}(u.g);function g(e,t){for(var n=t;n;n=n.parent)if(e==n)return!0;return!1}function b(e,t,n,r,i){var a=e.textAfter,o=a.match(/^\s*/)[0].length,s=r&&a.slice(o,o+r.length)==r||i==e.pos+o,l=t?function(e){var t,n=e.node,r=n.childAfter(n.start),i=n.lastChild;if(!r)return null;for(var a=null===(t=e.options)||void 0===t?void 0:t.simulateBreak,o=e.state.doc.lineAt(r.start),s=null==a||a<=o.from?o.to:Math.min(o.to,a),l=r.end;;){var u=n.childAfter(l);if(!u||u==i)return null;if(!u.type.prop(c.c.skipped))return u.startn)){if(r&&i.start=t&&s.to>n&&(r=s)}}return r})))]}return Object(i.a)(e,[{key:"withDialect",value:function(t){return new e(this.parser,t,this.languageData)}},{key:"getTree",value:function(e){return e.field(this.field).tree}},{key:"parsePos",value:function(e){return e.field(this.field).upto}},{key:"ensureTree",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:100,r=e.field(this.field);if(r.upto>=t)return r.updatedTree;if(r.parse||r.startParse(this,e.doc),r.parse.pos1&&void 0!==arguments[1]?arguments[1]:{},r=u.f.define({combine:n.languageData?function(e){return e.concat(n.languageData)}:void 0});return new e(t.withProps(u.n.add(Object(o.a)({},t.topType.name,r))),n.dialect||"",r)}}]),e}(),k=function(){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.length;Object(r.a)(this,e),this.doc=t,this.length=n,this.cursorPos=0,this.string="",this.cursor=t.iter()}return Object(i.a)(e,[{key:"get",value:function(e){if(e>=this.length)return-1;var t=this.cursorPos-this.string.length;return(e=this.cursorPos)&&(e=this.cursorPos?this.doc.sliceString(e,t):this.string.slice(e-n,t-n)}},{key:"clip",value:function(t){return new e(this.doc,t)}}]),e}();function x(e,t){for(var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:5e6,r=Date.now()+t;;){var i=e.advance();if(i)return i;if(e.pos>n||Date.now()>r)return null}}function w(e,t){var n=e.forceFinish(),r=n.applyChanges([{fromA:e.pos,toA:n.length,fromB:e.pos,toB:n.length}]).append(t.applyChanges([{fromA:0,toA:e.pos,fromB:0,toB:e.pos}]));return{parsed:n,cache:r}}var j=function(){function e(t,n,i){Object(r.a)(this,e),this.tree=t,this.upto=n,this.cache=i,this.parse=null,this.updatedTree=t}return Object(i.a)(e,[{key:"apply",value:function(t,n,r){var i,o=Object(a.a)(t.effects);try{for(o.s();!(i=o.n()).done;){var s=i.value;if(s.is(r))return s.value}}catch(c){o.e(c)}finally{o.f()}if(!t.docChanged)return this;var l=[];return t.changes.iterChangedRanges((function(e,t,n,r){return l.push({fromA:e,toA:t,fromB:n,toB:r})})),e.advance((this.parse?w(this.parse,this.updatedTree).cache:this.cache).applyChanges(l),n,t.state.doc)}},{key:"startParse",value:function(e,t){this.parse=e.parser.startParse(new k(t),{cache:this.cache,dialect:e.dialect})}},{key:"stopParse",value:function(e,t){if(e)this.cache=e;else{var n=w(this.parse,this.updatedTree);e=n.parsed,this.cache=n.cache}return this.updatedTree=e,this.upto=null!==t&&void 0!==t?t:this.parse.pos,this.parse=null,e}}],[{key:"advance",value:function(t,n,r){var i=n.parser.startParse(new k(r),{cache:t,dialect:n.dialect}),a=x(i,25);if(a)return new e(a,r.length,a);var o=w(i,t);return new e(o.parsed,i.pos,o.cache)}}]),e}(),S="undefined"!=typeof window&&window.requestIdleCallback||function(e,t){var n=t.timeout;return setTimeout(e,n)},C="undefined"!=typeof window&&window.cancelIdleCallback||clearTimeout,M=function(){function e(t,n,i){Object(r.a)(this,e),this.view=t,this.syntax=n,this.setSyntax=i,this.working=-1,this.work=this.work.bind(this),this.scheduleWork()}return Object(i.a)(e,[{key:"update",value:function(e){e.docChanged&&this.scheduleWork()}},{key:"scheduleWork",value:function(){if(!(this.working>-1)){var e=this.view.state;e.field(this.syntax.field).upto>=e.doc.length||(this.working=S(this.work,{timeout:200}))}}},{key:"work",value:function(e){this.working=-1;var t=this.view.state,n=t.field(this.syntax.field);if(!(n.upto>=t.doc.length)){n.parse||n.startParse(this.syntax,t.doc);var r=x(n.parse,e?Math.max(25,e.timeRemaining()):100);if(r||n.parse.badness>.8){var i=n.stopParse(r,t.doc.length);this.view.dispatch({effects:this.setSyntax.of(new j(i,t.doc.length,n.cache))})}else this.scheduleWork()}}},{key:"destroy",value:function(){this.working>=0&&C(this.working)}}]),e}(),E=n(105),T={bool:1,ignoring:2,on:3,group_left:4,group_right:5,offset:6},P={avg:7,bottomk:8,count:9,count_values:10,group:11,max:12,min:13,quantile:14,stddev:15,stdvar:16,sum:17,topk:18,by:19,without:20,and:21,or:22,unless:23},_={__proto__:null,absent_over_time:257,absent:259,abs:261,avg_over_time:263,ceil:265,changes:267,clamp_max:269,clamp_min:271,count_over_time:273,days_in_month:275,day_of_month:277,day_of_week:279,delta:281,deriv:283,exp:285,floor:287,histogram_quantile:289,holt_winters:291,hour:293,idelta:295,increase:297,irate:299,label_replace:301,label_join:303,ln:305,log10:307,log2:309,max_over_time:311,min_over_time:313,minute:315,month:317,predict_linear:319,quantile_over_time:321,rate:323,resets:325,round:327,scalar:329,sort:331,sort_desc:333,sqrt:335,stddev_over_time:337,stdvar_over_time:339,sum_over_time:341,timestamp:343,time:345,vector:347,year:349},D=E.b.deserialize({states:"2SO%jQPOOOOQO'#Cx'#CxO%nQPO'#CwQ'QQQOOOOQO'#De'#DeO%tQPO'#DdO%jQPO'#ElOOQO'#Ep'#EpO%jQPO'#EoOOQO'#Er'#ErO'UQSO'#EsO'^QQO'#EqOOQO'#Eq'#EqOOQO'#Cv'#CvOOQO'#Df'#DfOOQO'#Dh'#DhOOQO'#Di'#DiOOQO'#Dj'#DjOOQO'#Dk'#DkOOQO'#Dl'#DlOOQO'#Dm'#DmOOQO'#Dn'#DnOOQO'#Do'#DoOOQO'#Dp'#DpOOQO'#Dq'#DqOOQO'#Dr'#DrOOQO'#Ds'#DsOOQO'#Dt'#DtOOQO'#Du'#DuOOQO'#Dv'#DvOOQO'#Dw'#DwOOQO'#Dx'#DxOOQO'#Dy'#DyOOQO'#Dz'#DzOOQO'#D{'#D{OOQO'#D|'#D|OOQO'#D}'#D}OOQO'#EO'#EOOOQO'#EP'#EPOOQO'#EQ'#EQOOQO'#ER'#EROOQO'#ES'#ESOOQO'#ET'#ETOOQO'#EU'#EUOOQO'#EV'#EVOOQO'#EW'#EWOOQO'#EX'#EXOOQO'#EY'#EYOOQO'#EZ'#EZOOQO'#E['#E[OOQO'#E]'#E]OOQO'#E^'#E^OOQO'#E_'#E_OOQO'#E`'#E`OOQO'#Ea'#EaOOQO'#Eb'#EbOOQO'#Ec'#EcOOQO'#Ed'#EdOOQO'#Ee'#EeOOQO'#Ef'#EfOOQO'#Eg'#EgO(qQPO'#CyO(vQPO'#DOO%tQPO,59cO(}QQO,59cO/OQPO,59lO/OQPO,59lO/OQPO,59lO/OQPO,59lO/OQPO,59lO/SQQO,5;SO/XQQO,5;VOOQO,5:O,5:OO/^QQO,5;WO/eQQO,5;ZO0uQPO'#EuO1TQPO,5;_OOQO'#Et'#EtOOQO,5;_,5;_OOQO,5;],5;]O1]QSO'#CzOOQO,59e,59eO1eQPO,59jO1mQQO'#DPOOQO,59j,59jOOQO1G.}1G.}OOQO'#DU'#DUO6XQPO'#DTO6cQPO'#DTOOQO'#DS'#DSO%jQPO1G/WO%jQPO1G/WO%jQPO1G/WO%jQPO1G/WO%jQPO1G/WO6mQSO1G0nOOQO1G0q1G0qOOQO1G0r1G0rOOQO'#Ev'#EvO6uQPO,5;aO6zQSO1G0yOOQO1G0y1G0yOOQO'#C|'#C|O7SQPO,59fOOQO'#C{'#C{OOQO,59f,59fO%jQPO,59kOOQO1G/U1G/UO(qQPO,59qO7[QPO,59oO]QQO7+$rO>sQQO7+$rO@XQQO7+$rOOQO7+&Y7+&YO@oQQO7+&`OOQO1G0{1G0{OOQO1G0z1G0zOOQO7+&e7+&eO@wQSO1G/QOOQO1G/Q1G/QOAPQQO1G/VOOQO1G/]1G/]OOQO'#DW'#DWOOQO1G/Z1G/ZOOQO<|Q;xP#]Q!Q![;{QR#g#h+rQ>UR!Q![>R#a#b>_#g#h>eQ>bP#g#h+rQ>jP#]Q!Q![>mQ>pQ!Q![>m#a#b>vQ>yP#g#h+rQ?RP#]Q!Q![?UQ?XQ!Q![?U#a#b?_Q?bP#g#h+rQ?jP#]Q!Q![?mQ?pR!Q![?m#a#b?y#g#hAPQ@OQ#]Q!Q![@U#g#h+rQ@XR!Q![@U#a#b@b#g#h@hQ@eP#g#h+rQ@mP#]Q!Q![@pQ@sQ!Q![@p#a#b@yQ@|P#g#h+rQAUP#]Q!Q![AXQA[Q!Q![AX#a#bAbQAeP#g#h+rQAmQ#]Q!Q![As#g#h+rQAvR!Q![As#a#bBP#g#hBVQBSP#g#h+rQB[P#]Q!Q![B_QBbQ!Q![B_#a#bBhQBkP#g#h+rQBsP#]Q!Q![BvQByQ!Q![Bv#a#bCPQCSP#g#h+rQC[P#]Q!Q![C_QCbT!Q![C_#W#XCq#[#]Gz#a#bI}#g#hKTQCvP#]Q!Q![CyQC|S!Q![Cy#[#]DY#a#bF]#g#hGcQD_P#]Q!Q![DbQDeR!Q![Db#a#bDn#g#hEtQDsQ#]Q!Q![Dy#g#h+rQD|R!Q![Dy#a#bEV#g#hE]QEYP#g#h+rQEbP#]Q!Q![EeQEhQ!Q![Ee#a#bEnQEqP#g#h+rQEyP#]Q!Q![E|QFPQ!Q![E|#a#bFVQFYP#g#h+rQFbQ#]Q!Q![Fh#g#h+rQFkR!Q![Fh#a#bFt#g#hFzQFwP#g#h+rQGPP#]Q!Q![GSQGVQ!Q![GS#a#bG]QG`P#g#h+rQGhP#]Q!Q![GkQGnQ!Q![Gk#a#bGtQGwP#g#h+rQHPP#]Q!Q![HSQHVR!Q![HS#a#bH`#g#hIfQHeQ#]Q!Q![Hk#g#h+rQHnR!Q![Hk#a#bHw#g#hH}QHzP#g#h+rQISP#]Q!Q![IVQIYQ!Q![IV#a#bI`QIcP#g#h+rQIkP#]Q!Q![InQIqQ!Q![In#a#bIwQIzP#g#h+rQJSQ#]Q!Q![JY#g#h+rQJ]R!Q![JY#a#bJf#g#hJlQJiP#g#h+rQJqP#]Q!Q![JtQJwQ!Q![Jt#a#bJ}QKQP#g#h+rQKYP#]Q!Q![K]QK`Q!Q![K]#a#bKfQKiP#g#h+rPKoR!Q![Kx!c!iKx#T#ZKxPK}R#^P!Q![Kx!c!iKx#T#ZKxVL_T$wS!ZR!Q![Ln![!]Ln!c!}Ln#R#SLn#T#oLnRLsT!ZR!Q![Ln![!]Ln!c!}Ln#R#SLn#T#oLn~MXP!U~!_!`M[~MaO!T~~MfQ#kP!_!`Ml#r#sMqQMqO!QQ~MvO#l~~M{P!S~!_!`NO~NTO!R~VN[T!ZRqS!Q![NT![!]Ln!c!}NT#R#SNT#T#oNT~NpO$u~~NuO$v~~NzOu~~N}RO#SNz#S#T%Y#T~Nz~! ]O$z~~! bO${~",tokenizers:[0,1,2],topRules:{"@top":[0,25]},specialized:[{term:57,get:function(e,t){return function(e,t){return T[e.toLowerCase()]||-1}(e)<<1}},{term:57,get:function(e,t){return function(e,t){return P[e.toLowerCase()]||-1}(e)<<1|1}},{term:57,get:function(e){return _[e]||-1}}],tokenPrec:0}),A=26,R=36,L=38,N=39,z=104,I=107,F=109,$=113,B=117,Q=119,W=n(100),H=n(17),V=n(25);function U(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r=n.length){var o=e.resolve(a,-1);if(o.type.id===t.id&&o.start===r&&o.end===a)return o;for(o=e.resolve(r,1);o&&(o.type.id!==t.id||o.start!==r||o.end!==a);)o=o.parent;return o}}})}function q(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r="},{label:">"},{label:"<"},{label:"<="},{label:"!="},{label:"and"},{label:"or"},{label:"unless"}],Z=[{label:"avg",detail:"aggregation",info:"Calculate the average over dimensions",type:"keyword"},{label:"bottomk",detail:"aggregation",info:"Smallest k elements by sample value",type:"keyword"},{label:"count",detail:"aggregation",info:"Count number of elements in the vector",type:"keyword"},{label:"count_values",detail:"aggregation",info:"Count number of elements with the same value",type:"keyword"},{label:"group",detail:"aggregation",info:"Group series, while setting the sample value to 1",type:"keyword"},{label:"max",detail:"aggregation",info:"Select maximum over dimensions",type:"keyword"},{label:"min",detail:"aggregation",info:"Select minimum over dimensions",type:"keyword"},{label:"quantile",detail:"aggregation",info:"Calculate \u03c6-quantile (0 \u2264 \u03c6 \u2264 1) over dimensions",type:"keyword"},{label:"stddev",detail:"aggregation",info:"Calculate population standard deviation over dimensions",type:"keyword"},{label:"stdvar",detail:"aggregation",info:"Calculate population standard variance over dimensions",type:"keyword"},{label:"sum",detail:"aggregation",info:"Calculate sum over dimensions",type:"keyword"},{label:"topk",detail:"aggregation",info:"Largest k elements by sample value",type:"keyword"}],J=[{label:"sum(rate(__input_vector__[5m]))",type:"function",detail:"snippet",info:"Sum over rates of increase",apply:Object(K.c)("sum(rate(${__input_vector__}[5m]))")},{label:"histogram_quantile(__quantile__, sum by(le) (rate(__histogram_metric__[5m])))",type:"function",detail:"snippet",info:"Approximate a quantile value from an aggregated histogram",apply:Object(K.c)("histogram_quantile(${__quantile__}, sum by(le) (rate(${__histogram_metric__}[5m])))")},{label:'label_replace(__input_vector__, "__dst__", "__replacement__", "__src__", "__regex__")',type:"function",detail:"snippet",info:"Set or replace a label value in an input vector",apply:Object(K.c)('label_replace(${__input_vector__}, "${__dst__}", "${__replacement__}", "${__src__}", "${__regex__}")')}],ee={matchOp:[{label:"="},{label:"!="},{label:"=~"},{label:"!~"}],binOp:G,duration:[{label:"y"},{label:"w"},{label:"d"},{label:"h"},{label:"m"},{label:"s"},{label:"ms"}],binOpModifier:[{label:"on",info:"Match only on specified labels",type:"keyword"},{label:"ignoring",info:"Ignore specified labels for matching",type:"keyword"},{label:"group_left",info:"Allow many-to-one matching",type:"keyword"},{label:"group_right",info:"Allow one-to-many matching",type:"keyword"}],functionIdentifier:[{label:"abs",detail:"function",info:"Return absolute values of input series",type:"function"},{label:"absent",detail:"function",info:"Determine whether input vector is empty",type:"function"},{label:"absent_over_time",detail:"function",info:"Determine whether input range vector is empty",type:"function"},{label:"avg_over_time",detail:"function",info:"Average series values over time",type:"function"},{label:"ceil",detail:"function",info:"Round up values of input series to nearest integer",type:"function"},{label:"changes",detail:"function",info:"Return number of value changes in input series over time",type:"function"},{label:"clamp_max",detail:"function",info:"Limit the value of input series to a maximum",type:"function"},{label:"clamp_min",detail:"function",info:"Limit the value of input series to a minimum",type:"function"},{label:"count_over_time",detail:"function",info:"Count the number of values for each input series",type:"function"},{label:"days_in_month",detail:"function",info:"Return the number of days in current month for provided timestamps",type:"function"},{label:"day_of_month",detail:"function",info:"Return the day of the month for provided timestamps",type:"function"},{label:"day_of_week",detail:"function",info:"Return the day of the week for provided timestamps",type:"function"},{label:"delta",detail:"function",info:"Calculate the difference between beginning and end of a range vector (for gauges)",type:"function"},{label:"deriv",detail:"function",info:"Calculate the per-second derivative over series in a range vector (for gauges)",type:"function"},{label:"exp",detail:"function",info:"Calculate exponential function for input vector values",type:"function"},{label:"floor",detail:"function",info:"Round down values of input series to nearest integer",type:"function"},{label:"histogram_quantile",detail:"function",info:"Calculate quantiles from histogram buckets",type:"function"},{label:"holt_winters",detail:"function",info:"Calculate smoothed value of input series",type:"function"},{label:"hour",detail:"function",info:"Return the hour of the day for provided timestamps",type:"function"},{label:"idelta",detail:"function",info:"Calculate the difference between the last two samples of a range vector (for counters)",type:"function"},{label:"increase",detail:"function",info:"Calculate the increase in value over a range of time (for counters)",type:"function"},{label:"irate",detail:"function",info:"Calculate the per-second increase over the last two samples of a range vector (for counters)",type:"function"},{label:"label_replace",detail:"function",info:"Set or replace label values",type:"function"},{label:"label_join",detail:"function",info:"Join together label values into new label",type:"function"},{label:"ln",detail:"function",info:"Calculate natural logarithm of input series",type:"function"},{label:"log10",detail:"function",info:"Calulcate base-10 logarithm of input series",type:"function"},{label:"log2",detail:"function",info:"Calculate base-2 logarithm of input series",type:"function"},{label:"max_over_time",detail:"function",info:"Return the maximum value over time for input series",type:"function"},{label:"min_over_time",detail:"function",info:"Return the minimum value over time for input series",type:"function"},{label:"minute",detail:"function",info:"Return the minute of the hour for provided timestamps",type:"function"},{label:"month",detail:"function",info:"Return the month for provided timestamps",type:"function"},{label:"predict_linear",detail:"function",info:"Predict the value of a gauge into the future",type:"function"},{label:"quantile_over_time",detail:"function",info:"Calculate value quantiles over time for input series",type:"function"},{label:"rate",detail:"function",info:"Calculate per-second increase over a range vector (for counters)",type:"function"},{label:"resets",detail:"function",info:"Return number of value decreases (resets) in input series of time",type:"function"},{label:"round",detail:"function",info:"Round values of input series to nearest integer",type:"function"},{label:"scalar",detail:"function",info:"Convert single-element series vector into scalar value",type:"function"},{label:"sort",detail:"function",info:"Sort input series ascendingly by value",type:"function"},{label:"sort_desc",detail:"function",info:"Sort input series descendingly by value",type:"function"},{label:"sqrt",detail:"function",info:"Return the square root for input series",type:"function"},{label:"stddev_over_time",detail:"function",info:"Calculate the standard deviation within input series over time",type:"function"},{label:"stdvar_over_time",detail:"function",info:"Calculate the standard variation within input series over time",type:"function"},{label:"sum_over_time",detail:"function",info:"Calculate the sum over the values of input series over time",type:"function"},{label:"time",detail:"function",info:"Return the Unix timestamp at the current evaluation time",type:"function"},{label:"timestamp",detail:"function",info:"Return the Unix timestamp for the samples in the input vector",type:"function"},{label:"vector",detail:"function",info:"Convert a scalar value into a single-element series vector",type:"function"},{label:"year",detail:"function",info:"Return the year for provided timestamps",type:"function"}],aggregateOp:Z,aggregateOpModifier:[{label:"by",info:"Keep the listed labels, remove all others.",type:"keyword"},{label:"without",info:"Remove the listed labels, preserve all others.",type:"keyword"}]};function te(e,t){var n=function(e,t){for(var n=e;n&&n.type.id!==t;)n=n.parent;return n}(e,$);return n&&(n=U(n,114,57))?t.sliceDoc(n.start,n.end):""}function ne(e,t){var n,r,i,a,o,s,l,c,u,f,d,h,p,v,m,g,b,y=[];switch(t.type.id){case 0:if((null===(n=t.parent)||void 0===n?void 0:n.type.id)===I){y.push({kind:X.Duration});break}if((null===(r=t.parent)||void 0===r?void 0:r.type.id)===z){y.push({kind:X.Duration});break}var O=e.sliceDoc(t.start,t.end);G.filter((function(e){return e.label.includes(O)})).length>0&&y.push({kind:X.BinOp});break;case 57:if(0===(null===(i=t.parent)||void 0===i?void 0:i.type.id)){if(27===(null===(a=t.parent.parent)||void 0===a?void 0:a.type.id)){y.push({kind:X.AggregateOpModifier},{kind:X.BinOp});break}if((null===(o=t.parent.parent)||void 0===o?void 0:o.type.id)===$){var k=te(t,e);Z.filter((function(e){return e.label===k})).length>0&&y.push({kind:X.AggregateOpModifier}),y.push({kind:X.BinOp},{kind:X.Offset});break}}var x=null===(c=null===(l=null===(s=t.parent)||void 0===s?void 0:s.parent)||void 0===l?void 0:l.parent)||void 0===c?void 0:c.parent;if(!x){y.push({kind:X.MetricName},{kind:X.Function},{kind:X.Aggregation});break}(function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r0&&i++;var a=0,o=e.iterate({enter:function(t){if(t.id!==e.type.id||0!==i)return(t.id===n[a]||t.name===n[a])&&++a>=n.length;i++}});return void 0!==o&&o})(x,A,A)?x.type.id!==R||q(x,0)?(x.type.id!==R||x.type.id===R&&q(x,0))&&y.push({kind:X.BinOp},{kind:X.Offset}):y.push({kind:X.MetricName},{kind:X.Function},{kind:X.Aggregation},{kind:X.BinOpModifier}):y.push({kind:X.MetricName},{kind:X.Function},{kind:X.Aggregation});break;case 30:y.push({kind:X.LabelName});break;case 115:y.push({kind:X.LabelName,metricName:te(t,e)});break;case 33:32===(null===(u=t.parent)||void 0===u?void 0:u.type.id)?y.push({kind:X.LabelName}):(null===(f=t.parent)||void 0===f?void 0:f.type.id)===B&&y.push({kind:X.LabelName,metricName:te(t,e)});break;case B:33===(null===(d=t.firstChild)||void 0===d?void 0:d.type.id)&&0===(null===(h=t.lastChild)||void 0===h?void 0:h.type.id)&&null===(null===(p=t.lastChild)||void 0===p?void 0:p.firstChild)&&y.push({kind:X.MatchOp});break;case F:if((null===(v=t.parent)||void 0===v?void 0:v.type.id)===B){var w="";33===(null===(m=t.parent.firstChild)||void 0===m?void 0:m.type.id)&&(w=e.sliceDoc(t.parent.firstChild.start,t.parent.firstChild.end));var j=te(t,e);y.push({kind:X.LabelValue,metricName:j,labelName:w})}break;case 105:case I:y.push({kind:X.Duration});break;case 34:y.push({kind:X.MetricName},{kind:X.Function},{kind:X.Aggregation});break;case 53:118===(null===(g=t.parent)||void 0===g?void 0:g.type.id)?y.push({kind:X.MatchOp}):(null===(b=t.parent)||void 0===b?void 0:b.type.id)===R&&y.push({kind:X.BinOp});break;case Q:case 120:case 121:case 118:y.push({kind:X.MatchOp});break;case 37:case 43:case 44:case 45:case 46:case 47:case 48:case 49:case 50:case 51:case 52:case 21:case 23:case 22:case R:y.push({kind:X.BinOp})}return y}!function(e){e[e.MetricName=0]="MetricName",e[e.LabelName=1]="LabelName",e[e.LabelValue=2]="LabelValue",e[e.Function=3]="Function",e[e.Aggregation=4]="Aggregation",e[e.BinOpModifier=5]="BinOpModifier",e[e.BinOp=6]="BinOp",e[e.MatchOp=7]="MatchOp",e[e.AggregateOpModifier=8]="AggregateOpModifier",e[e.Duration=9]="Duration",e[e.Offset=10]="Offset"}(X||(X={}));var re=function(){function e(t){Object(r.a)(this,e),this.prometheusClient=t}return Object(i.a)(e,[{key:"promQL",value:function(e){var t,n=this,r=e.state,i=e.pos,o=r.tree.resolve(i,-1),s=ne(r,o),l=Promise.resolve([]),c=!1,u=!0,f=Object(a.a)(s);try{var d=function(){var e=t.value;switch(e.kind){case X.Aggregation:l=l.then((function(e){return e.concat(ee.aggregateOp)}));break;case X.Function:l=l.then((function(e){return e.concat(ee.functionIdentifier)}));break;case X.BinOpModifier:l=l.then((function(e){return e.concat(ee.binOpModifier)}));break;case X.BinOp:l=l.then((function(e){return e.concat(ee.binOp)}));break;case X.MatchOp:l=l.then((function(e){return e.concat(ee.matchOp)}));break;case X.AggregateOpModifier:l=l.then((function(e){return e.concat(ee.aggregateOpModifier)}));break;case X.Duration:u=!1,l=l.then((function(e){return e.concat(ee.duration)}));break;case X.Offset:l=l.then((function(e){return e.concat([{label:"offset"}])}));break;case X.MetricName:l=l.then((function(e){return c=!0,n.autocompleteMetricName(e)}));break;case X.LabelName:l=l.then((function(t){return n.autocompleteLabelName(t,e.metricName)}));break;case X.LabelValue:l=l.then((function(t){return n.autocompleteLabelValue(t,e.labelName,e.metricName)}))}};for(f.s();!(t=f.n()).done;)d()}catch(h){f.e(h)}finally{f.f()}return l.then((function(e){return function(e,t,n){var r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],i=e;return arguments.length>3&&void 0!==arguments[3]&&arguments[3]&&i.push.apply(i,Object(V.a)(J)),{from:t,to:n,options:i,span:r?/^[a-zA-Z0-9_:]+$/:void 0}}(e,function(e,t){var n,r,i,a,o,s,l=e.start;return 30===e.type.id||115===e.type.id||34===e.type.id||e.type.id===F&&(null===(n=e.parent)||void 0===n?void 0:n.type.id)===B?l++:e.type.id===B&&33===(null===(r=e.firstChild)||void 0===r?void 0:r.type.id)&&0===(null===(i=e.lastChild)||void 0===i?void 0:i.type.id)&&null===(null===(a=e.lastChild)||void 0===a?void 0:a.firstChild)?l=e.lastChild.start:e.type.id!==I&&(0!==e.type.id||(null===(o=e.parent)||void 0===o?void 0:o.type.id)!==I&&(null===(s=e.parent)||void 0===s?void 0:s.type.id)!==z)||(l=t),l}(o,i),i,c,u)}))}},{key:"autocompleteMetricName",value:function(e){var t=this;if(!this.prometheusClient)return e;var n=new Map;return this.prometheusClient.labelValues("__name__").then((function(e){var r,i,o=Object(a.a)(e);try{for(o.s();!(i=o.n()).done;){var s=i.value;n.set(s,{label:s,type:"constant"})}}catch(l){o.e(l)}finally{o.f()}if(e.length<=1e4)return null===(r=t.prometheusClient)||void 0===r?void 0:r.metricMetadata()})).then((function(t){if(t){var r,i=Object(a.a)(n);try{for(i.s();!(r=i.n()).done;){var o=Object(H.a)(r.value,2),s=o[0],l=o[1],c=t.get(s.replace(/(_count|_sum|_bucket)$/,""));if(c)if(c.length>1){var u,f=Object(a.a)(c);try{for(f.s();!(u=f.n()).done;){var d=u.value;""===l.detail?l.detail=d.type:l.detail!==d.type&&(l.detail="unknown",l.info="multiple different definitions for this metric"),""===l.info?l.info=d.help:l.info!==d.help&&(l.info="multiple different definitions for this metric")}}catch(m){f.e(m)}finally{f.f()}}else if(1===c.length){var h=c[0],p=h.type,v=h.help;"histogram"!==p&&"summary"!==p||(s.endsWith("_count")&&(p="counter",v="The total number of observations for: ".concat(v)),s.endsWith("_sum")&&(p="counter",v="The total sum of observations for: ".concat(v)),s.endsWith("_bucket")&&(p="counter",v="The total count of observations for a bucket in the histogram: ".concat(v))),l.detail=p,l.info=v}}}catch(m){i.e(m)}finally{i.f()}}return e.concat(Array.from(n.values()))}))}},{key:"autocompleteLabelName",value:function(e,t){return this.prometheusClient?this.prometheusClient.labelNames(t).then((function(t){return e.concat(t.map((function(e){return{label:e,type:"constant"}})))})):e}},{key:"autocompleteLabelValue",value:function(e,t,n){return this.prometheusClient&&t?this.prometheusClient.labelValues(t,n).then((function(t){return e.concat(t.map((function(e){return{label:e,type:"text"}})))})):e}}]),e}(),ie="/api/v1/label/:name/values",ae=function(){function e(){Object(r.a)(this,e),this.completeAssociation=new Map,this.metricMetadata=new Map,this.labelValues=new Map,this.labelNames=[]}return Object(i.a)(e,[{key:"setAssociation",value:function(e,t){var n=this.completeAssociation.get(e);n||(n=new Map,this.completeAssociation.set(e,n));for(var r=0,i=Object.entries(t);r0)return Promise.resolve(this.cache.getLabelNames(e));var n=new Date,r=new Date(n.getTime()-this.lookbackInterval);if(void 0===e||""===e){var i=new URLSearchParams({start:r.toISOString(),end:n.toISOString()});return this.fetchAPI("".concat("/api/v1/labels","?").concat(i)).then((function(e){return t.cache.setLabelNames(e),e})).catch((function(e){return t.errorHandler&&t.errorHandler(e),[]}))}return this.series(e,r,n).then((function(n){return t.cache.getLabelNames(e)}))}},{key:"labelValues",value:function(e,t){var n=this;if(this.cache.getLabelValues(e,t)&&this.cache.getLabelValues(e,t).length>0)return Promise.resolve(this.cache.getLabelValues(e,t));var r=new Date,i=new Date(r.getTime()-this.lookbackInterval);if(!t||0===t.length){var a=new URLSearchParams({start:i.toISOString(),end:r.toISOString()});return this.fetchAPI("".concat(ie.replace(/:name/gi,e),"?").concat(a)).then((function(t){return n.cache.setLabelValues(e,t),t})).catch((function(e){return n.errorHandler&&n.errorHandler(e),[]}))}return this.series(t,i,r).then((function(r){return n.cache.getLabelValues(e,t)}))}},{key:"metricMetadata",value:function(){var e=this;return this.cache.getMetricMetadata()&&this.cache.getMetricMetadata().size>0?Promise.resolve(this.cache.getMetricMetadata()):this.fetchAPI("/api/v1/metadata").then((function(t){for(var n=0,r=Object.entries(t);n0){var s,l=Object(a.a)(o);try{for(l.s();!(s=l.n()).done;){var c=s.value;n.matchingLabels.push(e.sliceDoc(c.start,c.end))}}catch(m){l.e(m)}finally{l.f()}}}var u=U(t,L,N,4),f=U(t,L,N,5);if(u||f){n.card=u?pe.CardManyToOne:pe.CardOneToMany;var d=Y(U(t,L,N,42,30),31,32);if(d.length>0){var h,p=Object(a.a)(d);try{for(p.s();!(h=p.n()).done;){var v=h.value;n.include.push(e.sliceDoc(v.start,v.end))}}catch(m){p.e(m)}finally{p.f()}}}return q(t,21,22,23)&&n.card===pe.CardOneToOne&&(n.card=pe.CardManyToMany),n}(this.state,e);if(null!==c&&c.on){var u,f=Object(a.a)(c.matchingLabels);try{for(f.s();!(u=f.n()).done;){var d,h=u.value,p=Object(a.a)(c.include);try{for(p.s();!(d=p.n()).done;){h===d.value&&this.addDiagnostic(e,'label "'.concat(h,'" must not occur in ON and GROUP clause at once'))}}catch(v){p.e(v)}finally{p.f()}}}catch(v){f.e(v)}finally{f.f()}}r!==de.scalar&&r!==de.vector&&this.addDiagnostic(t,"binary expression must contain only scalar and instant vector types"),i!==de.scalar&&i!==de.vector&&this.addDiagnostic(n,"binary expression must contain only scalar and instant vector types"),r===de.vector&&i===de.vector||null===c?l&&((null===c||void 0===c?void 0:c.card)!==pe.CardOneToMany&&(null===c||void 0===c?void 0:c.card)!==pe.CardManyToOne||this.addDiagnostic(e,"no grouping allowed for set operations"),(null===c||void 0===c?void 0:c.card)!==pe.CardManyToMany&&this.addDiagnostic(e,"set operations must always be many-to-many")):c.matchingLabels.length>0&&this.addDiagnostic(e,"vector matching only allowed between instant vectors"),r!==de.scalar&&i!==de.scalar||!l||this.addDiagnostic(e,"set operator not allowed in binary scalar expression")}else this.addDiagnostic(e,"left or right expression is missing in binary expression")}},{key:"checkCallFunction",value:function(e){var t,n=null===(t=e.firstChild)||void 0===t?void 0:t.firstChild;if(n){var r=Y(U(e,34),35,A),i=me(n.type.id),a=i.argTypes.length;if(0===i.variadic)r.length!==a&&this.addDiagnostic(e,"expected ".concat(a," argument(s) in call to ").concat(i.name,", got ").concat(r.length));else{var o=a-1;if(o>r.length)this.addDiagnostic(e,"expected at least ".concat(o," argument(s) in call to ").concat(i.name,", got ").concat(r.length));else{var s=o+i.variadic;i.variadic>0&&s=i.argTypes.length){if(0===i.variadic)break;l=i.argTypes.length-1}this.expectType(r[c],i.argTypes[l],"call to function ".concat(i.name))}}else this.addDiagnostic(e,"function not defined")}},{key:"checkVectorSelector",value:function(e){var t=ye(Y(U(e,115,116),116,B),this.state),n="",r=U(e,114,57);if(r&&(n=this.state.sliceDoc(r.start,r.end)),""!==n){var i=t.find((function(e){return"__name__"===e.name}));i&&this.addDiagnostic(e,"metric name must not be set twice: ".concat(n," or ").concat(i.value)),t.push(new be(Q,"__name__",n))}t.every((function(e){return e.matchesEmpty()}))&&this.addDiagnostic(e,"vector selector must contain at least one non-empty matcher")}},{key:"expectType",value:function(e,t,n){var r=this.checkAST(e);r!==t&&this.addDiagnostic(e,"expected type ".concat(t," in ").concat(n,", got ").concat(r))}},{key:"addDiagnostic",value:function(e,t){this.diagnostics.push({severity:"error",message:t,from:e.start,to:e.end})}}]),e}(),ke=function(){function e(){Object(r.a)(this,e)}return Object(i.a)(e,[{key:"promQL",value:function(){return function(e){var t=new Oe(e.state);return t.analyze(),t.getDiagnostics()}}}]),e}();var xe=O.define(D.withProps(Object(W.b)({LineComment:"comment",LabelName:"labelName",StringLiteral:"string",NumberLiteral:"number",Duration:"number","Abs Absent AbsentOverTime AvgOverTime Ceil Changes ClampMax ClampMin CountOverTime DaysInMonth DayOfMonth DayOfWeek Delta Deriv Exp Floor HistogramQuantile HoltWinters Hour Idelta Increase Irate LabelReplace LabelJoin Ln Log10 Log2 MaxOverTime MinOverTime Minute Month PredictLinear QuantileOverTime Rate Resets Round Scalar Sort SortDesc Sqrt StddevOverTime StdvarOverTime SumOverTime Time Timestamp Vector Year":"functionName","Avg Bottomk Count Count_values Group Max Min Quantile Stddev Stdvar Sum Topk":"operatorKeyword","By Without Bool On Ignoring GroupLeft GroupRight Offset":"modifier","And Unless Or":"logicOperator","Sub Add Mul Mod Div Eql Neq Lte Lss Gte Gtr EqlRegex EqlSingle NeqRegex Pow":"operator",UnaryOp:"arithmeticOperator","( )":"paren","[ ]":"squareBracket","{ }":"brace","\u26a0":"invalid"})),{languageData:{closeBrackets:{brackets:["(","[","{","'",'"',"`"]},commentTokens:{line:"#"}}}),we=function(){function e(){Object(r.a)(this,e),this.complete=ue(),this.lint=new ke,this.enableLinter=!0,this.enableCompletion=!0}return Object(i.a)(e,[{key:"setComplete",value:function(e){return this.complete=ue(e),this}},{key:"activateCompletion",value:function(e){return this.enableCompletion=e,this}},{key:"activateLinter",value:function(e){return this.enableLinter=e,this}},{key:"asExtension",value:function(){var e,t,n=this,r=[xe];if(this.enableCompletion){var i=xe.languageData.of({autocomplete:function(e){return n.complete.promQL(e)}});r=r.concat(i)}return this.enableLinter&&(r=r.concat((e=this.lint.promQL,t=this.lint,Object(he.b)(e.call(t))))),r}}]),e}()},function(e,t,n){"use strict";n.d(t,"a",(function(){return Tt}));var r=n(25),i=n(10),a=n(5),o=n(7),s=n(4),l=n(6),c=a.a.define(),u=a.a.define(),f=a.f.define(),d=a.f.define({combine:function(e){return Object(a.m)(e,{minDepth:100,newGroupDelay:500},{minDepth:Math.max,newGroupDelay:Math.min})}}),h=a.j.define({create:function(){return E.empty},update:function(e,t){var n=t.state.facet(d),r=t.annotation(c);if(r){var i=O.fromTransaction(t),o=r.side,s=0==o?e.undone:e.done;return s=i?k(s,s.length,n.minDepth,i):j(s,t.startState.selection),new E(0==o?r.rest:s,0==o?s:r.rest)}var l=t.annotation(u);if("full"!=l&&"before"!=l||(e=e.isolate()),!1===t.annotation(a.l.addToHistory))return t.changes.length?e.addMapping(t.changes.desc):e;var f=O.fromTransaction(t),h=t.annotation(a.l.time),p=t.annotation(a.l.userEvent);return f?e=e.addChanges(f,h,p,n.newGroupDelay,n.minDepth):t.selection&&(e=e.addSelection(t.startState.selection,h,p,n.newGroupDelay)),"full"!=l&&"after"!=l||(e=e.isolate()),e}});function p(e,t){return function(n){var r=n.state,i=n.dispatch,a=r.field(h,!1);if(!a)return!1;var o=a.pop(e,r,t);return!!o&&(i(o),!0)}}var v=p(0,!1),m=p(1,!1),g=p(0,!0),b=p(1,!0);function y(e){return function(t){var n=t.field(h,!1);if(!n)return 0;var r=0==e?n.done:n.undone;return r.length-(r.length&&!r[0].changes?1:0)}}y(0),y(1);var O=function(){function e(t,n,r,i,a){Object(s.a)(this,e),this.changes=t,this.effects=n,this.mapped=r,this.startSelection=i,this.selectionsAfter=a}return Object(l.a)(e,[{key:"setSelAfter",value:function(t){return new e(this.changes,this.effects,this.mapped,this.startSelection,t)}}],[{key:"fromTransaction",value:function(t){var n,r=w,i=Object(o.a)(t.startState.facet(f));try{for(i.s();!(n=i.n()).done;){var a=(0,n.value)(t);a.length&&(r=r.concat(a))}}catch(s){i.e(s)}finally{i.f()}return!r.length&&t.changes.empty?null:new e(t.changes.invert(t.startState.doc),r,void 0,t.startState.selection,w)}},{key:"selection",value:function(t){return new e(void 0,w,void 0,void 0,t)}}]),e}();function k(e,t,n,r){var i=t+1>n+20?t-n-1:0,a=e.slice(i,t);return a.push(r),a}function x(e,t){return e.length?t.length?e.concat(t):e:t}var w=[];function j(e,t){if(e.length){var n=e[e.length-1],r=n.selectionsAfter.slice(Math.max(0,n.selectionsAfter.length-200));return r.length&&r[r.length-1].eq(t)?e:(r.push(t),k(e,e.length-1,1e9,n.setSelAfter(r)))}return[O.selection([t])]}function S(e){var t=e[e.length-1],n=e.slice();return n[e.length-1]=t.setSelAfter(t.selectionsAfter.slice(0,t.selectionsAfter.length-1)),n}function C(e,t){if(!e.length)return e;for(var n=e.length,r=w;n;){var i=M(e[n-1],t,r);if(i.changes&&!i.changes.empty||i.effects.length){var a=e.slice(0,n);return a[n-1]=i,a}t=i.mapped,n--,r=i.selectionsAfter}return r.length?[O.selection(r)]:w}function M(e,t,n){var r=x(e.selectionsAfter.length?e.selectionsAfter.map((function(e){return e.map(t)})):w,n);if(!e.changes)return O.selection(r);var i=e.changes.map(t),o=t.mapDesc(e.changes,!0),s=e.mapped?e.mapped.composeDesc(o):o;return new O(i,a.i.mapEffects(e.effects,t),s,e.startSelection.map(o),r)}var E=function(){function e(t,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;Object(s.a)(this,e),this.done=t,this.undone=n,this.prevTime=r,this.prevUserEvent=i}return Object(l.a)(e,[{key:"isolate",value:function(){return this.prevTime?new e(this.done,this.undone):this}},{key:"addChanges",value:function(t,n,r,i,a){var o=this.done,s=o[o.length-1];return new e(o=s&&s.changes&&n-this.prevTime=s&&i<=l&&(r=!0)}})),r}(s.changes,t.changes)?k(o,o.length-1,a,new O(t.changes.compose(s.changes),x(t.effects,s.effects),s.mapped,s.startSelection,w)):k(o,o.length,a,t),w,n,r)}},{key:"addSelection",value:function(t,n,r,i){var a,o,s=this.done.length?this.done[this.done.length-1].selectionsAfter:w;return s.length>0&&n-this.prevTimethis.i;)e.dom.removeChild(e.elements.pop().dom)}}]),e}(),Q=function(){function e(t,n){var r=this;Object(s.a)(this,e),this.view=t,this.config=n,this.elements=[],this.spacer=null,this.dom=document.createElement("div"),this.dom.className=Object(i.n)("gutter"+(this.config.style?"."+this.config.style:"")),this.elementClass=Object(i.n)("gutterElement"+(this.config.style?"."+this.config.style:""));var a=function(e){r.dom.addEventListener(e,(function(r){var i=t.visualLineAtHeight(r.clientY,t.contentDOM.getBoundingClientRect().top);n.domEventHandlers[e](t,i,r)&&r.preventDefault()}))};for(var o in n.domEventHandlers)a(o);this.markers=n.markers(t.state),n.initialSpacer&&(this.spacer=new W(t,0,0,[n.initialSpacer(t)],this.elementClass),this.dom.appendChild(this.spacer.dom),this.spacer.dom.style.cssText+="visibility: hidden; pointer-events: none")}return Object(l.a)(e,[{key:"update",value:function(e){var t=this.markers;if(this.markers=this.config.markers(e.state),this.spacer&&this.config.updateSpacer){var n=this.config.updateSpacer(this.spacer.markers[0],e);n!=this.spacer.markers[0]&&this.spacer.update(e.view,0,0,[n],this.elementClass)}return this.markers!=t}}]),e}(),W=function(){function e(t,n,r,i,a){Object(s.a)(this,e),this.height=-1,this.above=0,this.dom=document.createElement("div"),this.update(t,n,r,i,a)}return Object(l.a)(e,[{key:"update",value:function(e,t,n,r,i){if(this.height!=t&&(this.dom.style.height=(this.height=t)+"px"),this.above!=n&&(this.dom.style.marginTop=(this.above=n)?n+"px":""),this.markers!=r){this.markers=r;for(var a;a=this.dom.lastChild;)a.remove();var s,l=i,c=Object(o.a)(r);try{for(c.s();!(s=c.n()).done;){var u=s.value,f=u.toDOM(e);f&&this.dom.appendChild(f);var d=u.elementClass;d&&(l+=" "+d)}}catch(h){c.e(h)}finally{c.f()}this.dom.className=l}}}]),e}();var H=a.f.define(),V=a.f.define({combine:function(e){return Object(a.m)(e,{formatNumber:String,domEventHandlers:{}},{domEventHandlers:function(e,t){var n=Object.assign({},e),r=function(e){var r=n[e],i=t[e];n[e]=r?function(e,t,n){return r(e,t,n)||i(e,t,n)}:i};for(var i in t)r(i);return n}})}}),U=function(e){Object(P.a)(n,e);var t=Object(_.a)(n);function n(e){var r;return Object(s.a)(this,n),(r=t.call(this)).number=e,r}return Object(l.a)(n,[{key:"eq",value:function(e){return this.number==e.number}},{key:"toDOM",value:function(e){var t=e.state.facet(V);return document.createTextNode(t.formatNumber(this.number))}}]),n}(A),q=N({style:"lineNumber",markers:function(e){return e.facet(H)},lineMarker:function(e,t,n){return n.length?null:new U(e.state.doc.lineAt(t.from).number)},initialSpacer:function(e){return new U(Y(e.state.doc.lines))},updateSpacer:function(e,t){var n=Y(t.view.state.doc.lines);return n==e.number?e:new U(n)}});function Y(e){for(var t=9;t=r?void 0:{from:n,to:r}}var K=a.i.define({map:X}),G=a.i.define({map:X});function Z(e){var t,n=[],r=Object(o.a)(e.state.selection.ranges);try{var i=function(){var r=t.value.head;if(n.some((function(e){return e.from<=r&&e.to>=r})))return"continue";n.push(e.visualLineAt(r))};for(r.s();!(t=r.n()).done;)i()}catch(a){r.e(a)}finally{r.f()}return n}var J=a.j.define({create:function(){return i.b.none},update:function(e,t){e=e.map(t.changes);var n,r=Object(o.a)(t.effects);try{var i=function(){var t=n.value;t.is(K)&&!function(e,t,n){var r=!1;return e.between(t,t,(function(e,i){e==t&&i==n&&(r=!0)})),r}(e,t.value.from,t.value.to)?e=e.update({add:[se.range(t.value.from,t.value.to)]}):t.is(G)&&(e=e.update({filter:function(e,n){return t.value.from!=e||t.value.to!=n},filterFrom:t.value.from,filterTo:t.value.to}))};for(r.s();!(n=r.n()).done;)i()}catch(l){r.e(l)}finally{r.f()}if(t.selection){var a=!1,s=t.selection.primary.head;e.between(s,s,(function(e,t){es&&(a=!0)})),a&&(e=e.update({filterFrom:s,filterTo:s,filter:function(e,t){return t<=s||e>=s}}))}return e},provide:[i.d.decorations]});function ee(e,t,n){var r,i=null;return null===(r=e.field(J,!1))||void 0===r||r.between(t,n,(function(e,t){(!i||i.from>e)&&(i={from:e,to:t})})),i}function te(e,t,n){return e.facet(a.e.foldable).reduce((function(r,i){return r||i(e,t,n)}),null)}function ne(e){return e.field(J,!1)?void 0:{append:oe()}}var re=[{key:"Ctrl-Shift-[",mac:"Cmd-Alt-[",run:function(e){var t,n=Object(o.a)(Z(e));try{for(n.s();!(t=n.n()).done;){var r=t.value,i=te(e.state,r.from,r.to);if(i)return e.dispatch({effects:K.of(i),reconfigure:ne(e.state)}),!0}}catch(a){n.e(a)}finally{n.f()}return!1}},{key:"Ctrl-Shift-]",mac:"Cmd-Alt-]",run:function(e){if(!e.state.field(J,!1))return!1;var t,n=[],r=Object(o.a)(Z(e));try{for(r.s();!(t=r.n()).done;){var i=t.value,a=ee(e.state,i.from,i.to);a&&n.push(G.of(a))}}catch(s){r.e(s)}finally{r.f()}return n.length&&e.dispatch({effects:n}),n.length>0}},{key:"Ctrl-Alt-[",run:function(e){for(var t=e.state,n=[],r=0;r"};var ve="()[]{}<>";function me(e){for(var t=0;t2||2==r.length&&1==Object(he.c)(Object(he.b)(r,0))||t!=i.from||n!=i.to)return!1;var a=function(e,t){var n,r=ge(e,e.selection.primary.head),i=r.brackets||pe.brackets,a=Object(o.a)(i);try{for(a.s();!(n=a.n()).done;){var s=n.value,l=me(Object(he.b)(s,0));if(t==s)return l==s?we(e,s,i.indexOf(s+s+s)>-1):ke(e,s,l,r.before||pe.before);if(t==l)return xe(e,s,l)}}catch(c){a.e(c)}finally{a.f()}return null}(e.state,r);return!!a&&(e.dispatch(a),!0)}var ye=[{key:"Backspace",run:function(e){var t=e.state,n=e.dispatch,r=ge(t,t.selection.primary.head).brackets||pe.brackets,i=null,s=t.changeByRange((function(e){if(e.empty){var n,s=function(e,t){var n=e.sliceString(t-2,t);return Object(he.c)(Object(he.b)(n,0))==n.length?n:n.slice(1)}(t.doc,e.head),l=Object(o.a)(r);try{for(l.s();!(n=l.n()).done;){var c=n.value;if(c==s&&Oe(t.doc,e.head)==me(Object(he.b)(c,0)))return{changes:{from:e.head-c.length,to:e.head+c.length},range:a.d.cursor(e.head-c.length),annotations:a.l.userEvent.of("delete")}}}catch(u){l.e(u)}finally{l.f()}}return{range:i=e}}));return i||n(t.update(s,{scrollIntoView:!0})),!i}}];function Oe(e,t){var n=e.sliceString(t,t+2);return n.slice(0,Object(he.c)(Object(he.b)(n,0)))}function ke(e,t,n,r){var i=null,o=e.changeByRange((function(o){if(!o.empty)return{changes:[{insert:t,from:o.from},{insert:n,from:o.to}],range:a.d.range(o.anchor+t.length,o.head+t.length)};var s=Oe(e.doc,o.head);return!s||/\s/.test(s)||r.indexOf(s)>-1?{changes:{insert:t+n,from:o.head},range:a.d.cursor(o.head+t.length)}:{range:i=o}}));return i?null:e.update(o,{scrollIntoView:!0,annotations:a.l.userEvent.of("input")})}function xe(e,t,n){var r=null,i=e.selection.ranges.map((function(t){return t.empty&&Oe(e.doc,t.head)==n?a.d.cursor(t.head+n.length):r=t}));return r?null:e.update({selection:a.d.create(i,e.selection.primaryIndex),scrollIntoView:!0})}function we(e,t,n){var r=null,i=e.changeByRange((function(i){if(!i.empty)return{changes:[{insert:t,from:i.from},{insert:t,from:i.to}],range:a.d.range(i.anchor+t.length,i.head+t.length)};var o=i.head,s=Oe(e.doc,o);if(s==t){if(je(e,o))return{changes:{insert:t+t,from:o},range:a.d.cursor(o+t.length)};var l=n&&e.sliceDoc(o,o+3*t.length)==t+t+t;return{range:a.d.cursor(o+t.length*(l?3:1))}}if(n&&e.sliceDoc(o-2*t.length,o)==t+t&&je(e,o-2*t.length))return{changes:{insert:t+t+t+t,from:o},range:a.d.cursor(o+t.length)};if(e.charCategorizer(o)(s)!=a.c.Word){var c=e.sliceDoc(o-1,o);if(c!=t&&e.charCategorizer(o)(c)!=a.c.Word)return{changes:{insert:t+t,from:o},range:a.d.cursor(o+t.length)}}return{range:r=i}}));return r?null:e.update(i,{scrollIntoView:!0,annotations:a.l.userEvent.of("input")})}function je(e,t){var n=e.tree.resolve(t+1);return n.parent&&n.start==t}var Se=n(35),Ce="function"==typeof String.prototype.normalize?function(e){return e.normalize("NFKD")}:function(e){return e},Me=function(){function e(t,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.length,a=arguments.length>4?arguments[4]:void 0;Object(s.a)(this,e),this.value={from:0,to:0},this.done=!1,this.matches=[],this.buffer="",this.bufferPos=0,this.iter=t.iterRange(r,i),this.bufferStart=r,this.normalize=a?function(e){return a(Ce(e))}:Ce,this.query=this.normalize(n)}return Object(l.a)(e,[{key:"peek",value:function(){if(this.bufferPos==this.buffer.length){if(this.bufferStart+=this.buffer.length,this.iter.next(),this.iter.done)return-1;this.bufferPos=0,this.buffer=this.iter.value}return this.buffer.charCodeAt(this.bufferPos)}},{key:"next",value:function(){for(;;){var e=this.peek();if(e<0)return this.done=!0,this;var t=String.fromCharCode(e),n=this.bufferStart+this.bufferPos;for(this.bufferPos++;;){var r=this.peek();if(r<56320||r>=57344)break;this.bufferPos++,t+=String.fromCharCode(r)}for(var i=this.normalize(t),a=0,o=n;;a++){var s=i.charCodeAt(a),l=this.match(s,o);if(l)return this.value=l,this;if(a==i.length-1)break;o==n&&a1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length;return new Me(e,this.search,t,n,this.caseInsensitive?function(e){return e.toLowerCase()}:void 0)}},{key:"valid",get:function(){return!!this.search}}]),e}(),Te=a.i.define(),Pe=a.i.define(),_e=a.j.define({create:function(){return new De(new Ee("","",!1),[])},update:function(e,t){var n,r=Object(o.a)(t.effects);try{for(r.s();!(n=r.n()).done;){var i=n.value;i.is(Te)?e=new De(i.value,e.panel):i.is(Pe)&&(e=new De(e.query,i.value?[He]:[]))}}catch(a){r.e(a)}finally{r.f()}return e},provide:[Se.c.nFrom((function(e){return e.panel}))]}),De=function e(t,n){Object(s.a)(this,e),this.query=t,this.panel=n},Ae=i.b.mark({class:Object(i.n)("searchMatch")}),Re=i.b.mark({class:Object(i.n)("searchMatch.selected")}),Le=i.f.fromClass(function(){function e(t){Object(s.a)(this,e),this.view=t,this.decorations=this.highlight(t.state.field(_e))}return Object(l.a)(e,[{key:"update",value:function(e){var t=e.state.field(_e);(t!=e.prevState.field(_e)||e.docChanged||e.selectionSet)&&(this.decorations=this.highlight(t))}},{key:"highlight",value:function(e){var t=e.query;if(!e.panel.length||!t.valid)return i.b.none;for(var n=this.view.state,r=this.view.viewport,a=t.cursor(n.doc,Math.max(0,r.from-t.search.length),Math.min(r.to+t.search.length,n.doc.length)),o=new D.c,s=function(){var e=a.value,t=e.from,r=e.to,i=n.selection.ranges.some((function(e){return e.from==t&&e.to==r}));o.add(t,r,i?Re:Ae)};!a.next().done;)s();return o.finish()}}]),e}(),{decorations:function(e){return e.decorations}});function Ne(e){return function(t){var n=t.state.field(_e,!1);return n&&n.query.valid?e(t,n):Ve(t)}}function ze(e,t,n){var r=n.cursor(e,t).next();return r.done&&(r=n.cursor(e,0,t+n.search.length-1).next()).done?null:r.value}var Ie=Ne((function(e,t){var n=e.state.selection.primary,r=n.from,i=n.to,a=ze(e.state.doc,e.state.selection.primary.from+1,t.query);return!(!a||a.from==r&&a.to==i)&&(e.dispatch({selection:{anchor:a.from,head:a.to},scrollIntoView:!0}),Ge(e),!0)}));function Fe(e,t,n,r){for(var i=r;;){for(var a=Math.max(n,i-1e4-e.search.length),o=e.cursor(t,a,i),s=null;!o.next().done;)s=o.value;if(s)return s;if(a==n)return null;i-=1e4}}var $e=Ne((function(e,t){var n=t.query,r=e.state,i=Fe(n,r.doc,0,r.selection.primary.to-1)||Fe(n,r.doc,r.selection.primary.from+1,r.doc.length);return!!i&&(e.dispatch({selection:{anchor:i.from,head:i.to},scrollIntoView:!0}),Ge(e),!0)})),Be=Ne((function(e,t){for(var n=t.query.cursor(e.state.doc),r=[];!n.next().done;)r.push(a.d.range(n.value.from,n.value.to));return!!r.length&&(e.dispatch({selection:a.d.create(r)}),!0)})),Qe=Ne((function(e,t){var n=t.query,r=e.state,i=ze(r.doc,r.selection.primary.from,n);if(!i)return!1;var a,o=r.selection.primary,s=o.from,l=o.to,c=[];if(i.from==s&&i.to==l&&(c.push({from:i.from,to:i.to,insert:n.replace}),i=ze(r.doc,i.to,n)),i){var u=0==c.length||c[0].from>=i.to?0:i.to-i.from-n.replace.length;a={anchor:i.from-u,head:i.to-u}}return e.dispatch({changes:c,selection:a,scrollIntoView:!!a}),i&&Ge(e),!0})),We=Ne((function(e,t){for(var n=t.query,r=n.cursor(e.state.doc),i=[];!r.next().done;){var a=r.value,o=a.from,s=a.to;i.push({from:o,to:s,insert:n.replace})}return!!i.length&&(e.dispatch({changes:i}),!0)}));function He(e){var t=e.state.field(_e).query;return{dom:Xe({view:e,query:t,updateQuery:function(n){t.eq(n)||(t=n,e.dispatch({effects:Te.of(t)}))}}),mount:function(){this.dom.querySelector("[name=search]").select()},pos:80,style:"search"}}var Ve=function(e){var t=e.state.field(_e,!1);if(t&&t.panel.length){var n=Object(Se.a)(e,He);if(!n)return!1;n.dom.querySelector("[name=search]").focus()}else e.dispatch({effects:Pe.of(!0),reconfigure:t?void 0:{append:et}});return!0},Ue=function(e){var t=e.state.field(_e,!1);if(!t||!t.panel.length)return!1;var n=Object(Se.a)(e,He);return n&&n.dom.contains(e.root.activeElement)&&e.focus(),e.dispatch({effects:Pe.of(!1)}),!0},qe=[{key:"Mod-f",run:Ve,scope:"editor search-panel"},{key:"F3",run:Ie,shift:$e,scope:"editor search-panel"},{key:"Mod-g",run:Ie,shift:$e,scope:"editor search-panel"},{key:"Escape",run:Ue,scope:"editor search-panel"},{key:"Mod-Shift-l",run:function(e){var t=e.state,n=e.dispatch,r=t.selection;if(r.ranges.length>1||r.primary.empty)return!1;for(var i=r.primary,o=i.from,s=i.to,l=[],c=0,u=new Me(t.doc,t.sliceDoc(o,s));!u.next().done;){if(l.length>1e3)return!1;u.value.from==o&&(c=l.length),l.push(a.d.range(u.value.from,u.value.to))}return n(t.update({selection:new a.d(l,c)})),!0}}];function Ye(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],r=document.createElement(e);if(t)for(var i in t){var a=t[i];"string"==typeof a?r.setAttribute(i,a):r[i]=a}var s,l=Object(o.a)(n);try{for(l.s();!(s=l.n()).done;){var c=s.value;r.appendChild("string"==typeof c?document.createTextNode(c):c)}}catch(u){l.e(u)}finally{l.f()}return r}function Xe(e){function t(t){return e.view.state.phrase(t)}var n=Ye("input",{value:e.query.search,placeholder:t("Find"),"aria-label":t("Find"),class:Object(i.n)("textfield"),name:"search",onchange:o,onkeyup:o}),r=Ye("input",{value:e.query.replace,placeholder:t("Replace"),"aria-label":t("Replace"),class:Object(i.n)("textfield"),name:"replace",onchange:o,onkeyup:o}),a=Ye("input",{type:"checkbox",name:"case",checked:!e.query.caseInsensitive,onchange:o});function o(){e.updateQuery(new Ee(n.value,r.value,!a.checked))}function s(e,t,n){return Ye("button",{class:Object(i.n)("button"),name:e,onclick:t},n)}return Ye("div",{onkeydown:function(t){Object(i.m)(e.view,t,"search-panel")?t.preventDefault():13==t.keyCode&&t.target==n?(t.preventDefault(),(t.shiftKey?$e:Ie)(e.view)):13==t.keyCode&&t.target==r&&(t.preventDefault(),Qe(e.view))}},[n,s("next",(function(){return Ie(e.view)}),[t("next")]),s("prev",(function(){return $e(e.view)}),[t("previous")]),s("select",(function(){return Be(e.view)}),[t("all")]),Ye("label",null,[a,"match case"]),Ye("br"),r,s("replace",(function(){return Qe(e.view)}),[t("replace")]),s("replaceAll",(function(){return We(e.view)}),[t("replace all")]),Ye("button",{name:"close",onclick:function(){return Ue(e.view)},"aria-label":t("close")},["\xd7"]),Ye("div",{style:"position: absolute; top: -10000px","aria-live":"polite"})])}var Ke=/[\s\.,:;?!]/;function Ge(e){var t=e.state.selection.primary,n=t.from,r=t.to,i=e.state.doc.lineAt(n).from,a=e.state.doc.lineAt(r).to,o=Math.max(i,n-30),s=Math.min(a,r+30),l=e.state.sliceDoc(o,s);if(o!=i)for(var c=0;c<30;c++)if(!Ke.test(l[c+1])&&Ke.test(l[c])){l=l.slice(c);break}if(s!=a)for(var u=l.length-1;u>l.length-30;u--)if(!Ke.test(l[u-1])&&Ke.test(l[u])){l=l.slice(0,u);break}var f=Object(Se.a)(e,He);f&&f.dom.contains(e.root.activeElement)&&(f.dom.querySelector("div[aria-live]").textContent=e.state.phrase("current match")+". "+l)}var Ze,Je=i.d.baseTheme({"$panel.search":{padding:"2px 6px 4px",position:"relative","& [name=close]":{position:"absolute",top:"0",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",padding:0,margin:0},"& input, & button":{margin:".2em .5em .2em 0"},"& label":{fontSize:"80%"}},"$$light $searchMatch":{backgroundColor:"#ffff0054"},"$$dark $searchMatch":{backgroundColor:"#00ffff8a"},"$$light $searchMatch.selected":{backgroundColor:"#ff6a0054"},"$$dark $searchMatch.selected":{backgroundColor:"#ff00ff8a"}}),et=[_e,Object(a.o)(Le,"override"),Object(Se.b)(),Je],tt=n(72),nt=[{key:"Mod-/",run:function(e){return rt(ot(Ze.Toggle),e)}},{key:"Alt-A",run:function(e){return rt(at(Ze.Toggle),e)}}];function rt(e,t){var n=e(t.state);return!!n&&(t.dispatch(n),!0)}function it(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e.selection.primary.head;return e.languageDataAt("commentTokens",t)[0]||{}}!function(e){e[e.Toggle=0]="Toggle",e[e.OnlyComment=1]="OnlyComment",e[e.OnlyUncomment=2]="OnlyUncomment"}(Ze||(Ze={}));var at=function(e){return function(t){var n=it(t);return n.block?new st(n.block.open,n.block.close).toggle(e,t):null}},ot=function(e){return function(t){var n=it(t);return n.line?new ct(n.line).toggle(e,t):null}},st=function(){function e(t,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:" ";Object(s.a)(this,e),this.open=t,this.close=n,this.margin=r}return Object(l.a)(e,[{key:"toggle",value:function(e,t){var n=this,r=this.isSelectionCommented(t);if(null!==r){if(e!==Ze.OnlyComment)return t.update({changes:r.map((function(e){var t=e.open,r=e.close;return[{from:t.pos-n.open.length,to:t.pos+t.margin},{from:r.pos-r.margin,to:r.pos+n.close.length}]}))})}else if(e!==Ze.OnlyUncomment)return t.update(t.changeByRange((function(e){var t=(n.open+n.margin).length;return{changes:[{from:e.from,insert:n.open+n.margin},{from:e.to,insert:n.margin+n.close}],range:a.d.range(e.anchor+t,e.head+t)}})));return null}},{key:"isSelectionCommented",value:function(e){var t,n=[],r=Object(o.a)(e.selection.ranges);try{for(r.s();!(t=r.n()).done;){var i=t.value,a=this.isRangeCommented(e,i);if(null===a)return null;n.push(a)}}catch(s){r.e(s)}finally{r.f()}return n}},{key:"isRangeCommented",value:function(e,t){var n,r,i=e.sliceDoc(t.from-lt,t.from),a=e.sliceDoc(t.to,t.to+lt),o=/\s*$/.exec(i)[0].length,s=/^\s*/.exec(a)[0].length,l=i.length-o;if(i.slice(l-this.open.length,l)==this.open&&a.slice(s,s+this.close.length)==this.close)return{open:{pos:t.from-o,margin:o&&1},close:{pos:t.to+s,margin:s&&1}};t.to-t.from<=2*lt?n=r=e.sliceDoc(t.from,t.to):(n=e.sliceDoc(t.from,t.from+lt),r=e.sliceDoc(t.to-lt,t.to));var c=/^\s*/.exec(n)[0].length,u=/\s*$/.exec(r)[0].length,f=r.length-u-this.close.length;return n.slice(c,c+this.open.length)==this.open&&r.slice(f,f+this.close.length)==this.close?{open:{pos:t.from+c+this.open.length,margin:/\s/.test(n.charAt(c+this.open.length))?1:0},close:{pos:t.to-u-this.close.length,margin:/\s/.test(r.charAt(f-1))?1:0}}:null}}]),e}(),lt=50,ct=function(){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:" ";Object(s.a)(this,e),this.lineCommentToken=t,this.margin=n}return Object(l.a)(e,[{key:"toggle",value:function(e,t){for(var n=[],i={},a=0;a1&&l.isLineSkipped[p.number])){var v=p.from+l.minCol,m=l.minCol+this.lineCommentToken.length,g=" "==p.slice(m,m+1)?1:0;c.push({from:v,to:v+this.lineCommentToken.length+g})}}}catch(j){h.e(j)}finally{h.f()}}return t.update({changes:c})}}else if(e!=Ze.OnlyUncomment){for(var b=[],y=0;yft?-1:i==r.length?function(e,t){var n=e.coordsAtPos(e.viewport.from);return n?Math.round(Math.abs((n.left-t)/e.defaultCharacterWidth)):-1}(e,t.clientX):Object(he.d)(r.slice(0,n-r.from),0,e.state.tabSize);return{line:r.number,col:a,off:i}}function ht(e,t){var n=dt(e,t),r=e.state.selection;return{update:function(e){if(e.docChanged){var t=e.changes.mapPos(e.prevState.doc.line(n.line).from),i=e.state.doc.lineAt(t);n={line:i.number,col:n.col,off:Math.min(n.off,i.length)},r=r.map(e.changes)}},get:function(t,i,o){var s=dt(e,t),l=function(e,t,n){var r=Math.min(t.line,n.line),i=Math.max(t.line,n.line),o=[];if(t.off>ft||n.off>ft||t.col<0||n.col<0)for(var s=Math.min(t.off,n.off),l=Math.max(t.off,n.off),c=r;c<=i;c++){var u=e.doc.line(c);u.length<=l&&o.push(a.d.range(u.from+s,u.to+l))}else for(var f=Math.min(t.col,n.col),d=Math.max(t.col,n.col),h=r;h<=i;h++){var p=e.doc.line(h),v=p.length>ft?p.slice(0,2*d):p.slice(),m=Object(he.e)(v,0,f,e.tabSize),g=Object(he.e)(v,0,d,e.tabSize);m.leftOver||o.push(a.d.range(p.from+m.offset,p.from+g.offset))}return o}(e.state,n,s);return l.length?o?a.d.create(l.concat(r.ranges)):a.d.create(l):r}}}var pt=n(13),vt="undefined"==typeof Symbol?"__goto-line":Symbol("goto-line");function mt(e){var t=document.createElement("form");t.innerHTML="\n");var n=t.querySelector("input");function r(){var t=parseInt(n.value,10);e.dispatch({reconfigure:Object(pt.a)({},vt,[gt]),selection:!isNaN(t)&&t>0&&t<=e.state.doc.lines?a.d.cursor(e.state.doc.line(t).from):void 0,scrollIntoView:!0}),e.focus()}return t.addEventListener("keydown",(function(t){27==t.keyCode?(t.preventDefault(),e.dispatch({reconfigure:{append:[gt]}}),e.focus()):13==t.keyCode&&(t.preventDefault(),r())})),t.addEventListener("submit",r),{dom:t,style:"gotoLine",pos:-10}}var gt=i.d.baseTheme({"$panel.gotoLine":{padding:"2px 6px 4px","& label":{fontSize:"80%"}}}),bt=[{key:"Alt-g",run:function(e){var t=Object(Se.a)(e,mt);return t||(e.dispatch({reconfigure:{append:[Object(Se.b)(),Se.c.of(mt),gt]}}),t=Object(Se.a)(e,mt)),t&&t.dom.querySelector("input").focus(),!0}}];var yt=i.b.line({attributes:{class:Object(i.n)("activeLine")}}),Ot=i.f.fromClass(function(){function e(t){Object(s.a)(this,e),this.decorations=this.getDeco(t)}return Object(l.a)(e,[{key:"update",value:function(e){(e.docChanged||e.selectionSet)&&(this.decorations=this.getDeco(e.view))}},{key:"getDeco",value:function(e){var t,n=-1,r=[],a=Object(o.a)(e.state.selection.ranges);try{for(a.s();!(t=a.n()).done;){var s=t.value;if(s.empty){var l=e.visualLineAt(s.head);l.from>n&&(r.push(yt.range(l.from)),n=l.from)}}}catch(c){a.e(c)}finally{a.f()}return i.b.set(r)}}]),e}(),{decorations:function(e){return e.decorations}}),kt={highlightWordAroundCursor:!1,minSelectionLength:1,maxMatches:100},xt=a.f.define({combine:function(e){return Object(a.m)(e,kt,{highlightWordAroundCursor:function(e,t){return e||t},minSelectionLength:Math.min,maxMatches:Math.min})}});var wt=i.b.mark({class:Object(i.n)("selectionMatch")}),jt=i.b.mark({class:Object(i.n)("selectionMatch.main")}),St=i.f.fromClass(function(){function e(t){Object(s.a)(this,e),this.decorations=this.getDeco(t)}return Object(l.a)(e,[{key:"update",value:function(e){(e.selectionSet||e.docChanged||e.viewportChanged)&&(this.decorations=this.getDeco(e.view))}},{key:"getDeco",value:function(e){var t=e.state.facet(xt),n=e.state,r=n.selection;if(r.ranges.length>1)return i.b.none;var s,l=r.primary,c=null;if(l.empty){if(!t.highlightWordAroundCursor)return i.b.none;if(c=n.charCategorizer(l.head),!(s=function(e,t,n){for(var r=e.lineAt(t),i=t-r.from,o=t-r.from;i>0;){var s=r.findClusterBreak(i,!1);if(n(r.slice(s,i))!=a.c.Word)break;i=s}for(;o200)return i.b.none;if(!(s=n.sliceDoc(l.from,l.to).trim()))return i.b.none}var f,d=[],h=Object(o.a)(e.visibleRanges);try{for(h.s();!(f=h.n()).done;)for(var p=f.value,v=new Me(n.doc,s,p.from,p.to);!v.next().done;){var m=v.value,g=m.from,b=m.to;if((!c||(0==g||c(n.sliceDoc(g-1,g))!=a.c.Word)&&(b==n.doc.length||c(n.sliceDoc(b,b+1))!=a.c.Word))&&(c&&g<=l.from&&b>=l.to?d.push(jt.range(g,b)):(g>=l.to||b<=l.from)&&d.push(wt.range(g,b)),d.length>t.maxMatches))return i.b.none}}catch(y){h.e(y)}finally{h.f()}return i.b.set(d)}}]),e}(),{decorations:function(e){return e.decorations}}),Ct=i.d.baseTheme({"$$light $activeLine":{backgroundColor:"#eff5ff"},"$$dark $activeLine":{backgroundColor:"#223039"},$selectionMatch:{backgroundColor:"#99ff7780"},"$searchMatch $selectionMatch":{backgroundColor:"transparent"}}),Mt=n(100),Et=n(101),Tt=[function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return[V.of(e),q]}(),Object(i.i)(),function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return[h,d.of(e)]}(),function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=Object.assign(Object.assign({},le),e),n=new ce(t,!0),r=new ce(t,!1);return[N({style:"foldGutter",lineMarker:function(e,t){return ee(e.state,t.from,t.to)?r:te(e.state,t.from,t.to)?n:null},initialSpacer:function(){return new ce(t,!1)},domEventHandlers:{click:function(e,t){var n=ee(e.state,t.from,t.to);if(n)return e.dispatch({effects:G.of(n)}),!0;var r=te(e.state,t.from,t.to);return!!r&&(e.dispatch({effects:K.of(r)}),!0)}}}),oe()]}(),Object(i.h)(),a.e.allowMultipleSelections.of(!0),Object(i.j)(),Mt.a,Object(de.a)(),i.d.inputHandler.of(be),Object(tt.a)(),function(e){var t=e||function(e){return e.altKey&&0==e.button};return i.d.mouseSelectionStyle.of((function(e,n){return t(n)?ht(e,n):null}))}(),[Ct,Ot],function(e){var t=[Ct,St];return e&&t.push(xt.of(e)),t}(),Object(i.k)([].concat(Object(r.a)(ye),Object(r.a)(fe.a),Object(r.a)(qe),Object(r.a)(T),Object(r.a)(re),Object(r.a)(nt),Object(r.a)(bt),Object(r.a)(tt.b),Object(r.a)(Et.a)))]},function(e,t,n){"use strict";var r=n(79),i=n.n(r),a=n(1),o=function(e){return e&&e.enabled&&e.modifierKey},s=function(e,t){return e&&t[e+"Key"]},l=function(e,t){return e&&!t[e+"Key"]};function c(e,t,n){return void 0===e||("string"===typeof e?-1!==e.indexOf(t):"function"===typeof e&&-1!==e({chart:n}).indexOf(t))}function u(e,t,n){var r=function(e,t){for(var n=e.x,r=e.y,i=t.scales,a=Object.keys(i),o=0;o=s.top&&r<=s.bottom&&n>=s.left&&n<=s.right)return s}return null}(t,n);if(r&&c(e,r.axis,n))return[r];var i=[];return Object(a.c)(n.scales,(function(t){c(e,t.axis,n)||i.push(t)})),i}var f=new WeakMap;function d(e){var t=f.get(e);return t||(t={originalScaleLimits:{},updatedScaleLimits:{},handlers:{},panDelta:{}},f.set(e,t)),t}function h(e,t,n){var r=e.max-e.min,i=r*(t-1),a=e.isHorizontal()?n.x:n.y,o=(e.getValueForPixel(a)-e.min)/r||0;return{min:i*o,max:i*(1-o)}}function p(e,t,n,r,i){var o=n[r];if("original"===o){var s=e.originalScaleLimits[t.id][r];o=Object(a.Pb)(s.options,s.scale)}return Object(a.Pb)(o,i)}function v(e,t,n){var r=t.min,i=t.max,a=arguments.length>3&&void 0!==arguments[3]&&arguments[3],o=d(e.chart),s=e.id,l=e.axis,c=e.options,u=n&&(n[s]||n[l])||{},f=u.minRange,h=void 0===f?0:f,v=p(o,e,u,"min",-1/0),m=p(o,e,u,"max",1/0),g=Math.max(r,v),b=Math.min(i,m),y=a?Math.max(b-g,h):e.max-e.min;if(b-g!==y)if(v>b-y)r=g,i=g+y;else if(m3&&void 0!==arguments[3]&&arguments[3],i=e.min,a=e.max,o=e.options,s=o.time&&o.time.round,l=g[s]||0,c=e.getValueForPixel(e.getPixelForValue(i+l)-t),u=e.getValueForPixel(e.getPixelForValue(a+l)-t),f=r&&n&&n[e.axis]||{},d=f.min,h=void 0===d?-1/0:d,p=f.max,m=void 0===p?1/0:p;return!!(isNaN(c)||isNaN(u)||cm)||v(e,{min:c,max:u},n,r)}function y(e,t,n){return b(e,t,n,!0)}var O={category:function(e,t,n,r){var i=h(e,t,n);return e.min===e.max&&t<1&&function(e){var t=e.getLabels().length-1;e.min>0&&(e.min-=1),e.maxl&&(a=Math.max(0,a-c),o=1===s?a:a+s,r=0===a),v(e,{min:a,max:o},n)||r},default:b,logarithmic:y,timeseries:y};function x(e,t){Object(a.c)(e,(function(n,r){t[r]||delete e[r]}))}function w(e,t){var n=e.scales,r=t.originalScaleLimits,i=t.updatedScaleLimits;return Object(a.c)(n,(function(e){(function(e,t,n){var r=e.id,i=e.options,a=i.min,o=i.max;if(!t[r]||!n[r])return!0;var s=n[r];return s.min!==a||s.max!==o})(e,r,i)&&(r[e.id]={min:{scale:e.min,options:e.options.min},max:{scale:e.max,options:e.options.max}})})),x(r,n),x(i,n),r}function j(e,t,n,r){var i=O[e.type]||O.default;Object(a.n)(i,[e,t,n,r])}function S(e){var t=e.chartArea;return{x:(t.left+t.right)/2,y:(t.top+t.bottom)/2}}function C(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"none",r="number"===typeof t?{x:t,y:t}:t,i=r.x,o=void 0===i?1:i,s=r.y,l=void 0===s?1:s,f=r.focalPoint,h=void 0===f?S(e):f,p=d(e),v=p.options,m=v.limits,g=v.zoom,b=g||{},y=b.mode,O=void 0===y?"xy":y,k=b.overScaleMode;w(e,p);var x=1!==o&&c(O,"x",e),C=1!==l&&c(O,"y",e),M=k&&u(k,h,e);Object(a.c)(M||e.scales,(function(e){e.isHorizontal()&&x?j(e,o,h,m):!e.isHorizontal()&&C&&j(e,l,h,m)})),e.update(n),Object(a.n)(g.onZoom,[{chart:e}])}function M(e,t,n){var r=e.getValueForPixel(t),i=e.getValueForPixel(n);return{min:Math.min(r,i),max:Math.max(r,i)}}function E(e){var t=d(e),n=1,r=1;return Object(a.c)(e.scales,(function(e){var i=function(e,t){var n=e.originalScaleLimits[t];if(n){var r=n.min,i=n.max;return Object(a.Pb)(i.options,i.scale)-Object(a.Pb)(r.options,r.scale)}}(t,e.id);if(i){var o=Math.round(i/(e.max-e.min)*100)/100;n=Math.min(n,o),r=Math.max(r,o)}})),n<1?n:r}function T(e,t,n,r){var i=r.panDelta,o=i[e.id]||0;Object(a.Mb)(o)===Object(a.Mb)(t)&&(t+=o);var s=k[e.type]||k.default;Object(a.n)(s,[e,t,n])?i[e.id]=0:i[e.id]=t}function P(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"none",i="number"===typeof t?{x:t,y:t}:t,o=i.x,s=void 0===o?0:o,l=i.y,u=void 0===l?0:l,f=d(e),h=f.options,p=h.pan,v=h.limits,m=p||{},g=m.mode,b=void 0===g?"xy":g,y=m.onPan;w(e,f);var O=0!==s&&c(b,"x",e),k=0!==u&&c(b,"y",e);Object(a.c)(n||e.scales,(function(e){e.isHorizontal()&&O?T(e,s,v,f):!e.isHorizontal()&&k&&T(e,u,v,f)})),e.update(r),Object(a.n)(y,[{chart:e}])}function _(e,t){var n=d(e).handlers,r=n[t];r&&r.target&&(r.target.removeEventListener(t,r),delete n[t])}function D(e,t,n,r){var i=d(e),a=i.handlers,o=i.options;_(e,n),a[n]=function(t){return r(e,t,o)},a[n].target=t,t.addEventListener(n,a[n])}function A(e,t){var n=d(e);n.dragStart&&(n.dragging=!0,n.dragEnd=t,e.update("none"))}function R(e,t,n){var r=n.onZoomStart,i=n.onZoomRejected;if(r){var o=t.target.getBoundingClientRect(),s=o.left,l=o.top,c={x:t.clientX-s,y:t.clientY-l};if(!1===Object(a.n)(r,[{chart:e,event:t,point:c}]))return Object(a.n)(i,[{chart:e,event:t}]),!1}}function L(e,t){var n=d(e),r=n.options,i=r.pan,c=r.zoom,u=void 0===c?{}:c;if(s(o(i),t)||l(o(u.drag),t))return Object(a.n)(u.onZoomRejected,[{chart:e,event:t}]);!1!==R(e,t,u)&&(n.dragStart=t,D(e,e.canvas,"mousemove",A))}function N(e,t,n,r){var i=n.target.getBoundingClientRect(),a=i.left,o=i.top,s=c(t,"x",e),l=c(t,"y",e),u=e.chartArea,f=u.top,d=u.left,h=u.right,p=u.bottom,v=u.width,m=u.height;s&&(d=Math.min(n.clientX,r.clientX)-a,h=Math.max(n.clientX,r.clientX)-a),l&&(f=Math.min(n.clientY,r.clientY)-o,p=Math.max(n.clientY,r.clientY)-o);var g=h-d,b=p-f;return{left:d,top:f,right:h,bottom:p,width:g,height:b,zoomX:s&&g?1+(v-g)/v:1,zoomY:l&&b?1+(m-b)/m:1}}function z(e,t){var n=d(e);if(n.dragStart){_(e,"mousemove");var r=n.options.zoom,i=r.mode,o=r.onZoomComplete,s=r.drag.threshold,l=void 0===s?0:s,u=N(e,i,n.dragStart,t),f=c(i,"x",e)?u.width:0,h=c(i,"y",e)?u.height:0,p=Math.sqrt(f*f+h*h);if(n.dragStart=n.dragEnd=null,p<=l)return n.dragging=!1,void e.update("none");!function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"none",i=d(e),o=i.options,s=o.limits,l=o.zoom,u=l.mode,f=void 0===u?"xy":u;w(e,i);var h=c(f,"x",e),p=c(f,"y",e);Object(a.c)(e.scales,(function(e){e.isHorizontal()&&h?v(e,M(e,t.x,n.x),s,!0):!e.isHorizontal()&&p&&v(e,M(e,t.y,n.y),s,!0)})),e.update(r),Object(a.n)(l.onZoom,[{chart:e}])}(e,{x:u.left,y:u.top},{x:u.right,y:u.bottom},"zoom"),setTimeout((function(){return n.dragging=!1}),500),Object(a.n)(o,[{chart:e}])}}function I(e,t){var n=d(e),r=n.handlers.onZoomComplete,i=n.options.zoom;if(function(e,t,n){if(l(o(n.wheel),t))Object(a.n)(n.onZoomRejected,[{chart:e,event:t}]);else if(!1!==R(e,t,n)&&(t.cancelable&&t.preventDefault(),void 0!==t.deltaY))return!0}(e,t,i)){var s=t.target.getBoundingClientRect(),c=1+(t.deltaY>=0?-i.wheel.speed:i.wheel.speed);C(e,{x:c,y:c,focalPoint:{x:t.clientX-s.left,y:t.clientY-s.top}}),r&&r()}}function F(e,t,n,r){n&&(d(e).handlers[t]=function(e,t){var n;return function(){return clearTimeout(n),n=setTimeout(e,t),t}}((function(){return Object(a.n)(n,[{chart:e}])}),r))}function $(e,t){return function(n,r){var i=t.options,c=i.pan,u=i.zoom,f=void 0===u?{}:u;if(!c||!c.enabled)return!1;var d=r&&r.srcEvent;return!d||(!(!t.panning&&"mouse"===r.pointerType&&(l(o(c),d)||s(o(f.drag),d)))||(Object(a.n)(c.onPanRejected,[{chart:e,event:r}]),!1))}}function B(e,t,n){if(t.scale){var r=n.center,i=n.pointers,a=1/t.scale*n.scale,o=n.target.getBoundingClientRect(),s=function(e,t){var n,r,i=Math.abs(e.clientX-t.clientX),a=Math.abs(e.clientY-t.clientY),o=i/a;return o>.3&&o<1.7?n=r=!0:i>a?n=!0:r=!0,{x:n,y:r}}(i[0],i[1]),l=t.options.zoom.mode;C(e,{x:s.x&&c(l,"x",e)?a:1,y:s.y&&c(l,"y",e)?a:1,focalPoint:{x:r.x-o.left,y:r.y-o.top}}),t.scale=n.scale}}function Q(e,t,n){var r=t.delta;r&&(t.panning=!0,P(e,{x:n.deltaX-r.x,y:n.deltaY-r.y},t.panScales),t.delta={x:n.deltaX,y:n.deltaY})}var W=new WeakMap;function H(e,t){var n=d(e),r=e.canvas,o=t.pan,s=t.zoom,l=new i.a.Manager(r);s&&s.pinch.enabled&&(l.add(new i.a.Pinch),l.on("pinchstart",(function(){return function(e,t){t.options.zoom.pinch.enabled&&(t.scale=1)}(0,n)})),l.on("pinch",(function(t){return B(e,n,t)})),l.on("pinchend",(function(t){return function(e,t,n){t.scale&&(B(e,t,n),t.scale=null,Object(a.n)(t.options.zoom.onZoomComplete,[{chart:e}]))}(e,n,t)}))),o&&o.enabled&&(l.add(new i.a.Pan({threshold:o.threshold,enable:$(e,n)})),l.on("panstart",(function(t){return function(e,t,n){var r=t.options.pan,i=r.enabled,o=r.overScaleMode,s=r.onPanStart,l=r.onPanRejected;if(i){var c=n.target.getBoundingClientRect(),f={x:n.center.x-c.left,y:n.center.y-c.top};if(!1===Object(a.n)(s,[{chart:e,event:n,point:f}]))return Object(a.n)(l,[{chart:e,event:n}]);t.panScales=o&&u(o,f,e),t.delta={x:0,y:0},clearTimeout(t.panEndTimeout),Q(e,t,n)}}(e,n,t)})),l.on("panmove",(function(t){return Q(e,n,t)})),l.on("panend",(function(){return function(e,t){t.delta=null,t.panning&&(t.panEndTimeout=setTimeout((function(){return t.panning=!1}),500),Object(a.n)(t.options.pan.onPanComplete,[{chart:e}]))}(e,n)}))),W.set(e,l)}var V={id:"zoom",version:"1.1.1",defaults:{pan:{enabled:!1,mode:"xy",threshold:10,modifierKey:null},zoom:{wheel:{enabled:!1,speed:.1,modifierKey:null},drag:{enabled:!1,modifierKey:null},pinch:{enabled:!1},mode:"xy"}},start:function(e,t,n){d(e).options=n,Object.prototype.hasOwnProperty.call(n.zoom,"enabled")&&console.warn("The option `zoom.enabled` is no longer supported. Please use `zoom.wheel.enabled`, `zoom.drag.enabled`, or `zoom.pinch.enabled`."),i.a&&H(e,n),e.pan=function(t,n,r){return P(e,t,n,r)},e.zoom=function(t,n){return C(e,t,n)},e.zoomScale=function(t,n,r){return function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"none";w(e,d(e)),v(e.scales[t],n,void 0,!0),e.update(r)}(e,t,n,r)},e.resetZoom=function(t){return function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"default",n=d(e),r=w(e,n);Object(a.c)(e.scales,(function(e){var t=e.options;r[e.id]?(t.min=r[e.id].min.options,t.max=r[e.id].max.options):(delete t.min,delete t.max)})),e.update(t),Object(a.n)(n.options.zoom.onZoomComplete,[{chart:e}])}(e,t)},e.getZoomLevel=function(){return E(e)}},beforeEvent:function(e){var t=d(e);if(t.panning||t.dragging)return!1},beforeUpdate:function(e,t,n){d(e).options=n,function(e,t){var n=e.canvas,r=t.zoom,i=r.wheel,a=r.drag,o=r.onZoomComplete;i.enabled?(D(e,n,"wheel",I),F(e,"onZoomComplete",o,250)):_(e,"wheel"),a.enabled?(D(e,n,"mousedown",L),D(e,n.ownerDocument,"mouseup",z)):(_(e,"mousedown"),_(e,"mousemove"),_(e,"mouseup"))}(e,n)},beforeDatasetsDraw:function(e,t,n){var r=d(e),i=r.dragStart,a=r.dragEnd;if(a){var o=N(e,n.zoom.mode,i,a),s=o.left,l=o.top,c=o.width,u=o.height,f=n.zoom.drag,h=e.ctx;h.save(),h.beginPath(),h.fillStyle=f.backgroundColor||"rgba(225,225,225,0.3)",h.fillRect(s,l,c,u),f.borderWidth>0&&(h.lineWidth=f.borderWidth,h.strokeStyle=f.borderColor||"rgba(225,225,225)",h.strokeRect(s,l,c,u)),h.restore()}},stop:function(e){!function(e){_(e,"mousedown"),_(e,"mousemove"),_(e,"mouseup"),_(e,"wheel"),_(e,"click")}(e),i.a&&function(e){var t=W.get(e);t&&(t.remove("pinchstart"),t.remove("pinch"),t.remove("pinchend"),t.remove("panstart"),t.remove("pan"),t.remove("panend"),t.destroy(),W.delete(e))}(e),function(e){f.delete(e)}(e)},panFunctions:k,zoomFunctions:O};t.a=V},function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var r=n(0),i=n.n(r),a=n(90);function o(){return i.a.useContext(a.a)}},function(e,t,n){"use strict";function r(e){for(var t="https://material-ui.com/production-error/?code="+e,n=1;n