From 5e39556d27ff32a3728a178a8c4a346c463c9d4d Mon Sep 17 00:00:00 2001 From: Bulat Zamalutdinov <13433317+qJkee@users.noreply.github.com> Date: Mon, 9 Mar 2026 16:47:16 +0400 Subject: [PATCH] feat(manager): read TLS config from API server Read TLS config from API server and use it where applicable. When config changes - trigger graceful shutdown to recreate servers with new TLS configuration --- .../manifests/lvm.topolvm.io_lvmclusters.yaml | 2 +- ...topolvm.io_lvmvolumegroupnodestatuses.yaml | 2 +- .../lvm.topolvm.io_lvmvolumegroups.yaml | 2 +- .../lvms-operator.clusterserviceversion.yaml | 16 ++ catalog/lvms-operator/v0.0.1.yaml | 8 +- cmd/operator/operator.go | 29 ++++ cmd/vgmanager/vgmanager.go | 51 +++++- .../crd/bases/lvm.topolvm.io_lvmclusters.yaml | 2 +- ...topolvm.io_lvmvolumegroupnodestatuses.yaml | 2 +- .../bases/lvm.topolvm.io_lvmvolumegroups.yaml | 2 +- config/rbac/role.yaml | 8 + config/rbac/vg_manager_clusterrole.yaml | 8 + go.mod | 62 +++---- go.sum | 156 ++++++++++-------- internal/controllers/lvmcluster/controller.go | 1 + .../controllers/vgmanager/validatelvs_test.go | 2 +- 16 files changed, 240 insertions(+), 113 deletions(-) diff --git a/bundle/manifests/lvm.topolvm.io_lvmclusters.yaml b/bundle/manifests/lvm.topolvm.io_lvmclusters.yaml index cac7e0f50..30a9c97f3 100644 --- a/bundle/manifests/lvm.topolvm.io_lvmclusters.yaml +++ b/bundle/manifests/lvm.topolvm.io_lvmclusters.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.17.3 + controller-gen.kubebuilder.io/version: v0.19.0 creationTimestamp: null name: lvmclusters.lvm.topolvm.io spec: diff --git a/bundle/manifests/lvm.topolvm.io_lvmvolumegroupnodestatuses.yaml b/bundle/manifests/lvm.topolvm.io_lvmvolumegroupnodestatuses.yaml index de9075b95..70616926e 100644 --- a/bundle/manifests/lvm.topolvm.io_lvmvolumegroupnodestatuses.yaml +++ b/bundle/manifests/lvm.topolvm.io_lvmvolumegroupnodestatuses.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.17.3 + controller-gen.kubebuilder.io/version: v0.19.0 creationTimestamp: null name: lvmvolumegroupnodestatuses.lvm.topolvm.io spec: diff --git a/bundle/manifests/lvm.topolvm.io_lvmvolumegroups.yaml b/bundle/manifests/lvm.topolvm.io_lvmvolumegroups.yaml index ed3f46f0e..9d97726cd 100644 --- a/bundle/manifests/lvm.topolvm.io_lvmvolumegroups.yaml +++ b/bundle/manifests/lvm.topolvm.io_lvmvolumegroups.yaml @@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.17.3 + controller-gen.kubebuilder.io/version: v0.19.0 creationTimestamp: null name: lvmvolumegroups.lvm.topolvm.io spec: diff --git a/bundle/manifests/lvms-operator.clusterserviceversion.yaml b/bundle/manifests/lvms-operator.clusterserviceversion.yaml index d3cf8a741..4d26379bf 100644 --- a/bundle/manifests/lvms-operator.clusterserviceversion.yaml +++ b/bundle/manifests/lvms-operator.clusterserviceversion.yaml @@ -215,6 +215,14 @@ spec: - replicasets verbs: - get + - apiGroups: + - config.openshift.io + resources: + - apiservers + verbs: + - get + - list + - watch - apiGroups: - config.openshift.io resources: @@ -418,6 +426,14 @@ spec: - get - list - watch + - apiGroups: + - config.openshift.io + resources: + - apiservers + verbs: + - get + - list + - watch serviceAccountName: vg-manager deployments: - label: diff --git a/catalog/lvms-operator/v0.0.1.yaml b/catalog/lvms-operator/v0.0.1.yaml index 5ff583bee..9888b615e 100644 --- a/catalog/lvms-operator/v0.0.1.yaml +++ b/catalog/lvms-operator/v0.0.1.yaml @@ -29,19 +29,19 @@ properties: version: 0.0.1 - type: olm.bundle.object value: - data: eyJhcGlWZXJzaW9uIjoiYXBpZXh0ZW5zaW9ucy5rOHMuaW8vdjEiLCJraW5kIjoiQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uIiwibWV0YWRhdGEiOnsiYW5ub3RhdGlvbnMiOnsiY29udHJvbGxlci1nZW4ua3ViZWJ1aWxkZXIuaW8vdmVyc2lvbiI6InYwLjE3LjMifSwiY3JlYXRpb25UaW1lc3RhbXAiOm51bGwsIm5hbWUiOiJsdm12b2x1bWVncm91cG5vZGVzdGF0dXNlcy5sdm0udG9wb2x2bS5pbyJ9LCJzcGVjIjp7Imdyb3VwIjoibHZtLnRvcG9sdm0uaW8iLCJuYW1lcyI6eyJraW5kIjoiTFZNVm9sdW1lR3JvdXBOb2RlU3RhdHVzIiwibGlzdEtpbmQiOiJMVk1Wb2x1bWVHcm91cE5vZGVTdGF0dXNMaXN0IiwicGx1cmFsIjoibHZtdm9sdW1lZ3JvdXBub2Rlc3RhdHVzZXMiLCJzaW5ndWxhciI6Imx2bXZvbHVtZWdyb3Vwbm9kZXN0YXR1cyJ9LCJzY29wZSI6Ik5hbWVzcGFjZWQiLCJ2ZXJzaW9ucyI6W3sibmFtZSI6InYxYWxwaGExIiwic2NoZW1hIjp7Im9wZW5BUElWM1NjaGVtYSI6eyJkZXNjcmlwdGlvbiI6IkxWTVZvbHVtZUdyb3VwTm9kZVN0YXR1cyBpcyB0aGUgU2NoZW1hIGZvciB0aGUgbHZtdm9sdW1lZ3JvdXBub2Rlc3RhdHVzZXMgQVBJIiwicHJvcGVydGllcyI6eyJhcGlWZXJzaW9uIjp7ImRlc2NyaXB0aW9uIjoiQVBJVmVyc2lvbiBkZWZpbmVzIHRoZSB2ZXJzaW9uZWQgc2NoZW1hIG9mIHRoaXMgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LlxuU2VydmVycyBzaG91bGQgY29udmVydCByZWNvZ25pemVkIHNjaGVtYXMgdG8gdGhlIGxhdGVzdCBpbnRlcm5hbCB2YWx1ZSwgYW5kXG5tYXkgcmVqZWN0IHVucmVjb2duaXplZCB2YWx1ZXMuXG5Nb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL3NpZy1hcmNoaXRlY3R1cmUvYXBpLWNvbnZlbnRpb25zLm1kI3Jlc291cmNlcyIsInR5cGUiOiJzdHJpbmcifSwia2luZCI6eyJkZXNjcmlwdGlvbiI6IktpbmQgaXMgYSBzdHJpbmcgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBSRVNUIHJlc291cmNlIHRoaXMgb2JqZWN0IHJlcHJlc2VudHMuXG5TZXJ2ZXJzIG1heSBpbmZlciB0aGlzIGZyb20gdGhlIGVuZHBvaW50IHRoZSBjbGllbnQgc3VibWl0cyByZXF1ZXN0cyB0by5cbkNhbm5vdCBiZSB1cGRhdGVkLlxuSW4gQ2FtZWxDYXNlLlxuTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9zaWctYXJjaGl0ZWN0dXJlL2FwaS1jb252ZW50aW9ucy5tZCN0eXBlcy1raW5kcyIsInR5cGUiOiJzdHJpbmcifSwibWV0YWRhdGEiOnsidHlwZSI6Im9iamVjdCJ9LCJzcGVjIjp7ImRlc2NyaXB0aW9uIjoiTFZNVm9sdW1lR3JvdXBOb2RlU3RhdHVzU3BlYyBkZWZpbmVzIHRoZSBkZXNpcmVkIHN0YXRlIG9mIExWTVZvbHVtZUdyb3VwTm9kZVN0YXR1cyIsInByb3BlcnRpZXMiOnsibm9kZVN0YXR1cyI6eyJkZXNjcmlwdGlvbiI6Ik5vZGVTdGF0dXMgY29udGFpbnMgdGhlIHBlciBub2RlIHN0YXR1cyBvZiB0aGUgVkciLCJpdGVtcyI6eyJwcm9wZXJ0aWVzIjp7ImRldmljZURpc2NvdmVyeVBvbGljeSI6eyJkZWZhdWx0IjoiUnVudGltZVN0YXRpYyIsImRlc2NyaXB0aW9uIjoiRGV2aWNlRGlzY292ZXJ5UG9saWN5IGlzIGEgZmllbGQgdG8gaW5kaWNhdGUgdGhlIGVmZmVjdGl2ZSBkZXZpY2UgZGlzY292ZXJ5IHBvbGljeSBmb3IgdGhpcyB2b2x1bWUgZ3JvdXAuXG5QcmVjb25maWd1cmVkIGluZGljYXRlcyBleHBsaWNpdCBEZXZpY2VTZWxlY3RvciBwYXRocyBhcmUgY29uZmlndXJlZCBhbmQgdGhlIGRpc2NvdmVyeSBwb2xpY3kgaXMgbm90IGFwcGxpY2FibGUuXG5SdW50aW1lRHluYW1pYyBpbmRpY2F0ZXMgZGV2aWNlcyBhcmUgZGlzY292ZXJlZCBhbmQgYWRkZWQgZHluYW1pY2FsbHkgYXQgcnVudGltZSAobm8gZXhwbGljaXQgcGF0aHMsIER5bmFtaWMgcG9saWN5KS5cblJ1bnRpbWVTdGF0aWMgaW5kaWNhdGVzIGRldmljZXMgd2VyZSBkaXNjb3ZlcmVkIGF0IGluc3RhbGwgdGltZSBhbmQgbmV3IGRldmljZXMgYXJlIGlnbm9yZWQgKG5vIGV4cGxpY2l0IHBhdGhzLCBTdGF0aWMgcG9saWN5KS4iLCJlbnVtIjpbIlByZWNvbmZpZ3VyZWQiLCJSdW50aW1lRHluYW1pYyIsIlJ1bnRpbWVTdGF0aWMiXSwidHlwZSI6InN0cmluZyJ9LCJkZXZpY2VzIjp7ImRlc2NyaXB0aW9uIjoiRGV2aWNlcyBpcyB0aGUgbGlzdCBvZiBkZXZpY2VzIHVzZWQgYnkgdGhlIHZvbHVtZSBncm91cCIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In0sImV4Y2x1ZGVkIjp7ImRlc2NyaXB0aW9uIjoiRXhjbHVkZWQgY29udGFpbnMgdGhlIHBlciBub2RlIHN0YXR1cyBvZiBhcHBsaWVkIGRldmljZSBleGNsdXNpb25zIHRoYXQgd2VyZSBwaWNrZWQgdXAgdmlhIHNlbGVjdG9yLFxuYnV0IHdlcmUgbm90IHVzZWQgZm9yIG90aGVyIHJlYXNvbnMuIiwiaXRlbXMiOnsicHJvcGVydGllcyI6eyJuYW1lIjp7ImRlc2NyaXB0aW9uIjoiTmFtZSBpcyB0aGUgZGV2aWNlIHRoYXQgd2FzIGZpbHRlcmVkIiwidHlwZSI6InN0cmluZyJ9LCJyZWFzb25zIjp7ImRlc2NyaXB0aW9uIjoiUmVhc29ucyBhcmUgdGhlIGh1bWFuLXJlYWRhYmxlIHJlYXNvbnMgd2h5IHRoZSBkZXZpY2Ugd2FzIGV4Y2x1ZGVkIGZyb20gdGhlIHZvbHVtZSBncm91cCIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In19LCJyZXF1aXJlZCI6WyJuYW1lIiwicmVhc29ucyJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJuYW1lIjp7ImRlc2NyaXB0aW9uIjoiTmFtZSBpcyB0aGUgbmFtZSBvZiB0aGUgdm9sdW1lIGdyb3VwIiwidHlwZSI6InN0cmluZyJ9LCJyZWFzb24iOnsiZGVzY3JpcHRpb24iOiJSZWFzb24gcHJvdmlkZXMgbW9yZSBkZXRhaWwgb24gdGhlIHZvbHVtZSBncm91cCBjcmVhdGlvbiBzdGF0dXMiLCJ0eXBlIjoic3RyaW5nIn0sInN0YXR1cyI6eyJkZXNjcmlwdGlvbiI6IlN0YXR1cyB0ZWxscyBpZiB0aGUgdm9sdW1lIGdyb3VwIHdhcyBjcmVhdGVkIG9uIHRoZSBub2RlIiwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsiZGV2aWNlRGlzY292ZXJ5UG9saWN5Il0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In19LCJ0eXBlIjoib2JqZWN0In0sInN0YXR1cyI6eyJkZXNjcmlwdGlvbiI6IkxWTVZvbHVtZUdyb3VwTm9kZVN0YXR1c1N0YXR1cyBkZWZpbmVzIHRoZSBvYnNlcnZlZCBzdGF0ZSBvZiBMVk1Wb2x1bWVHcm91cE5vZGVTdGF0dXMiLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0In19LCJzZXJ2ZWQiOnRydWUsInN0b3JhZ2UiOnRydWUsInN1YnJlc291cmNlcyI6eyJzdGF0dXMiOnt9fX1dfSwic3RhdHVzIjp7ImFjY2VwdGVkTmFtZXMiOnsia2luZCI6IiIsInBsdXJhbCI6IiJ9LCJjb25kaXRpb25zIjpudWxsLCJzdG9yZWRWZXJzaW9ucyI6bnVsbH19 + data: eyJhcGlWZXJzaW9uIjoiYXBpZXh0ZW5zaW9ucy5rOHMuaW8vdjEiLCJraW5kIjoiQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uIiwibWV0YWRhdGEiOnsiYW5ub3RhdGlvbnMiOnsiY29udHJvbGxlci1nZW4ua3ViZWJ1aWxkZXIuaW8vdmVyc2lvbiI6InYwLjE5LjAifSwiY3JlYXRpb25UaW1lc3RhbXAiOm51bGwsIm5hbWUiOiJsdm12b2x1bWVncm91cG5vZGVzdGF0dXNlcy5sdm0udG9wb2x2bS5pbyJ9LCJzcGVjIjp7Imdyb3VwIjoibHZtLnRvcG9sdm0uaW8iLCJuYW1lcyI6eyJraW5kIjoiTFZNVm9sdW1lR3JvdXBOb2RlU3RhdHVzIiwibGlzdEtpbmQiOiJMVk1Wb2x1bWVHcm91cE5vZGVTdGF0dXNMaXN0IiwicGx1cmFsIjoibHZtdm9sdW1lZ3JvdXBub2Rlc3RhdHVzZXMiLCJzaW5ndWxhciI6Imx2bXZvbHVtZWdyb3Vwbm9kZXN0YXR1cyJ9LCJzY29wZSI6Ik5hbWVzcGFjZWQiLCJ2ZXJzaW9ucyI6W3sibmFtZSI6InYxYWxwaGExIiwic2NoZW1hIjp7Im9wZW5BUElWM1NjaGVtYSI6eyJkZXNjcmlwdGlvbiI6IkxWTVZvbHVtZUdyb3VwTm9kZVN0YXR1cyBpcyB0aGUgU2NoZW1hIGZvciB0aGUgbHZtdm9sdW1lZ3JvdXBub2Rlc3RhdHVzZXMgQVBJIiwicHJvcGVydGllcyI6eyJhcGlWZXJzaW9uIjp7ImRlc2NyaXB0aW9uIjoiQVBJVmVyc2lvbiBkZWZpbmVzIHRoZSB2ZXJzaW9uZWQgc2NoZW1hIG9mIHRoaXMgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LlxuU2VydmVycyBzaG91bGQgY29udmVydCByZWNvZ25pemVkIHNjaGVtYXMgdG8gdGhlIGxhdGVzdCBpbnRlcm5hbCB2YWx1ZSwgYW5kXG5tYXkgcmVqZWN0IHVucmVjb2duaXplZCB2YWx1ZXMuXG5Nb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL3NpZy1hcmNoaXRlY3R1cmUvYXBpLWNvbnZlbnRpb25zLm1kI3Jlc291cmNlcyIsInR5cGUiOiJzdHJpbmcifSwia2luZCI6eyJkZXNjcmlwdGlvbiI6IktpbmQgaXMgYSBzdHJpbmcgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBSRVNUIHJlc291cmNlIHRoaXMgb2JqZWN0IHJlcHJlc2VudHMuXG5TZXJ2ZXJzIG1heSBpbmZlciB0aGlzIGZyb20gdGhlIGVuZHBvaW50IHRoZSBjbGllbnQgc3VibWl0cyByZXF1ZXN0cyB0by5cbkNhbm5vdCBiZSB1cGRhdGVkLlxuSW4gQ2FtZWxDYXNlLlxuTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9zaWctYXJjaGl0ZWN0dXJlL2FwaS1jb252ZW50aW9ucy5tZCN0eXBlcy1raW5kcyIsInR5cGUiOiJzdHJpbmcifSwibWV0YWRhdGEiOnsidHlwZSI6Im9iamVjdCJ9LCJzcGVjIjp7ImRlc2NyaXB0aW9uIjoiTFZNVm9sdW1lR3JvdXBOb2RlU3RhdHVzU3BlYyBkZWZpbmVzIHRoZSBkZXNpcmVkIHN0YXRlIG9mIExWTVZvbHVtZUdyb3VwTm9kZVN0YXR1cyIsInByb3BlcnRpZXMiOnsibm9kZVN0YXR1cyI6eyJkZXNjcmlwdGlvbiI6Ik5vZGVTdGF0dXMgY29udGFpbnMgdGhlIHBlciBub2RlIHN0YXR1cyBvZiB0aGUgVkciLCJpdGVtcyI6eyJwcm9wZXJ0aWVzIjp7ImRldmljZURpc2NvdmVyeVBvbGljeSI6eyJkZWZhdWx0IjoiUnVudGltZVN0YXRpYyIsImRlc2NyaXB0aW9uIjoiRGV2aWNlRGlzY292ZXJ5UG9saWN5IGlzIGEgZmllbGQgdG8gaW5kaWNhdGUgdGhlIGVmZmVjdGl2ZSBkZXZpY2UgZGlzY292ZXJ5IHBvbGljeSBmb3IgdGhpcyB2b2x1bWUgZ3JvdXAuXG5QcmVjb25maWd1cmVkIGluZGljYXRlcyBleHBsaWNpdCBEZXZpY2VTZWxlY3RvciBwYXRocyBhcmUgY29uZmlndXJlZCBhbmQgdGhlIGRpc2NvdmVyeSBwb2xpY3kgaXMgbm90IGFwcGxpY2FibGUuXG5SdW50aW1lRHluYW1pYyBpbmRpY2F0ZXMgZGV2aWNlcyBhcmUgZGlzY292ZXJlZCBhbmQgYWRkZWQgZHluYW1pY2FsbHkgYXQgcnVudGltZSAobm8gZXhwbGljaXQgcGF0aHMsIER5bmFtaWMgcG9saWN5KS5cblJ1bnRpbWVTdGF0aWMgaW5kaWNhdGVzIGRldmljZXMgd2VyZSBkaXNjb3ZlcmVkIGF0IGluc3RhbGwgdGltZSBhbmQgbmV3IGRldmljZXMgYXJlIGlnbm9yZWQgKG5vIGV4cGxpY2l0IHBhdGhzLCBTdGF0aWMgcG9saWN5KS4iLCJlbnVtIjpbIlByZWNvbmZpZ3VyZWQiLCJSdW50aW1lRHluYW1pYyIsIlJ1bnRpbWVTdGF0aWMiXSwidHlwZSI6InN0cmluZyJ9LCJkZXZpY2VzIjp7ImRlc2NyaXB0aW9uIjoiRGV2aWNlcyBpcyB0aGUgbGlzdCBvZiBkZXZpY2VzIHVzZWQgYnkgdGhlIHZvbHVtZSBncm91cCIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In0sImV4Y2x1ZGVkIjp7ImRlc2NyaXB0aW9uIjoiRXhjbHVkZWQgY29udGFpbnMgdGhlIHBlciBub2RlIHN0YXR1cyBvZiBhcHBsaWVkIGRldmljZSBleGNsdXNpb25zIHRoYXQgd2VyZSBwaWNrZWQgdXAgdmlhIHNlbGVjdG9yLFxuYnV0IHdlcmUgbm90IHVzZWQgZm9yIG90aGVyIHJlYXNvbnMuIiwiaXRlbXMiOnsicHJvcGVydGllcyI6eyJuYW1lIjp7ImRlc2NyaXB0aW9uIjoiTmFtZSBpcyB0aGUgZGV2aWNlIHRoYXQgd2FzIGZpbHRlcmVkIiwidHlwZSI6InN0cmluZyJ9LCJyZWFzb25zIjp7ImRlc2NyaXB0aW9uIjoiUmVhc29ucyBhcmUgdGhlIGh1bWFuLXJlYWRhYmxlIHJlYXNvbnMgd2h5IHRoZSBkZXZpY2Ugd2FzIGV4Y2x1ZGVkIGZyb20gdGhlIHZvbHVtZSBncm91cCIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In19LCJyZXF1aXJlZCI6WyJuYW1lIiwicmVhc29ucyJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJuYW1lIjp7ImRlc2NyaXB0aW9uIjoiTmFtZSBpcyB0aGUgbmFtZSBvZiB0aGUgdm9sdW1lIGdyb3VwIiwidHlwZSI6InN0cmluZyJ9LCJyZWFzb24iOnsiZGVzY3JpcHRpb24iOiJSZWFzb24gcHJvdmlkZXMgbW9yZSBkZXRhaWwgb24gdGhlIHZvbHVtZSBncm91cCBjcmVhdGlvbiBzdGF0dXMiLCJ0eXBlIjoic3RyaW5nIn0sInN0YXR1cyI6eyJkZXNjcmlwdGlvbiI6IlN0YXR1cyB0ZWxscyBpZiB0aGUgdm9sdW1lIGdyb3VwIHdhcyBjcmVhdGVkIG9uIHRoZSBub2RlIiwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsiZGV2aWNlRGlzY292ZXJ5UG9saWN5Il0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In19LCJ0eXBlIjoib2JqZWN0In0sInN0YXR1cyI6eyJkZXNjcmlwdGlvbiI6IkxWTVZvbHVtZUdyb3VwTm9kZVN0YXR1c1N0YXR1cyBkZWZpbmVzIHRoZSBvYnNlcnZlZCBzdGF0ZSBvZiBMVk1Wb2x1bWVHcm91cE5vZGVTdGF0dXMiLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0In19LCJzZXJ2ZWQiOnRydWUsInN0b3JhZ2UiOnRydWUsInN1YnJlc291cmNlcyI6eyJzdGF0dXMiOnt9fX1dfSwic3RhdHVzIjp7ImFjY2VwdGVkTmFtZXMiOnsia2luZCI6IiIsInBsdXJhbCI6IiJ9LCJjb25kaXRpb25zIjpudWxsLCJzdG9yZWRWZXJzaW9ucyI6bnVsbH19 - type: olm.bundle.object value: - data: eyJhcGlWZXJzaW9uIjoiYXBpZXh0ZW5zaW9ucy5rOHMuaW8vdjEiLCJraW5kIjoiQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uIiwibWV0YWRhdGEiOnsiYW5ub3RhdGlvbnMiOnsiY29udHJvbGxlci1nZW4ua3ViZWJ1aWxkZXIuaW8vdmVyc2lvbiI6InYwLjE3LjMifSwiY3JlYXRpb25UaW1lc3RhbXAiOm51bGwsIm5hbWUiOiJsdm12b2x1bWVncm91cHMubHZtLnRvcG9sdm0uaW8ifSwic3BlYyI6eyJncm91cCI6Imx2bS50b3BvbHZtLmlvIiwibmFtZXMiOnsia2luZCI6IkxWTVZvbHVtZUdyb3VwIiwibGlzdEtpbmQiOiJMVk1Wb2x1bWVHcm91cExpc3QiLCJwbHVyYWwiOiJsdm12b2x1bWVncm91cHMiLCJzaW5ndWxhciI6Imx2bXZvbHVtZWdyb3VwIn0sInNjb3BlIjoiTmFtZXNwYWNlZCIsInZlcnNpb25zIjpbeyJuYW1lIjoidjFhbHBoYTEiLCJzY2hlbWEiOnsib3BlbkFQSVYzU2NoZW1hIjp7ImRlc2NyaXB0aW9uIjoiTFZNVm9sdW1lR3JvdXAgaXMgdGhlIFNjaGVtYSBmb3IgdGhlIGx2bXZvbHVtZWdyb3VwcyBBUEkiLCJwcm9wZXJ0aWVzIjp7ImFwaVZlcnNpb24iOnsiZGVzY3JpcHRpb24iOiJBUElWZXJzaW9uIGRlZmluZXMgdGhlIHZlcnNpb25lZCBzY2hlbWEgb2YgdGhpcyByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuXG5TZXJ2ZXJzIHNob3VsZCBjb252ZXJ0IHJlY29nbml6ZWQgc2NoZW1hcyB0byB0aGUgbGF0ZXN0IGludGVybmFsIHZhbHVlLCBhbmRcbm1heSByZWplY3QgdW5yZWNvZ25pemVkIHZhbHVlcy5cbk1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvc2lnLWFyY2hpdGVjdHVyZS9hcGktY29udmVudGlvbnMubWQjcmVzb3VyY2VzIiwidHlwZSI6InN0cmluZyJ9LCJraW5kIjp7ImRlc2NyaXB0aW9uIjoiS2luZCBpcyBhIHN0cmluZyB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIFJFU1QgcmVzb3VyY2UgdGhpcyBvYmplY3QgcmVwcmVzZW50cy5cblNlcnZlcnMgbWF5IGluZmVyIHRoaXMgZnJvbSB0aGUgZW5kcG9pbnQgdGhlIGNsaWVudCBzdWJtaXRzIHJlcXVlc3RzIHRvLlxuQ2Fubm90IGJlIHVwZGF0ZWQuXG5JbiBDYW1lbENhc2UuXG5Nb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL3NpZy1hcmNoaXRlY3R1cmUvYXBpLWNvbnZlbnRpb25zLm1kI3R5cGVzLWtpbmRzIiwidHlwZSI6InN0cmluZyJ9LCJtZXRhZGF0YSI6eyJ0eXBlIjoib2JqZWN0In0sInNwZWMiOnsiZGVzY3JpcHRpb24iOiJMVk1Wb2x1bWVHcm91cFNwZWMgZGVmaW5lcyB0aGUgZGVzaXJlZCBzdGF0ZSBvZiBMVk1Wb2x1bWVHcm91cCIsInByb3BlcnRpZXMiOnsiZGVmYXVsdCI6eyJkZXNjcmlwdGlvbiI6IkRlZmF1bHQgaXMgYSBmbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIGRldmljZS1jbGFzcyBpcyB0aGUgZGVmYXVsdCIsInR5cGUiOiJib29sZWFuIn0sImRldmljZURpc2NvdmVyeVBvbGljeSI6eyJkZXNjcmlwdGlvbiI6IkRldmljZURpc2NvdmVyeVBvbGljeSBzcGVjaWZpZXMgdGhlIHBvbGljeSBmb3IgZGlzY292ZXJpbmcgZGV2aWNlcyBmb3IgdGhpcyB2b2x1bWUgZ3JvdXAuXG5TdGF0aWMgbWVhbnMgdGhlIHZvbHVtZSBncm91cCBpcyBjcmVhdGVkIHdpdGggZGV2aWNlcyBmb3VuZCBhdCBpbnN0YWxsIHRpbWU7IG5ldyBkZXZpY2VzIGFyZSBpZ25vcmVkLlxuRHluYW1pYyBtZWFucyBkZXZpY2VzIGFyZSBjb250aW51b3VzbHkgZGlzY292ZXJlZCBhbmQgYWRkZWQgdG8gdGhlIHZvbHVtZSBncm91cC5cbldoZW4gbm90IHNldCwgbmV3IHZvbHVtZSBncm91cHMgZGVmYXVsdCB0byBTdGF0aWMgYW5kIGV4aXN0aW5nIHZvbHVtZSBncm91cHMgZGVmYXVsdCB0byBEeW5hbWljIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiIsImVudW0iOlsiU3RhdGljIiwiRHluYW1pYyJdLCJ0eXBlIjoic3RyaW5nIn0sImRldmljZVNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoiRGV2aWNlU2VsZWN0b3IgaXMgYSBzZXQgb2YgcnVsZXMgdGhhdCBzaG91bGQgbWF0Y2ggZm9yIGEgZGV2aWNlIHRvIGJlIGluY2x1ZGVkIGluIHRoaXMgVG9wb0xWTUNsdXN0ZXIiLCJwcm9wZXJ0aWVzIjp7ImZvcmNlV2lwZURldmljZXNBbmREZXN0cm95QWxsRGF0YSI6eyJkZXNjcmlwdGlvbiI6IkZvcmNlV2lwZURldmljZXNBbmREZXN0cm95QWxsRGF0YSBpcyBhIGZsYWcgdG8gZm9yY2Ugd2lwZSB0aGUgc2VsZWN0ZWQgZGV2aWNlcy5cblRoaXMgd2lwZXMgdGhlIGZpbGUgc2lnbmF0dXJlcyBvbiB0aGUgZGV2aWNlcy4gVXNlIHRoaXMgZmVhdHVyZSB3aXRoIGNhdXRpb24uXG5Gb3JjZSB3aXBlIHRoZSBkZXZpY2VzIG9ubHkgd2hlbiB5b3Uga25vdyB0aGF0IHRoZXkgZG8gbm90IGNvbnRhaW4gYW55IGltcG9ydGFudCBkYXRhLiIsInR5cGUiOiJib29sZWFuIn0sIm9wdGlvbmFsUGF0aHMiOnsiZGVzY3JpcHRpb24iOiJPcHRpb25hbFBhdGhzIHNwZWNpZnkgdGhlIG9wdGlvbmFsIGRldmljZSBwYXRocy4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9LCJwYXRocyI6eyJkZXNjcmlwdGlvbiI6IlBhdGhzIHNwZWNpZnkgdGhlIGRldmljZSBwYXRocy4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9fSwidHlwZSI6Im9iamVjdCJ9LCJub2RlU2VsZWN0b3IiOnsiZGVzY3JpcHRpb24iOiJOb2RlU2VsZWN0b3IgY2hvb3NlcyBub2RlcyIsInByb3BlcnRpZXMiOnsibm9kZVNlbGVjdG9yVGVybXMiOnsiZGVzY3JpcHRpb24iOiJSZXF1aXJlZC4gQSBsaXN0IG9mIG5vZGUgc2VsZWN0b3IgdGVybXMuIFRoZSB0ZXJtcyBhcmUgT1JlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbnVsbCBvciBlbXB0eSBub2RlIHNlbGVjdG9yIHRlcm0gbWF0Y2hlcyBubyBvYmplY3RzLiBUaGUgcmVxdWlyZW1lbnRzIG9mXG50aGVtIGFyZSBBTkRlZC5cblRoZSBUb3BvbG9neVNlbGVjdG9yVGVybSB0eXBlIGltcGxlbWVudHMgYSBzdWJzZXQgb2YgdGhlIE5vZGVTZWxlY3RvclRlcm0uIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoiQSBsaXN0IG9mIG5vZGUgc2VsZWN0b3IgcmVxdWlyZW1lbnRzIGJ5IG5vZGUncyBsYWJlbHMuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIG5vZGUgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvclxudGhhdCByZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy4iLCJwcm9wZXJ0aWVzIjp7ImtleSI6eyJkZXNjcmlwdGlvbiI6IlRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoiUmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuXG5WYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzLCBEb2VzTm90RXhpc3QuIEd0LCBhbmQgTHQuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJBbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sXG50aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCxcbnRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEd0IG9yIEx0LCB0aGUgdmFsdWVzXG5hcnJheSBtdXN0IGhhdmUgYSBzaW5nbGUgZWxlbWVudCwgd2hpY2ggd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhbiBpbnRlZ2VyLlxuVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifSwibWF0Y2hGaWVsZHMiOnsiZGVzY3JpcHRpb24iOiJBIGxpc3Qgb2Ygbm9kZSBzZWxlY3RvciByZXF1aXJlbWVudHMgYnkgbm9kZSdzIGZpZWxkcy4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbm9kZSBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yXG50aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoiVGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJSZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy5cblZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMsIERvZXNOb3RFeGlzdC4gR3QsIGFuZCBMdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6IkFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbixcbnRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LFxudGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgR3Qgb3IgTHQsIHRoZSB2YWx1ZXNcbmFycmF5IG11c3QgaGF2ZSBhIHNpbmdsZSBlbGVtZW50LCB3aGljaCB3aWxsIGJlIGludGVycHJldGVkIGFzIGFuIGludGVnZXIuXG5UaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn19LCJyZXF1aXJlZCI6WyJub2RlU2VsZWN0b3JUZXJtcyJdLCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sInRoaW5Qb29sQ29uZmlnIjp7ImRlc2NyaXB0aW9uIjoiVGhpblBvb2xDb25maWcgY29udGFpbnMgY29uZmlndXJhdGlvbnMgZm9yIHRoZSB0aGluLXBvb2wiLCJwcm9wZXJ0aWVzIjp7ImNodW5rU2l6ZSI6eyJhbnlPZiI6W3sidHlwZSI6ImludGVnZXIifSx7InR5cGUiOiJzdHJpbmcifV0sImRlc2NyaXB0aW9uIjoiQ2h1bmtTaXplIHNwZWNpZmllcyB0aGUgc3RhdGljYWxseSBjYWxjdWxhdGVkIGNodW5rIHNpemUgZm9yIHRoZSB0aGluIHBvb2wuXG5UaHVzLCBJdCBpcyBvbmx5IHVzZWQgd2hlbiB0aGUgQ2h1bmtTaXplQ2FsY3VsYXRpb25Qb2xpY3kgaXMgc2V0IHRvIFN0YXRpYy5cbk5vIENodW5rU2l6ZSB3aXRoIGEgQ2h1bmtTaXplQ2FsY3VsYXRpb25Qb2xpY3kgc2V0IHRvIFN0YXRpYyB3aWxsIHJlc3VsdCBpbiBhIGRlZmF1bHQgY2h1bmsgc2l6ZSBvZiAxMjhLaS5cbkl0IGNhbiBiZSBiZXR3ZWVuIDY0S2kgYW5kIDFHaSBkdWUgdG8gdGhlIHVuZGVybHlpbmcgbGltaXRhdGlvbnMgb2YgbHZtMi4iLCJwYXR0ZXJuIjoiXihcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSgoW0tNR1RQRV1pKXxbbnVta01HVFBFXXwoW2VFXShcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSkpPyQiLCJ4LWt1YmVybmV0ZXMtaW50LW9yLXN0cmluZyI6dHJ1ZX0sImNodW5rU2l6ZUNhbGN1bGF0aW9uUG9saWN5Ijp7ImRlZmF1bHQiOiJTdGF0aWMiLCJkZXNjcmlwdGlvbiI6IkNodW5rU2l6ZUNhbGN1bGF0aW9uUG9saWN5IHNwZWNpZmllcyB0aGUgcG9saWN5IHRvIGNhbGN1bGF0ZSB0aGUgY2h1bmsgc2l6ZSBmb3IgdGhlIHVuZGVybHlpbmcgdm9sdW1lLlxuV2hlbiBzZXQgdG8gSG9zdCwgdGhlIGNodW5rIHNpemUgaXMgY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGUgbHZtMiBob3N0IHNldHRpbmcgb24gdGhlIG5vZGUuXG5XaGVuIHNldCB0byBTdGF0aWMsIHRoZSBjaHVuayBzaXplIGlzIGNhbGN1bGF0ZWQgYmFzZWQgb24gdGhlIHN0YXRpYyBzaXplIGF0dHJpYnV0ZSBwcm92aWRlZCB3aXRoaW4gQ2h1bmtTaXplLiIsImVudW0iOlsiSG9zdCIsIlN0YXRpYyJdLCJ0eXBlIjoic3RyaW5nIn0sIm1ldGFkYXRhU2l6ZSI6eyJhbnlPZiI6W3sidHlwZSI6ImludGVnZXIifSx7InR5cGUiOiJzdHJpbmcifV0sImRlc2NyaXB0aW9uIjoiTWV0YWRhdGFTaXplIHNwZWNpZmllcyBtZXRhZGF0YSBzaXplIGZvciB0aGluIHBvb2wuIEl0IHVzZWQgb25seSB3aGVuIE1ldGFkYXRhU2l6ZUNhbGN1bGF0aW9uUG9saWN5XG5pcyBzZXQgdG8gU3RhdGljLiBObyBNZXRhZGF0YVNpemUgd2l0aCBhIE1ldGFkYXRhU2l6ZUNhbGN1bGF0aW9uUG9saWN5IHNldCB0byBTdGF0aWMgd2lsbCByZXN1bHQgaW5cbmRlZmF1bHQgbWV0YWRhdGEgc2l6ZSBvZiAxR2kuIEl0IGNhbiBiZSBiZXR3ZWVuIDJNaSBhbmQgMTZHaSBkdWUgdG8gdGhlIHVuZGVybHlpbmcgbGltaXRhdGlvbnMgb2YgbHZtMi4iLCJwYXR0ZXJuIjoiXihcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSgoW0tNR1RQRV1pKXxbbnVta01HVFBFXXwoW2VFXShcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSkpPyQiLCJ4LWt1YmVybmV0ZXMtaW50LW9yLXN0cmluZyI6dHJ1ZX0sIm1ldGFkYXRhU2l6ZUNhbGN1bGF0aW9uUG9saWN5Ijp7ImRlZmF1bHQiOiJIb3N0IiwiZGVzY3JpcHRpb24iOiJNZXRhZGF0YVNpemVDYWxjdWxhdGlvblBvbGljeSBzcGVjaWZpZXMgdGhlIHBvbGljeSB0byBjYWxjdWxhdGUgbWV0YWRhdGEgc2l6ZSBmb3IgdGhlIHVuZGVybHlpbmcgdm9sdW1lLlxuV2hlbiBzZXQgdG8gSG9zdCwgdGhlIG1ldGFkYXRhIHNpemUgaXMgY2FsY3VsYXRlZCBiYXNlZCBvbiBsdm0yIGRlZmF1bHQgc2V0dGluZ3NcbldoZW4gc2V0IHRvIFN0YXRpYywgdGhlIG1ldGFkYXRhIHNpemUgaXMgY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGUgc3RhdGljIHNpemUgYXR0cmlidXRlIHByb3ZpZGVkIHdpdGhpbiBNZXRhZGF0YVNpemUiLCJlbnVtIjpbIkhvc3QiLCJTdGF0aWMiXSwidHlwZSI6InN0cmluZyJ9LCJuYW1lIjp7ImRlc2NyaXB0aW9uIjoiTmFtZSBzcGVjaWZpZXMgYSBuYW1lIGZvciB0aGUgdGhpbiBwb29sLiIsInR5cGUiOiJzdHJpbmcifSwib3ZlcnByb3Zpc2lvblJhdGlvIjp7ImRlc2NyaXB0aW9uIjoiT3ZlclByb3Zpc2lvblJhdGlvIHNwZWNpZmllcyBhIGZhY3RvciBieSB3aGljaCB5b3UgY2FuIHByb3Zpc2lvbiBhZGRpdGlvbmFsIHN0b3JhZ2UgYmFzZWQgb24gdGhlIGF2YWlsYWJsZSBzdG9yYWdlIGluIHRoZSB0aGluIHBvb2wuIFRvIHByZXZlbnQgb3Zlci1wcm92aXNpb25pbmcgdGhyb3VnaCB2YWxpZGF0aW9uLCBzZXQgdGhpcyBmaWVsZCB0byAxLiIsIm1heGltdW0iOjEwMCwibWluaW11bSI6MSwidHlwZSI6ImludGVnZXIifSwic2l6ZVBlcmNlbnQiOnsiZGVmYXVsdCI6OTAsImRlc2NyaXB0aW9uIjoiU2l6ZVBlcmNlbnQgc3BlY2lmaWVzIHRoZSBwZXJjZW50YWdlIG9mIHNwYWNlIGluIHRoZSBMVk0gdm9sdW1lIGdyb3VwIGZvciBjcmVhdGluZyB0aGUgdGhpbiBwb29sLlxuSWYgdGhlIHNpemUgY29uZmlndXJhdGlvbiBpcyAxMDAsIHRoZSB3aG9sZSBkaXNrIHdpbGwgYmUgdXNlZC5cbkJ5IGRlZmF1bHQsIDkwJSBvZiB0aGUgZGlzayBpcyB1c2VkIGZvciB0aGUgdGhpbiBwb29sIHRvIGFsbG93IGZvciBkYXRhIG9yIG1ldGFkYXRhIGV4cGFuc2lvbiBsYXRlciBvbi4iLCJtYXhpbXVtIjoxMDAsIm1pbmltdW0iOjEwLCJ0eXBlIjoiaW50ZWdlciJ9fSwicmVxdWlyZWQiOlsibmFtZSIsIm92ZXJwcm92aXNpb25SYXRpbyJdLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0In0sInN0YXR1cyI6eyJkZXNjcmlwdGlvbiI6IkxWTVZvbHVtZUdyb3VwU3RhdHVzIGRlZmluZXMgdGhlIG9ic2VydmVkIHN0YXRlIG9mIExWTVZvbHVtZUdyb3VwIiwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCJ9fSwic2VydmVkIjp0cnVlLCJzdG9yYWdlIjp0cnVlLCJzdWJyZXNvdXJjZXMiOnsic3RhdHVzIjp7fX19XX0sInN0YXR1cyI6eyJhY2NlcHRlZE5hbWVzIjp7ImtpbmQiOiIiLCJwbHVyYWwiOiIifSwiY29uZGl0aW9ucyI6bnVsbCwic3RvcmVkVmVyc2lvbnMiOm51bGx9fQ== + data: eyJhcGlWZXJzaW9uIjoiYXBpZXh0ZW5zaW9ucy5rOHMuaW8vdjEiLCJraW5kIjoiQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uIiwibWV0YWRhdGEiOnsiYW5ub3RhdGlvbnMiOnsiY29udHJvbGxlci1nZW4ua3ViZWJ1aWxkZXIuaW8vdmVyc2lvbiI6InYwLjE5LjAifSwiY3JlYXRpb25UaW1lc3RhbXAiOm51bGwsIm5hbWUiOiJsdm12b2x1bWVncm91cHMubHZtLnRvcG9sdm0uaW8ifSwic3BlYyI6eyJncm91cCI6Imx2bS50b3BvbHZtLmlvIiwibmFtZXMiOnsia2luZCI6IkxWTVZvbHVtZUdyb3VwIiwibGlzdEtpbmQiOiJMVk1Wb2x1bWVHcm91cExpc3QiLCJwbHVyYWwiOiJsdm12b2x1bWVncm91cHMiLCJzaW5ndWxhciI6Imx2bXZvbHVtZWdyb3VwIn0sInNjb3BlIjoiTmFtZXNwYWNlZCIsInZlcnNpb25zIjpbeyJuYW1lIjoidjFhbHBoYTEiLCJzY2hlbWEiOnsib3BlbkFQSVYzU2NoZW1hIjp7ImRlc2NyaXB0aW9uIjoiTFZNVm9sdW1lR3JvdXAgaXMgdGhlIFNjaGVtYSBmb3IgdGhlIGx2bXZvbHVtZWdyb3VwcyBBUEkiLCJwcm9wZXJ0aWVzIjp7ImFwaVZlcnNpb24iOnsiZGVzY3JpcHRpb24iOiJBUElWZXJzaW9uIGRlZmluZXMgdGhlIHZlcnNpb25lZCBzY2hlbWEgb2YgdGhpcyByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuXG5TZXJ2ZXJzIHNob3VsZCBjb252ZXJ0IHJlY29nbml6ZWQgc2NoZW1hcyB0byB0aGUgbGF0ZXN0IGludGVybmFsIHZhbHVlLCBhbmRcbm1heSByZWplY3QgdW5yZWNvZ25pemVkIHZhbHVlcy5cbk1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvc2lnLWFyY2hpdGVjdHVyZS9hcGktY29udmVudGlvbnMubWQjcmVzb3VyY2VzIiwidHlwZSI6InN0cmluZyJ9LCJraW5kIjp7ImRlc2NyaXB0aW9uIjoiS2luZCBpcyBhIHN0cmluZyB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIFJFU1QgcmVzb3VyY2UgdGhpcyBvYmplY3QgcmVwcmVzZW50cy5cblNlcnZlcnMgbWF5IGluZmVyIHRoaXMgZnJvbSB0aGUgZW5kcG9pbnQgdGhlIGNsaWVudCBzdWJtaXRzIHJlcXVlc3RzIHRvLlxuQ2Fubm90IGJlIHVwZGF0ZWQuXG5JbiBDYW1lbENhc2UuXG5Nb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL3NpZy1hcmNoaXRlY3R1cmUvYXBpLWNvbnZlbnRpb25zLm1kI3R5cGVzLWtpbmRzIiwidHlwZSI6InN0cmluZyJ9LCJtZXRhZGF0YSI6eyJ0eXBlIjoib2JqZWN0In0sInNwZWMiOnsiZGVzY3JpcHRpb24iOiJMVk1Wb2x1bWVHcm91cFNwZWMgZGVmaW5lcyB0aGUgZGVzaXJlZCBzdGF0ZSBvZiBMVk1Wb2x1bWVHcm91cCIsInByb3BlcnRpZXMiOnsiZGVmYXVsdCI6eyJkZXNjcmlwdGlvbiI6IkRlZmF1bHQgaXMgYSBmbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIGRldmljZS1jbGFzcyBpcyB0aGUgZGVmYXVsdCIsInR5cGUiOiJib29sZWFuIn0sImRldmljZURpc2NvdmVyeVBvbGljeSI6eyJkZXNjcmlwdGlvbiI6IkRldmljZURpc2NvdmVyeVBvbGljeSBzcGVjaWZpZXMgdGhlIHBvbGljeSBmb3IgZGlzY292ZXJpbmcgZGV2aWNlcyBmb3IgdGhpcyB2b2x1bWUgZ3JvdXAuXG5TdGF0aWMgbWVhbnMgdGhlIHZvbHVtZSBncm91cCBpcyBjcmVhdGVkIHdpdGggZGV2aWNlcyBmb3VuZCBhdCBpbnN0YWxsIHRpbWU7IG5ldyBkZXZpY2VzIGFyZSBpZ25vcmVkLlxuRHluYW1pYyBtZWFucyBkZXZpY2VzIGFyZSBjb250aW51b3VzbHkgZGlzY292ZXJlZCBhbmQgYWRkZWQgdG8gdGhlIHZvbHVtZSBncm91cC5cbldoZW4gbm90IHNldCwgbmV3IHZvbHVtZSBncm91cHMgZGVmYXVsdCB0byBTdGF0aWMgYW5kIGV4aXN0aW5nIHZvbHVtZSBncm91cHMgZGVmYXVsdCB0byBEeW5hbWljIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiIsImVudW0iOlsiU3RhdGljIiwiRHluYW1pYyJdLCJ0eXBlIjoic3RyaW5nIn0sImRldmljZVNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoiRGV2aWNlU2VsZWN0b3IgaXMgYSBzZXQgb2YgcnVsZXMgdGhhdCBzaG91bGQgbWF0Y2ggZm9yIGEgZGV2aWNlIHRvIGJlIGluY2x1ZGVkIGluIHRoaXMgVG9wb0xWTUNsdXN0ZXIiLCJwcm9wZXJ0aWVzIjp7ImZvcmNlV2lwZURldmljZXNBbmREZXN0cm95QWxsRGF0YSI6eyJkZXNjcmlwdGlvbiI6IkZvcmNlV2lwZURldmljZXNBbmREZXN0cm95QWxsRGF0YSBpcyBhIGZsYWcgdG8gZm9yY2Ugd2lwZSB0aGUgc2VsZWN0ZWQgZGV2aWNlcy5cblRoaXMgd2lwZXMgdGhlIGZpbGUgc2lnbmF0dXJlcyBvbiB0aGUgZGV2aWNlcy4gVXNlIHRoaXMgZmVhdHVyZSB3aXRoIGNhdXRpb24uXG5Gb3JjZSB3aXBlIHRoZSBkZXZpY2VzIG9ubHkgd2hlbiB5b3Uga25vdyB0aGF0IHRoZXkgZG8gbm90IGNvbnRhaW4gYW55IGltcG9ydGFudCBkYXRhLiIsInR5cGUiOiJib29sZWFuIn0sIm9wdGlvbmFsUGF0aHMiOnsiZGVzY3JpcHRpb24iOiJPcHRpb25hbFBhdGhzIHNwZWNpZnkgdGhlIG9wdGlvbmFsIGRldmljZSBwYXRocy4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9LCJwYXRocyI6eyJkZXNjcmlwdGlvbiI6IlBhdGhzIHNwZWNpZnkgdGhlIGRldmljZSBwYXRocy4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9fSwidHlwZSI6Im9iamVjdCJ9LCJub2RlU2VsZWN0b3IiOnsiZGVzY3JpcHRpb24iOiJOb2RlU2VsZWN0b3IgY2hvb3NlcyBub2RlcyIsInByb3BlcnRpZXMiOnsibm9kZVNlbGVjdG9yVGVybXMiOnsiZGVzY3JpcHRpb24iOiJSZXF1aXJlZC4gQSBsaXN0IG9mIG5vZGUgc2VsZWN0b3IgdGVybXMuIFRoZSB0ZXJtcyBhcmUgT1JlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbnVsbCBvciBlbXB0eSBub2RlIHNlbGVjdG9yIHRlcm0gbWF0Y2hlcyBubyBvYmplY3RzLiBUaGUgcmVxdWlyZW1lbnRzIG9mXG50aGVtIGFyZSBBTkRlZC5cblRoZSBUb3BvbG9neVNlbGVjdG9yVGVybSB0eXBlIGltcGxlbWVudHMgYSBzdWJzZXQgb2YgdGhlIE5vZGVTZWxlY3RvclRlcm0uIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoiQSBsaXN0IG9mIG5vZGUgc2VsZWN0b3IgcmVxdWlyZW1lbnRzIGJ5IG5vZGUncyBsYWJlbHMuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIG5vZGUgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvclxudGhhdCByZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy4iLCJwcm9wZXJ0aWVzIjp7ImtleSI6eyJkZXNjcmlwdGlvbiI6IlRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoiUmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuXG5WYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzLCBEb2VzTm90RXhpc3QuIEd0LCBhbmQgTHQuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJBbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sXG50aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCxcbnRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEd0IG9yIEx0LCB0aGUgdmFsdWVzXG5hcnJheSBtdXN0IGhhdmUgYSBzaW5nbGUgZWxlbWVudCwgd2hpY2ggd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhbiBpbnRlZ2VyLlxuVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifSwibWF0Y2hGaWVsZHMiOnsiZGVzY3JpcHRpb24iOiJBIGxpc3Qgb2Ygbm9kZSBzZWxlY3RvciByZXF1aXJlbWVudHMgYnkgbm9kZSdzIGZpZWxkcy4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbm9kZSBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yXG50aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoiVGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJSZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy5cblZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMsIERvZXNOb3RFeGlzdC4gR3QsIGFuZCBMdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6IkFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbixcbnRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LFxudGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgR3Qgb3IgTHQsIHRoZSB2YWx1ZXNcbmFycmF5IG11c3QgaGF2ZSBhIHNpbmdsZSBlbGVtZW50LCB3aGljaCB3aWxsIGJlIGludGVycHJldGVkIGFzIGFuIGludGVnZXIuXG5UaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn19LCJyZXF1aXJlZCI6WyJub2RlU2VsZWN0b3JUZXJtcyJdLCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sInRoaW5Qb29sQ29uZmlnIjp7ImRlc2NyaXB0aW9uIjoiVGhpblBvb2xDb25maWcgY29udGFpbnMgY29uZmlndXJhdGlvbnMgZm9yIHRoZSB0aGluLXBvb2wiLCJwcm9wZXJ0aWVzIjp7ImNodW5rU2l6ZSI6eyJhbnlPZiI6W3sidHlwZSI6ImludGVnZXIifSx7InR5cGUiOiJzdHJpbmcifV0sImRlc2NyaXB0aW9uIjoiQ2h1bmtTaXplIHNwZWNpZmllcyB0aGUgc3RhdGljYWxseSBjYWxjdWxhdGVkIGNodW5rIHNpemUgZm9yIHRoZSB0aGluIHBvb2wuXG5UaHVzLCBJdCBpcyBvbmx5IHVzZWQgd2hlbiB0aGUgQ2h1bmtTaXplQ2FsY3VsYXRpb25Qb2xpY3kgaXMgc2V0IHRvIFN0YXRpYy5cbk5vIENodW5rU2l6ZSB3aXRoIGEgQ2h1bmtTaXplQ2FsY3VsYXRpb25Qb2xpY3kgc2V0IHRvIFN0YXRpYyB3aWxsIHJlc3VsdCBpbiBhIGRlZmF1bHQgY2h1bmsgc2l6ZSBvZiAxMjhLaS5cbkl0IGNhbiBiZSBiZXR3ZWVuIDY0S2kgYW5kIDFHaSBkdWUgdG8gdGhlIHVuZGVybHlpbmcgbGltaXRhdGlvbnMgb2YgbHZtMi4iLCJwYXR0ZXJuIjoiXihcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSgoW0tNR1RQRV1pKXxbbnVta01HVFBFXXwoW2VFXShcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSkpPyQiLCJ4LWt1YmVybmV0ZXMtaW50LW9yLXN0cmluZyI6dHJ1ZX0sImNodW5rU2l6ZUNhbGN1bGF0aW9uUG9saWN5Ijp7ImRlZmF1bHQiOiJTdGF0aWMiLCJkZXNjcmlwdGlvbiI6IkNodW5rU2l6ZUNhbGN1bGF0aW9uUG9saWN5IHNwZWNpZmllcyB0aGUgcG9saWN5IHRvIGNhbGN1bGF0ZSB0aGUgY2h1bmsgc2l6ZSBmb3IgdGhlIHVuZGVybHlpbmcgdm9sdW1lLlxuV2hlbiBzZXQgdG8gSG9zdCwgdGhlIGNodW5rIHNpemUgaXMgY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGUgbHZtMiBob3N0IHNldHRpbmcgb24gdGhlIG5vZGUuXG5XaGVuIHNldCB0byBTdGF0aWMsIHRoZSBjaHVuayBzaXplIGlzIGNhbGN1bGF0ZWQgYmFzZWQgb24gdGhlIHN0YXRpYyBzaXplIGF0dHJpYnV0ZSBwcm92aWRlZCB3aXRoaW4gQ2h1bmtTaXplLiIsImVudW0iOlsiSG9zdCIsIlN0YXRpYyJdLCJ0eXBlIjoic3RyaW5nIn0sIm1ldGFkYXRhU2l6ZSI6eyJhbnlPZiI6W3sidHlwZSI6ImludGVnZXIifSx7InR5cGUiOiJzdHJpbmcifV0sImRlc2NyaXB0aW9uIjoiTWV0YWRhdGFTaXplIHNwZWNpZmllcyBtZXRhZGF0YSBzaXplIGZvciB0aGluIHBvb2wuIEl0IHVzZWQgb25seSB3aGVuIE1ldGFkYXRhU2l6ZUNhbGN1bGF0aW9uUG9saWN5XG5pcyBzZXQgdG8gU3RhdGljLiBObyBNZXRhZGF0YVNpemUgd2l0aCBhIE1ldGFkYXRhU2l6ZUNhbGN1bGF0aW9uUG9saWN5IHNldCB0byBTdGF0aWMgd2lsbCByZXN1bHQgaW5cbmRlZmF1bHQgbWV0YWRhdGEgc2l6ZSBvZiAxR2kuIEl0IGNhbiBiZSBiZXR3ZWVuIDJNaSBhbmQgMTZHaSBkdWUgdG8gdGhlIHVuZGVybHlpbmcgbGltaXRhdGlvbnMgb2YgbHZtMi4iLCJwYXR0ZXJuIjoiXihcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSgoW0tNR1RQRV1pKXxbbnVta01HVFBFXXwoW2VFXShcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSkpPyQiLCJ4LWt1YmVybmV0ZXMtaW50LW9yLXN0cmluZyI6dHJ1ZX0sIm1ldGFkYXRhU2l6ZUNhbGN1bGF0aW9uUG9saWN5Ijp7ImRlZmF1bHQiOiJIb3N0IiwiZGVzY3JpcHRpb24iOiJNZXRhZGF0YVNpemVDYWxjdWxhdGlvblBvbGljeSBzcGVjaWZpZXMgdGhlIHBvbGljeSB0byBjYWxjdWxhdGUgbWV0YWRhdGEgc2l6ZSBmb3IgdGhlIHVuZGVybHlpbmcgdm9sdW1lLlxuV2hlbiBzZXQgdG8gSG9zdCwgdGhlIG1ldGFkYXRhIHNpemUgaXMgY2FsY3VsYXRlZCBiYXNlZCBvbiBsdm0yIGRlZmF1bHQgc2V0dGluZ3NcbldoZW4gc2V0IHRvIFN0YXRpYywgdGhlIG1ldGFkYXRhIHNpemUgaXMgY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGUgc3RhdGljIHNpemUgYXR0cmlidXRlIHByb3ZpZGVkIHdpdGhpbiBNZXRhZGF0YVNpemUiLCJlbnVtIjpbIkhvc3QiLCJTdGF0aWMiXSwidHlwZSI6InN0cmluZyJ9LCJuYW1lIjp7ImRlc2NyaXB0aW9uIjoiTmFtZSBzcGVjaWZpZXMgYSBuYW1lIGZvciB0aGUgdGhpbiBwb29sLiIsInR5cGUiOiJzdHJpbmcifSwib3ZlcnByb3Zpc2lvblJhdGlvIjp7ImRlc2NyaXB0aW9uIjoiT3ZlclByb3Zpc2lvblJhdGlvIHNwZWNpZmllcyBhIGZhY3RvciBieSB3aGljaCB5b3UgY2FuIHByb3Zpc2lvbiBhZGRpdGlvbmFsIHN0b3JhZ2UgYmFzZWQgb24gdGhlIGF2YWlsYWJsZSBzdG9yYWdlIGluIHRoZSB0aGluIHBvb2wuIFRvIHByZXZlbnQgb3Zlci1wcm92aXNpb25pbmcgdGhyb3VnaCB2YWxpZGF0aW9uLCBzZXQgdGhpcyBmaWVsZCB0byAxLiIsIm1heGltdW0iOjEwMCwibWluaW11bSI6MSwidHlwZSI6ImludGVnZXIifSwic2l6ZVBlcmNlbnQiOnsiZGVmYXVsdCI6OTAsImRlc2NyaXB0aW9uIjoiU2l6ZVBlcmNlbnQgc3BlY2lmaWVzIHRoZSBwZXJjZW50YWdlIG9mIHNwYWNlIGluIHRoZSBMVk0gdm9sdW1lIGdyb3VwIGZvciBjcmVhdGluZyB0aGUgdGhpbiBwb29sLlxuSWYgdGhlIHNpemUgY29uZmlndXJhdGlvbiBpcyAxMDAsIHRoZSB3aG9sZSBkaXNrIHdpbGwgYmUgdXNlZC5cbkJ5IGRlZmF1bHQsIDkwJSBvZiB0aGUgZGlzayBpcyB1c2VkIGZvciB0aGUgdGhpbiBwb29sIHRvIGFsbG93IGZvciBkYXRhIG9yIG1ldGFkYXRhIGV4cGFuc2lvbiBsYXRlciBvbi4iLCJtYXhpbXVtIjoxMDAsIm1pbmltdW0iOjEwLCJ0eXBlIjoiaW50ZWdlciJ9fSwicmVxdWlyZWQiOlsibmFtZSIsIm92ZXJwcm92aXNpb25SYXRpbyJdLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0In0sInN0YXR1cyI6eyJkZXNjcmlwdGlvbiI6IkxWTVZvbHVtZUdyb3VwU3RhdHVzIGRlZmluZXMgdGhlIG9ic2VydmVkIHN0YXRlIG9mIExWTVZvbHVtZUdyb3VwIiwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCJ9fSwic2VydmVkIjp0cnVlLCJzdG9yYWdlIjp0cnVlLCJzdWJyZXNvdXJjZXMiOnsic3RhdHVzIjp7fX19XX0sInN0YXR1cyI6eyJhY2NlcHRlZE5hbWVzIjp7ImtpbmQiOiIiLCJwbHVyYWwiOiIifSwiY29uZGl0aW9ucyI6bnVsbCwic3RvcmVkVmVyc2lvbnMiOm51bGx9fQ== - type: olm.bundle.object value: - data: eyJhcGlWZXJzaW9uIjoiYXBpZXh0ZW5zaW9ucy5rOHMuaW8vdjEiLCJraW5kIjoiQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uIiwibWV0YWRhdGEiOnsiYW5ub3RhdGlvbnMiOnsiY29udHJvbGxlci1nZW4ua3ViZWJ1aWxkZXIuaW8vdmVyc2lvbiI6InYwLjE3LjMifSwiY3JlYXRpb25UaW1lc3RhbXAiOm51bGwsIm5hbWUiOiJsdm1jbHVzdGVycy5sdm0udG9wb2x2bS5pbyJ9LCJzcGVjIjp7Imdyb3VwIjoibHZtLnRvcG9sdm0uaW8iLCJuYW1lcyI6eyJraW5kIjoiTFZNQ2x1c3RlciIsImxpc3RLaW5kIjoiTFZNQ2x1c3Rlckxpc3QiLCJwbHVyYWwiOiJsdm1jbHVzdGVycyIsInNpbmd1bGFyIjoibHZtY2x1c3RlciJ9LCJzY29wZSI6Ik5hbWVzcGFjZWQiLCJ2ZXJzaW9ucyI6W3siYWRkaXRpb25hbFByaW50ZXJDb2x1bW5zIjpbeyJqc29uUGF0aCI6Ii5zdGF0dXMuc3RhdGUiLCJuYW1lIjoiU3RhdHVzIiwidHlwZSI6InN0cmluZyJ9XSwibmFtZSI6InYxYWxwaGExIiwic2NoZW1hIjp7Im9wZW5BUElWM1NjaGVtYSI6eyJkZXNjcmlwdGlvbiI6IkxWTUNsdXN0ZXIgaXMgdGhlIFNjaGVtYSBmb3IgdGhlIGx2bWNsdXN0ZXJzIEFQSSIsInByb3BlcnRpZXMiOnsiYXBpVmVyc2lvbiI6eyJkZXNjcmlwdGlvbiI6IkFQSVZlcnNpb24gZGVmaW5lcyB0aGUgdmVyc2lvbmVkIHNjaGVtYSBvZiB0aGlzIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC5cblNlcnZlcnMgc2hvdWxkIGNvbnZlcnQgcmVjb2duaXplZCBzY2hlbWFzIHRvIHRoZSBsYXRlc3QgaW50ZXJuYWwgdmFsdWUsIGFuZFxubWF5IHJlamVjdCB1bnJlY29nbml6ZWQgdmFsdWVzLlxuTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9zaWctYXJjaGl0ZWN0dXJlL2FwaS1jb252ZW50aW9ucy5tZCNyZXNvdXJjZXMiLCJ0eXBlIjoic3RyaW5nIn0sImtpbmQiOnsiZGVzY3JpcHRpb24iOiJLaW5kIGlzIGEgc3RyaW5nIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgUkVTVCByZXNvdXJjZSB0aGlzIG9iamVjdCByZXByZXNlbnRzLlxuU2VydmVycyBtYXkgaW5mZXIgdGhpcyBmcm9tIHRoZSBlbmRwb2ludCB0aGUgY2xpZW50IHN1Ym1pdHMgcmVxdWVzdHMgdG8uXG5DYW5ub3QgYmUgdXBkYXRlZC5cbkluIENhbWVsQ2FzZS5cbk1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvc2lnLWFyY2hpdGVjdHVyZS9hcGktY29udmVudGlvbnMubWQjdHlwZXMta2luZHMiLCJ0eXBlIjoic3RyaW5nIn0sIm1ldGFkYXRhIjp7InR5cGUiOiJvYmplY3QifSwic3BlYyI6eyJkZXNjcmlwdGlvbiI6IkxWTUNsdXN0ZXJTcGVjIGRlZmluZXMgdGhlIGRlc2lyZWQgc3RhdGUgb2YgTFZNQ2x1c3RlciIsInByb3BlcnRpZXMiOnsic3RvcmFnZSI6eyJkZXNjcmlwdGlvbiI6IlN0b3JhZ2UgY29udGFpbnMgdGhlIGRldmljZSBjbGFzcyBjb25maWd1cmF0aW9uIGZvciBsb2NhbCBzdG9yYWdlIGRldmljZXMuIiwicHJvcGVydGllcyI6eyJkZXZpY2VDbGFzc2VzIjp7ImRlc2NyaXB0aW9uIjoiRGV2aWNlQ2xhc3NlcyBjb250YWlucyB0aGUgY29uZmlndXJhdGlvbiB0byBhc3NpZ24gdGhlIGxvY2FsIHN0b3JhZ2UgZGV2aWNlcyB0byB0aGUgTFZNIHZvbHVtZSBncm91cHMgdGhhdCB5b3UgY2FuIHVzZSB0byBwcm92aXNpb24gcGVyc2lzdGVudCB2b2x1bWUgY2xhaW1zIChQVkNzKS4iLCJpdGVtcyI6eyJwcm9wZXJ0aWVzIjp7ImRlZmF1bHQiOnsiZGVzY3JpcHRpb24iOiJEZWZhdWx0IGlzIGEgZmxhZyB0byBpbmRpY2F0ZSB0aGF0IGEgZGV2aWNlIGNsYXNzIGlzIHRoZSBkZWZhdWx0LiBZb3UgY2FuIGNvbmZpZ3VyZSBvbmx5IGEgc2luZ2xlIGRlZmF1bHQgZGV2aWNlIGNsYXNzLiIsInR5cGUiOiJib29sZWFuIn0sImRldmljZURpc2NvdmVyeVBvbGljeSI6eyJkZXNjcmlwdGlvbiI6IkRldmljZURpc2NvdmVyeVBvbGljeSBzcGVjaWZpZXMgdGhlIHBvbGljeSBmb3IgZGlzY292ZXJpbmcgZGV2aWNlcyBmb3IgdGhpcyBkZXZpY2UgY2xhc3MuXG5TdGF0aWMgbWVhbnMgdGhlIHZvbHVtZSBncm91cCBpcyBjcmVhdGVkIHdpdGggZGV2aWNlcyBmb3VuZCBhdCBpbnN0YWxsIHRpbWU7IG5ldyBkZXZpY2VzIGFyZSBpZ25vcmVkLlxuRHluYW1pYyBtZWFucyBkZXZpY2VzIGFyZSBjb250aW51b3VzbHkgZGlzY292ZXJlZCBhbmQgYWRkZWQgdG8gdGhlIHZvbHVtZSBncm91cC5cbldoZW4gbm90IHNldCwgbmV3IHZvbHVtZSBncm91cHMgZGVmYXVsdCB0byBTdGF0aWMgYW5kIGV4aXN0aW5nIHZvbHVtZSBncm91cHMgZGVmYXVsdCB0byBEeW5hbWljIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiIsImVudW0iOlsiU3RhdGljIiwiRHluYW1pYyJdLCJ0eXBlIjoic3RyaW5nIn0sImRldmljZVNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoiRGV2aWNlU2VsZWN0b3IgY29udGFpbnMgdGhlIGNvbmZpZ3VyYXRpb24gdG8gc3BlY2lmeSBwYXRocyB0byB0aGUgZGV2aWNlcyB0aGF0IHlvdSB3YW50IHRvIGFkZCB0byB0aGUgTFZNIHZvbHVtZSBncm91cCwgYW5kIGZvcmNlIHdpcGUgdGhlIHNlbGVjdGVkIGRldmljZXMuIiwicHJvcGVydGllcyI6eyJmb3JjZVdpcGVEZXZpY2VzQW5kRGVzdHJveUFsbERhdGEiOnsiZGVzY3JpcHRpb24iOiJGb3JjZVdpcGVEZXZpY2VzQW5kRGVzdHJveUFsbERhdGEgaXMgYSBmbGFnIHRvIGZvcmNlIHdpcGUgdGhlIHNlbGVjdGVkIGRldmljZXMuXG5UaGlzIHdpcGVzIHRoZSBmaWxlIHNpZ25hdHVyZXMgb24gdGhlIGRldmljZXMuIFVzZSB0aGlzIGZlYXR1cmUgd2l0aCBjYXV0aW9uLlxuRm9yY2Ugd2lwZSB0aGUgZGV2aWNlcyBvbmx5IHdoZW4geW91IGtub3cgdGhhdCB0aGV5IGRvIG5vdCBjb250YWluIGFueSBpbXBvcnRhbnQgZGF0YS4iLCJ0eXBlIjoiYm9vbGVhbiJ9LCJvcHRpb25hbFBhdGhzIjp7ImRlc2NyaXB0aW9uIjoiT3B0aW9uYWxQYXRocyBzcGVjaWZ5IHRoZSBvcHRpb25hbCBkZXZpY2UgcGF0aHMuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifSwicGF0aHMiOnsiZGVzY3JpcHRpb24iOiJQYXRocyBzcGVjaWZ5IHRoZSBkZXZpY2UgcGF0aHMuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifX0sInR5cGUiOiJvYmplY3QifSwiZnN0eXBlIjp7ImRlZmF1bHQiOiJ4ZnMiLCJkZXNjcmlwdGlvbiI6IkZpbGVzeXN0ZW1UeXBlIHNldHMgdGhlIGRlZmF1bHQgZmlsZXN5c3RlbSB0eXBlIGZvciBwZXJzaXN0ZW50IHZvbHVtZXMgY3JlYXRlZCBmcm9tIHRoaXMgZGV2aWNlIGNsYXNzLlxuVGhpcyBkZXRlcm1pbmVzIHRoZSBmaWxlc3lzdGVtIHVzZWQgd2hlbiBwcm92aXNpb25pbmcgUFZDcyB3aXRoIHZvbHVtZU1vZGU6IEZpbGVzeXN0ZW0uXG5TZWxlY3QgZWl0aGVyIGBleHQ0YCBvciBgeGZzYC4gVGhpcyBkb2VzIG5vdCBmaWx0ZXIgZGV2aWNlcyBkdXJpbmcgZGlzY292ZXJ5LiIsImVudW0iOlsieGZzIiwiZXh0NCJdLCJ0eXBlIjoic3RyaW5nIiwieC1rdWJlcm5ldGVzLXZhbGlkYXRpb25zIjpbeyJtZXNzYWdlIjoiZnN0eXBlIGlzIGltbXV0YWJsZSIsInJ1bGUiOiJvbGRTZWxmID09IHNlbGYifV19LCJuYW1lIjp7ImRlc2NyaXB0aW9uIjoiTmFtZSBzcGVjaWZpZXMgYSBuYW1lIGZvciB0aGUgZGV2aWNlIGNsYXNzIiwibWF4TGVuZ3RoIjoyNDUsIm1pbkxlbmd0aCI6MSwicGF0dGVybiI6Il5bYS16MC05XShbLWEtejAtOV0qW2EtejAtOV0pPyQiLCJ0eXBlIjoic3RyaW5nIn0sIm5vZGVTZWxlY3RvciI6eyJkZXNjcmlwdGlvbiI6Ik5vZGVTZWxlY3RvciBjb250YWlucyB0aGUgY29uZmlndXJhdGlvbiB0byBjaG9vc2UgdGhlIG5vZGVzIG9uIHdoaWNoIHlvdSB3YW50IHRvIGNyZWF0ZSB0aGUgTFZNIHZvbHVtZSBncm91cC4gSWYgdGhpcyBmaWVsZCBpcyBub3QgY29uZmlndXJlZCwgYWxsIG5vZGVzIHdpdGhvdXQgbm8tc2NoZWR1bGUgdGFpbnRzIGFyZSBjb25zaWRlcmVkLiIsInByb3BlcnRpZXMiOnsibm9kZVNlbGVjdG9yVGVybXMiOnsiZGVzY3JpcHRpb24iOiJSZXF1aXJlZC4gQSBsaXN0IG9mIG5vZGUgc2VsZWN0b3IgdGVybXMuIFRoZSB0ZXJtcyBhcmUgT1JlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbnVsbCBvciBlbXB0eSBub2RlIHNlbGVjdG9yIHRlcm0gbWF0Y2hlcyBubyBvYmplY3RzLiBUaGUgcmVxdWlyZW1lbnRzIG9mXG50aGVtIGFyZSBBTkRlZC5cblRoZSBUb3BvbG9neVNlbGVjdG9yVGVybSB0eXBlIGltcGxlbWVudHMgYSBzdWJzZXQgb2YgdGhlIE5vZGVTZWxlY3RvclRlcm0uIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoiQSBsaXN0IG9mIG5vZGUgc2VsZWN0b3IgcmVxdWlyZW1lbnRzIGJ5IG5vZGUncyBsYWJlbHMuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIG5vZGUgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvclxudGhhdCByZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy4iLCJwcm9wZXJ0aWVzIjp7ImtleSI6eyJkZXNjcmlwdGlvbiI6IlRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoiUmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuXG5WYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzLCBEb2VzTm90RXhpc3QuIEd0LCBhbmQgTHQuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJBbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sXG50aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCxcbnRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEd0IG9yIEx0LCB0aGUgdmFsdWVzXG5hcnJheSBtdXN0IGhhdmUgYSBzaW5nbGUgZWxlbWVudCwgd2hpY2ggd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhbiBpbnRlZ2VyLlxuVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifSwibWF0Y2hGaWVsZHMiOnsiZGVzY3JpcHRpb24iOiJBIGxpc3Qgb2Ygbm9kZSBzZWxlY3RvciByZXF1aXJlbWVudHMgYnkgbm9kZSdzIGZpZWxkcy4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbm9kZSBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yXG50aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoiVGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJSZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy5cblZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMsIERvZXNOb3RFeGlzdC4gR3QsIGFuZCBMdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6IkFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbixcbnRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LFxudGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgR3Qgb3IgTHQsIHRoZSB2YWx1ZXNcbmFycmF5IG11c3QgaGF2ZSBhIHNpbmdsZSBlbGVtZW50LCB3aGljaCB3aWxsIGJlIGludGVycHJldGVkIGFzIGFuIGludGVnZXIuXG5UaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn19LCJyZXF1aXJlZCI6WyJub2RlU2VsZWN0b3JUZXJtcyJdLCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sInN0b3JhZ2VDbGFzc09wdGlvbnMiOnsiZGVzY3JpcHRpb24iOiJTdG9yYWdlQ2xhc3NPcHRpb25zIGFsbG93cyBjdXN0b21pemF0aW9uIG9mIHRoZSBTdG9yYWdlQ2xhc3MgY3JlYXRlZCBmb3IgdGhpcyBkZXZpY2UgY2xhc3MuIiwicHJvcGVydGllcyI6eyJhZGRpdGlvbmFsTGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJBZGRpdGlvbmFsTGFiZWxzIHNldHMgYWRkaXRpb25hbCBsYWJlbHMgb24gdGhlIFN0b3JhZ2VDbGFzcy5cblRoaXMgaXMgdGhlIG9ubHkgU3RvcmFnZUNsYXNzT3B0aW9ucyBmaWVsZCB0aGF0IGNhbiBiZSBjaGFuZ2VkIGFmdGVyIGNyZWF0aW9uLiIsIm1heFByb3BlcnRpZXMiOjE2LCJ0eXBlIjoib2JqZWN0In0sImFkZGl0aW9uYWxQYXJhbWV0ZXJzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwiZGVmYXVsdCI6e30sImRlc2NyaXB0aW9uIjoiQWRkaXRpb25hbFBhcmFtZXRlcnMgc2V0cyBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgb24gdGhlIFN0b3JhZ2VDbGFzcy5cbkxWTVMtb3duZWQga2V5cyAodG9wb2x2bS5pby9kZXZpY2UtY2xhc3MsIGNzaS5zdG9yYWdlLms4cy5pby9mc3R5cGUpIGNhbm5vdCBiZSBvdmVycmlkZGVuLlxuVGhpcyBmaWVsZCBpcyBpbW11dGFibGUgYWZ0ZXIgY3JlYXRpb24uIiwibWF4UHJvcGVydGllcyI6MTYsInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtdmFsaWRhdGlvbnMiOlt7Im1lc3NhZ2UiOiJhZGRpdGlvbmFsUGFyYW1ldGVycyBpcyBpbW11dGFibGUgb25jZSBzZXQiLCJydWxlIjoib2xkU2VsZiA9PSBzZWxmIn1dfSwicmVjbGFpbVBvbGljeSI6eyJkZWZhdWx0IjoiRGVsZXRlIiwiZGVzY3JpcHRpb24iOiJSZWNsYWltUG9saWN5IHNldHMgdGhlIHJlY2xhaW0gcG9saWN5IGZvciBQVnMgcHJvdmlzaW9uZWQgYnkgdGhpcyBkZXZpY2UgY2xhc3MuXG5XaGVuIHNldCB0byBSZXRhaW4sIFBWcyBhbmQgdGhlaXIgdW5kZXJseWluZyBsb2dpY2FsIHZvbHVtZXMgYXJlIHByZXNlcnZlZCB3aGVuIFBWQ3MgYXJlIGRlbGV0ZWQuIiwiZW51bSI6WyJEZWxldGUiLCJSZXRhaW4iXSwidHlwZSI6InN0cmluZyIsIngta3ViZXJuZXRlcy12YWxpZGF0aW9ucyI6W3sibWVzc2FnZSI6InJlY2xhaW1Qb2xpY3kgaXMgaW1tdXRhYmxlIG9uY2Ugc2V0IiwicnVsZSI6Im9sZFNlbGYgPT0gc2VsZiJ9XX0sInZvbHVtZUJpbmRpbmdNb2RlIjp7ImRlZmF1bHQiOiJXYWl0Rm9yRmlyc3RDb25zdW1lciIsImRlc2NyaXB0aW9uIjoiVm9sdW1lQmluZGluZ01vZGUgc2V0cyB0aGUgYmluZGluZyBtb2RlIGZvciBQVnMgcHJvdmlzaW9uZWQgYnkgdGhpcyBkZXZpY2UgY2xhc3MuIiwiZW51bSI6WyJXYWl0Rm9yRmlyc3RDb25zdW1lciIsIkltbWVkaWF0ZSJdLCJ0eXBlIjoic3RyaW5nIiwieC1rdWJlcm5ldGVzLXZhbGlkYXRpb25zIjpbeyJtZXNzYWdlIjoidm9sdW1lQmluZGluZ01vZGUgaXMgaW1tdXRhYmxlIG9uY2Ugc2V0IiwicnVsZSI6Im9sZFNlbGYgPT0gc2VsZiJ9XX19LCJ0eXBlIjoib2JqZWN0In0sInRoaW5Qb29sQ29uZmlnIjp7ImRlc2NyaXB0aW9uIjoiVGhpblBvb2xDb25maWcgY29udGFpbnMgdGhlIGNvbmZpZ3VyYXRpb24gdG8gY3JlYXRlIGEgdGhpbiBwb29sIGluIHRoZSBMVk0gdm9sdW1lIGdyb3VwLiBJZiB5b3UgZXhjbHVkZSB0aGlzIGZpZWxkLCBsb2dpY2FsIHZvbHVtZXMgYXJlIHRoaWNrIHByb3Zpc2lvbmVkLiIsInByb3BlcnRpZXMiOnsiY2h1bmtTaXplIjp7ImFueU9mIjpbeyJ0eXBlIjoiaW50ZWdlciJ9LHsidHlwZSI6InN0cmluZyJ9XSwiZGVzY3JpcHRpb24iOiJDaHVua1NpemUgc3BlY2lmaWVzIHRoZSBzdGF0aWNhbGx5IGNhbGN1bGF0ZWQgY2h1bmsgc2l6ZSBmb3IgdGhlIHRoaW4gcG9vbC5cblRodXMsIEl0IGlzIG9ubHkgdXNlZCB3aGVuIHRoZSBDaHVua1NpemVDYWxjdWxhdGlvblBvbGljeSBpcyBzZXQgdG8gU3RhdGljLlxuTm8gQ2h1bmtTaXplIHdpdGggYSBDaHVua1NpemVDYWxjdWxhdGlvblBvbGljeSBzZXQgdG8gU3RhdGljIHdpbGwgcmVzdWx0IGluIGEgZGVmYXVsdCBjaHVuayBzaXplIG9mIDEyOEtpLlxuSXQgY2FuIGJlIGJldHdlZW4gNjRLaSBhbmQgMUdpIGR1ZSB0byB0aGUgdW5kZXJseWluZyBsaW1pdGF0aW9ucyBvZiBsdm0yLiIsInBhdHRlcm4iOiJeKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKChbS01HVFBFXWkpfFtudW1rTUdUUEVdfChbZUVdKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKSk/JCIsIngta3ViZXJuZXRlcy1pbnQtb3Itc3RyaW5nIjp0cnVlfSwiY2h1bmtTaXplQ2FsY3VsYXRpb25Qb2xpY3kiOnsiZGVmYXVsdCI6IlN0YXRpYyIsImRlc2NyaXB0aW9uIjoiQ2h1bmtTaXplQ2FsY3VsYXRpb25Qb2xpY3kgc3BlY2lmaWVzIHRoZSBwb2xpY3kgdG8gY2FsY3VsYXRlIHRoZSBjaHVuayBzaXplIGZvciB0aGUgdW5kZXJseWluZyB2b2x1bWUuXG5XaGVuIHNldCB0byBIb3N0LCB0aGUgY2h1bmsgc2l6ZSBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIHRoZSBsdm0yIGhvc3Qgc2V0dGluZyBvbiB0aGUgbm9kZS5cbldoZW4gc2V0IHRvIFN0YXRpYywgdGhlIGNodW5rIHNpemUgaXMgY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGUgc3RhdGljIHNpemUgYXR0cmlidXRlIHByb3ZpZGVkIHdpdGhpbiBDaHVua1NpemUuIiwiZW51bSI6WyJIb3N0IiwiU3RhdGljIl0sInR5cGUiOiJzdHJpbmcifSwibWV0YWRhdGFTaXplIjp7ImFueU9mIjpbeyJ0eXBlIjoiaW50ZWdlciJ9LHsidHlwZSI6InN0cmluZyJ9XSwiZGVzY3JpcHRpb24iOiJNZXRhZGF0YVNpemUgc3BlY2lmaWVzIG1ldGFkYXRhIHNpemUgZm9yIHRoaW4gcG9vbC4gSXQgdXNlZCBvbmx5IHdoZW4gTWV0YWRhdGFTaXplQ2FsY3VsYXRpb25Qb2xpY3lcbmlzIHNldCB0byBTdGF0aWMuIE5vIE1ldGFkYXRhU2l6ZSB3aXRoIGEgTWV0YWRhdGFTaXplQ2FsY3VsYXRpb25Qb2xpY3kgc2V0IHRvIFN0YXRpYyB3aWxsIHJlc3VsdCBpblxuZGVmYXVsdCBtZXRhZGF0YSBzaXplIG9mIDFHaS4gSXQgY2FuIGJlIGJldHdlZW4gMk1pIGFuZCAxNkdpIGR1ZSB0byB0aGUgdW5kZXJseWluZyBsaW1pdGF0aW9ucyBvZiBsdm0yLiIsInBhdHRlcm4iOiJeKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKChbS01HVFBFXWkpfFtudW1rTUdUUEVdfChbZUVdKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKSk/JCIsIngta3ViZXJuZXRlcy1pbnQtb3Itc3RyaW5nIjp0cnVlfSwibWV0YWRhdGFTaXplQ2FsY3VsYXRpb25Qb2xpY3kiOnsiZGVmYXVsdCI6Ikhvc3QiLCJkZXNjcmlwdGlvbiI6Ik1ldGFkYXRhU2l6ZUNhbGN1bGF0aW9uUG9saWN5IHNwZWNpZmllcyB0aGUgcG9saWN5IHRvIGNhbGN1bGF0ZSBtZXRhZGF0YSBzaXplIGZvciB0aGUgdW5kZXJseWluZyB2b2x1bWUuXG5XaGVuIHNldCB0byBIb3N0LCB0aGUgbWV0YWRhdGEgc2l6ZSBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIGx2bTIgZGVmYXVsdCBzZXR0aW5nc1xuV2hlbiBzZXQgdG8gU3RhdGljLCB0aGUgbWV0YWRhdGEgc2l6ZSBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIHRoZSBzdGF0aWMgc2l6ZSBhdHRyaWJ1dGUgcHJvdmlkZWQgd2l0aGluIE1ldGFkYXRhU2l6ZSIsImVudW0iOlsiSG9zdCIsIlN0YXRpYyJdLCJ0eXBlIjoic3RyaW5nIn0sIm5hbWUiOnsiZGVzY3JpcHRpb24iOiJOYW1lIHNwZWNpZmllcyBhIG5hbWUgZm9yIHRoZSB0aGluIHBvb2wuIiwidHlwZSI6InN0cmluZyJ9LCJvdmVycHJvdmlzaW9uUmF0aW8iOnsiZGVzY3JpcHRpb24iOiJPdmVyUHJvdmlzaW9uUmF0aW8gc3BlY2lmaWVzIGEgZmFjdG9yIGJ5IHdoaWNoIHlvdSBjYW4gcHJvdmlzaW9uIGFkZGl0aW9uYWwgc3RvcmFnZSBiYXNlZCBvbiB0aGUgYXZhaWxhYmxlIHN0b3JhZ2UgaW4gdGhlIHRoaW4gcG9vbC4gVG8gcHJldmVudCBvdmVyLXByb3Zpc2lvbmluZyB0aHJvdWdoIHZhbGlkYXRpb24sIHNldCB0aGlzIGZpZWxkIHRvIDEuIiwibWF4aW11bSI6MTAwLCJtaW5pbXVtIjoxLCJ0eXBlIjoiaW50ZWdlciJ9LCJzaXplUGVyY2VudCI6eyJkZWZhdWx0Ijo5MCwiZGVzY3JpcHRpb24iOiJTaXplUGVyY2VudCBzcGVjaWZpZXMgdGhlIHBlcmNlbnRhZ2Ugb2Ygc3BhY2UgaW4gdGhlIExWTSB2b2x1bWUgZ3JvdXAgZm9yIGNyZWF0aW5nIHRoZSB0aGluIHBvb2wuXG5JZiB0aGUgc2l6ZSBjb25maWd1cmF0aW9uIGlzIDEwMCwgdGhlIHdob2xlIGRpc2sgd2lsbCBiZSB1c2VkLlxuQnkgZGVmYXVsdCwgOTAlIG9mIHRoZSBkaXNrIGlzIHVzZWQgZm9yIHRoZSB0aGluIHBvb2wgdG8gYWxsb3cgZm9yIGRhdGEgb3IgbWV0YWRhdGEgZXhwYW5zaW9uIGxhdGVyIG9uLiIsIm1heGltdW0iOjEwMCwibWluaW11bSI6MTAsInR5cGUiOiJpbnRlZ2VyIn19LCJyZXF1aXJlZCI6WyJuYW1lIiwib3ZlcnByb3Zpc2lvblJhdGlvIl0sInR5cGUiOiJvYmplY3QifX0sInJlcXVpcmVkIjpbIm5hbWUiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC1tYXAta2V5cyI6WyJuYW1lIl0sIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJtYXAifX0sInR5cGUiOiJvYmplY3QifSwidG9sZXJhdGlvbnMiOnsiZGVzY3JpcHRpb24iOiJUb2xlcmF0aW9ucyB0byBhcHBseSB0byBub2RlcyB0byBhY3Qgb24iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IlRoZSBwb2QgdGhpcyBUb2xlcmF0aW9uIGlzIGF0dGFjaGVkIHRvIHRvbGVyYXRlcyBhbnkgdGFpbnQgdGhhdCBtYXRjaGVzXG50aGUgdHJpcGxlIFx1MDAzY2tleSx2YWx1ZSxlZmZlY3RcdTAwM2UgdXNpbmcgdGhlIG1hdGNoaW5nIG9wZXJhdG9yIFx1MDAzY29wZXJhdG9yXHUwMDNlLiIsInByb3BlcnRpZXMiOnsiZWZmZWN0Ijp7ImRlc2NyaXB0aW9uIjoiRWZmZWN0IGluZGljYXRlcyB0aGUgdGFpbnQgZWZmZWN0IHRvIG1hdGNoLiBFbXB0eSBtZWFucyBtYXRjaCBhbGwgdGFpbnQgZWZmZWN0cy5cbldoZW4gc3BlY2lmaWVkLCBhbGxvd2VkIHZhbHVlcyBhcmUgTm9TY2hlZHVsZSwgUHJlZmVyTm9TY2hlZHVsZSBhbmQgTm9FeGVjdXRlLiIsInR5cGUiOiJzdHJpbmcifSwia2V5Ijp7ImRlc2NyaXB0aW9uIjoiS2V5IGlzIHRoZSB0YWludCBrZXkgdGhhdCB0aGUgdG9sZXJhdGlvbiBhcHBsaWVzIHRvLiBFbXB0eSBtZWFucyBtYXRjaCBhbGwgdGFpbnQga2V5cy5cbklmIHRoZSBrZXkgaXMgZW1wdHksIG9wZXJhdG9yIG11c3QgYmUgRXhpc3RzOyB0aGlzIGNvbWJpbmF0aW9uIG1lYW5zIHRvIG1hdGNoIGFsbCB2YWx1ZXMgYW5kIGFsbCBrZXlzLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJPcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIHRoZSB2YWx1ZS5cblZhbGlkIG9wZXJhdG9ycyBhcmUgRXhpc3RzIGFuZCBFcXVhbC4gRGVmYXVsdHMgdG8gRXF1YWwuXG5FeGlzdHMgaXMgZXF1aXZhbGVudCB0byB3aWxkY2FyZCBmb3IgdmFsdWUsIHNvIHRoYXQgYSBwb2QgY2FuXG50b2xlcmF0ZSBhbGwgdGFpbnRzIG9mIGEgcGFydGljdWxhciBjYXRlZ29yeS4iLCJ0eXBlIjoic3RyaW5nIn0sInRvbGVyYXRpb25TZWNvbmRzIjp7ImRlc2NyaXB0aW9uIjoiVG9sZXJhdGlvblNlY29uZHMgcmVwcmVzZW50cyB0aGUgcGVyaW9kIG9mIHRpbWUgdGhlIHRvbGVyYXRpb24gKHdoaWNoIG11c3QgYmVcbm9mIGVmZmVjdCBOb0V4ZWN1dGUsIG90aGVyd2lzZSB0aGlzIGZpZWxkIGlzIGlnbm9yZWQpIHRvbGVyYXRlcyB0aGUgdGFpbnQuIEJ5IGRlZmF1bHQsXG5pdCBpcyBub3Qgc2V0LCB3aGljaCBtZWFucyB0b2xlcmF0ZSB0aGUgdGFpbnQgZm9yZXZlciAoZG8gbm90IGV2aWN0KS4gWmVybyBhbmRcbm5lZ2F0aXZlIHZhbHVlcyB3aWxsIGJlIHRyZWF0ZWQgYXMgMCAoZXZpY3QgaW1tZWRpYXRlbHkpIGJ5IHRoZSBzeXN0ZW0uIiwiZm9ybWF0IjoiaW50NjQiLCJ0eXBlIjoiaW50ZWdlciJ9LCJ2YWx1ZSI6eyJkZXNjcmlwdGlvbiI6IlZhbHVlIGlzIHRoZSB0YWludCB2YWx1ZSB0aGUgdG9sZXJhdGlvbiBtYXRjaGVzIHRvLlxuSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cywgdGhlIHZhbHVlIHNob3VsZCBiZSBlbXB0eSwgb3RoZXJ3aXNlIGp1c3QgYSByZWd1bGFyIHN0cmluZy4iLCJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9fSwidHlwZSI6Im9iamVjdCJ9LCJzdGF0dXMiOnsiZGVzY3JpcHRpb24iOiJMVk1DbHVzdGVyU3RhdHVzIGRlZmluZXMgdGhlIG9ic2VydmVkIHN0YXRlIG9mIExWTUNsdXN0ZXIiLCJwcm9wZXJ0aWVzIjp7ImNvbmRpdGlvbnMiOnsiZGVzY3JpcHRpb24iOiJDb25kaXRpb25zIGRlc2NyaWJlcyB0aGUgc3RhdGUgb2YgdGhlIHJlc291cmNlLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQ29uZGl0aW9uIGNvbnRhaW5zIGRldGFpbHMgZm9yIG9uZSBhc3BlY3Qgb2YgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhpcyBBUEkgUmVzb3VyY2UuIiwicHJvcGVydGllcyI6eyJsYXN0VHJhbnNpdGlvblRpbWUiOnsiZGVzY3JpcHRpb24iOiJsYXN0VHJhbnNpdGlvblRpbWUgaXMgdGhlIGxhc3QgdGltZSB0aGUgY29uZGl0aW9uIHRyYW5zaXRpb25lZCBmcm9tIG9uZSBzdGF0dXMgdG8gYW5vdGhlci5cblRoaXMgc2hvdWxkIGJlIHdoZW4gdGhlIHVuZGVybHlpbmcgY29uZGl0aW9uIGNoYW5nZWQuICBJZiB0aGF0IGlzIG5vdCBrbm93biwgdGhlbiB1c2luZyB0aGUgdGltZSB3aGVuIHRoZSBBUEkgZmllbGQgY2hhbmdlZCBpcyBhY2NlcHRhYmxlLiIsImZvcm1hdCI6ImRhdGUtdGltZSIsInR5cGUiOiJzdHJpbmcifSwibWVzc2FnZSI6eyJkZXNjcmlwdGlvbiI6Im1lc3NhZ2UgaXMgYSBodW1hbiByZWFkYWJsZSBtZXNzYWdlIGluZGljYXRpbmcgZGV0YWlscyBhYm91dCB0aGUgdHJhbnNpdGlvbi5cblRoaXMgbWF5IGJlIGFuIGVtcHR5IHN0cmluZy4iLCJtYXhMZW5ndGgiOjMyNzY4LCJ0eXBlIjoic3RyaW5nIn0sIm9ic2VydmVkR2VuZXJhdGlvbiI6eyJkZXNjcmlwdGlvbiI6Im9ic2VydmVkR2VuZXJhdGlvbiByZXByZXNlbnRzIHRoZSAubWV0YWRhdGEuZ2VuZXJhdGlvbiB0aGF0IHRoZSBjb25kaXRpb24gd2FzIHNldCBiYXNlZCB1cG9uLlxuRm9yIGluc3RhbmNlLCBpZiAubWV0YWRhdGEuZ2VuZXJhdGlvbiBpcyBjdXJyZW50bHkgMTIsIGJ1dCB0aGUgLnN0YXR1cy5jb25kaXRpb25zW3hdLm9ic2VydmVkR2VuZXJhdGlvbiBpcyA5LCB0aGUgY29uZGl0aW9uIGlzIG91dCBvZiBkYXRlXG53aXRoIHJlc3BlY3QgdG8gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGluc3RhbmNlLiIsImZvcm1hdCI6ImludDY0IiwibWluaW11bSI6MCwidHlwZSI6ImludGVnZXIifSwicmVhc29uIjp7ImRlc2NyaXB0aW9uIjoicmVhc29uIGNvbnRhaW5zIGEgcHJvZ3JhbW1hdGljIGlkZW50aWZpZXIgaW5kaWNhdGluZyB0aGUgcmVhc29uIGZvciB0aGUgY29uZGl0aW9uJ3MgbGFzdCB0cmFuc2l0aW9uLlxuUHJvZHVjZXJzIG9mIHNwZWNpZmljIGNvbmRpdGlvbiB0eXBlcyBtYXkgZGVmaW5lIGV4cGVjdGVkIHZhbHVlcyBhbmQgbWVhbmluZ3MgZm9yIHRoaXMgZmllbGQsXG5hbmQgd2hldGhlciB0aGUgdmFsdWVzIGFyZSBjb25zaWRlcmVkIGEgZ3VhcmFudGVlZCBBUEkuXG5UaGUgdmFsdWUgc2hvdWxkIGJlIGEgQ2FtZWxDYXNlIHN0cmluZy5cblRoaXMgZmllbGQgbWF5IG5vdCBiZSBlbXB0eS4iLCJtYXhMZW5ndGgiOjEwMjQsIm1pbkxlbmd0aCI6MSwicGF0dGVybiI6Il5bQS1aYS16XShbQS1aYS16MC05Xyw6XSpbQS1aYS16MC05X10pPyQiLCJ0eXBlIjoic3RyaW5nIn0sInN0YXR1cyI6eyJkZXNjcmlwdGlvbiI6InN0YXR1cyBvZiB0aGUgY29uZGl0aW9uLCBvbmUgb2YgVHJ1ZSwgRmFsc2UsIFVua25vd24uIiwiZW51bSI6WyJUcnVlIiwiRmFsc2UiLCJVbmtub3duIl0sInR5cGUiOiJzdHJpbmcifSwidHlwZSI6eyJkZXNjcmlwdGlvbiI6InR5cGUgb2YgY29uZGl0aW9uIGluIENhbWVsQ2FzZSBvciBpbiBmb28uZXhhbXBsZS5jb20vQ2FtZWxDYXNlLiIsIm1heExlbmd0aCI6MzE2LCJwYXR0ZXJuIjoiXihbYS16MC05XShbLWEtejAtOV0qW2EtejAtOV0pPyhcXC5bYS16MC05XShbLWEtejAtOV0qW2EtejAtOV0pPykqLyk/KChbQS1aYS16MC05XVstQS1aYS16MC05Xy5dKik/W0EtWmEtejAtOV0pJCIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbImxhc3RUcmFuc2l0aW9uVGltZSIsIm1lc3NhZ2UiLCJyZWFzb24iLCJzdGF0dXMiLCJ0eXBlIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sImRldmljZUNsYXNzU3RhdHVzZXMiOnsiZGVzY3JpcHRpb24iOiJEZXZpY2VDbGFzc1N0YXR1c2VzIGRlc2NyaWJlcyB0aGUgc3RhdHVzIG9mIGFsbCBkZXZpY2VDbGFzc2VzIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJEZXZpY2VDbGFzc1N0YXR1cyBkZWZpbmVzIHRoZSBvYnNlcnZlZCBzdGF0dXMgb2YgdGhlIGRldmljZWNsYXNzIGFjcm9zcyBhbGwgbm9kZXMiLCJwcm9wZXJ0aWVzIjp7Im5hbWUiOnsiZGVzY3JpcHRpb24iOiJOYW1lIGlzIHRoZSBuYW1lIG9mIHRoZSBkZXZpY2VjbGFzcyIsInR5cGUiOiJzdHJpbmcifSwibm9kZVN0YXR1cyI6eyJkZXNjcmlwdGlvbiI6Ik5vZGVTdGF0dXMgdGVsbHMgaWYgdGhlIGRldmljZWNsYXNzIHdhcyBjcmVhdGVkIG9uIHRoZSBub2RlIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJOb2RlU3RhdHVzIGRlZmluZXMgdGhlIG9ic2VydmVkIHN0YXRlIG9mIHRoZSBkZXZpY2VjbGFzcyBvbiB0aGUgbm9kZSIsInByb3BlcnRpZXMiOnsiZGV2aWNlRGlzY292ZXJ5UG9saWN5Ijp7ImRlZmF1bHQiOiJSdW50aW1lU3RhdGljIiwiZGVzY3JpcHRpb24iOiJEZXZpY2VEaXNjb3ZlcnlQb2xpY3kgaXMgYSBmaWVsZCB0byBpbmRpY2F0ZSB0aGUgZWZmZWN0aXZlIGRldmljZSBkaXNjb3ZlcnkgcG9saWN5IGZvciB0aGlzIHZvbHVtZSBncm91cC5cblByZWNvbmZpZ3VyZWQgaW5kaWNhdGVzIGV4cGxpY2l0IERldmljZVNlbGVjdG9yIHBhdGhzIGFyZSBjb25maWd1cmVkIGFuZCB0aGUgZGlzY292ZXJ5IHBvbGljeSBpcyBub3QgYXBwbGljYWJsZS5cblJ1bnRpbWVEeW5hbWljIGluZGljYXRlcyBkZXZpY2VzIGFyZSBkaXNjb3ZlcmVkIGFuZCBhZGRlZCBkeW5hbWljYWxseSBhdCBydW50aW1lIChubyBleHBsaWNpdCBwYXRocywgRHluYW1pYyBwb2xpY3kpLlxuUnVudGltZVN0YXRpYyBpbmRpY2F0ZXMgZGV2aWNlcyB3ZXJlIGRpc2NvdmVyZWQgYXQgaW5zdGFsbCB0aW1lIGFuZCBuZXcgZGV2aWNlcyBhcmUgaWdub3JlZCAobm8gZXhwbGljaXQgcGF0aHMsIFN0YXRpYyBwb2xpY3kpLiIsImVudW0iOlsiUHJlY29uZmlndXJlZCIsIlJ1bnRpbWVEeW5hbWljIiwiUnVudGltZVN0YXRpYyJdLCJ0eXBlIjoic3RyaW5nIn0sImRldmljZXMiOnsiZGVzY3JpcHRpb24iOiJEZXZpY2VzIGlzIHRoZSBsaXN0IG9mIGRldmljZXMgdXNlZCBieSB0aGUgdm9sdW1lIGdyb3VwIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifSwiZXhjbHVkZWQiOnsiZGVzY3JpcHRpb24iOiJFeGNsdWRlZCBjb250YWlucyB0aGUgcGVyIG5vZGUgc3RhdHVzIG9mIGFwcGxpZWQgZGV2aWNlIGV4Y2x1c2lvbnMgdGhhdCB3ZXJlIHBpY2tlZCB1cCB2aWEgc2VsZWN0b3IsXG5idXQgd2VyZSBub3QgdXNlZCBmb3Igb3RoZXIgcmVhc29ucy4iLCJpdGVtcyI6eyJwcm9wZXJ0aWVzIjp7Im5hbWUiOnsiZGVzY3JpcHRpb24iOiJOYW1lIGlzIHRoZSBkZXZpY2UgdGhhdCB3YXMgZmlsdGVyZWQiLCJ0eXBlIjoic3RyaW5nIn0sInJlYXNvbnMiOnsiZGVzY3JpcHRpb24iOiJSZWFzb25zIGFyZSB0aGUgaHVtYW4tcmVhZGFibGUgcmVhc29ucyB3aHkgdGhlIGRldmljZSB3YXMgZXhjbHVkZWQgZnJvbSB0aGUgdm9sdW1lIGdyb3VwIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifX0sInJlcXVpcmVkIjpbIm5hbWUiLCJyZWFzb25zIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sIm5hbWUiOnsiZGVzY3JpcHRpb24iOiJOYW1lIGlzIHRoZSBuYW1lIG9mIHRoZSB2b2x1bWUgZ3JvdXAiLCJ0eXBlIjoic3RyaW5nIn0sIm5vZGUiOnsiZGVzY3JpcHRpb24iOiJOb2RlIGlzIHRoZSBuYW1lIG9mIHRoZSBub2RlIiwidHlwZSI6InN0cmluZyJ9LCJyZWFzb24iOnsiZGVzY3JpcHRpb24iOiJSZWFzb24gcHJvdmlkZXMgbW9yZSBkZXRhaWwgb24gdGhlIHZvbHVtZSBncm91cCBjcmVhdGlvbiBzdGF0dXMiLCJ0eXBlIjoic3RyaW5nIn0sInN0YXR1cyI6eyJkZXNjcmlwdGlvbiI6IlN0YXR1cyB0ZWxscyBpZiB0aGUgdm9sdW1lIGdyb3VwIHdhcyBjcmVhdGVkIG9uIHRoZSBub2RlIiwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsiZGV2aWNlRGlzY292ZXJ5UG9saWN5Il0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In19LCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJyZWFkeSI6eyJkZXNjcmlwdGlvbiI6IlJlYWR5IGRlc2NyaWJlcyBpZiB0aGUgTFZNQ2x1c3RlciBpcyByZWFkeS4iLCJ0eXBlIjoiYm9vbGVhbiJ9LCJzdGF0ZSI6eyJkZXNjcmlwdGlvbiI6IlN0YXRlIGRlc2NyaWJlcyB0aGUgTFZNQ2x1c3RlciBzdGF0ZS4iLCJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0In19LCJzZXJ2ZWQiOnRydWUsInN0b3JhZ2UiOnRydWUsInN1YnJlc291cmNlcyI6eyJzdGF0dXMiOnt9fX1dfSwic3RhdHVzIjp7ImFjY2VwdGVkTmFtZXMiOnsia2luZCI6IiIsInBsdXJhbCI6IiJ9LCJjb25kaXRpb25zIjpudWxsLCJzdG9yZWRWZXJzaW9ucyI6bnVsbH19 + data: eyJhcGlWZXJzaW9uIjoiYXBpZXh0ZW5zaW9ucy5rOHMuaW8vdjEiLCJraW5kIjoiQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uIiwibWV0YWRhdGEiOnsiYW5ub3RhdGlvbnMiOnsiY29udHJvbGxlci1nZW4ua3ViZWJ1aWxkZXIuaW8vdmVyc2lvbiI6InYwLjE5LjAifSwiY3JlYXRpb25UaW1lc3RhbXAiOm51bGwsIm5hbWUiOiJsdm1jbHVzdGVycy5sdm0udG9wb2x2bS5pbyJ9LCJzcGVjIjp7Imdyb3VwIjoibHZtLnRvcG9sdm0uaW8iLCJuYW1lcyI6eyJraW5kIjoiTFZNQ2x1c3RlciIsImxpc3RLaW5kIjoiTFZNQ2x1c3Rlckxpc3QiLCJwbHVyYWwiOiJsdm1jbHVzdGVycyIsInNpbmd1bGFyIjoibHZtY2x1c3RlciJ9LCJzY29wZSI6Ik5hbWVzcGFjZWQiLCJ2ZXJzaW9ucyI6W3siYWRkaXRpb25hbFByaW50ZXJDb2x1bW5zIjpbeyJqc29uUGF0aCI6Ii5zdGF0dXMuc3RhdGUiLCJuYW1lIjoiU3RhdHVzIiwidHlwZSI6InN0cmluZyJ9XSwibmFtZSI6InYxYWxwaGExIiwic2NoZW1hIjp7Im9wZW5BUElWM1NjaGVtYSI6eyJkZXNjcmlwdGlvbiI6IkxWTUNsdXN0ZXIgaXMgdGhlIFNjaGVtYSBmb3IgdGhlIGx2bWNsdXN0ZXJzIEFQSSIsInByb3BlcnRpZXMiOnsiYXBpVmVyc2lvbiI6eyJkZXNjcmlwdGlvbiI6IkFQSVZlcnNpb24gZGVmaW5lcyB0aGUgdmVyc2lvbmVkIHNjaGVtYSBvZiB0aGlzIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC5cblNlcnZlcnMgc2hvdWxkIGNvbnZlcnQgcmVjb2duaXplZCBzY2hlbWFzIHRvIHRoZSBsYXRlc3QgaW50ZXJuYWwgdmFsdWUsIGFuZFxubWF5IHJlamVjdCB1bnJlY29nbml6ZWQgdmFsdWVzLlxuTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9zaWctYXJjaGl0ZWN0dXJlL2FwaS1jb252ZW50aW9ucy5tZCNyZXNvdXJjZXMiLCJ0eXBlIjoic3RyaW5nIn0sImtpbmQiOnsiZGVzY3JpcHRpb24iOiJLaW5kIGlzIGEgc3RyaW5nIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgUkVTVCByZXNvdXJjZSB0aGlzIG9iamVjdCByZXByZXNlbnRzLlxuU2VydmVycyBtYXkgaW5mZXIgdGhpcyBmcm9tIHRoZSBlbmRwb2ludCB0aGUgY2xpZW50IHN1Ym1pdHMgcmVxdWVzdHMgdG8uXG5DYW5ub3QgYmUgdXBkYXRlZC5cbkluIENhbWVsQ2FzZS5cbk1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvc2lnLWFyY2hpdGVjdHVyZS9hcGktY29udmVudGlvbnMubWQjdHlwZXMta2luZHMiLCJ0eXBlIjoic3RyaW5nIn0sIm1ldGFkYXRhIjp7InR5cGUiOiJvYmplY3QifSwic3BlYyI6eyJkZXNjcmlwdGlvbiI6IkxWTUNsdXN0ZXJTcGVjIGRlZmluZXMgdGhlIGRlc2lyZWQgc3RhdGUgb2YgTFZNQ2x1c3RlciIsInByb3BlcnRpZXMiOnsic3RvcmFnZSI6eyJkZXNjcmlwdGlvbiI6IlN0b3JhZ2UgY29udGFpbnMgdGhlIGRldmljZSBjbGFzcyBjb25maWd1cmF0aW9uIGZvciBsb2NhbCBzdG9yYWdlIGRldmljZXMuIiwicHJvcGVydGllcyI6eyJkZXZpY2VDbGFzc2VzIjp7ImRlc2NyaXB0aW9uIjoiRGV2aWNlQ2xhc3NlcyBjb250YWlucyB0aGUgY29uZmlndXJhdGlvbiB0byBhc3NpZ24gdGhlIGxvY2FsIHN0b3JhZ2UgZGV2aWNlcyB0byB0aGUgTFZNIHZvbHVtZSBncm91cHMgdGhhdCB5b3UgY2FuIHVzZSB0byBwcm92aXNpb24gcGVyc2lzdGVudCB2b2x1bWUgY2xhaW1zIChQVkNzKS4iLCJpdGVtcyI6eyJwcm9wZXJ0aWVzIjp7ImRlZmF1bHQiOnsiZGVzY3JpcHRpb24iOiJEZWZhdWx0IGlzIGEgZmxhZyB0byBpbmRpY2F0ZSB0aGF0IGEgZGV2aWNlIGNsYXNzIGlzIHRoZSBkZWZhdWx0LiBZb3UgY2FuIGNvbmZpZ3VyZSBvbmx5IGEgc2luZ2xlIGRlZmF1bHQgZGV2aWNlIGNsYXNzLiIsInR5cGUiOiJib29sZWFuIn0sImRldmljZURpc2NvdmVyeVBvbGljeSI6eyJkZXNjcmlwdGlvbiI6IkRldmljZURpc2NvdmVyeVBvbGljeSBzcGVjaWZpZXMgdGhlIHBvbGljeSBmb3IgZGlzY292ZXJpbmcgZGV2aWNlcyBmb3IgdGhpcyBkZXZpY2UgY2xhc3MuXG5TdGF0aWMgbWVhbnMgdGhlIHZvbHVtZSBncm91cCBpcyBjcmVhdGVkIHdpdGggZGV2aWNlcyBmb3VuZCBhdCBpbnN0YWxsIHRpbWU7IG5ldyBkZXZpY2VzIGFyZSBpZ25vcmVkLlxuRHluYW1pYyBtZWFucyBkZXZpY2VzIGFyZSBjb250aW51b3VzbHkgZGlzY292ZXJlZCBhbmQgYWRkZWQgdG8gdGhlIHZvbHVtZSBncm91cC5cbldoZW4gbm90IHNldCwgbmV3IHZvbHVtZSBncm91cHMgZGVmYXVsdCB0byBTdGF0aWMgYW5kIGV4aXN0aW5nIHZvbHVtZSBncm91cHMgZGVmYXVsdCB0byBEeW5hbWljIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiIsImVudW0iOlsiU3RhdGljIiwiRHluYW1pYyJdLCJ0eXBlIjoic3RyaW5nIn0sImRldmljZVNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoiRGV2aWNlU2VsZWN0b3IgY29udGFpbnMgdGhlIGNvbmZpZ3VyYXRpb24gdG8gc3BlY2lmeSBwYXRocyB0byB0aGUgZGV2aWNlcyB0aGF0IHlvdSB3YW50IHRvIGFkZCB0byB0aGUgTFZNIHZvbHVtZSBncm91cCwgYW5kIGZvcmNlIHdpcGUgdGhlIHNlbGVjdGVkIGRldmljZXMuIiwicHJvcGVydGllcyI6eyJmb3JjZVdpcGVEZXZpY2VzQW5kRGVzdHJveUFsbERhdGEiOnsiZGVzY3JpcHRpb24iOiJGb3JjZVdpcGVEZXZpY2VzQW5kRGVzdHJveUFsbERhdGEgaXMgYSBmbGFnIHRvIGZvcmNlIHdpcGUgdGhlIHNlbGVjdGVkIGRldmljZXMuXG5UaGlzIHdpcGVzIHRoZSBmaWxlIHNpZ25hdHVyZXMgb24gdGhlIGRldmljZXMuIFVzZSB0aGlzIGZlYXR1cmUgd2l0aCBjYXV0aW9uLlxuRm9yY2Ugd2lwZSB0aGUgZGV2aWNlcyBvbmx5IHdoZW4geW91IGtub3cgdGhhdCB0aGV5IGRvIG5vdCBjb250YWluIGFueSBpbXBvcnRhbnQgZGF0YS4iLCJ0eXBlIjoiYm9vbGVhbiJ9LCJvcHRpb25hbFBhdGhzIjp7ImRlc2NyaXB0aW9uIjoiT3B0aW9uYWxQYXRocyBzcGVjaWZ5IHRoZSBvcHRpb25hbCBkZXZpY2UgcGF0aHMuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifSwicGF0aHMiOnsiZGVzY3JpcHRpb24iOiJQYXRocyBzcGVjaWZ5IHRoZSBkZXZpY2UgcGF0aHMuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifX0sInR5cGUiOiJvYmplY3QifSwiZnN0eXBlIjp7ImRlZmF1bHQiOiJ4ZnMiLCJkZXNjcmlwdGlvbiI6IkZpbGVzeXN0ZW1UeXBlIHNldHMgdGhlIGRlZmF1bHQgZmlsZXN5c3RlbSB0eXBlIGZvciBwZXJzaXN0ZW50IHZvbHVtZXMgY3JlYXRlZCBmcm9tIHRoaXMgZGV2aWNlIGNsYXNzLlxuVGhpcyBkZXRlcm1pbmVzIHRoZSBmaWxlc3lzdGVtIHVzZWQgd2hlbiBwcm92aXNpb25pbmcgUFZDcyB3aXRoIHZvbHVtZU1vZGU6IEZpbGVzeXN0ZW0uXG5TZWxlY3QgZWl0aGVyIGBleHQ0YCBvciBgeGZzYC4gVGhpcyBkb2VzIG5vdCBmaWx0ZXIgZGV2aWNlcyBkdXJpbmcgZGlzY292ZXJ5LiIsImVudW0iOlsieGZzIiwiZXh0NCJdLCJ0eXBlIjoic3RyaW5nIiwieC1rdWJlcm5ldGVzLXZhbGlkYXRpb25zIjpbeyJtZXNzYWdlIjoiZnN0eXBlIGlzIGltbXV0YWJsZSIsInJ1bGUiOiJvbGRTZWxmID09IHNlbGYifV19LCJuYW1lIjp7ImRlc2NyaXB0aW9uIjoiTmFtZSBzcGVjaWZpZXMgYSBuYW1lIGZvciB0aGUgZGV2aWNlIGNsYXNzIiwibWF4TGVuZ3RoIjoyNDUsIm1pbkxlbmd0aCI6MSwicGF0dGVybiI6Il5bYS16MC05XShbLWEtejAtOV0qW2EtejAtOV0pPyQiLCJ0eXBlIjoic3RyaW5nIn0sIm5vZGVTZWxlY3RvciI6eyJkZXNjcmlwdGlvbiI6Ik5vZGVTZWxlY3RvciBjb250YWlucyB0aGUgY29uZmlndXJhdGlvbiB0byBjaG9vc2UgdGhlIG5vZGVzIG9uIHdoaWNoIHlvdSB3YW50IHRvIGNyZWF0ZSB0aGUgTFZNIHZvbHVtZSBncm91cC4gSWYgdGhpcyBmaWVsZCBpcyBub3QgY29uZmlndXJlZCwgYWxsIG5vZGVzIHdpdGhvdXQgbm8tc2NoZWR1bGUgdGFpbnRzIGFyZSBjb25zaWRlcmVkLiIsInByb3BlcnRpZXMiOnsibm9kZVNlbGVjdG9yVGVybXMiOnsiZGVzY3JpcHRpb24iOiJSZXF1aXJlZC4gQSBsaXN0IG9mIG5vZGUgc2VsZWN0b3IgdGVybXMuIFRoZSB0ZXJtcyBhcmUgT1JlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbnVsbCBvciBlbXB0eSBub2RlIHNlbGVjdG9yIHRlcm0gbWF0Y2hlcyBubyBvYmplY3RzLiBUaGUgcmVxdWlyZW1lbnRzIG9mXG50aGVtIGFyZSBBTkRlZC5cblRoZSBUb3BvbG9neVNlbGVjdG9yVGVybSB0eXBlIGltcGxlbWVudHMgYSBzdWJzZXQgb2YgdGhlIE5vZGVTZWxlY3RvclRlcm0uIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoiQSBsaXN0IG9mIG5vZGUgc2VsZWN0b3IgcmVxdWlyZW1lbnRzIGJ5IG5vZGUncyBsYWJlbHMuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIG5vZGUgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvclxudGhhdCByZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy4iLCJwcm9wZXJ0aWVzIjp7ImtleSI6eyJkZXNjcmlwdGlvbiI6IlRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoiUmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuXG5WYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzLCBEb2VzTm90RXhpc3QuIEd0LCBhbmQgTHQuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJBbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sXG50aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCxcbnRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEd0IG9yIEx0LCB0aGUgdmFsdWVzXG5hcnJheSBtdXN0IGhhdmUgYSBzaW5nbGUgZWxlbWVudCwgd2hpY2ggd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhbiBpbnRlZ2VyLlxuVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifSwibWF0Y2hGaWVsZHMiOnsiZGVzY3JpcHRpb24iOiJBIGxpc3Qgb2Ygbm9kZSBzZWxlY3RvciByZXF1aXJlbWVudHMgYnkgbm9kZSdzIGZpZWxkcy4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbm9kZSBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yXG50aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoiVGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJSZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy5cblZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMsIERvZXNOb3RFeGlzdC4gR3QsIGFuZCBMdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6IkFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbixcbnRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LFxudGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgR3Qgb3IgTHQsIHRoZSB2YWx1ZXNcbmFycmF5IG11c3QgaGF2ZSBhIHNpbmdsZSBlbGVtZW50LCB3aGljaCB3aWxsIGJlIGludGVycHJldGVkIGFzIGFuIGludGVnZXIuXG5UaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn19LCJyZXF1aXJlZCI6WyJub2RlU2VsZWN0b3JUZXJtcyJdLCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sInN0b3JhZ2VDbGFzc09wdGlvbnMiOnsiZGVzY3JpcHRpb24iOiJTdG9yYWdlQ2xhc3NPcHRpb25zIGFsbG93cyBjdXN0b21pemF0aW9uIG9mIHRoZSBTdG9yYWdlQ2xhc3MgY3JlYXRlZCBmb3IgdGhpcyBkZXZpY2UgY2xhc3MuIiwicHJvcGVydGllcyI6eyJhZGRpdGlvbmFsTGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJBZGRpdGlvbmFsTGFiZWxzIHNldHMgYWRkaXRpb25hbCBsYWJlbHMgb24gdGhlIFN0b3JhZ2VDbGFzcy5cblRoaXMgaXMgdGhlIG9ubHkgU3RvcmFnZUNsYXNzT3B0aW9ucyBmaWVsZCB0aGF0IGNhbiBiZSBjaGFuZ2VkIGFmdGVyIGNyZWF0aW9uLiIsIm1heFByb3BlcnRpZXMiOjE2LCJ0eXBlIjoib2JqZWN0In0sImFkZGl0aW9uYWxQYXJhbWV0ZXJzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwiZGVmYXVsdCI6e30sImRlc2NyaXB0aW9uIjoiQWRkaXRpb25hbFBhcmFtZXRlcnMgc2V0cyBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgb24gdGhlIFN0b3JhZ2VDbGFzcy5cbkxWTVMtb3duZWQga2V5cyAodG9wb2x2bS5pby9kZXZpY2UtY2xhc3MsIGNzaS5zdG9yYWdlLms4cy5pby9mc3R5cGUpIGNhbm5vdCBiZSBvdmVycmlkZGVuLlxuVGhpcyBmaWVsZCBpcyBpbW11dGFibGUgYWZ0ZXIgY3JlYXRpb24uIiwibWF4UHJvcGVydGllcyI6MTYsInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtdmFsaWRhdGlvbnMiOlt7Im1lc3NhZ2UiOiJhZGRpdGlvbmFsUGFyYW1ldGVycyBpcyBpbW11dGFibGUgb25jZSBzZXQiLCJydWxlIjoib2xkU2VsZiA9PSBzZWxmIn1dfSwicmVjbGFpbVBvbGljeSI6eyJkZWZhdWx0IjoiRGVsZXRlIiwiZGVzY3JpcHRpb24iOiJSZWNsYWltUG9saWN5IHNldHMgdGhlIHJlY2xhaW0gcG9saWN5IGZvciBQVnMgcHJvdmlzaW9uZWQgYnkgdGhpcyBkZXZpY2UgY2xhc3MuXG5XaGVuIHNldCB0byBSZXRhaW4sIFBWcyBhbmQgdGhlaXIgdW5kZXJseWluZyBsb2dpY2FsIHZvbHVtZXMgYXJlIHByZXNlcnZlZCB3aGVuIFBWQ3MgYXJlIGRlbGV0ZWQuIiwiZW51bSI6WyJEZWxldGUiLCJSZXRhaW4iXSwidHlwZSI6InN0cmluZyIsIngta3ViZXJuZXRlcy12YWxpZGF0aW9ucyI6W3sibWVzc2FnZSI6InJlY2xhaW1Qb2xpY3kgaXMgaW1tdXRhYmxlIG9uY2Ugc2V0IiwicnVsZSI6Im9sZFNlbGYgPT0gc2VsZiJ9XX0sInZvbHVtZUJpbmRpbmdNb2RlIjp7ImRlZmF1bHQiOiJXYWl0Rm9yRmlyc3RDb25zdW1lciIsImRlc2NyaXB0aW9uIjoiVm9sdW1lQmluZGluZ01vZGUgc2V0cyB0aGUgYmluZGluZyBtb2RlIGZvciBQVnMgcHJvdmlzaW9uZWQgYnkgdGhpcyBkZXZpY2UgY2xhc3MuIiwiZW51bSI6WyJXYWl0Rm9yRmlyc3RDb25zdW1lciIsIkltbWVkaWF0ZSJdLCJ0eXBlIjoic3RyaW5nIiwieC1rdWJlcm5ldGVzLXZhbGlkYXRpb25zIjpbeyJtZXNzYWdlIjoidm9sdW1lQmluZGluZ01vZGUgaXMgaW1tdXRhYmxlIG9uY2Ugc2V0IiwicnVsZSI6Im9sZFNlbGYgPT0gc2VsZiJ9XX19LCJ0eXBlIjoib2JqZWN0In0sInRoaW5Qb29sQ29uZmlnIjp7ImRlc2NyaXB0aW9uIjoiVGhpblBvb2xDb25maWcgY29udGFpbnMgdGhlIGNvbmZpZ3VyYXRpb24gdG8gY3JlYXRlIGEgdGhpbiBwb29sIGluIHRoZSBMVk0gdm9sdW1lIGdyb3VwLiBJZiB5b3UgZXhjbHVkZSB0aGlzIGZpZWxkLCBsb2dpY2FsIHZvbHVtZXMgYXJlIHRoaWNrIHByb3Zpc2lvbmVkLiIsInByb3BlcnRpZXMiOnsiY2h1bmtTaXplIjp7ImFueU9mIjpbeyJ0eXBlIjoiaW50ZWdlciJ9LHsidHlwZSI6InN0cmluZyJ9XSwiZGVzY3JpcHRpb24iOiJDaHVua1NpemUgc3BlY2lmaWVzIHRoZSBzdGF0aWNhbGx5IGNhbGN1bGF0ZWQgY2h1bmsgc2l6ZSBmb3IgdGhlIHRoaW4gcG9vbC5cblRodXMsIEl0IGlzIG9ubHkgdXNlZCB3aGVuIHRoZSBDaHVua1NpemVDYWxjdWxhdGlvblBvbGljeSBpcyBzZXQgdG8gU3RhdGljLlxuTm8gQ2h1bmtTaXplIHdpdGggYSBDaHVua1NpemVDYWxjdWxhdGlvblBvbGljeSBzZXQgdG8gU3RhdGljIHdpbGwgcmVzdWx0IGluIGEgZGVmYXVsdCBjaHVuayBzaXplIG9mIDEyOEtpLlxuSXQgY2FuIGJlIGJldHdlZW4gNjRLaSBhbmQgMUdpIGR1ZSB0byB0aGUgdW5kZXJseWluZyBsaW1pdGF0aW9ucyBvZiBsdm0yLiIsInBhdHRlcm4iOiJeKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKChbS01HVFBFXWkpfFtudW1rTUdUUEVdfChbZUVdKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKSk/JCIsIngta3ViZXJuZXRlcy1pbnQtb3Itc3RyaW5nIjp0cnVlfSwiY2h1bmtTaXplQ2FsY3VsYXRpb25Qb2xpY3kiOnsiZGVmYXVsdCI6IlN0YXRpYyIsImRlc2NyaXB0aW9uIjoiQ2h1bmtTaXplQ2FsY3VsYXRpb25Qb2xpY3kgc3BlY2lmaWVzIHRoZSBwb2xpY3kgdG8gY2FsY3VsYXRlIHRoZSBjaHVuayBzaXplIGZvciB0aGUgdW5kZXJseWluZyB2b2x1bWUuXG5XaGVuIHNldCB0byBIb3N0LCB0aGUgY2h1bmsgc2l6ZSBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIHRoZSBsdm0yIGhvc3Qgc2V0dGluZyBvbiB0aGUgbm9kZS5cbldoZW4gc2V0IHRvIFN0YXRpYywgdGhlIGNodW5rIHNpemUgaXMgY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGUgc3RhdGljIHNpemUgYXR0cmlidXRlIHByb3ZpZGVkIHdpdGhpbiBDaHVua1NpemUuIiwiZW51bSI6WyJIb3N0IiwiU3RhdGljIl0sInR5cGUiOiJzdHJpbmcifSwibWV0YWRhdGFTaXplIjp7ImFueU9mIjpbeyJ0eXBlIjoiaW50ZWdlciJ9LHsidHlwZSI6InN0cmluZyJ9XSwiZGVzY3JpcHRpb24iOiJNZXRhZGF0YVNpemUgc3BlY2lmaWVzIG1ldGFkYXRhIHNpemUgZm9yIHRoaW4gcG9vbC4gSXQgdXNlZCBvbmx5IHdoZW4gTWV0YWRhdGFTaXplQ2FsY3VsYXRpb25Qb2xpY3lcbmlzIHNldCB0byBTdGF0aWMuIE5vIE1ldGFkYXRhU2l6ZSB3aXRoIGEgTWV0YWRhdGFTaXplQ2FsY3VsYXRpb25Qb2xpY3kgc2V0IHRvIFN0YXRpYyB3aWxsIHJlc3VsdCBpblxuZGVmYXVsdCBtZXRhZGF0YSBzaXplIG9mIDFHaS4gSXQgY2FuIGJlIGJldHdlZW4gMk1pIGFuZCAxNkdpIGR1ZSB0byB0aGUgdW5kZXJseWluZyBsaW1pdGF0aW9ucyBvZiBsdm0yLiIsInBhdHRlcm4iOiJeKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKChbS01HVFBFXWkpfFtudW1rTUdUUEVdfChbZUVdKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKSk/JCIsIngta3ViZXJuZXRlcy1pbnQtb3Itc3RyaW5nIjp0cnVlfSwibWV0YWRhdGFTaXplQ2FsY3VsYXRpb25Qb2xpY3kiOnsiZGVmYXVsdCI6Ikhvc3QiLCJkZXNjcmlwdGlvbiI6Ik1ldGFkYXRhU2l6ZUNhbGN1bGF0aW9uUG9saWN5IHNwZWNpZmllcyB0aGUgcG9saWN5IHRvIGNhbGN1bGF0ZSBtZXRhZGF0YSBzaXplIGZvciB0aGUgdW5kZXJseWluZyB2b2x1bWUuXG5XaGVuIHNldCB0byBIb3N0LCB0aGUgbWV0YWRhdGEgc2l6ZSBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIGx2bTIgZGVmYXVsdCBzZXR0aW5nc1xuV2hlbiBzZXQgdG8gU3RhdGljLCB0aGUgbWV0YWRhdGEgc2l6ZSBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIHRoZSBzdGF0aWMgc2l6ZSBhdHRyaWJ1dGUgcHJvdmlkZWQgd2l0aGluIE1ldGFkYXRhU2l6ZSIsImVudW0iOlsiSG9zdCIsIlN0YXRpYyJdLCJ0eXBlIjoic3RyaW5nIn0sIm5hbWUiOnsiZGVzY3JpcHRpb24iOiJOYW1lIHNwZWNpZmllcyBhIG5hbWUgZm9yIHRoZSB0aGluIHBvb2wuIiwidHlwZSI6InN0cmluZyJ9LCJvdmVycHJvdmlzaW9uUmF0aW8iOnsiZGVzY3JpcHRpb24iOiJPdmVyUHJvdmlzaW9uUmF0aW8gc3BlY2lmaWVzIGEgZmFjdG9yIGJ5IHdoaWNoIHlvdSBjYW4gcHJvdmlzaW9uIGFkZGl0aW9uYWwgc3RvcmFnZSBiYXNlZCBvbiB0aGUgYXZhaWxhYmxlIHN0b3JhZ2UgaW4gdGhlIHRoaW4gcG9vbC4gVG8gcHJldmVudCBvdmVyLXByb3Zpc2lvbmluZyB0aHJvdWdoIHZhbGlkYXRpb24sIHNldCB0aGlzIGZpZWxkIHRvIDEuIiwibWF4aW11bSI6MTAwLCJtaW5pbXVtIjoxLCJ0eXBlIjoiaW50ZWdlciJ9LCJzaXplUGVyY2VudCI6eyJkZWZhdWx0Ijo5MCwiZGVzY3JpcHRpb24iOiJTaXplUGVyY2VudCBzcGVjaWZpZXMgdGhlIHBlcmNlbnRhZ2Ugb2Ygc3BhY2UgaW4gdGhlIExWTSB2b2x1bWUgZ3JvdXAgZm9yIGNyZWF0aW5nIHRoZSB0aGluIHBvb2wuXG5JZiB0aGUgc2l6ZSBjb25maWd1cmF0aW9uIGlzIDEwMCwgdGhlIHdob2xlIGRpc2sgd2lsbCBiZSB1c2VkLlxuQnkgZGVmYXVsdCwgOTAlIG9mIHRoZSBkaXNrIGlzIHVzZWQgZm9yIHRoZSB0aGluIHBvb2wgdG8gYWxsb3cgZm9yIGRhdGEgb3IgbWV0YWRhdGEgZXhwYW5zaW9uIGxhdGVyIG9uLiIsIm1heGltdW0iOjEwMCwibWluaW11bSI6MTAsInR5cGUiOiJpbnRlZ2VyIn19LCJyZXF1aXJlZCI6WyJuYW1lIiwib3ZlcnByb3Zpc2lvblJhdGlvIl0sInR5cGUiOiJvYmplY3QifX0sInJlcXVpcmVkIjpbIm5hbWUiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC1tYXAta2V5cyI6WyJuYW1lIl0sIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJtYXAifX0sInR5cGUiOiJvYmplY3QifSwidG9sZXJhdGlvbnMiOnsiZGVzY3JpcHRpb24iOiJUb2xlcmF0aW9ucyB0byBhcHBseSB0byBub2RlcyB0byBhY3Qgb24iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IlRoZSBwb2QgdGhpcyBUb2xlcmF0aW9uIGlzIGF0dGFjaGVkIHRvIHRvbGVyYXRlcyBhbnkgdGFpbnQgdGhhdCBtYXRjaGVzXG50aGUgdHJpcGxlIFx1MDAzY2tleSx2YWx1ZSxlZmZlY3RcdTAwM2UgdXNpbmcgdGhlIG1hdGNoaW5nIG9wZXJhdG9yIFx1MDAzY29wZXJhdG9yXHUwMDNlLiIsInByb3BlcnRpZXMiOnsiZWZmZWN0Ijp7ImRlc2NyaXB0aW9uIjoiRWZmZWN0IGluZGljYXRlcyB0aGUgdGFpbnQgZWZmZWN0IHRvIG1hdGNoLiBFbXB0eSBtZWFucyBtYXRjaCBhbGwgdGFpbnQgZWZmZWN0cy5cbldoZW4gc3BlY2lmaWVkLCBhbGxvd2VkIHZhbHVlcyBhcmUgTm9TY2hlZHVsZSwgUHJlZmVyTm9TY2hlZHVsZSBhbmQgTm9FeGVjdXRlLiIsInR5cGUiOiJzdHJpbmcifSwia2V5Ijp7ImRlc2NyaXB0aW9uIjoiS2V5IGlzIHRoZSB0YWludCBrZXkgdGhhdCB0aGUgdG9sZXJhdGlvbiBhcHBsaWVzIHRvLiBFbXB0eSBtZWFucyBtYXRjaCBhbGwgdGFpbnQga2V5cy5cbklmIHRoZSBrZXkgaXMgZW1wdHksIG9wZXJhdG9yIG11c3QgYmUgRXhpc3RzOyB0aGlzIGNvbWJpbmF0aW9uIG1lYW5zIHRvIG1hdGNoIGFsbCB2YWx1ZXMgYW5kIGFsbCBrZXlzLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJPcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIHRoZSB2YWx1ZS5cblZhbGlkIG9wZXJhdG9ycyBhcmUgRXhpc3RzIGFuZCBFcXVhbC4gRGVmYXVsdHMgdG8gRXF1YWwuXG5FeGlzdHMgaXMgZXF1aXZhbGVudCB0byB3aWxkY2FyZCBmb3IgdmFsdWUsIHNvIHRoYXQgYSBwb2QgY2FuXG50b2xlcmF0ZSBhbGwgdGFpbnRzIG9mIGEgcGFydGljdWxhciBjYXRlZ29yeS4iLCJ0eXBlIjoic3RyaW5nIn0sInRvbGVyYXRpb25TZWNvbmRzIjp7ImRlc2NyaXB0aW9uIjoiVG9sZXJhdGlvblNlY29uZHMgcmVwcmVzZW50cyB0aGUgcGVyaW9kIG9mIHRpbWUgdGhlIHRvbGVyYXRpb24gKHdoaWNoIG11c3QgYmVcbm9mIGVmZmVjdCBOb0V4ZWN1dGUsIG90aGVyd2lzZSB0aGlzIGZpZWxkIGlzIGlnbm9yZWQpIHRvbGVyYXRlcyB0aGUgdGFpbnQuIEJ5IGRlZmF1bHQsXG5pdCBpcyBub3Qgc2V0LCB3aGljaCBtZWFucyB0b2xlcmF0ZSB0aGUgdGFpbnQgZm9yZXZlciAoZG8gbm90IGV2aWN0KS4gWmVybyBhbmRcbm5lZ2F0aXZlIHZhbHVlcyB3aWxsIGJlIHRyZWF0ZWQgYXMgMCAoZXZpY3QgaW1tZWRpYXRlbHkpIGJ5IHRoZSBzeXN0ZW0uIiwiZm9ybWF0IjoiaW50NjQiLCJ0eXBlIjoiaW50ZWdlciJ9LCJ2YWx1ZSI6eyJkZXNjcmlwdGlvbiI6IlZhbHVlIGlzIHRoZSB0YWludCB2YWx1ZSB0aGUgdG9sZXJhdGlvbiBtYXRjaGVzIHRvLlxuSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cywgdGhlIHZhbHVlIHNob3VsZCBiZSBlbXB0eSwgb3RoZXJ3aXNlIGp1c3QgYSByZWd1bGFyIHN0cmluZy4iLCJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9fSwidHlwZSI6Im9iamVjdCJ9LCJzdGF0dXMiOnsiZGVzY3JpcHRpb24iOiJMVk1DbHVzdGVyU3RhdHVzIGRlZmluZXMgdGhlIG9ic2VydmVkIHN0YXRlIG9mIExWTUNsdXN0ZXIiLCJwcm9wZXJ0aWVzIjp7ImNvbmRpdGlvbnMiOnsiZGVzY3JpcHRpb24iOiJDb25kaXRpb25zIGRlc2NyaWJlcyB0aGUgc3RhdGUgb2YgdGhlIHJlc291cmNlLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQ29uZGl0aW9uIGNvbnRhaW5zIGRldGFpbHMgZm9yIG9uZSBhc3BlY3Qgb2YgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhpcyBBUEkgUmVzb3VyY2UuIiwicHJvcGVydGllcyI6eyJsYXN0VHJhbnNpdGlvblRpbWUiOnsiZGVzY3JpcHRpb24iOiJsYXN0VHJhbnNpdGlvblRpbWUgaXMgdGhlIGxhc3QgdGltZSB0aGUgY29uZGl0aW9uIHRyYW5zaXRpb25lZCBmcm9tIG9uZSBzdGF0dXMgdG8gYW5vdGhlci5cblRoaXMgc2hvdWxkIGJlIHdoZW4gdGhlIHVuZGVybHlpbmcgY29uZGl0aW9uIGNoYW5nZWQuICBJZiB0aGF0IGlzIG5vdCBrbm93biwgdGhlbiB1c2luZyB0aGUgdGltZSB3aGVuIHRoZSBBUEkgZmllbGQgY2hhbmdlZCBpcyBhY2NlcHRhYmxlLiIsImZvcm1hdCI6ImRhdGUtdGltZSIsInR5cGUiOiJzdHJpbmcifSwibWVzc2FnZSI6eyJkZXNjcmlwdGlvbiI6Im1lc3NhZ2UgaXMgYSBodW1hbiByZWFkYWJsZSBtZXNzYWdlIGluZGljYXRpbmcgZGV0YWlscyBhYm91dCB0aGUgdHJhbnNpdGlvbi5cblRoaXMgbWF5IGJlIGFuIGVtcHR5IHN0cmluZy4iLCJtYXhMZW5ndGgiOjMyNzY4LCJ0eXBlIjoic3RyaW5nIn0sIm9ic2VydmVkR2VuZXJhdGlvbiI6eyJkZXNjcmlwdGlvbiI6Im9ic2VydmVkR2VuZXJhdGlvbiByZXByZXNlbnRzIHRoZSAubWV0YWRhdGEuZ2VuZXJhdGlvbiB0aGF0IHRoZSBjb25kaXRpb24gd2FzIHNldCBiYXNlZCB1cG9uLlxuRm9yIGluc3RhbmNlLCBpZiAubWV0YWRhdGEuZ2VuZXJhdGlvbiBpcyBjdXJyZW50bHkgMTIsIGJ1dCB0aGUgLnN0YXR1cy5jb25kaXRpb25zW3hdLm9ic2VydmVkR2VuZXJhdGlvbiBpcyA5LCB0aGUgY29uZGl0aW9uIGlzIG91dCBvZiBkYXRlXG53aXRoIHJlc3BlY3QgdG8gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGluc3RhbmNlLiIsImZvcm1hdCI6ImludDY0IiwibWluaW11bSI6MCwidHlwZSI6ImludGVnZXIifSwicmVhc29uIjp7ImRlc2NyaXB0aW9uIjoicmVhc29uIGNvbnRhaW5zIGEgcHJvZ3JhbW1hdGljIGlkZW50aWZpZXIgaW5kaWNhdGluZyB0aGUgcmVhc29uIGZvciB0aGUgY29uZGl0aW9uJ3MgbGFzdCB0cmFuc2l0aW9uLlxuUHJvZHVjZXJzIG9mIHNwZWNpZmljIGNvbmRpdGlvbiB0eXBlcyBtYXkgZGVmaW5lIGV4cGVjdGVkIHZhbHVlcyBhbmQgbWVhbmluZ3MgZm9yIHRoaXMgZmllbGQsXG5hbmQgd2hldGhlciB0aGUgdmFsdWVzIGFyZSBjb25zaWRlcmVkIGEgZ3VhcmFudGVlZCBBUEkuXG5UaGUgdmFsdWUgc2hvdWxkIGJlIGEgQ2FtZWxDYXNlIHN0cmluZy5cblRoaXMgZmllbGQgbWF5IG5vdCBiZSBlbXB0eS4iLCJtYXhMZW5ndGgiOjEwMjQsIm1pbkxlbmd0aCI6MSwicGF0dGVybiI6Il5bQS1aYS16XShbQS1aYS16MC05Xyw6XSpbQS1aYS16MC05X10pPyQiLCJ0eXBlIjoic3RyaW5nIn0sInN0YXR1cyI6eyJkZXNjcmlwdGlvbiI6InN0YXR1cyBvZiB0aGUgY29uZGl0aW9uLCBvbmUgb2YgVHJ1ZSwgRmFsc2UsIFVua25vd24uIiwiZW51bSI6WyJUcnVlIiwiRmFsc2UiLCJVbmtub3duIl0sInR5cGUiOiJzdHJpbmcifSwidHlwZSI6eyJkZXNjcmlwdGlvbiI6InR5cGUgb2YgY29uZGl0aW9uIGluIENhbWVsQ2FzZSBvciBpbiBmb28uZXhhbXBsZS5jb20vQ2FtZWxDYXNlLiIsIm1heExlbmd0aCI6MzE2LCJwYXR0ZXJuIjoiXihbYS16MC05XShbLWEtejAtOV0qW2EtejAtOV0pPyhcXC5bYS16MC05XShbLWEtejAtOV0qW2EtejAtOV0pPykqLyk/KChbQS1aYS16MC05XVstQS1aYS16MC05Xy5dKik/W0EtWmEtejAtOV0pJCIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbImxhc3RUcmFuc2l0aW9uVGltZSIsIm1lc3NhZ2UiLCJyZWFzb24iLCJzdGF0dXMiLCJ0eXBlIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sImRldmljZUNsYXNzU3RhdHVzZXMiOnsiZGVzY3JpcHRpb24iOiJEZXZpY2VDbGFzc1N0YXR1c2VzIGRlc2NyaWJlcyB0aGUgc3RhdHVzIG9mIGFsbCBkZXZpY2VDbGFzc2VzIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJEZXZpY2VDbGFzc1N0YXR1cyBkZWZpbmVzIHRoZSBvYnNlcnZlZCBzdGF0dXMgb2YgdGhlIGRldmljZWNsYXNzIGFjcm9zcyBhbGwgbm9kZXMiLCJwcm9wZXJ0aWVzIjp7Im5hbWUiOnsiZGVzY3JpcHRpb24iOiJOYW1lIGlzIHRoZSBuYW1lIG9mIHRoZSBkZXZpY2VjbGFzcyIsInR5cGUiOiJzdHJpbmcifSwibm9kZVN0YXR1cyI6eyJkZXNjcmlwdGlvbiI6Ik5vZGVTdGF0dXMgdGVsbHMgaWYgdGhlIGRldmljZWNsYXNzIHdhcyBjcmVhdGVkIG9uIHRoZSBub2RlIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJOb2RlU3RhdHVzIGRlZmluZXMgdGhlIG9ic2VydmVkIHN0YXRlIG9mIHRoZSBkZXZpY2VjbGFzcyBvbiB0aGUgbm9kZSIsInByb3BlcnRpZXMiOnsiZGV2aWNlRGlzY292ZXJ5UG9saWN5Ijp7ImRlZmF1bHQiOiJSdW50aW1lU3RhdGljIiwiZGVzY3JpcHRpb24iOiJEZXZpY2VEaXNjb3ZlcnlQb2xpY3kgaXMgYSBmaWVsZCB0byBpbmRpY2F0ZSB0aGUgZWZmZWN0aXZlIGRldmljZSBkaXNjb3ZlcnkgcG9saWN5IGZvciB0aGlzIHZvbHVtZSBncm91cC5cblByZWNvbmZpZ3VyZWQgaW5kaWNhdGVzIGV4cGxpY2l0IERldmljZVNlbGVjdG9yIHBhdGhzIGFyZSBjb25maWd1cmVkIGFuZCB0aGUgZGlzY292ZXJ5IHBvbGljeSBpcyBub3QgYXBwbGljYWJsZS5cblJ1bnRpbWVEeW5hbWljIGluZGljYXRlcyBkZXZpY2VzIGFyZSBkaXNjb3ZlcmVkIGFuZCBhZGRlZCBkeW5hbWljYWxseSBhdCBydW50aW1lIChubyBleHBsaWNpdCBwYXRocywgRHluYW1pYyBwb2xpY3kpLlxuUnVudGltZVN0YXRpYyBpbmRpY2F0ZXMgZGV2aWNlcyB3ZXJlIGRpc2NvdmVyZWQgYXQgaW5zdGFsbCB0aW1lIGFuZCBuZXcgZGV2aWNlcyBhcmUgaWdub3JlZCAobm8gZXhwbGljaXQgcGF0aHMsIFN0YXRpYyBwb2xpY3kpLiIsImVudW0iOlsiUHJlY29uZmlndXJlZCIsIlJ1bnRpbWVEeW5hbWljIiwiUnVudGltZVN0YXRpYyJdLCJ0eXBlIjoic3RyaW5nIn0sImRldmljZXMiOnsiZGVzY3JpcHRpb24iOiJEZXZpY2VzIGlzIHRoZSBsaXN0IG9mIGRldmljZXMgdXNlZCBieSB0aGUgdm9sdW1lIGdyb3VwIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifSwiZXhjbHVkZWQiOnsiZGVzY3JpcHRpb24iOiJFeGNsdWRlZCBjb250YWlucyB0aGUgcGVyIG5vZGUgc3RhdHVzIG9mIGFwcGxpZWQgZGV2aWNlIGV4Y2x1c2lvbnMgdGhhdCB3ZXJlIHBpY2tlZCB1cCB2aWEgc2VsZWN0b3IsXG5idXQgd2VyZSBub3QgdXNlZCBmb3Igb3RoZXIgcmVhc29ucy4iLCJpdGVtcyI6eyJwcm9wZXJ0aWVzIjp7Im5hbWUiOnsiZGVzY3JpcHRpb24iOiJOYW1lIGlzIHRoZSBkZXZpY2UgdGhhdCB3YXMgZmlsdGVyZWQiLCJ0eXBlIjoic3RyaW5nIn0sInJlYXNvbnMiOnsiZGVzY3JpcHRpb24iOiJSZWFzb25zIGFyZSB0aGUgaHVtYW4tcmVhZGFibGUgcmVhc29ucyB3aHkgdGhlIGRldmljZSB3YXMgZXhjbHVkZWQgZnJvbSB0aGUgdm9sdW1lIGdyb3VwIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifX0sInJlcXVpcmVkIjpbIm5hbWUiLCJyZWFzb25zIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sIm5hbWUiOnsiZGVzY3JpcHRpb24iOiJOYW1lIGlzIHRoZSBuYW1lIG9mIHRoZSB2b2x1bWUgZ3JvdXAiLCJ0eXBlIjoic3RyaW5nIn0sIm5vZGUiOnsiZGVzY3JpcHRpb24iOiJOb2RlIGlzIHRoZSBuYW1lIG9mIHRoZSBub2RlIiwidHlwZSI6InN0cmluZyJ9LCJyZWFzb24iOnsiZGVzY3JpcHRpb24iOiJSZWFzb24gcHJvdmlkZXMgbW9yZSBkZXRhaWwgb24gdGhlIHZvbHVtZSBncm91cCBjcmVhdGlvbiBzdGF0dXMiLCJ0eXBlIjoic3RyaW5nIn0sInN0YXR1cyI6eyJkZXNjcmlwdGlvbiI6IlN0YXR1cyB0ZWxscyBpZiB0aGUgdm9sdW1lIGdyb3VwIHdhcyBjcmVhdGVkIG9uIHRoZSBub2RlIiwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsiZGV2aWNlRGlzY292ZXJ5UG9saWN5Il0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In19LCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJyZWFkeSI6eyJkZXNjcmlwdGlvbiI6IlJlYWR5IGRlc2NyaWJlcyBpZiB0aGUgTFZNQ2x1c3RlciBpcyByZWFkeS4iLCJ0eXBlIjoiYm9vbGVhbiJ9LCJzdGF0ZSI6eyJkZXNjcmlwdGlvbiI6IlN0YXRlIGRlc2NyaWJlcyB0aGUgTFZNQ2x1c3RlciBzdGF0ZS4iLCJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0In19LCJzZXJ2ZWQiOnRydWUsInN0b3JhZ2UiOnRydWUsInN1YnJlc291cmNlcyI6eyJzdGF0dXMiOnt9fX1dfSwic3RhdHVzIjp7ImFjY2VwdGVkTmFtZXMiOnsia2luZCI6IiIsInBsdXJhbCI6IiJ9LCJjb25kaXRpb25zIjpudWxsLCJzdG9yZWRWZXJzaW9ucyI6bnVsbH19 - type: olm.bundle.object value: data: eyJhcGlWZXJzaW9uIjoiYXBpZXh0ZW5zaW9ucy5rOHMuaW8vdjEiLCJraW5kIjoiQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uIiwibWV0YWRhdGEiOnsiYW5ub3RhdGlvbnMiOnsiY29udHJvbGxlci1nZW4ua3ViZWJ1aWxkZXIuaW8vdmVyc2lvbiI6InYwLjkuMCJ9LCJjcmVhdGlvblRpbWVzdGFtcCI6bnVsbCwibmFtZSI6ImxvZ2ljYWx2b2x1bWVzLnRvcG9sdm0uaW8ifSwic3BlYyI6eyJncm91cCI6InRvcG9sdm0uaW8iLCJuYW1lcyI6eyJraW5kIjoiTG9naWNhbFZvbHVtZSIsImxpc3RLaW5kIjoiTG9naWNhbFZvbHVtZUxpc3QiLCJwbHVyYWwiOiJsb2dpY2Fsdm9sdW1lcyIsInNpbmd1bGFyIjoibG9naWNhbHZvbHVtZSJ9LCJzY29wZSI6IkNsdXN0ZXIiLCJ2ZXJzaW9ucyI6W3sibmFtZSI6InYxIiwic2NoZW1hIjp7Im9wZW5BUElWM1NjaGVtYSI6eyJkZXNjcmlwdGlvbiI6IkxvZ2ljYWxWb2x1bWUgaXMgdGhlIFNjaGVtYSBmb3IgdGhlIGxvZ2ljYWx2b2x1bWVzIEFQSSIsInByb3BlcnRpZXMiOnsiYXBpVmVyc2lvbiI6eyJkZXNjcmlwdGlvbiI6IkFQSVZlcnNpb24gZGVmaW5lcyB0aGUgdmVyc2lvbmVkIHNjaGVtYSBvZiB0aGlzIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gU2VydmVycyBzaG91bGQgY29udmVydCByZWNvZ25pemVkIHNjaGVtYXMgdG8gdGhlIGxhdGVzdCBpbnRlcm5hbCB2YWx1ZSwgYW5kIG1heSByZWplY3QgdW5yZWNvZ25pemVkIHZhbHVlcy4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9zaWctYXJjaGl0ZWN0dXJlL2FwaS1jb252ZW50aW9ucy5tZCNyZXNvdXJjZXMiLCJ0eXBlIjoic3RyaW5nIn0sImtpbmQiOnsiZGVzY3JpcHRpb24iOiJLaW5kIGlzIGEgc3RyaW5nIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgUkVTVCByZXNvdXJjZSB0aGlzIG9iamVjdCByZXByZXNlbnRzLiBTZXJ2ZXJzIG1heSBpbmZlciB0aGlzIGZyb20gdGhlIGVuZHBvaW50IHRoZSBjbGllbnQgc3VibWl0cyByZXF1ZXN0cyB0by4gQ2Fubm90IGJlIHVwZGF0ZWQuIEluIENhbWVsQ2FzZS4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9zaWctYXJjaGl0ZWN0dXJlL2FwaS1jb252ZW50aW9ucy5tZCN0eXBlcy1raW5kcyIsInR5cGUiOiJzdHJpbmcifSwibWV0YWRhdGEiOnsidHlwZSI6Im9iamVjdCJ9LCJzcGVjIjp7ImRlc2NyaXB0aW9uIjoiTG9naWNhbFZvbHVtZVNwZWMgZGVmaW5lcyB0aGUgZGVzaXJlZCBzdGF0ZSBvZiBMb2dpY2FsVm9sdW1lIiwicHJvcGVydGllcyI6eyJhY2Nlc3NUeXBlIjp7ImRlc2NyaXB0aW9uIjoiJ2FjY2Vzc1R5cGUnIHNwZWNpZmllcyBob3cgdGhlIHVzZXIgaW50ZW5kcyB0byBjb25zdW1lIHRoZSBzbmFwc2hvdCBsb2dpY2FsIHZvbHVtZS4gU2V0IHRvIFwicm9cIiB3aGVuIGNyZWF0aW5nIGEgc25hcHNob3QgYW5kIHRvIFwicndcIiB3aGVuIHJlc3RvcmluZyBhIHNuYXBzaG90IG9yIGNyZWF0aW5nIGEgY2xvbmUuIFRoaXMgZmllbGQgaXMgcG9wdWxhdGVkIG9ubHkgd2hlbiBMb2dpY2FsVm9sdW1lIGhhcyBhIHNvdXJjZS4iLCJ0eXBlIjoic3RyaW5nIn0sImRldmljZUNsYXNzIjp7InR5cGUiOiJzdHJpbmcifSwibmFtZSI6eyJ0eXBlIjoic3RyaW5nIn0sIm5vZGVOYW1lIjp7InR5cGUiOiJzdHJpbmcifSwic2l6ZSI6eyJhbnlPZiI6W3sidHlwZSI6ImludGVnZXIifSx7InR5cGUiOiJzdHJpbmcifV0sInBhdHRlcm4iOiJeKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKChbS01HVFBFXWkpfFtudW1rTUdUUEVdfChbZUVdKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKSk/JCIsIngta3ViZXJuZXRlcy1pbnQtb3Itc3RyaW5nIjp0cnVlfSwic291cmNlIjp7ImRlc2NyaXB0aW9uIjoiJ3NvdXJjZScgc3BlY2lmaWVzIHRoZSBsb2dpY2Fsdm9sdW1lIG5hbWUgb2YgdGhlIHNvdXJjZTsgaWYgcHJlc2VudC4gVGhpcyBmaWVsZCBpcyBwb3B1bGF0ZWQgb25seSB3aGVuIExvZ2ljYWxWb2x1bWUgaGFzIGEgc291cmNlLiIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbIm5hbWUiLCJub2RlTmFtZSIsInNpemUiXSwidHlwZSI6Im9iamVjdCJ9LCJzdGF0dXMiOnsiZGVzY3JpcHRpb24iOiJMb2dpY2FsVm9sdW1lU3RhdHVzIGRlZmluZXMgdGhlIG9ic2VydmVkIHN0YXRlIG9mIExvZ2ljYWxWb2x1bWUiLCJwcm9wZXJ0aWVzIjp7ImNvZGUiOnsiZGVzY3JpcHRpb24iOiJBIENvZGUgaXMgYW4gdW5zaWduZWQgMzItYml0IGVycm9yIGNvZGUgYXMgZGVmaW5lZCBpbiB0aGUgZ1JQQyBzcGVjLiIsImZvcm1hdCI6ImludDMyIiwidHlwZSI6ImludGVnZXIifSwiY3VycmVudFNpemUiOnsiYW55T2YiOlt7InR5cGUiOiJpbnRlZ2VyIn0seyJ0eXBlIjoic3RyaW5nIn1dLCJwYXR0ZXJuIjoiXihcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSgoW0tNR1RQRV1pKXxbbnVta01HVFBFXXwoW2VFXShcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSkpPyQiLCJ4LWt1YmVybmV0ZXMtaW50LW9yLXN0cmluZyI6dHJ1ZX0sIm1lc3NhZ2UiOnsidHlwZSI6InN0cmluZyJ9LCJ2b2x1bWVJRCI6eyJkZXNjcmlwdGlvbiI6IklOU0VSVCBBRERJVElPTkFMIFNUQVRVUyBGSUVMRCAtIGRlZmluZSBvYnNlcnZlZCBzdGF0ZSBvZiBjbHVzdGVyIEltcG9ydGFudDogUnVuIFwibWFrZVwiIHRvIHJlZ2VuZXJhdGUgY29kZSBhZnRlciBtb2RpZnlpbmcgdGhpcyBmaWxlIiwidHlwZSI6InN0cmluZyJ9fSwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCJ9fSwic2VydmVkIjp0cnVlLCJzdG9yYWdlIjp0cnVlLCJzdWJyZXNvdXJjZXMiOnsic3RhdHVzIjp7fX19XX0sInN0YXR1cyI6eyJhY2NlcHRlZE5hbWVzIjp7ImtpbmQiOiIiLCJwbHVyYWwiOiIifSwiY29uZGl0aW9ucyI6bnVsbCwic3RvcmVkVmVyc2lvbnMiOm51bGx9fQ== - type: olm.bundle.object value: - data: eyJhcGlWZXJzaW9uIjoib3BlcmF0b3JzLmNvcmVvcy5jb20vdjFhbHBoYTEiLCJraW5kIjoiQ2x1c3RlclNlcnZpY2VWZXJzaW9uIiwibWV0YWRhdGEiOnsiYW5ub3RhdGlvbnMiOnsiYWxtLWV4YW1wbGVzIjoiW1xuICB7XG4gICAgXCJhcGlWZXJzaW9uXCI6IFwibHZtLnRvcG9sdm0uaW8vdjFhbHBoYTFcIixcbiAgICBcImtpbmRcIjogXCJMVk1DbHVzdGVyXCIsXG4gICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICBcIm5hbWVcIjogXCJteS1sdm1jbHVzdGVyXCJcbiAgICB9LFxuICAgIFwic3BlY1wiOiB7XG4gICAgICBcInN0b3JhZ2VcIjoge1xuICAgICAgICBcImRldmljZUNsYXNzZXNcIjogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJmc3R5cGVcIjogXCJ4ZnNcIixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcInZnMVwiLFxuICAgICAgICAgICAgXCJ0aGluUG9vbENvbmZpZ1wiOiB7XG4gICAgICAgICAgICAgIFwibmFtZVwiOiBcInRoaW4tcG9vbC0xXCIsXG4gICAgICAgICAgICAgIFwib3ZlcnByb3Zpc2lvblJhdGlvXCI6IDEwLFxuICAgICAgICAgICAgICBcInNpemVQZXJjZW50XCI6IDkwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgfVxuICB9XG5dIiwiY2FwYWJpbGl0aWVzIjoiU2VhbWxlc3MgVXBncmFkZXMiLCJjYXRlZ29yaWVzIjoiU3RvcmFnZSIsImNvbnRhaW5lckltYWdlIjoicXVheS5pby9sdm1zX2Rldi9sdm1zLW9wZXJhdG9yOmxhdGVzdCIsImRlc2NyaXB0aW9uIjoiTG9naWNhbCB2b2x1bWUgbWFuYWdlciBzdG9yYWdlIHByb3ZpZGVzIGR5bmFtaWNhbGx5IHByb3Zpc2lvbmVkIGxvY2FsIHN0b3JhZ2UgZm9yIGNvbnRhaW5lciB3b3JrbG9hZHMiLCJmZWF0dXJlcy5vcGVyYXRvcnMub3BlbnNoaWZ0LmlvL2NuZiI6ImZhbHNlIiwiZmVhdHVyZXMub3BlcmF0b3JzLm9wZW5zaGlmdC5pby9jbmkiOiJmYWxzZSIsImZlYXR1cmVzLm9wZXJhdG9ycy5vcGVuc2hpZnQuaW8vY3NpIjoidHJ1ZSIsImZlYXR1cmVzLm9wZXJhdG9ycy5vcGVuc2hpZnQuaW8vZGlzY29ubmVjdGVkIjoidHJ1ZSIsImZlYXR1cmVzLm9wZXJhdG9ycy5vcGVuc2hpZnQuaW8vZmlwcy1jb21wbGlhbnQiOiJ0cnVlIiwiZmVhdHVyZXMub3BlcmF0b3JzLm9wZW5zaGlmdC5pby9wcm94eS1hd2FyZSI6ImZhbHNlIiwiZmVhdHVyZXMub3BlcmF0b3JzLm9wZW5zaGlmdC5pby90bHMtcHJvZmlsZXMiOiJmYWxzZSIsImZlYXR1cmVzLm9wZXJhdG9ycy5vcGVuc2hpZnQuaW8vdG9rZW4tYXV0aC1hd3MiOiJmYWxzZSIsImZlYXR1cmVzLm9wZXJhdG9ycy5vcGVuc2hpZnQuaW8vdG9rZW4tYXV0aC1henVyZSI6ImZhbHNlIiwiZmVhdHVyZXMub3BlcmF0b3JzLm9wZW5zaGlmdC5pby90b2tlbi1hdXRoLWdjcCI6ImZhbHNlIiwib2xtLnNraXBSYW5nZSI6IiIsIm9wZXJhdG9yZnJhbWV3b3JrLmlvL2NsdXN0ZXItbW9uaXRvcmluZyI6InRydWUiLCJvcGVyYXRvcmZyYW1ld29yay5pby9pbml0aWFsaXphdGlvbi1yZXNvdXJjZSI6IntcbiAgICBcImFwaVZlcnNpb25cIjogXCJsdm0udG9wb2x2bS5pby92MWFscGhhMVwiLFxuICAgIFwia2luZFwiOiBcIkxWTUNsdXN0ZXJcIixcbiAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgIFwibmFtZVwiOiBcInRlc3QtbHZtY2x1c3RlclwiXG4gICAgfSxcbiAgICBcInNwZWNcIjoge1xuICAgICAgXCJzdG9yYWdlXCI6IHtcbiAgICAgICAgXCJkZXZpY2VDbGFzc2VzXCI6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcIm5hbWVcIjogXCJ2ZzFcIixcbiAgICAgICAgICAgIFwidGhpblBvb2xDb25maWdcIjoge1xuICAgICAgICAgICAgICBcIm5hbWVcIjogXCJ0aGluLXBvb2wtMVwiLFxuICAgICAgICAgICAgICBcIm92ZXJwcm92aXNpb25SYXRpb1wiOiAxMCxcbiAgICAgICAgICAgICAgXCJzaXplUGVyY2VudFwiOiA5MFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIH1cbiAgfSIsIm9wZXJhdG9yZnJhbWV3b3JrLmlvL3N1Z2dlc3RlZC1uYW1lc3BhY2UiOiJvcGVuc2hpZnQtbHZtLXN0b3JhZ2UiLCJvcGVyYXRvcmZyYW1ld29yay5pby9zdWdnZXN0ZWQtbmFtZXNwYWNlLXRlbXBsYXRlIjoie1xuICBcImFwaVZlcnNpb25cIjogXCJ2MVwiLFxuICBcImtpbmRcIjogXCJOYW1lc3BhY2VcIixcbiAgXCJtZXRhZGF0YVwiOiB7XG4gICAgXCJuYW1lXCI6IFwib3BlbnNoaWZ0LWx2bS1zdG9yYWdlXCIsXG4gICAgXCJhbm5vdGF0aW9uc1wiOiB7XG4gICAgICBcIndvcmtsb2FkLm9wZW5zaGlmdC5pby9hbGxvd2VkXCI6IFwibWFuYWdlbWVudFwiXG4gICAgfVxuICB9XG59Iiwib3BlcmF0b3JzLm9wZW5zaGlmdC5pby9tdXN0LWdhdGhlci1pbWFnZSI6InF1YXkuaW8vbHZtc19kZXYvbHZtcy1tdXN0LWdhdGhlcjpsYXRlc3QiLCJvcGVyYXRvcnMub3BlbnNoaWZ0LmlvL3ZhbGlkLXN1YnNjcmlwdGlvbiI6IltcIk9wZW5TaGlmdCBLdWJlcm5ldGVzIEVuZ2luZVwiLCBcIk9wZW5TaGlmdCBDb250YWluZXIgUGxhdGZvcm1cIiwgXCJPcGVuU2hpZnQgUGxhdGZvcm0gUGx1c1wiXSIsIm9wZXJhdG9ycy5vcGVyYXRvcmZyYW1ld29yay5pby9idWlsZGVyIjoib3BlcmF0b3Itc2RrLXYxLjM5LjIiLCJvcGVyYXRvcnMub3BlcmF0b3JmcmFtZXdvcmsuaW8vaW50ZXJuYWwtb2JqZWN0cyI6IltcImxvZ2ljYWx2b2x1bWVzLnRvcG9sdm0uaW9cIiwgXCJsdm12b2x1bWVncm91cHMubHZtLnRvcG9sdm0uaW9cIiwgXCJsdm12b2x1bWVncm91cG5vZGVzdGF0dXNlcy5sdm0udG9wb2x2bS5pb1wiXSIsIm9wZXJhdG9ycy5vcGVyYXRvcmZyYW1ld29yay5pby9wcm9qZWN0X2xheW91dCI6ImdvLmt1YmVidWlsZGVyLmlvL3Y0IiwicmVwb3NpdG9yeSI6Imh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuc2hpZnQvbHZtLW9wZXJhdG9yIn0sImxhYmVscyI6eyJvcGVyYXRvcmZyYW1ld29yay5pby9hcmNoLmFtZDY0Ijoic3VwcG9ydGVkIiwib3BlcmF0b3JmcmFtZXdvcmsuaW8vYXJjaC5hcm02NCI6InN1cHBvcnRlZCIsIm9wZXJhdG9yZnJhbWV3b3JrLmlvL2FyY2gucHBjNjRsZSI6InN1cHBvcnRlZCIsIm9wZXJhdG9yZnJhbWV3b3JrLmlvL2FyY2guczM5MHgiOiJzdXBwb3J0ZWQifSwibmFtZSI6Imx2bXMtb3BlcmF0b3IudjAuMC4xIiwibmFtZXNwYWNlIjoicGxhY2Vob2xkZXIifSwic3BlYyI6eyJhcGlzZXJ2aWNlZGVmaW5pdGlvbnMiOnt9LCJjdXN0b21yZXNvdXJjZWRlZmluaXRpb25zIjp7Im93bmVkIjpbeyJraW5kIjoiTG9naWNhbFZvbHVtZSIsIm5hbWUiOiJsb2dpY2Fsdm9sdW1lcy50b3BvbHZtLmlvIiwidmVyc2lvbiI6InYxIn0seyJkZXNjcmlwdGlvbiI6IkxWTUNsdXN0ZXIgaXMgdGhlIFNjaGVtYSBmb3IgdGhlIGx2bWNsdXN0ZXJzIEFQSSIsImRpc3BsYXlOYW1lIjoiTFZNQ2x1c3RlciIsImtpbmQiOiJMVk1DbHVzdGVyIiwibmFtZSI6Imx2bWNsdXN0ZXJzLmx2bS50b3BvbHZtLmlvIiwidmVyc2lvbiI6InYxYWxwaGExIn0seyJraW5kIjoiTFZNVm9sdW1lR3JvdXBOb2RlU3RhdHVzIiwibmFtZSI6Imx2bXZvbHVtZWdyb3Vwbm9kZXN0YXR1c2VzLmx2bS50b3BvbHZtLmlvIiwidmVyc2lvbiI6InYxYWxwaGExIn0seyJraW5kIjoiTFZNVm9sdW1lR3JvdXAiLCJuYW1lIjoibHZtdm9sdW1lZ3JvdXBzLmx2bS50b3BvbHZtLmlvIiwidmVyc2lvbiI6InYxYWxwaGExIn1dfSwiZGVzY3JpcHRpb24iOiJMb2dpY2FsIHZvbHVtZSBtYW5hZ2VyIHN0b3JhZ2UgcHJvdmlkZXMgZHluYW1pY2FsbHkgcHJvdmlzaW9uZWQgbG9jYWwgc3RvcmFnZS4iLCJkaXNwbGF5TmFtZSI6IkxWTSBTdG9yYWdlIiwiaWNvbiI6W3siYmFzZTY0ZGF0YSI6IlBITjJaeUJwWkQwaVRHRjVaWEpmTVNJZ1pHRjBZUzF1WVcxbFBTSk1ZWGxsY2lBeElpQjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaUlIWnBaWGRDYjNnOUlqQWdNQ0F4T1RJZ01UUTFJajQ4WkdWbWN6NDhjM1I1YkdVK0xtTnNjeTB4ZTJacGJHdzZJMlV3TUR0OVBDOXpkSGxzWlQ0OEwyUmxabk0rUEhScGRHeGxQbEpsWkVoaGRDMU1iMmR2TFVoaGRDMURiMnh2Y2p3dmRHbDBiR1UrUEhCaGRHZ2daRDBpVFRFMU55NDNOeXcyTWk0Mk1XRXhOQ3d4TkN3d0xEQXNNU3d1TXpFc015NDBNbU13TERFMExqZzRMVEU0TGpFc01UY3VORFl0TXpBdU5qRXNNVGN1TkRaRE56Z3VPRE1zT0RNdU5Ea3NOREl1TlRNc05UTXVNallzTkRJdU5UTXNORFJoTmk0ME15dzJMalF6TERBc01Dd3hMQzR5TWkweExqazBiQzB6TGpZMkxEa3VNRFpoTVRndU5EVXNNVGd1TkRVc01Dd3dMREF0TVM0MU1TdzNMak16WXpBc01UZ3VNVEVzTkRFc05EVXVORGdzT0RjdU56UXNORFV1TkRnc01qQXVOamtzTUN3ek5pNDBNeTAzTGpjMkxETTJMalF6TFRJeExqYzNMREF0TVM0d09Dd3dMVEV1T1RRdE1TNDNNeTB4TUM0eE0xb2lMejQ4Y0dGMGFDQmpiR0Z6Y3owaVkyeHpMVEVpSUdROUlrMHhNamN1TkRjc09ETXVORGxqTVRJdU5URXNNQ3d6TUM0Mk1TMHlMalU0TERNd0xqWXhMVEUzTGpRMllURTBMREUwTERBc01Dd3dMUzR6TVMwekxqUXliQzAzTGpRMUxUTXlMak0yWXkweExqY3lMVGN1TVRJdE15NHlNeTB4TUM0ek5TMHhOUzQzTXkweE5pNDJRekV5TkM0NE9TdzRMalk1TERFd015NDNOaTQxTERrM0xqVXhMalVzT1RFdU5qa3VOU3c1TUN3NExEZ3pMakEyTERoakxUWXVOamdzTUMweE1TNDJOQzAxTGpZdE1UY3VPRGt0TlM0MkxUWXNNQzA1TGpreExEUXVNRGt0TVRJdU9UTXNNVEl1TlN3d0xEQXRPQzQwTVN3eU15NDNNaTA1TGpRNUxESTNMakUyUVRZdU5ETXNOaTQwTXl3d0xEQXNNQ3cwTWk0MU15dzBOR013TERrdU1qSXNNell1TXl3ek9TNDBOU3c0TkM0NU5Dd3pPUzQwTlUweE5qQXNOekl1TURkak1TNDNNeXc0TGpFNUxERXVOek1zT1M0d05Td3hMamN6TERFd0xqRXpMREFzTVRRdE1UVXVOelFzTWpFdU56Y3RNell1TkRNc01qRXVOemRETnpndU5UUXNNVEEwTERNM0xqVTRMRGMyTGpZc016Y3VOVGdzTlRndU5EbGhNVGd1TkRVc01UZ3VORFVzTUN3d0xERXNNUzQxTVMwM0xqTXpRekl5TGpJM0xEVXlMQzQxTERVMUxDNDFMRGMwTGpJeVl6QXNNekV1TkRnc056UXVOVGtzTnpBdU1qZ3NNVE16TGpZMUxEY3dMakk0TERRMUxqSTRMREFzTlRZdU55MHlNQzQwT0N3MU5pNDNMVE0yTGpZMUxEQXRNVEl1TnpJdE1URXRNamN1TVRZdE16QXVPRE10TXpVdU56Z2lMejQ4TDNOMlp6ND0iLCJtZWRpYXR5cGUiOiJpbWFnZS9zdmcreG1sIn1dLCJpbnN0YWxsIjp7InNwZWMiOnsiY2x1c3RlclBlcm1pc3Npb25zIjpbeyJydWxlcyI6W3siYXBpR3JvdXBzIjpbIiJdLCJyZXNvdXJjZXMiOlsiY29uZmlnbWFwcyIsInBlcnNpc3RlbnR2b2x1bWVzIl0sInZlcmJzIjpbImNyZWF0ZSIsImRlbGV0ZSIsImdldCIsImxpc3QiLCJwYXRjaCIsInVwZGF0ZSIsIndhdGNoIl19LHsiYXBpR3JvdXBzIjpbIiJdLCJyZXNvdXJjZXMiOlsiZXZlbnRzIl0sInZlcmJzIjpbImNyZWF0ZSIsImxpc3QiLCJwYXRjaCIsInVwZGF0ZSIsIndhdGNoIl19LHsiYXBpR3JvdXBzIjpbIiJdLCJyZXNvdXJjZXMiOlsibm9kZSJdLCJ2ZXJicyI6WyJnZXQiLCJsaXN0Iiwid2F0Y2giXX0seyJhcGlHcm91cHMiOlsiIl0sInJlc291cmNlcyI6WyJub2RlcyJdLCJ2ZXJicyI6WyJnZXQiLCJsaXN0IiwicGF0Y2giLCJ1cGRhdGUiLCJ3YXRjaCJdfSx7ImFwaUdyb3VwcyI6WyIiXSwicmVzb3VyY2VzIjpbInBlcnNpc3RlbnR2b2x1bWVjbGFpbXMiXSwidmVyYnMiOlsiZGVsZXRlIiwiZ2V0IiwibGlzdCIsInVwZGF0ZSIsIndhdGNoIl19LHsiYXBpR3JvdXBzIjpbIiJdLCJyZXNvdXJjZXMiOlsicGVyc2lzdGVudHZvbHVtZWNsYWltcy9zdGF0dXMiXSwidmVyYnMiOlsicGF0Y2giXX0seyJhcGlHcm91cHMiOlsiIl0sInJlc291cmNlcyI6WyJwb2RzIl0sInZlcmJzIjpbImRlbGV0ZSIsImdldCIsImxpc3QiLCJ3YXRjaCJdfSx7ImFwaUdyb3VwcyI6WyJhcGlleHRlbnNpb25zLms4cy5pbyJdLCJyZXNvdXJjZXMiOlsiY3VzdG9tcmVzb3VyY2VkZWZpbml0aW9ucyJdLCJ2ZXJicyI6WyJnZXQiLCJsaXN0Iiwid2F0Y2giXX0seyJhcGlHcm91cHMiOlsiYXBwcyJdLCJyZXNvdXJjZXMiOlsiZGFlbW9uc2V0cyIsImRlcGxveW1lbnRzIl0sInZlcmJzIjpbImNyZWF0ZSIsImRlbGV0ZSIsImdldCIsImxpc3QiLCJwYXRjaCIsInVwZGF0ZSIsIndhdGNoIl19LHsiYXBpR3JvdXBzIjpbImFwcHMiXSwicmVzb3VyY2VzIjpbInJlcGxpY2FzZXRzIl0sInZlcmJzIjpbImdldCJdfSx7ImFwaUdyb3VwcyI6WyJjb25maWcub3BlbnNoaWZ0LmlvIl0sInJlc291cmNlcyI6WyJpbmZyYXN0cnVjdHVyZXMiXSwidmVyYnMiOlsiZ2V0Il19LHsiYXBpR3JvdXBzIjpbImNvb3JkaW5hdGlvbi5rOHMuaW8iXSwicmVzb3VyY2VzIjpbImxlYXNlcyJdLCJ2ZXJicyI6WyJjcmVhdGUiLCJkZWxldGUiLCJnZXQiLCJsaXN0IiwicGF0Y2giLCJ1cGRhdGUiLCJ3YXRjaCJdfSx7ImFwaUdyb3VwcyI6WyJsdm0udG9wb2x2bS5pbyJdLCJyZXNvdXJjZXMiOlsibHZtY2x1c3RlcnMiLCJsdm12b2x1bWVncm91cG5vZGVzdGF0dXNlcyIsImx2bXZvbHVtZWdyb3VwcyJdLCJ2ZXJicyI6WyJjcmVhdGUiLCJkZWxldGUiLCJnZXQiLCJsaXN0IiwicGF0Y2giLCJ1cGRhdGUiLCJ3YXRjaCJdfSx7ImFwaUdyb3VwcyI6WyJsdm0udG9wb2x2bS5pbyJdLCJyZXNvdXJjZXMiOlsibHZtY2x1c3RlcnMvZmluYWxpemVycyIsImx2bXZvbHVtZWdyb3Vwbm9kZXN0YXR1c2VzL2ZpbmFsaXplcnMiLCJsdm12b2x1bWVncm91cHMvZmluYWxpemVycyJdLCJ2ZXJicyI6WyJ1cGRhdGUiXX0seyJhcGlHcm91cHMiOlsibHZtLnRvcG9sdm0uaW8iXSwicmVzb3VyY2VzIjpbImx2bWNsdXN0ZXJzL3N0YXR1cyIsImx2bXZvbHVtZWdyb3Vwbm9kZXN0YXR1c2VzL3N0YXR1cyIsImx2bXZvbHVtZWdyb3Vwcy9zdGF0dXMiXSwidmVyYnMiOlsiZ2V0IiwicGF0Y2giLCJ1cGRhdGUiXX0seyJhcGlHcm91cHMiOlsibW9uaXRvcmluZy5jb3Jlb3MuY29tIl0sInJlc291cmNlcyI6WyJzZXJ2aWNlbW9uaXRvcnMiXSwidmVyYnMiOlsiY3JlYXRlIiwiZGVsZXRlIiwiZ2V0IiwibGlzdCIsInBhdGNoIiwidXBkYXRlIiwid2F0Y2giXX0seyJhcGlHcm91cHMiOlsic2VjdXJpdHkub3BlbnNoaWZ0LmlvIl0sInJlc291cmNlcyI6WyJzZWN1cml0eWNvbnRleHRjb25zdHJhaW50cyJdLCJ2ZXJicyI6WyJjcmVhdGUiLCJkZWxldGUiLCJnZXQiLCJsaXN0IiwicGF0Y2giLCJ1cGRhdGUiLCJ3YXRjaCJdfSx7ImFwaUdyb3VwcyI6WyJzbmFwc2hvdC5zdG9yYWdlLms4cy5pbyJdLCJyZXNvdXJjZXMiOlsidm9sdW1lc25hcHNob3RjbGFzc2VzIl0sInZlcmJzIjpbImNyZWF0ZSIsImRlbGV0ZSIsImdldCIsImxpc3QiLCJwYXRjaCIsInVwZGF0ZSIsIndhdGNoIl19LHsiYXBpR3JvdXBzIjpbInNuYXBzaG90LnN0b3JhZ2UuazhzLmlvIl0sInJlc291cmNlcyI6WyJ2b2x1bWVzbmFwc2hvdGNvbnRlbnRzIl0sInZlcmJzIjpbImdldCIsImxpc3QiLCJwYXRjaCIsInVwZGF0ZSIsIndhdGNoIl19LHsiYXBpR3JvdXBzIjpbInNuYXBzaG90LnN0b3JhZ2UuazhzLmlvIl0sInJlc291cmNlcyI6WyJ2b2x1bWVzbmFwc2hvdGNvbnRlbnRzL3N0YXR1cyJdLCJ2ZXJicyI6WyJwYXRjaCIsInVwZGF0ZSJdfSx7ImFwaUdyb3VwcyI6WyJzbmFwc2hvdC5zdG9yYWdlLms4cy5pbyJdLCJyZXNvdXJjZXMiOlsidm9sdW1lc25hcHNob3RzIl0sInZlcmJzIjpbImdldCIsImxpc3QiXX0seyJhcGlHcm91cHMiOlsic3RvcmFnZS5rOHMuaW8iXSwicmVzb3VyY2VzIjpbImNzaWRyaXZlcnMiLCJjc2lzdG9yYWdlY2FwYWNpdGllcyIsInN0b3JhZ2VjbGFzc2VzIl0sInZlcmJzIjpbImNyZWF0ZSIsImRlbGV0ZSIsImdldCIsImxpc3QiLCJwYXRjaCIsInVwZGF0ZSIsIndhdGNoIl19LHsiYXBpR3JvdXBzIjpbInN0b3JhZ2UuazhzLmlvIl0sInJlc291cmNlcyI6WyJjc2lub2RlcyIsInZvbHVtZWF0dGFjaG1lbnRzIl0sInZlcmJzIjpbImdldCIsImxpc3QiLCJ3YXRjaCJdfSx7ImFwaUdyb3VwcyI6WyJ0b3BvbHZtLmlvIl0sInJlc291cmNlcyI6WyJsb2dpY2Fsdm9sdW1lcyIsImxvZ2ljYWx2b2x1bWVzL3N0YXR1cyJdLCJ2ZXJicyI6WyJjcmVhdGUiLCJkZWxldGUiLCJnZXQiLCJsaXN0IiwicGF0Y2giLCJ1cGRhdGUiLCJ3YXRjaCJdfSx7ImFwaUdyb3VwcyI6WyJhdXRoZW50aWNhdGlvbi5rOHMuaW8iXSwicmVzb3VyY2VzIjpbInRva2VucmV2aWV3cyJdLCJ2ZXJicyI6WyJjcmVhdGUiXX0seyJhcGlHcm91cHMiOlsiYXV0aG9yaXphdGlvbi5rOHMuaW8iXSwicmVzb3VyY2VzIjpbInN1YmplY3RhY2Nlc3NyZXZpZXdzIl0sInZlcmJzIjpbImNyZWF0ZSJdfV0sInNlcnZpY2VBY2NvdW50TmFtZSI6Imx2bXMtb3BlcmF0b3IifSx7InJ1bGVzIjpbeyJhcGlHcm91cHMiOlsiYXV0aGVudGljYXRpb24uazhzLmlvIl0sInJlc291cmNlcyI6WyJ0b2tlbnJldmlld3MiXSwidmVyYnMiOlsiY3JlYXRlIl19LHsiYXBpR3JvdXBzIjpbImF1dGhvcml6YXRpb24uazhzLmlvIl0sInJlc291cmNlcyI6WyJzdWJqZWN0YWNjZXNzcmV2aWV3cyJdLCJ2ZXJicyI6WyJjcmVhdGUiXX0seyJhcGlHcm91cHMiOlsiIl0sInJlc291cmNlcyI6WyJub2RlcyJdLCJ2ZXJicyI6WyJnZXQiLCJsaXN0Iiwid2F0Y2giLCJ1cGRhdGUiLCJwYXRjaCJdfSx7ImFwaUdyb3VwcyI6WyJ0b3BvbHZtLmlvIl0sInJlc291cmNlcyI6WyJsb2dpY2Fsdm9sdW1lcyIsImxvZ2ljYWx2b2x1bWVzL3N0YXR1cyJdLCJ2ZXJicyI6WyJnZXQiLCJsaXN0Iiwid2F0Y2giLCJjcmVhdGUiLCJ1cGRhdGUiLCJkZWxldGUiLCJwYXRjaCJdfSx7ImFwaUdyb3VwcyI6WyJzdG9yYWdlLms4cy5pbyJdLCJyZXNvdXJjZXMiOlsiY3NpZHJpdmVycyJdLCJ2ZXJicyI6WyJnZXQiLCJsaXN0Iiwid2F0Y2giXX1dLCJzZXJ2aWNlQWNjb3VudE5hbWUiOiJ2Zy1tYW5hZ2VyIn1dLCJkZXBsb3ltZW50cyI6W3sibGFiZWwiOnsiYXBwLmt1YmVybmV0ZXMuaW8vbmFtZSI6Imx2bXMtb3BlcmF0b3IifSwibmFtZSI6Imx2bXMtb3BlcmF0b3IiLCJzcGVjIjp7InJlcGxpY2FzIjoxLCJzZWxlY3RvciI6eyJtYXRjaExhYmVscyI6eyJhcHAua3ViZXJuZXRlcy5pby9uYW1lIjoibHZtcy1vcGVyYXRvciJ9fSwic3RyYXRlZ3kiOnsidHlwZSI6IlJlY3JlYXRlIn0sInRlbXBsYXRlIjp7Im1ldGFkYXRhIjp7ImFubm90YXRpb25zIjp7InRhcmdldC53b3JrbG9hZC5vcGVuc2hpZnQuaW8vbWFuYWdlbWVudCI6IntcImVmZmVjdFwiOiBcIlByZWZlcnJlZER1cmluZ1NjaGVkdWxpbmdcIn0ifSwibGFiZWxzIjp7ImFwcC5rdWJlcm5ldGVzLmlvL2NvbXBvbmVudCI6Imx2bXMtb3BlcmF0b3IiLCJhcHAua3ViZXJuZXRlcy5pby9uYW1lIjoibHZtcy1vcGVyYXRvciIsImFwcC5rdWJlcm5ldGVzLmlvL3BhcnQtb2YiOiJsdm1zLXByb3Zpc2lvbmVyIn19LCJzcGVjIjp7ImNvbnRhaW5lcnMiOlt7ImFyZ3MiOlsiLS1oZWFsdGgtcHJvYmUtYmluZC1hZGRyZXNzPTo4MDgxIiwiLS1sZWFkZXItZWxlY3Q9ZmFsc2UiXSwiY29tbWFuZCI6WyIvbHZtcyIsIm9wZXJhdG9yIl0sImVudiI6W3sibmFtZSI6IkdPR0MiLCJ2YWx1ZSI6IjEyMCJ9LHsibmFtZSI6IkdPTUVNTElNSVQiLCJ2YWx1ZSI6IjUwTWlCIn0seyJuYW1lIjoiR09NQVhQUk9DUyIsInZhbHVlIjoiMiJ9LHsibmFtZSI6Ik5BTUVTUEFDRSIsInZhbHVlRnJvbSI6eyJmaWVsZFJlZiI6eyJmaWVsZFBhdGgiOiJtZXRhZGF0YS5uYW1lc3BhY2UifX19LHsibmFtZSI6Ik5BTUUiLCJ2YWx1ZUZyb20iOnsiZmllbGRSZWYiOnsiZmllbGRQYXRoIjoibWV0YWRhdGEubmFtZSJ9fX1dLCJpbWFnZSI6InF1YXkuaW8vbHZtc19kZXYvbHZtcy1vcGVyYXRvcjpsYXRlc3QiLCJsaXZlbmVzc1Byb2JlIjp7ImZhaWx1cmVUaHJlc2hvbGQiOjMsImh0dHBHZXQiOnsicGF0aCI6Ii9oZWFsdGh6IiwicG9ydCI6ODA4MX0sImluaXRpYWxEZWxheVNlY29uZHMiOjEsInBlcmlvZFNlY29uZHMiOjMwLCJ0aW1lb3V0U2Vjb25kcyI6MX0sIm5hbWUiOiJtYW5hZ2VyIiwicG9ydHMiOlt7ImNvbnRhaW5lclBvcnQiOjk0NDMsIm5hbWUiOiJ3ZWJob29rLXNlcnZlciIsInByb3RvY29sIjoiVENQIn1dLCJyZWFkaW5lc3NQcm9iZSI6eyJmYWlsdXJlVGhyZXNob2xkIjozLCJodHRwR2V0Ijp7InBhdGgiOiIvcmVhZHl6IiwicG9ydCI6ODA4MX0sImluaXRpYWxEZWxheVNlY29uZHMiOjEsInBlcmlvZFNlY29uZHMiOjYwLCJ0aW1lb3V0U2Vjb25kcyI6MX0sInJlc291cmNlcyI6eyJyZXF1ZXN0cyI6eyJjcHUiOiI1bSIsIm1lbW9yeSI6IjUwTWkifX0sInNlY3VyaXR5Q29udGV4dCI6eyJhbGxvd1ByaXZpbGVnZUVzY2FsYXRpb24iOmZhbHNlLCJjYXBhYmlsaXRpZXMiOnsiZHJvcCI6WyJORVRfUkFXIl19fSwidGVybWluYXRpb25NZXNzYWdlUG9saWN5IjoiRmFsbGJhY2tUb0xvZ3NPbkVycm9yIiwidm9sdW1lTW91bnRzIjpbeyJtb3VudFBhdGgiOiIvdG1wL2s4cy13ZWJob29rLXNlcnZlci9zZXJ2aW5nLWNlcnRzIiwibmFtZSI6ImNlcnQiLCJyZWFkT25seSI6dHJ1ZX0seyJtb3VudFBhdGgiOiIvdG1wL2s4cy1tZXRyaWNzLXNlcnZlci9zZXJ2aW5nLWNlcnRzIiwibmFtZSI6Im1ldHJpY3MtY2VydCIsInJlYWRPbmx5Ijp0cnVlfSx7Im1vdW50UGF0aCI6Ii9ydW4vdG9wb2x2bSIsIm5hbWUiOiJzb2NrZXQtZGlyIn1dfV0sInByaW9yaXR5Q2xhc3NOYW1lIjoib3BlbnNoaWZ0LXVzZXItY3JpdGljYWwiLCJzZWN1cml0eUNvbnRleHQiOnsicnVuQXNOb25Sb290Ijp0cnVlfSwic2VydmljZUFjY291bnROYW1lIjoibHZtcy1vcGVyYXRvciIsInRlcm1pbmF0aW9uR3JhY2VQZXJpb2RTZWNvbmRzIjoxMCwidm9sdW1lcyI6W3sibmFtZSI6ImNlcnQiLCJzZWNyZXQiOnsiZGVmYXVsdE1vZGUiOjQyMCwic2VjcmV0TmFtZSI6Imx2bXMtb3BlcmF0b3Itd2ViaG9vay1zZXJ2ZXItY2VydCJ9fSx7Im5hbWUiOiJtZXRyaWNzLWNlcnQiLCJzZWNyZXQiOnsiZGVmYXVsdE1vZGUiOjQyMCwic2VjcmV0TmFtZSI6Imx2bXMtb3BlcmF0b3ItbWV0cmljcy1jZXJ0In19LHsiZW1wdHlEaXIiOnt9LCJuYW1lIjoic29ja2V0LWRpciJ9XX19fX1dLCJwZXJtaXNzaW9ucyI6W3sicnVsZXMiOlt7ImFwaUdyb3VwcyI6WyIiXSwicmVzb3VyY2VzIjpbImNvbmZpZ21hcHMiXSwidmVyYnMiOlsiZ2V0IiwibGlzdCIsIndhdGNoIiwiY3JlYXRlIiwidXBkYXRlIiwicGF0Y2giLCJkZWxldGUiXX0seyJhcGlHcm91cHMiOlsiY29vcmRpbmF0aW9uLms4cy5pbyJdLCJyZXNvdXJjZXMiOlsibGVhc2VzIl0sInZlcmJzIjpbImdldCIsImxpc3QiLCJ3YXRjaCIsImNyZWF0ZSIsInVwZGF0ZSIsInBhdGNoIiwiZGVsZXRlIl19LHsiYXBpR3JvdXBzIjpbIiJdLCJyZXNvdXJjZXMiOlsiZXZlbnRzIl0sInZlcmJzIjpbImNyZWF0ZSIsInBhdGNoIl19XSwic2VydmljZUFjY291bnROYW1lIjoibHZtcy1vcGVyYXRvciJ9LHsicnVsZXMiOlt7ImFwaUdyb3VwcyI6WyJsdm0udG9wb2x2bS5pbyIsImFwcHMiXSwicmVzb3VyY2VzIjpbImx2bXZvbHVtZWdyb3VwcyIsImRhZW1vbnNldHMiXSwidmVyYnMiOlsiY3JlYXRlIiwiZGVsZXRlIiwiZ2V0IiwibGlzdCIsInBhdGNoIiwidXBkYXRlIiwid2F0Y2giXX0seyJhcGlHcm91cHMiOlsibHZtLnRvcG9sdm0uaW8iXSwicmVzb3VyY2VzIjpbImx2bXZvbHVtZWdyb3Vwcy9maW5hbGl6ZXJzIl0sInZlcmJzIjpbInVwZGF0ZSJdfSx7ImFwaUdyb3VwcyI6WyJsdm0udG9wb2x2bS5pbyJdLCJyZXNvdXJjZXMiOlsibHZtdm9sdW1lZ3JvdXBzL3N0YXR1cyJdLCJ2ZXJicyI6WyJnZXQiLCJwYXRjaCIsInVwZGF0ZSJdfSx7ImFwaUdyb3VwcyI6WyJsdm0udG9wb2x2bS5pbyJdLCJyZXNvdXJjZXMiOlsibHZtdm9sdW1lZ3JvdXBub2Rlc3RhdHVzZXMiXSwidmVyYnMiOlsiY3JlYXRlIiwiZGVsZXRlIiwiZ2V0IiwibGlzdCIsInBhdGNoIiwidXBkYXRlIiwid2F0Y2giXX0seyJhcGlHcm91cHMiOlsibHZtLnRvcG9sdm0uaW8iXSwicmVzb3VyY2VzIjpbImx2bXZvbHVtZWdyb3Vwbm9kZXN0YXR1c2VzL2ZpbmFsaXplcnMiXSwidmVyYnMiOlsidXBkYXRlIl19LHsiYXBpR3JvdXBzIjpbImx2bS50b3BvbHZtLmlvIl0sInJlc291cmNlcyI6WyJsdm12b2x1bWVncm91cG5vZGVzdGF0dXNlcy9zdGF0dXMiXSwidmVyYnMiOlsiZ2V0IiwicGF0Y2giLCJ1cGRhdGUiXX0seyJhcGlHcm91cHMiOlsiIl0sInJlc291cmNlcyI6WyJldmVudHMiXSwidmVyYnMiOlsiY3JlYXRlIiwicGF0Y2giLCJ1cGRhdGUiXX1dLCJzZXJ2aWNlQWNjb3VudE5hbWUiOiJ2Zy1tYW5hZ2VyIn1dfSwic3RyYXRlZ3kiOiJkZXBsb3ltZW50In0sImluc3RhbGxNb2RlcyI6W3sic3VwcG9ydGVkIjp0cnVlLCJ0eXBlIjoiT3duTmFtZXNwYWNlIn0seyJzdXBwb3J0ZWQiOnRydWUsInR5cGUiOiJTaW5nbGVOYW1lc3BhY2UifSx7InN1cHBvcnRlZCI6ZmFsc2UsInR5cGUiOiJNdWx0aU5hbWVzcGFjZSJ9LHsic3VwcG9ydGVkIjpmYWxzZSwidHlwZSI6IkFsbE5hbWVzcGFjZXMifV0sImtleXdvcmRzIjpbImxvY2FsIHN0b3JhZ2UiLCJvcGVyYXRvciIsIkxWTSJdLCJsaW5rcyI6W3sibmFtZSI6IlNvdXJjZSBSZXBvc2l0b3J5IiwidXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL29wZW5zaGlmdC9sdm0tb3BlcmF0b3IifV0sIm1haW50YWluZXJzIjpbeyJlbWFpbCI6Im9jcy1zdXBwb3J0QHJlZGhhdC5jb20iLCJuYW1lIjoiUmVkIEhhdCBTdXBwb3J0In1dLCJtYXR1cml0eSI6ImFscGhhIiwicHJvdmlkZXIiOnsibmFtZSI6IlJlZCBIYXQifSwidmVyc2lvbiI6IjAuMC4xIiwid2ViaG9va2RlZmluaXRpb25zIjpbeyJhZG1pc3Npb25SZXZpZXdWZXJzaW9ucyI6WyJ2MSJdLCJjb250YWluZXJQb3J0Ijo0NDMsImRlcGxveW1lbnROYW1lIjoibHZtcy1vcGVyYXRvciIsImZhaWx1cmVQb2xpY3kiOiJGYWlsIiwiZ2VuZXJhdGVOYW1lIjoidmx2bWNsdXN0ZXIua2IuaW8iLCJydWxlcyI6W3siYXBpR3JvdXBzIjpbImx2bS50b3BvbHZtLmlvIl0sImFwaVZlcnNpb25zIjpbInYxYWxwaGExIl0sIm9wZXJhdGlvbnMiOlsiQ1JFQVRFIiwiVVBEQVRFIl0sInJlc291cmNlcyI6WyJsdm1jbHVzdGVycyJdfV0sInNpZGVFZmZlY3RzIjoiTm9uZSIsInRhcmdldFBvcnQiOjk0NDMsInR5cGUiOiJWYWxpZGF0aW5nQWRtaXNzaW9uV2ViaG9vayIsIndlYmhvb2tQYXRoIjoiL3ZhbGlkYXRlLWx2bS10b3BvbHZtLWlvLXYxYWxwaGExLWx2bWNsdXN0ZXIifV19fQ== + data: eyJhcGlWZXJzaW9uIjoib3BlcmF0b3JzLmNvcmVvcy5jb20vdjFhbHBoYTEiLCJraW5kIjoiQ2x1c3RlclNlcnZpY2VWZXJzaW9uIiwibWV0YWRhdGEiOnsiYW5ub3RhdGlvbnMiOnsiYWxtLWV4YW1wbGVzIjoiW1xuICB7XG4gICAgXCJhcGlWZXJzaW9uXCI6IFwibHZtLnRvcG9sdm0uaW8vdjFhbHBoYTFcIixcbiAgICBcImtpbmRcIjogXCJMVk1DbHVzdGVyXCIsXG4gICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICBcIm5hbWVcIjogXCJteS1sdm1jbHVzdGVyXCJcbiAgICB9LFxuICAgIFwic3BlY1wiOiB7XG4gICAgICBcInN0b3JhZ2VcIjoge1xuICAgICAgICBcImRldmljZUNsYXNzZXNcIjogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJmc3R5cGVcIjogXCJ4ZnNcIixcbiAgICAgICAgICAgIFwibmFtZVwiOiBcInZnMVwiLFxuICAgICAgICAgICAgXCJ0aGluUG9vbENvbmZpZ1wiOiB7XG4gICAgICAgICAgICAgIFwibmFtZVwiOiBcInRoaW4tcG9vbC0xXCIsXG4gICAgICAgICAgICAgIFwib3ZlcnByb3Zpc2lvblJhdGlvXCI6IDEwLFxuICAgICAgICAgICAgICBcInNpemVQZXJjZW50XCI6IDkwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgfVxuICB9XG5dIiwiY2FwYWJpbGl0aWVzIjoiU2VhbWxlc3MgVXBncmFkZXMiLCJjYXRlZ29yaWVzIjoiU3RvcmFnZSIsImNvbnRhaW5lckltYWdlIjoicXVheS5pby9sdm1zX2Rldi9sdm1zLW9wZXJhdG9yOmxhdGVzdCIsImRlc2NyaXB0aW9uIjoiTG9naWNhbCB2b2x1bWUgbWFuYWdlciBzdG9yYWdlIHByb3ZpZGVzIGR5bmFtaWNhbGx5IHByb3Zpc2lvbmVkIGxvY2FsIHN0b3JhZ2UgZm9yIGNvbnRhaW5lciB3b3JrbG9hZHMiLCJmZWF0dXJlcy5vcGVyYXRvcnMub3BlbnNoaWZ0LmlvL2NuZiI6ImZhbHNlIiwiZmVhdHVyZXMub3BlcmF0b3JzLm9wZW5zaGlmdC5pby9jbmkiOiJmYWxzZSIsImZlYXR1cmVzLm9wZXJhdG9ycy5vcGVuc2hpZnQuaW8vY3NpIjoidHJ1ZSIsImZlYXR1cmVzLm9wZXJhdG9ycy5vcGVuc2hpZnQuaW8vZGlzY29ubmVjdGVkIjoidHJ1ZSIsImZlYXR1cmVzLm9wZXJhdG9ycy5vcGVuc2hpZnQuaW8vZmlwcy1jb21wbGlhbnQiOiJ0cnVlIiwiZmVhdHVyZXMub3BlcmF0b3JzLm9wZW5zaGlmdC5pby9wcm94eS1hd2FyZSI6ImZhbHNlIiwiZmVhdHVyZXMub3BlcmF0b3JzLm9wZW5zaGlmdC5pby90bHMtcHJvZmlsZXMiOiJmYWxzZSIsImZlYXR1cmVzLm9wZXJhdG9ycy5vcGVuc2hpZnQuaW8vdG9rZW4tYXV0aC1hd3MiOiJmYWxzZSIsImZlYXR1cmVzLm9wZXJhdG9ycy5vcGVuc2hpZnQuaW8vdG9rZW4tYXV0aC1henVyZSI6ImZhbHNlIiwiZmVhdHVyZXMub3BlcmF0b3JzLm9wZW5zaGlmdC5pby90b2tlbi1hdXRoLWdjcCI6ImZhbHNlIiwib2xtLnNraXBSYW5nZSI6IiIsIm9wZXJhdG9yZnJhbWV3b3JrLmlvL2NsdXN0ZXItbW9uaXRvcmluZyI6InRydWUiLCJvcGVyYXRvcmZyYW1ld29yay5pby9pbml0aWFsaXphdGlvbi1yZXNvdXJjZSI6IntcbiAgICBcImFwaVZlcnNpb25cIjogXCJsdm0udG9wb2x2bS5pby92MWFscGhhMVwiLFxuICAgIFwia2luZFwiOiBcIkxWTUNsdXN0ZXJcIixcbiAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgIFwibmFtZVwiOiBcInRlc3QtbHZtY2x1c3RlclwiXG4gICAgfSxcbiAgICBcInNwZWNcIjoge1xuICAgICAgXCJzdG9yYWdlXCI6IHtcbiAgICAgICAgXCJkZXZpY2VDbGFzc2VzXCI6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcIm5hbWVcIjogXCJ2ZzFcIixcbiAgICAgICAgICAgIFwidGhpblBvb2xDb25maWdcIjoge1xuICAgICAgICAgICAgICBcIm5hbWVcIjogXCJ0aGluLXBvb2wtMVwiLFxuICAgICAgICAgICAgICBcIm92ZXJwcm92aXNpb25SYXRpb1wiOiAxMCxcbiAgICAgICAgICAgICAgXCJzaXplUGVyY2VudFwiOiA5MFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIH1cbiAgfSIsIm9wZXJhdG9yZnJhbWV3b3JrLmlvL3N1Z2dlc3RlZC1uYW1lc3BhY2UiOiJvcGVuc2hpZnQtbHZtLXN0b3JhZ2UiLCJvcGVyYXRvcmZyYW1ld29yay5pby9zdWdnZXN0ZWQtbmFtZXNwYWNlLXRlbXBsYXRlIjoie1xuICBcImFwaVZlcnNpb25cIjogXCJ2MVwiLFxuICBcImtpbmRcIjogXCJOYW1lc3BhY2VcIixcbiAgXCJtZXRhZGF0YVwiOiB7XG4gICAgXCJuYW1lXCI6IFwib3BlbnNoaWZ0LWx2bS1zdG9yYWdlXCIsXG4gICAgXCJhbm5vdGF0aW9uc1wiOiB7XG4gICAgICBcIndvcmtsb2FkLm9wZW5zaGlmdC5pby9hbGxvd2VkXCI6IFwibWFuYWdlbWVudFwiXG4gICAgfVxuICB9XG59Iiwib3BlcmF0b3JzLm9wZW5zaGlmdC5pby9tdXN0LWdhdGhlci1pbWFnZSI6InF1YXkuaW8vbHZtc19kZXYvbHZtcy1tdXN0LWdhdGhlcjpsYXRlc3QiLCJvcGVyYXRvcnMub3BlbnNoaWZ0LmlvL3ZhbGlkLXN1YnNjcmlwdGlvbiI6IltcIk9wZW5TaGlmdCBLdWJlcm5ldGVzIEVuZ2luZVwiLCBcIk9wZW5TaGlmdCBDb250YWluZXIgUGxhdGZvcm1cIiwgXCJPcGVuU2hpZnQgUGxhdGZvcm0gUGx1c1wiXSIsIm9wZXJhdG9ycy5vcGVyYXRvcmZyYW1ld29yay5pby9idWlsZGVyIjoib3BlcmF0b3Itc2RrLXYxLjM5LjIiLCJvcGVyYXRvcnMub3BlcmF0b3JmcmFtZXdvcmsuaW8vaW50ZXJuYWwtb2JqZWN0cyI6IltcImxvZ2ljYWx2b2x1bWVzLnRvcG9sdm0uaW9cIiwgXCJsdm12b2x1bWVncm91cHMubHZtLnRvcG9sdm0uaW9cIiwgXCJsdm12b2x1bWVncm91cG5vZGVzdGF0dXNlcy5sdm0udG9wb2x2bS5pb1wiXSIsIm9wZXJhdG9ycy5vcGVyYXRvcmZyYW1ld29yay5pby9wcm9qZWN0X2xheW91dCI6ImdvLmt1YmVidWlsZGVyLmlvL3Y0IiwicmVwb3NpdG9yeSI6Imh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuc2hpZnQvbHZtLW9wZXJhdG9yIn0sImxhYmVscyI6eyJvcGVyYXRvcmZyYW1ld29yay5pby9hcmNoLmFtZDY0Ijoic3VwcG9ydGVkIiwib3BlcmF0b3JmcmFtZXdvcmsuaW8vYXJjaC5hcm02NCI6InN1cHBvcnRlZCIsIm9wZXJhdG9yZnJhbWV3b3JrLmlvL2FyY2gucHBjNjRsZSI6InN1cHBvcnRlZCIsIm9wZXJhdG9yZnJhbWV3b3JrLmlvL2FyY2guczM5MHgiOiJzdXBwb3J0ZWQifSwibmFtZSI6Imx2bXMtb3BlcmF0b3IudjAuMC4xIiwibmFtZXNwYWNlIjoicGxhY2Vob2xkZXIifSwic3BlYyI6eyJhcGlzZXJ2aWNlZGVmaW5pdGlvbnMiOnt9LCJjdXN0b21yZXNvdXJjZWRlZmluaXRpb25zIjp7Im93bmVkIjpbeyJraW5kIjoiTG9naWNhbFZvbHVtZSIsIm5hbWUiOiJsb2dpY2Fsdm9sdW1lcy50b3BvbHZtLmlvIiwidmVyc2lvbiI6InYxIn0seyJkZXNjcmlwdGlvbiI6IkxWTUNsdXN0ZXIgaXMgdGhlIFNjaGVtYSBmb3IgdGhlIGx2bWNsdXN0ZXJzIEFQSSIsImRpc3BsYXlOYW1lIjoiTFZNQ2x1c3RlciIsImtpbmQiOiJMVk1DbHVzdGVyIiwibmFtZSI6Imx2bWNsdXN0ZXJzLmx2bS50b3BvbHZtLmlvIiwidmVyc2lvbiI6InYxYWxwaGExIn0seyJraW5kIjoiTFZNVm9sdW1lR3JvdXBOb2RlU3RhdHVzIiwibmFtZSI6Imx2bXZvbHVtZWdyb3Vwbm9kZXN0YXR1c2VzLmx2bS50b3BvbHZtLmlvIiwidmVyc2lvbiI6InYxYWxwaGExIn0seyJraW5kIjoiTFZNVm9sdW1lR3JvdXAiLCJuYW1lIjoibHZtdm9sdW1lZ3JvdXBzLmx2bS50b3BvbHZtLmlvIiwidmVyc2lvbiI6InYxYWxwaGExIn1dfSwiZGVzY3JpcHRpb24iOiJMb2dpY2FsIHZvbHVtZSBtYW5hZ2VyIHN0b3JhZ2UgcHJvdmlkZXMgZHluYW1pY2FsbHkgcHJvdmlzaW9uZWQgbG9jYWwgc3RvcmFnZS4iLCJkaXNwbGF5TmFtZSI6IkxWTSBTdG9yYWdlIiwiaWNvbiI6W3siYmFzZTY0ZGF0YSI6IlBITjJaeUJwWkQwaVRHRjVaWEpmTVNJZ1pHRjBZUzF1WVcxbFBTSk1ZWGxsY2lBeElpQjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaUlIWnBaWGRDYjNnOUlqQWdNQ0F4T1RJZ01UUTFJajQ4WkdWbWN6NDhjM1I1YkdVK0xtTnNjeTB4ZTJacGJHdzZJMlV3TUR0OVBDOXpkSGxzWlQ0OEwyUmxabk0rUEhScGRHeGxQbEpsWkVoaGRDMU1iMmR2TFVoaGRDMURiMnh2Y2p3dmRHbDBiR1UrUEhCaGRHZ2daRDBpVFRFMU55NDNOeXcyTWk0Mk1XRXhOQ3d4TkN3d0xEQXNNU3d1TXpFc015NDBNbU13TERFMExqZzRMVEU0TGpFc01UY3VORFl0TXpBdU5qRXNNVGN1TkRaRE56Z3VPRE1zT0RNdU5Ea3NOREl1TlRNc05UTXVNallzTkRJdU5UTXNORFJoTmk0ME15dzJMalF6TERBc01Dd3hMQzR5TWkweExqazBiQzB6TGpZMkxEa3VNRFpoTVRndU5EVXNNVGd1TkRVc01Dd3dMREF0TVM0MU1TdzNMak16WXpBc01UZ3VNVEVzTkRFc05EVXVORGdzT0RjdU56UXNORFV1TkRnc01qQXVOamtzTUN3ek5pNDBNeTAzTGpjMkxETTJMalF6TFRJeExqYzNMREF0TVM0d09Dd3dMVEV1T1RRdE1TNDNNeTB4TUM0eE0xb2lMejQ4Y0dGMGFDQmpiR0Z6Y3owaVkyeHpMVEVpSUdROUlrMHhNamN1TkRjc09ETXVORGxqTVRJdU5URXNNQ3d6TUM0Mk1TMHlMalU0TERNd0xqWXhMVEUzTGpRMllURTBMREUwTERBc01Dd3dMUzR6TVMwekxqUXliQzAzTGpRMUxUTXlMak0yWXkweExqY3lMVGN1TVRJdE15NHlNeTB4TUM0ek5TMHhOUzQzTXkweE5pNDJRekV5TkM0NE9TdzRMalk1TERFd015NDNOaTQxTERrM0xqVXhMalVzT1RFdU5qa3VOU3c1TUN3NExEZ3pMakEyTERoakxUWXVOamdzTUMweE1TNDJOQzAxTGpZdE1UY3VPRGt0TlM0MkxUWXNNQzA1TGpreExEUXVNRGt0TVRJdU9UTXNNVEl1TlN3d0xEQXRPQzQwTVN3eU15NDNNaTA1TGpRNUxESTNMakUyUVRZdU5ETXNOaTQwTXl3d0xEQXNNQ3cwTWk0MU15dzBOR013TERrdU1qSXNNell1TXl3ek9TNDBOU3c0TkM0NU5Dd3pPUzQwTlUweE5qQXNOekl1TURkak1TNDNNeXc0TGpFNUxERXVOek1zT1M0d05Td3hMamN6TERFd0xqRXpMREFzTVRRdE1UVXVOelFzTWpFdU56Y3RNell1TkRNc01qRXVOemRETnpndU5UUXNNVEEwTERNM0xqVTRMRGMyTGpZc016Y3VOVGdzTlRndU5EbGhNVGd1TkRVc01UZ3VORFVzTUN3d0xERXNNUzQxTVMwM0xqTXpRekl5TGpJM0xEVXlMQzQxTERVMUxDNDFMRGMwTGpJeVl6QXNNekV1TkRnc056UXVOVGtzTnpBdU1qZ3NNVE16TGpZMUxEY3dMakk0TERRMUxqSTRMREFzTlRZdU55MHlNQzQwT0N3MU5pNDNMVE0yTGpZMUxEQXRNVEl1TnpJdE1URXRNamN1TVRZdE16QXVPRE10TXpVdU56Z2lMejQ4TDNOMlp6ND0iLCJtZWRpYXR5cGUiOiJpbWFnZS9zdmcreG1sIn1dLCJpbnN0YWxsIjp7InNwZWMiOnsiY2x1c3RlclBlcm1pc3Npb25zIjpbeyJydWxlcyI6W3siYXBpR3JvdXBzIjpbIiJdLCJyZXNvdXJjZXMiOlsiY29uZmlnbWFwcyIsInBlcnNpc3RlbnR2b2x1bWVzIl0sInZlcmJzIjpbImNyZWF0ZSIsImRlbGV0ZSIsImdldCIsImxpc3QiLCJwYXRjaCIsInVwZGF0ZSIsIndhdGNoIl19LHsiYXBpR3JvdXBzIjpbIiJdLCJyZXNvdXJjZXMiOlsiZXZlbnRzIl0sInZlcmJzIjpbImNyZWF0ZSIsImxpc3QiLCJwYXRjaCIsInVwZGF0ZSIsIndhdGNoIl19LHsiYXBpR3JvdXBzIjpbIiJdLCJyZXNvdXJjZXMiOlsibm9kZSJdLCJ2ZXJicyI6WyJnZXQiLCJsaXN0Iiwid2F0Y2giXX0seyJhcGlHcm91cHMiOlsiIl0sInJlc291cmNlcyI6WyJub2RlcyJdLCJ2ZXJicyI6WyJnZXQiLCJsaXN0IiwicGF0Y2giLCJ1cGRhdGUiLCJ3YXRjaCJdfSx7ImFwaUdyb3VwcyI6WyIiXSwicmVzb3VyY2VzIjpbInBlcnNpc3RlbnR2b2x1bWVjbGFpbXMiXSwidmVyYnMiOlsiZGVsZXRlIiwiZ2V0IiwibGlzdCIsInVwZGF0ZSIsIndhdGNoIl19LHsiYXBpR3JvdXBzIjpbIiJdLCJyZXNvdXJjZXMiOlsicGVyc2lzdGVudHZvbHVtZWNsYWltcy9zdGF0dXMiXSwidmVyYnMiOlsicGF0Y2giXX0seyJhcGlHcm91cHMiOlsiIl0sInJlc291cmNlcyI6WyJwb2RzIl0sInZlcmJzIjpbImRlbGV0ZSIsImdldCIsImxpc3QiLCJ3YXRjaCJdfSx7ImFwaUdyb3VwcyI6WyJhcGlleHRlbnNpb25zLms4cy5pbyJdLCJyZXNvdXJjZXMiOlsiY3VzdG9tcmVzb3VyY2VkZWZpbml0aW9ucyJdLCJ2ZXJicyI6WyJnZXQiLCJsaXN0Iiwid2F0Y2giXX0seyJhcGlHcm91cHMiOlsiYXBwcyJdLCJyZXNvdXJjZXMiOlsiZGFlbW9uc2V0cyIsImRlcGxveW1lbnRzIl0sInZlcmJzIjpbImNyZWF0ZSIsImRlbGV0ZSIsImdldCIsImxpc3QiLCJwYXRjaCIsInVwZGF0ZSIsIndhdGNoIl19LHsiYXBpR3JvdXBzIjpbImFwcHMiXSwicmVzb3VyY2VzIjpbInJlcGxpY2FzZXRzIl0sInZlcmJzIjpbImdldCJdfSx7ImFwaUdyb3VwcyI6WyJjb25maWcub3BlbnNoaWZ0LmlvIl0sInJlc291cmNlcyI6WyJhcGlzZXJ2ZXJzIl0sInZlcmJzIjpbImdldCIsImxpc3QiLCJ3YXRjaCJdfSx7ImFwaUdyb3VwcyI6WyJjb25maWcub3BlbnNoaWZ0LmlvIl0sInJlc291cmNlcyI6WyJpbmZyYXN0cnVjdHVyZXMiXSwidmVyYnMiOlsiZ2V0Il19LHsiYXBpR3JvdXBzIjpbImNvb3JkaW5hdGlvbi5rOHMuaW8iXSwicmVzb3VyY2VzIjpbImxlYXNlcyJdLCJ2ZXJicyI6WyJjcmVhdGUiLCJkZWxldGUiLCJnZXQiLCJsaXN0IiwicGF0Y2giLCJ1cGRhdGUiLCJ3YXRjaCJdfSx7ImFwaUdyb3VwcyI6WyJsdm0udG9wb2x2bS5pbyJdLCJyZXNvdXJjZXMiOlsibHZtY2x1c3RlcnMiLCJsdm12b2x1bWVncm91cG5vZGVzdGF0dXNlcyIsImx2bXZvbHVtZWdyb3VwcyJdLCJ2ZXJicyI6WyJjcmVhdGUiLCJkZWxldGUiLCJnZXQiLCJsaXN0IiwicGF0Y2giLCJ1cGRhdGUiLCJ3YXRjaCJdfSx7ImFwaUdyb3VwcyI6WyJsdm0udG9wb2x2bS5pbyJdLCJyZXNvdXJjZXMiOlsibHZtY2x1c3RlcnMvZmluYWxpemVycyIsImx2bXZvbHVtZWdyb3Vwbm9kZXN0YXR1c2VzL2ZpbmFsaXplcnMiLCJsdm12b2x1bWVncm91cHMvZmluYWxpemVycyJdLCJ2ZXJicyI6WyJ1cGRhdGUiXX0seyJhcGlHcm91cHMiOlsibHZtLnRvcG9sdm0uaW8iXSwicmVzb3VyY2VzIjpbImx2bWNsdXN0ZXJzL3N0YXR1cyIsImx2bXZvbHVtZWdyb3Vwbm9kZXN0YXR1c2VzL3N0YXR1cyIsImx2bXZvbHVtZWdyb3Vwcy9zdGF0dXMiXSwidmVyYnMiOlsiZ2V0IiwicGF0Y2giLCJ1cGRhdGUiXX0seyJhcGlHcm91cHMiOlsibW9uaXRvcmluZy5jb3Jlb3MuY29tIl0sInJlc291cmNlcyI6WyJzZXJ2aWNlbW9uaXRvcnMiXSwidmVyYnMiOlsiY3JlYXRlIiwiZGVsZXRlIiwiZ2V0IiwibGlzdCIsInBhdGNoIiwidXBkYXRlIiwid2F0Y2giXX0seyJhcGlHcm91cHMiOlsic2VjdXJpdHkub3BlbnNoaWZ0LmlvIl0sInJlc291cmNlcyI6WyJzZWN1cml0eWNvbnRleHRjb25zdHJhaW50cyJdLCJ2ZXJicyI6WyJjcmVhdGUiLCJkZWxldGUiLCJnZXQiLCJsaXN0IiwicGF0Y2giLCJ1cGRhdGUiLCJ3YXRjaCJdfSx7ImFwaUdyb3VwcyI6WyJzbmFwc2hvdC5zdG9yYWdlLms4cy5pbyJdLCJyZXNvdXJjZXMiOlsidm9sdW1lc25hcHNob3RjbGFzc2VzIl0sInZlcmJzIjpbImNyZWF0ZSIsImRlbGV0ZSIsImdldCIsImxpc3QiLCJwYXRjaCIsInVwZGF0ZSIsIndhdGNoIl19LHsiYXBpR3JvdXBzIjpbInNuYXBzaG90LnN0b3JhZ2UuazhzLmlvIl0sInJlc291cmNlcyI6WyJ2b2x1bWVzbmFwc2hvdGNvbnRlbnRzIl0sInZlcmJzIjpbImdldCIsImxpc3QiLCJwYXRjaCIsInVwZGF0ZSIsIndhdGNoIl19LHsiYXBpR3JvdXBzIjpbInNuYXBzaG90LnN0b3JhZ2UuazhzLmlvIl0sInJlc291cmNlcyI6WyJ2b2x1bWVzbmFwc2hvdGNvbnRlbnRzL3N0YXR1cyJdLCJ2ZXJicyI6WyJwYXRjaCIsInVwZGF0ZSJdfSx7ImFwaUdyb3VwcyI6WyJzbmFwc2hvdC5zdG9yYWdlLms4cy5pbyJdLCJyZXNvdXJjZXMiOlsidm9sdW1lc25hcHNob3RzIl0sInZlcmJzIjpbImdldCIsImxpc3QiXX0seyJhcGlHcm91cHMiOlsic3RvcmFnZS5rOHMuaW8iXSwicmVzb3VyY2VzIjpbImNzaWRyaXZlcnMiLCJjc2lzdG9yYWdlY2FwYWNpdGllcyIsInN0b3JhZ2VjbGFzc2VzIl0sInZlcmJzIjpbImNyZWF0ZSIsImRlbGV0ZSIsImdldCIsImxpc3QiLCJwYXRjaCIsInVwZGF0ZSIsIndhdGNoIl19LHsiYXBpR3JvdXBzIjpbInN0b3JhZ2UuazhzLmlvIl0sInJlc291cmNlcyI6WyJjc2lub2RlcyIsInZvbHVtZWF0dGFjaG1lbnRzIl0sInZlcmJzIjpbImdldCIsImxpc3QiLCJ3YXRjaCJdfSx7ImFwaUdyb3VwcyI6WyJ0b3BvbHZtLmlvIl0sInJlc291cmNlcyI6WyJsb2dpY2Fsdm9sdW1lcyIsImxvZ2ljYWx2b2x1bWVzL3N0YXR1cyJdLCJ2ZXJicyI6WyJjcmVhdGUiLCJkZWxldGUiLCJnZXQiLCJsaXN0IiwicGF0Y2giLCJ1cGRhdGUiLCJ3YXRjaCJdfSx7ImFwaUdyb3VwcyI6WyJhdXRoZW50aWNhdGlvbi5rOHMuaW8iXSwicmVzb3VyY2VzIjpbInRva2VucmV2aWV3cyJdLCJ2ZXJicyI6WyJjcmVhdGUiXX0seyJhcGlHcm91cHMiOlsiYXV0aG9yaXphdGlvbi5rOHMuaW8iXSwicmVzb3VyY2VzIjpbInN1YmplY3RhY2Nlc3NyZXZpZXdzIl0sInZlcmJzIjpbImNyZWF0ZSJdfV0sInNlcnZpY2VBY2NvdW50TmFtZSI6Imx2bXMtb3BlcmF0b3IifSx7InJ1bGVzIjpbeyJhcGlHcm91cHMiOlsiYXV0aGVudGljYXRpb24uazhzLmlvIl0sInJlc291cmNlcyI6WyJ0b2tlbnJldmlld3MiXSwidmVyYnMiOlsiY3JlYXRlIl19LHsiYXBpR3JvdXBzIjpbImF1dGhvcml6YXRpb24uazhzLmlvIl0sInJlc291cmNlcyI6WyJzdWJqZWN0YWNjZXNzcmV2aWV3cyJdLCJ2ZXJicyI6WyJjcmVhdGUiXX0seyJhcGlHcm91cHMiOlsiIl0sInJlc291cmNlcyI6WyJub2RlcyJdLCJ2ZXJicyI6WyJnZXQiLCJsaXN0Iiwid2F0Y2giLCJ1cGRhdGUiLCJwYXRjaCJdfSx7ImFwaUdyb3VwcyI6WyJ0b3BvbHZtLmlvIl0sInJlc291cmNlcyI6WyJsb2dpY2Fsdm9sdW1lcyIsImxvZ2ljYWx2b2x1bWVzL3N0YXR1cyJdLCJ2ZXJicyI6WyJnZXQiLCJsaXN0Iiwid2F0Y2giLCJjcmVhdGUiLCJ1cGRhdGUiLCJkZWxldGUiLCJwYXRjaCJdfSx7ImFwaUdyb3VwcyI6WyJzdG9yYWdlLms4cy5pbyJdLCJyZXNvdXJjZXMiOlsiY3NpZHJpdmVycyJdLCJ2ZXJicyI6WyJnZXQiLCJsaXN0Iiwid2F0Y2giXX0seyJhcGlHcm91cHMiOlsiY29uZmlnLm9wZW5zaGlmdC5pbyJdLCJyZXNvdXJjZXMiOlsiYXBpc2VydmVycyJdLCJ2ZXJicyI6WyJnZXQiLCJsaXN0Iiwid2F0Y2giXX1dLCJzZXJ2aWNlQWNjb3VudE5hbWUiOiJ2Zy1tYW5hZ2VyIn1dLCJkZXBsb3ltZW50cyI6W3sibGFiZWwiOnsiYXBwLmt1YmVybmV0ZXMuaW8vbmFtZSI6Imx2bXMtb3BlcmF0b3IifSwibmFtZSI6Imx2bXMtb3BlcmF0b3IiLCJzcGVjIjp7InJlcGxpY2FzIjoxLCJzZWxlY3RvciI6eyJtYXRjaExhYmVscyI6eyJhcHAua3ViZXJuZXRlcy5pby9uYW1lIjoibHZtcy1vcGVyYXRvciJ9fSwic3RyYXRlZ3kiOnsidHlwZSI6IlJlY3JlYXRlIn0sInRlbXBsYXRlIjp7Im1ldGFkYXRhIjp7ImFubm90YXRpb25zIjp7InRhcmdldC53b3JrbG9hZC5vcGVuc2hpZnQuaW8vbWFuYWdlbWVudCI6IntcImVmZmVjdFwiOiBcIlByZWZlcnJlZER1cmluZ1NjaGVkdWxpbmdcIn0ifSwibGFiZWxzIjp7ImFwcC5rdWJlcm5ldGVzLmlvL2NvbXBvbmVudCI6Imx2bXMtb3BlcmF0b3IiLCJhcHAua3ViZXJuZXRlcy5pby9uYW1lIjoibHZtcy1vcGVyYXRvciIsImFwcC5rdWJlcm5ldGVzLmlvL3BhcnQtb2YiOiJsdm1zLXByb3Zpc2lvbmVyIn19LCJzcGVjIjp7ImNvbnRhaW5lcnMiOlt7ImFyZ3MiOlsiLS1oZWFsdGgtcHJvYmUtYmluZC1hZGRyZXNzPTo4MDgxIiwiLS1sZWFkZXItZWxlY3Q9ZmFsc2UiXSwiY29tbWFuZCI6WyIvbHZtcyIsIm9wZXJhdG9yIl0sImVudiI6W3sibmFtZSI6IkdPR0MiLCJ2YWx1ZSI6IjEyMCJ9LHsibmFtZSI6IkdPTUVNTElNSVQiLCJ2YWx1ZSI6IjUwTWlCIn0seyJuYW1lIjoiR09NQVhQUk9DUyIsInZhbHVlIjoiMiJ9LHsibmFtZSI6Ik5BTUVTUEFDRSIsInZhbHVlRnJvbSI6eyJmaWVsZFJlZiI6eyJmaWVsZFBhdGgiOiJtZXRhZGF0YS5uYW1lc3BhY2UifX19LHsibmFtZSI6Ik5BTUUiLCJ2YWx1ZUZyb20iOnsiZmllbGRSZWYiOnsiZmllbGRQYXRoIjoibWV0YWRhdGEubmFtZSJ9fX1dLCJpbWFnZSI6InF1YXkuaW8vbHZtc19kZXYvbHZtcy1vcGVyYXRvcjpsYXRlc3QiLCJsaXZlbmVzc1Byb2JlIjp7ImZhaWx1cmVUaHJlc2hvbGQiOjMsImh0dHBHZXQiOnsicGF0aCI6Ii9oZWFsdGh6IiwicG9ydCI6ODA4MX0sImluaXRpYWxEZWxheVNlY29uZHMiOjEsInBlcmlvZFNlY29uZHMiOjMwLCJ0aW1lb3V0U2Vjb25kcyI6MX0sIm5hbWUiOiJtYW5hZ2VyIiwicG9ydHMiOlt7ImNvbnRhaW5lclBvcnQiOjk0NDMsIm5hbWUiOiJ3ZWJob29rLXNlcnZlciIsInByb3RvY29sIjoiVENQIn1dLCJyZWFkaW5lc3NQcm9iZSI6eyJmYWlsdXJlVGhyZXNob2xkIjozLCJodHRwR2V0Ijp7InBhdGgiOiIvcmVhZHl6IiwicG9ydCI6ODA4MX0sImluaXRpYWxEZWxheVNlY29uZHMiOjEsInBlcmlvZFNlY29uZHMiOjYwLCJ0aW1lb3V0U2Vjb25kcyI6MX0sInJlc291cmNlcyI6eyJyZXF1ZXN0cyI6eyJjcHUiOiI1bSIsIm1lbW9yeSI6IjUwTWkifX0sInNlY3VyaXR5Q29udGV4dCI6eyJhbGxvd1ByaXZpbGVnZUVzY2FsYXRpb24iOmZhbHNlLCJjYXBhYmlsaXRpZXMiOnsiZHJvcCI6WyJORVRfUkFXIl19fSwidGVybWluYXRpb25NZXNzYWdlUG9saWN5IjoiRmFsbGJhY2tUb0xvZ3NPbkVycm9yIiwidm9sdW1lTW91bnRzIjpbeyJtb3VudFBhdGgiOiIvdG1wL2s4cy13ZWJob29rLXNlcnZlci9zZXJ2aW5nLWNlcnRzIiwibmFtZSI6ImNlcnQiLCJyZWFkT25seSI6dHJ1ZX0seyJtb3VudFBhdGgiOiIvdG1wL2s4cy1tZXRyaWNzLXNlcnZlci9zZXJ2aW5nLWNlcnRzIiwibmFtZSI6Im1ldHJpY3MtY2VydCIsInJlYWRPbmx5Ijp0cnVlfSx7Im1vdW50UGF0aCI6Ii9ydW4vdG9wb2x2bSIsIm5hbWUiOiJzb2NrZXQtZGlyIn1dfV0sInByaW9yaXR5Q2xhc3NOYW1lIjoib3BlbnNoaWZ0LXVzZXItY3JpdGljYWwiLCJzZWN1cml0eUNvbnRleHQiOnsicnVuQXNOb25Sb290Ijp0cnVlfSwic2VydmljZUFjY291bnROYW1lIjoibHZtcy1vcGVyYXRvciIsInRlcm1pbmF0aW9uR3JhY2VQZXJpb2RTZWNvbmRzIjoxMCwidm9sdW1lcyI6W3sibmFtZSI6ImNlcnQiLCJzZWNyZXQiOnsiZGVmYXVsdE1vZGUiOjQyMCwic2VjcmV0TmFtZSI6Imx2bXMtb3BlcmF0b3Itd2ViaG9vay1zZXJ2ZXItY2VydCJ9fSx7Im5hbWUiOiJtZXRyaWNzLWNlcnQiLCJzZWNyZXQiOnsiZGVmYXVsdE1vZGUiOjQyMCwic2VjcmV0TmFtZSI6Imx2bXMtb3BlcmF0b3ItbWV0cmljcy1jZXJ0In19LHsiZW1wdHlEaXIiOnt9LCJuYW1lIjoic29ja2V0LWRpciJ9XX19fX1dLCJwZXJtaXNzaW9ucyI6W3sicnVsZXMiOlt7ImFwaUdyb3VwcyI6WyIiXSwicmVzb3VyY2VzIjpbImNvbmZpZ21hcHMiXSwidmVyYnMiOlsiZ2V0IiwibGlzdCIsIndhdGNoIiwiY3JlYXRlIiwidXBkYXRlIiwicGF0Y2giLCJkZWxldGUiXX0seyJhcGlHcm91cHMiOlsiY29vcmRpbmF0aW9uLms4cy5pbyJdLCJyZXNvdXJjZXMiOlsibGVhc2VzIl0sInZlcmJzIjpbImdldCIsImxpc3QiLCJ3YXRjaCIsImNyZWF0ZSIsInVwZGF0ZSIsInBhdGNoIiwiZGVsZXRlIl19LHsiYXBpR3JvdXBzIjpbIiJdLCJyZXNvdXJjZXMiOlsiZXZlbnRzIl0sInZlcmJzIjpbImNyZWF0ZSIsInBhdGNoIl19XSwic2VydmljZUFjY291bnROYW1lIjoibHZtcy1vcGVyYXRvciJ9LHsicnVsZXMiOlt7ImFwaUdyb3VwcyI6WyJsdm0udG9wb2x2bS5pbyIsImFwcHMiXSwicmVzb3VyY2VzIjpbImx2bXZvbHVtZWdyb3VwcyIsImRhZW1vbnNldHMiXSwidmVyYnMiOlsiY3JlYXRlIiwiZGVsZXRlIiwiZ2V0IiwibGlzdCIsInBhdGNoIiwidXBkYXRlIiwid2F0Y2giXX0seyJhcGlHcm91cHMiOlsibHZtLnRvcG9sdm0uaW8iXSwicmVzb3VyY2VzIjpbImx2bXZvbHVtZWdyb3Vwcy9maW5hbGl6ZXJzIl0sInZlcmJzIjpbInVwZGF0ZSJdfSx7ImFwaUdyb3VwcyI6WyJsdm0udG9wb2x2bS5pbyJdLCJyZXNvdXJjZXMiOlsibHZtdm9sdW1lZ3JvdXBzL3N0YXR1cyJdLCJ2ZXJicyI6WyJnZXQiLCJwYXRjaCIsInVwZGF0ZSJdfSx7ImFwaUdyb3VwcyI6WyJsdm0udG9wb2x2bS5pbyJdLCJyZXNvdXJjZXMiOlsibHZtdm9sdW1lZ3JvdXBub2Rlc3RhdHVzZXMiXSwidmVyYnMiOlsiY3JlYXRlIiwiZGVsZXRlIiwiZ2V0IiwibGlzdCIsInBhdGNoIiwidXBkYXRlIiwid2F0Y2giXX0seyJhcGlHcm91cHMiOlsibHZtLnRvcG9sdm0uaW8iXSwicmVzb3VyY2VzIjpbImx2bXZvbHVtZWdyb3Vwbm9kZXN0YXR1c2VzL2ZpbmFsaXplcnMiXSwidmVyYnMiOlsidXBkYXRlIl19LHsiYXBpR3JvdXBzIjpbImx2bS50b3BvbHZtLmlvIl0sInJlc291cmNlcyI6WyJsdm12b2x1bWVncm91cG5vZGVzdGF0dXNlcy9zdGF0dXMiXSwidmVyYnMiOlsiZ2V0IiwicGF0Y2giLCJ1cGRhdGUiXX0seyJhcGlHcm91cHMiOlsiIl0sInJlc291cmNlcyI6WyJldmVudHMiXSwidmVyYnMiOlsiY3JlYXRlIiwicGF0Y2giLCJ1cGRhdGUiXX1dLCJzZXJ2aWNlQWNjb3VudE5hbWUiOiJ2Zy1tYW5hZ2VyIn1dfSwic3RyYXRlZ3kiOiJkZXBsb3ltZW50In0sImluc3RhbGxNb2RlcyI6W3sic3VwcG9ydGVkIjp0cnVlLCJ0eXBlIjoiT3duTmFtZXNwYWNlIn0seyJzdXBwb3J0ZWQiOnRydWUsInR5cGUiOiJTaW5nbGVOYW1lc3BhY2UifSx7InN1cHBvcnRlZCI6ZmFsc2UsInR5cGUiOiJNdWx0aU5hbWVzcGFjZSJ9LHsic3VwcG9ydGVkIjpmYWxzZSwidHlwZSI6IkFsbE5hbWVzcGFjZXMifV0sImtleXdvcmRzIjpbImxvY2FsIHN0b3JhZ2UiLCJvcGVyYXRvciIsIkxWTSJdLCJsaW5rcyI6W3sibmFtZSI6IlNvdXJjZSBSZXBvc2l0b3J5IiwidXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL29wZW5zaGlmdC9sdm0tb3BlcmF0b3IifV0sIm1haW50YWluZXJzIjpbeyJlbWFpbCI6Im9jcy1zdXBwb3J0QHJlZGhhdC5jb20iLCJuYW1lIjoiUmVkIEhhdCBTdXBwb3J0In1dLCJtYXR1cml0eSI6ImFscGhhIiwicHJvdmlkZXIiOnsibmFtZSI6IlJlZCBIYXQifSwidmVyc2lvbiI6IjAuMC4xIiwid2ViaG9va2RlZmluaXRpb25zIjpbeyJhZG1pc3Npb25SZXZpZXdWZXJzaW9ucyI6WyJ2MSJdLCJjb250YWluZXJQb3J0Ijo0NDMsImRlcGxveW1lbnROYW1lIjoibHZtcy1vcGVyYXRvciIsImZhaWx1cmVQb2xpY3kiOiJGYWlsIiwiZ2VuZXJhdGVOYW1lIjoidmx2bWNsdXN0ZXIua2IuaW8iLCJydWxlcyI6W3siYXBpR3JvdXBzIjpbImx2bS50b3BvbHZtLmlvIl0sImFwaVZlcnNpb25zIjpbInYxYWxwaGExIl0sIm9wZXJhdGlvbnMiOlsiQ1JFQVRFIiwiVVBEQVRFIl0sInJlc291cmNlcyI6WyJsdm1jbHVzdGVycyJdfV0sInNpZGVFZmZlY3RzIjoiTm9uZSIsInRhcmdldFBvcnQiOjk0NDMsInR5cGUiOiJWYWxpZGF0aW5nQWRtaXNzaW9uV2ViaG9vayIsIndlYmhvb2tQYXRoIjoiL3ZhbGlkYXRlLWx2bS10b3BvbHZtLWlvLXYxYWxwaGExLWx2bWNsdXN0ZXIifV19fQ== - type: olm.bundle.object value: data: eyJhcGlWZXJzaW9uIjoibW9uaXRvcmluZy5jb3Jlb3MuY29tL3YxIiwia2luZCI6IlByb21ldGhldXNSdWxlIiwibWV0YWRhdGEiOnsibmFtZSI6InByb21ldGhldXMtbHZtby1ydWxlcyJ9LCJzcGVjIjp7Imdyb3VwcyI6W3sibmFtZSI6InZnLWFsZXJ0LnJ1bGVzIiwicnVsZXMiOlt7ImFsZXJ0IjoiVm9sdW1lR3JvdXBVc2FnZUF0VGhyZXNob2xkTmVhckZ1bGwiLCJhbm5vdGF0aW9ucyI6eyJkZXNjcmlwdGlvbiI6IlZvbHVtZUdyb3VwIGlzIG5lYXJpbmcgZnVsbC4gRGF0YSBkZWxldGlvbiBvciBWb2x1bWVHcm91cCBleHBhbnNpb24gaXMgcmVxdWlyZWQuIiwibWVzc2FnZSI6IlZvbHVtZUdyb3VwIHt7ICRsYWJlbHMuZGV2aWNlX2NsYXNzIH19IHV0aWxpemF0aW9uIGhhcyBjcm9zc2VkIDc1ICUgb24gbm9kZSB7eyAkbGFiZWxzLm5vZGUgfX0uIEZyZWUgdXAgc29tZSBzcGFjZSBvciBleHBhbmQgdGhlIFZvbHVtZUdyb3VwLiJ9LCJleHByIjoiKHRvcG9sdm1fdm9sdW1lZ3JvdXBfc2l6ZV9ieXRlcyAtIHRvcG9sdm1fdm9sdW1lZ3JvdXBfYXZhaWxhYmxlX2J5dGVzKS90b3BvbHZtX3ZvbHVtZWdyb3VwX3NpemVfYnl0ZXMgXHUwMDNlIDAuNzUgYW5kICh0b3BvbHZtX3ZvbHVtZWdyb3VwX3NpemVfYnl0ZXMgLSB0b3BvbHZtX3ZvbHVtZWdyb3VwX2F2YWlsYWJsZV9ieXRlcykvdG9wb2x2bV92b2x1bWVncm91cF9zaXplX2J5dGVzIFx1MDAzYz0gMC44NSBhbmQgdG9wb2x2bV90aGlucG9vbF9kYXRhX3BlcmNlbnQgXHUwMDNlIDc1LjAwICBhbmQgdG9wb2x2bV90aGlucG9vbF9kYXRhX3BlcmNlbnQgXHUwMDNjIDg1LjAwXG4iLCJmb3IiOiI1bSIsImxhYmVscyI6eyJzZXZlcml0eSI6Indhcm5pbmcifX0seyJhbGVydCI6IlZvbHVtZUdyb3VwVXNhZ2VBdFRocmVzaG9sZENyaXRpY2FsIiwiYW5ub3RhdGlvbnMiOnsiZGVzY3JpcHRpb24iOiJWb2x1bWVHcm91cCBpcyBjcml0aWNhbGx5IGZ1bGwuIERhdGEgZGVsZXRpb24gb3IgVm9sdW1lR3JvdXAgZXhwYW5zaW9uIGlzIHJlcXVpcmVkLiIsIm1lc3NhZ2UiOiJWb2x1bWVHcm91cCB7eyAkbGFiZWxzLmRldmljZV9jbGFzcyB9fSB1dGlsaXphdGlvbiBoYXMgY3Jvc3NlZCA4NSAlIG9uIG5vZGUge3sgJGxhYmVscy5ub2RlIH19LiBGcmVlIHVwIHNvbWUgc3BhY2Ugb3IgZXhwYW5kIHRoZSBWb2x1bWVHcm91cCBpbW1lZGlhdGVseS4ifSwiZXhwciI6Iih0b3BvbHZtX3ZvbHVtZWdyb3VwX3NpemVfYnl0ZXMgLSB0b3BvbHZtX3ZvbHVtZWdyb3VwX2F2YWlsYWJsZV9ieXRlcykvdG9wb2x2bV92b2x1bWVncm91cF9zaXplX2J5dGVzIFx1MDAzZSAwLjg1IGFuZCB0b3BvbHZtX3RoaW5wb29sX2RhdGFfcGVyY2VudCBcdTAwM2UgODUuMDBcbiIsImZvciI6IjVtIiwibGFiZWxzIjp7InNldmVyaXR5IjoiY3JpdGljYWwifX1dfSx7Im5hbWUiOiJ0aGluLXBvb2wtYWxlcnQucnVsZXMiLCJydWxlcyI6W3siYWxlcnQiOiJUaGluUG9vbERhdGFVc2FnZUF0VGhyZXNob2xkTmVhckZ1bGwiLCJhbm5vdGF0aW9ucyI6eyJkZXNjcmlwdGlvbiI6IlRoaW4gcG9vbCBpbiB0aGUgVm9sdW1lR3JvdXAgaXMgbmVhcmluZyBmdWxsLiBEYXRhIGRlbGV0aW9uIG9yIHRoaW4gcG9vbCBleHBhbnNpb24gaXMgcmVxdWlyZWQuIiwibWVzc2FnZSI6IlRoaW4gUG9vbCBkYXRhIHV0aWxpemF0aW9uIGluIHRoZSBWb2x1bWVHcm91cCB7eyAkbGFiZWxzLmRldmljZV9jbGFzcyB9fSBoYXMgY3Jvc3NlZCA3NSAlIG9uIG5vZGUge3sgJGxhYmVscy5ub2RlIH19LiBGcmVlIHVwIHNvbWUgc3BhY2Ugb3IgZXhwYW5kIHRoZSB0aGluIHBvb2wuIn0sImV4cHIiOiJ0b3BvbHZtX3RoaW5wb29sX2RhdGFfcGVyY2VudCBcdTAwM2UgNzUuMDAgIGFuZCB0b3BvbHZtX3RoaW5wb29sX2RhdGFfcGVyY2VudCBcdTAwM2MgODUuMDBcbiIsImZvciI6IjVtIiwibGFiZWxzIjp7InNldmVyaXR5Ijoid2FybmluZyJ9fSx7ImFsZXJ0IjoiVGhpblBvb2xEYXRhVXNhZ2VBdFRocmVzaG9sZENyaXRpY2FsIiwiYW5ub3RhdGlvbnMiOnsiZGVzY3JpcHRpb24iOiJUaGluIHBvb2wgaW4gdGhlIFZvbHVtZUdyb3VwIGlzIGNyaXRpY2FsbHkgZnVsbC4gRGF0YSBkZWxldGlvbiBvciB0aGluIHBvb2wgZXhwYW5zaW9uIGlzIHJlcXVpcmVkLiIsIm1lc3NhZ2UiOiJUaGluIFBvb2wgZGF0YSB1dGlsaXphdGlvbiBpbiB0aGUgVm9sdW1lR3JvdXAge3sgJGxhYmVscy5kZXZpY2VfY2xhc3MgfX0gaGFzIGNyb3NzZWQgODUgJSBvbiBub2RlIHt7ICRsYWJlbHMubm9kZSB9fS4gRnJlZSB1cCBzb21lIHNwYWNlIG9yIGV4cGFuZCB0aGUgdGhpbiBwb29sIGltbWVkaWF0ZWx5LiJ9LCJleHByIjoidG9wb2x2bV90aGlucG9vbF9kYXRhX3BlcmNlbnQgXHUwMDNlIDg1LjAwXG4iLCJmb3IiOiI1bSIsImxhYmVscyI6eyJzZXZlcml0eSI6ImNyaXRpY2FsIn19LHsiYWxlcnQiOiJUaGluUG9vbE1ldGFEYXRhVXNhZ2VBdFRocmVzaG9sZE5lYXJGdWxsIiwiYW5ub3RhdGlvbnMiOnsiZGVzY3JpcHRpb24iOiJUaGluIHBvb2wgbWV0YWRhdGEgdXRpdGxpemF0aW9uIGluIHRoZSBWb2x1bWVHcm91cCBpcyBuZWFyaW5nIGZ1bGwuIERhdGEgZGVsZXRpb24gb3IgdGhpbiBwb29sIGV4cGFuc2lvbiBpcyByZXF1aXJlZC4iLCJtZXNzYWdlIjoiVGhpbiBQb29sIG1ldGFkYXRhIHV0aWxpemF0aW9uIGluIHRoZSBWb2x1bWVHcm91cCB7eyAkbGFiZWxzLmRldmljZV9jbGFzcyB9fSBoYXMgY3Jvc3NlZCA3NSAlIG9uIG5vZGUge3sgJGxhYmVscy5ub2RlIH19LiBGcmVlIHVwIHNvbWUgc3BhY2Ugb3IgZXhwYW5kIHRoZSB0aGluIHBvb2wuIn0sImV4cHIiOiJ0b3BvbHZtX3RoaW5wb29sX21ldGFkYXRhX3BlcmNlbnQgXHUwMDNlIDc1LjAwICBhbmQgdG9wb2x2bV90aGlucG9vbF9kYXRhX3BlcmNlbnQgXHUwMDNjIDg1LjAwXG4iLCJmb3IiOiI1bSIsImxhYmVscyI6eyJzZXZlcml0eSI6Indhcm5pbmcifX0seyJhbGVydCI6IlRoaW5Qb29sTWV0YURhdGFVc2FnZUF0VGhyZXNob2xkQ3JpdGljYWwiLCJhbm5vdGF0aW9ucyI6eyJkZXNjcmlwdGlvbiI6IlRoaW4gcG9vbCBtZXRhZGF0YSB1bHRpbGl6YXRpb24gaW4gdGhlIFZvbHVtZUdyb3VwIGlzIGNyaXRpY2FsbHkgZnVsbC4gRGF0YSBkZWxldGlvbiBvciB0aGluIHBvb2wgZXhwYW5zaW9uIGlzIHJlcXVpcmVkLiIsIm1lc3NhZ2UiOiJUaGluIFBvb2wgbWV0YWRhdGEgdXRpbGl6YXRpb24gaW4gdGhlIFZvbHVtZUdyb3VwIHt7ICRsYWJlbHMuZGV2aWNlX2NsYXNzIH19IGhhcyBjcm9zc2VkIDg1ICUgb24gbm9kZSB7eyAkbGFiZWxzLm5vZGUgfX0uIEZyZWUgdXAgc29tZSBzcGFjZSBvciBleHBhbmQgdGhlIHRoaW4gcG9vbCBpbW1lZGlhdGVseS4ifSwiZXhwciI6InRvcG9sdm1fdGhpbnBvb2xfbWV0YWRhdGFfcGVyY2VudCBcdTAwM2UgODUuMDBcbiIsImZvciI6IjVtIiwibGFiZWxzIjp7InNldmVyaXR5IjoiY3JpdGljYWwifX1dfV19fQ== diff --git a/cmd/operator/operator.go b/cmd/operator/operator.go index 5c2ffb11a..4cdd7100f 100644 --- a/cmd/operator/operator.go +++ b/cmd/operator/operator.go @@ -29,6 +29,8 @@ import ( "github.com/container-storage-interface/spec/lib/go/csi" "github.com/go-logr/logr" "github.com/kubernetes-csi/csi-lib-utils/connection" + v1 "github.com/openshift/api/config/v1" + ctrlRuntimeCommon "github.com/openshift/controller-runtime-common/pkg/tls" "github.com/openshift/lvm-operator/v4/internal/controllers/constants" "github.com/openshift/lvm-operator/v4/internal/controllers/lvmcluster" "github.com/openshift/lvm-operator/v4/internal/controllers/lvmcluster/logpassthrough" @@ -186,6 +188,16 @@ func run(cmd *cobra.Command, _ []string, opts *Options) error { return fmt.Errorf("failed to run wipe migration logic: %w", err) } + tlsProfile, err := ctrlRuntimeCommon.FetchAPIServerTLSProfile(ctx, setupClient) + if err != nil { + return fmt.Errorf("failed to get tls profile: %w", err) + } + + tlsConfig, unsupportedCiphers := ctrlRuntimeCommon.NewTLSConfigFromProfile(tlsProfile) + if len(unsupportedCiphers) > 0 { + opts.SetupLog.Info("some ciphers from TLS profile are not supported", "unsupportedCiphers", unsupportedCiphers) + } + mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{ Scheme: opts.Scheme, Metrics: metricsserver.Options{ @@ -194,12 +206,14 @@ func run(cmd *cobra.Command, _ []string, opts *Options) error { FilterProvider: filters.WithAuthenticationAndAuthorization, TLSOpts: []func(*tls.Config){ func(c *tls.Config) { c.NextProtos = []string{"http/1.1"} }, + tlsConfig, }, }, WebhookServer: &webhook.DefaultServer{Options: webhook.Options{ Port: 9443, TLSOpts: []func(*tls.Config){ func(c *tls.Config) { c.NextProtos = []string{"http/1.1"} }, + tlsConfig, }, }}, Cache: cache.Options{ @@ -227,6 +241,21 @@ func run(cmd *cobra.Command, _ []string, opts *Options) error { return fmt.Errorf("unable to start manager: %w", err) } + tlsWatcherController := &ctrlRuntimeCommon.SecurityProfileWatcher{ + InitialTLSProfileSpec: tlsProfile, + OnProfileChange: func(ctx context.Context, oldTLSProfileSpec, newTLSProfileSpec v1.TLSProfileSpec) { + ctrl.Log.WithName("TLSWatcher").Info("TLS profile has changed, initiating a shutdown to reload it", + "old profile", oldTLSProfileSpec, + "new profile", newTLSProfileSpec, + ) + cancel() + }, + } + + if err := tlsWatcherController.SetupWithManager(mgr); err != nil { + return fmt.Errorf("unable to create controller for TLS config observation: %w", err) + } + // register controllers if err = (&lvmcluster.Reconciler{ Client: mgr.GetClient(), diff --git a/cmd/vgmanager/vgmanager.go b/cmd/vgmanager/vgmanager.go index 5de0deccf..36e6f13da 100644 --- a/cmd/vgmanager/vgmanager.go +++ b/cmd/vgmanager/vgmanager.go @@ -31,6 +31,8 @@ import ( "github.com/container-storage-interface/spec/lib/go/csi" "github.com/fsnotify/fsnotify" "github.com/go-logr/logr" + v1 "github.com/openshift/api/config/v1" + ctrlRuntimeCommon "github.com/openshift/controller-runtime-common/pkg/tls" "github.com/openshift/lvm-operator/v4/internal/cluster" "github.com/openshift/lvm-operator/v4/internal/controllers/constants" "github.com/openshift/lvm-operator/v4/internal/controllers/lvmcluster/resource" @@ -52,6 +54,7 @@ import ( "google.golang.org/grpc/health/grpc_health_v1" registerapi "k8s.io/kubelet/pkg/apis/pluginregistration/v1" "k8s.io/utils/ptr" + "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/manager" "k8s.io/apimachinery/pkg/runtime" @@ -74,6 +77,7 @@ const ( ) var ErrConfigModified = errors.New("lvmd config file is modified") +var ErrTLSProfileModified = errors.New("API server TLS profile changed") var ErrNoDeviceClassesAvailable = errors.New("no device classes in lvmd.yaml configured, can not startup correctly") var ErrCSIPluginNotYetRegistered = errors.New("CSI plugin not yet registered") @@ -141,6 +145,21 @@ func run(cmd *cobra.Command, _ []string, opts *Options) error { return fmt.Errorf("unable to get operatorNamespace: %w", err) } + setupClient, err := client.New(ctrl.GetConfigOrDie(), client.Options{Scheme: opts.Scheme}) + if err != nil { + return fmt.Errorf("unable to initialize setup client for pre-manager startup checks: %w", err) + } + + tlsProfile, err := ctrlRuntimeCommon.FetchAPIServerTLSProfile(ctx, setupClient) + if err != nil { + return fmt.Errorf("failed to get tls profile: %w", err) + } + + tlsConfig, unsupportedCiphers := ctrlRuntimeCommon.NewTLSConfigFromProfile(tlsProfile) + if len(unsupportedCiphers) > 0 { + opts.SetupLog.Info("some ciphers from TLS profile are not supported", "unsupportedCiphers", unsupportedCiphers) + } + mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{ Scheme: opts.Scheme, Metrics: metricsserver.Options{ @@ -149,18 +168,18 @@ func run(cmd *cobra.Command, _ []string, opts *Options) error { FilterProvider: filters.WithAuthenticationAndAuthorization, TLSOpts: []func(*tls.Config){ func(c *tls.Config) { - opts.SetupLog.Info("disabling http/2") c.NextProtos = []string{"http/1.1"} }, + tlsConfig, }, }, WebhookServer: &webhook.DefaultServer{Options: webhook.Options{ Port: 9443, TLSOpts: []func(*tls.Config){ func(c *tls.Config) { - opts.SetupLog.Info("disabling http/2") c.NextProtos = []string{"http/1.1"} }, + tlsConfig, }, }}, HealthProbeBindAddress: opts.healthProbeAddr, @@ -169,6 +188,9 @@ func run(cmd *cobra.Command, _ []string, opts *Options) error { DefaultNamespaces: map[string]cache.Config{ operatorNamespace: {}, }, + ByObject: map[client.Object]cache.ByObject{ + &v1.APIServer{}: {}, + }, }, GracefulShutdownTimeout: ptr.To(time.Duration(-1)), }) @@ -176,6 +198,21 @@ func run(cmd *cobra.Command, _ []string, opts *Options) error { return fmt.Errorf("unable to start manager: %w", err) } + tlsWatcherController := &ctrlRuntimeCommon.SecurityProfileWatcher{ + InitialTLSProfileSpec: tlsProfile, + OnProfileChange: func(ctx context.Context, oldTLSProfileSpec, newTLSProfileSpec v1.TLSProfileSpec) { + ctrl.Log.WithName("TLSWatcher").Info("TLS profile has changed, initiating a shutdown to reload it", + "old profile", oldTLSProfileSpec, + "new profile", newTLSProfileSpec, + ) + cancelWithCause(ErrTLSProfileModified) + }, + } + + if err := tlsWatcherController.SetupWithManager(mgr); err != nil { + return fmt.Errorf("unable to create controller for TLS config observation: %w", err) + } + registrationServer := icsi.NewRegistrationServer( cancelWithCause, constants.TopolvmCSIDriverName, @@ -266,11 +303,15 @@ func run(cmd *cobra.Command, _ []string, opts *Options) error { return fmt.Errorf("problem running manager: %w", err) } - if errors.Is(context.Cause(ctx), ErrConfigModified) { + cause := context.Cause(ctx) + if errors.Is(cause, ErrConfigModified) { opts.SetupLog.Info("exiting pod due to modified configuration") os.Exit(0) - } else if errors.Is(context.Cause(ctx), icsi.ErrPluginRegistrationFailed) { - opts.SetupLog.Error(context.Cause(ctx), "exiting pod due to failed plugin registration") + } else if errors.Is(cause, ErrTLSProfileModified) { + opts.SetupLog.Info("exiting pod due to modified TLS profile") + os.Exit(0) + } else if errors.Is(cause, icsi.ErrPluginRegistrationFailed) { + opts.SetupLog.Error(cause, "exiting pod due to failed plugin registration") os.Exit(0) } else if err := ctx.Err(); err != nil { opts.SetupLog.Error(err, "exiting abnormally") diff --git a/config/crd/bases/lvm.topolvm.io_lvmclusters.yaml b/config/crd/bases/lvm.topolvm.io_lvmclusters.yaml index c8f1d42b7..fe15c717e 100644 --- a/config/crd/bases/lvm.topolvm.io_lvmclusters.yaml +++ b/config/crd/bases/lvm.topolvm.io_lvmclusters.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.17.3 + controller-gen.kubebuilder.io/version: v0.19.0 name: lvmclusters.lvm.topolvm.io spec: group: lvm.topolvm.io diff --git a/config/crd/bases/lvm.topolvm.io_lvmvolumegroupnodestatuses.yaml b/config/crd/bases/lvm.topolvm.io_lvmvolumegroupnodestatuses.yaml index 315c9e466..07a61ae00 100644 --- a/config/crd/bases/lvm.topolvm.io_lvmvolumegroupnodestatuses.yaml +++ b/config/crd/bases/lvm.topolvm.io_lvmvolumegroupnodestatuses.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.17.3 + controller-gen.kubebuilder.io/version: v0.19.0 name: lvmvolumegroupnodestatuses.lvm.topolvm.io spec: group: lvm.topolvm.io diff --git a/config/crd/bases/lvm.topolvm.io_lvmvolumegroups.yaml b/config/crd/bases/lvm.topolvm.io_lvmvolumegroups.yaml index 53fb2a0bd..d2f77b7af 100644 --- a/config/crd/bases/lvm.topolvm.io_lvmvolumegroups.yaml +++ b/config/crd/bases/lvm.topolvm.io_lvmvolumegroups.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.17.3 + controller-gen.kubebuilder.io/version: v0.19.0 name: lvmvolumegroups.lvm.topolvm.io spec: group: lvm.topolvm.io diff --git a/config/rbac/role.yaml b/config/rbac/role.yaml index 96d88bdfa..aa034057b 100644 --- a/config/rbac/role.yaml +++ b/config/rbac/role.yaml @@ -97,6 +97,14 @@ rules: - replicasets verbs: - get +- apiGroups: + - config.openshift.io + resources: + - apiservers + verbs: + - get + - list + - watch - apiGroups: - config.openshift.io resources: diff --git a/config/rbac/vg_manager_clusterrole.yaml b/config/rbac/vg_manager_clusterrole.yaml index 67870ad8d..c3f0ea557 100644 --- a/config/rbac/vg_manager_clusterrole.yaml +++ b/config/rbac/vg_manager_clusterrole.yaml @@ -35,3 +35,11 @@ rules: - get - list - watch +- apiGroups: + - config.openshift.io + resources: + - apiservers + verbs: + - get + - list + - watch diff --git a/go.mod b/go.mod index 0e5264c0d..8bb6e2c5a 100644 --- a/go.mod +++ b/go.mod @@ -14,21 +14,22 @@ require ( github.com/kubernetes-csi/external-resizer v1.14.0 github.com/kubernetes-csi/external-snapshotter/client/v8 v8.4.0 github.com/kubernetes-csi/external-snapshotter/v8 v8.3.0 - github.com/onsi/ginkgo/v2 v2.25.3 - github.com/onsi/gomega v1.38.2 - github.com/openshift/api v0.0.0-20260107103503-6d35063ca179 - github.com/openshift/client-go v0.0.0-20260105124352-f93a4291f9ae - github.com/openshift/library-go v0.0.0-20260108002748-aca7ba3a9b69 + github.com/onsi/ginkgo/v2 v2.28.1 + github.com/onsi/gomega v1.39.1 + github.com/openshift/api v0.0.0-20260213155647-8fe9fe363807 + github.com/openshift/client-go v0.0.0-20260108185524-48f4ccfc4e13 + github.com/openshift/controller-runtime-common v0.0.0-20260305203102-d1c60045a455 + github.com/openshift/library-go v0.0.0-20260213153706-03f1709971c5 github.com/operator-framework/api v0.30.0 github.com/pelletier/go-toml/v2 v2.2.4 github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.74.0 - github.com/prometheus/client_golang v1.22.0 + github.com/prometheus/client_golang v1.23.2 github.com/spf13/cobra v1.10.1 github.com/spf13/pflag v1.0.10 github.com/stretchr/testify v1.11.1 github.com/topolvm/topolvm v0.36.3 go.uber.org/zap v1.27.0 - google.golang.org/grpc v1.78.0 + google.golang.org/grpc v1.79.3 gotest.tools/v3 v3.5.2 k8s.io/api v0.34.3 k8s.io/apiextensions-apiserver v0.34.3 @@ -39,18 +40,18 @@ require ( k8s.io/csi-translation-lib v0.34.3 k8s.io/klog/v2 v2.130.1 k8s.io/kubelet v0.34.3 - k8s.io/utils v0.0.0-20250820121507-0af2bda4dd1d - sigs.k8s.io/controller-runtime v0.21.0 - sigs.k8s.io/controller-tools v0.17.3 + k8s.io/utils v0.0.0-20260108192941-914a6e750570 + sigs.k8s.io/controller-runtime v0.22.5 + sigs.k8s.io/controller-tools v0.19.0 sigs.k8s.io/kustomize/kustomize/v5 v5.7.0 sigs.k8s.io/sig-storage-lib-external-provisioner/v11 v11.0.1 sigs.k8s.io/yaml v1.6.0 ) -replace github.com/topolvm/topolvm => github.com/openshift/topolvm v0.15.3-0.20250902141549-bf55337a0ff7 +replace github.com/topolvm/topolvm => github.com/openshift/topolvm v0.15.3-0.20260311063523-c3606f6ac8b0 require ( - cel.dev/expr v0.24.0 // indirect + cel.dev/expr v0.25.1 // indirect github.com/Masterminds/semver/v3 v3.4.0 // indirect github.com/antlr4-go/antlr/v4 v4.13.1 // indirect github.com/beorn7/perks v1.0.1 // indirect @@ -76,7 +77,7 @@ require ( github.com/google/btree v1.1.3 // indirect github.com/google/cel-go v0.26.0 // indirect github.com/google/gnostic-models v0.7.0 // indirect - github.com/google/pprof v0.0.0-20250403155104-27863c87afa6 // indirect + github.com/google/pprof v0.0.0-20260115054156-294ebfa9ad83 // indirect github.com/google/uuid v1.6.0 // indirect github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 // indirect @@ -95,10 +96,9 @@ require ( github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect - github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/prometheus/client_model v0.6.2 // indirect - github.com/prometheus/common v0.64.0 // indirect + github.com/prometheus/common v0.66.1 // indirect github.com/prometheus/procfs v0.16.1 // indirect github.com/sergi/go-diff v1.2.0 // indirect github.com/sirupsen/logrus v1.9.3 // indirect @@ -116,38 +116,38 @@ require ( go.opentelemetry.io/otel/sdk v1.40.0 // indirect go.opentelemetry.io/otel/trace v1.40.0 // indirect go.opentelemetry.io/proto/otlp v1.6.0 // indirect - go.uber.org/automaxprocs v1.6.0 // indirect go.uber.org/multierr v1.11.0 // indirect - go.yaml.in/yaml/v2 v2.4.2 // indirect + go.yaml.in/yaml/v2 v2.4.3 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 // indirect - golang.org/x/mod v0.29.0 // indirect - golang.org/x/net v0.47.0 // indirect - golang.org/x/oauth2 v0.32.0 // indirect - golang.org/x/sync v0.18.0 // indirect + golang.org/x/mod v0.32.0 // indirect + golang.org/x/net v0.49.0 // indirect + golang.org/x/oauth2 v0.34.0 // indirect + golang.org/x/sync v0.19.0 // indirect golang.org/x/sys v0.40.0 // indirect - golang.org/x/term v0.37.0 // indirect - golang.org/x/text v0.31.0 // indirect + golang.org/x/term v0.39.0 // indirect + golang.org/x/text v0.33.0 // indirect golang.org/x/time v0.11.0 // indirect - golang.org/x/tools v0.38.0 // indirect - golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated // indirect + golang.org/x/tools v0.41.0 // indirect gomodules.xyz/jsonpatch/v2 v2.5.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20251029180050-ab9386a59fda // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20251029180050-ab9386a59fda // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect google.golang.org/protobuf v1.36.10 // indirect - gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect + gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect + k8s.io/code-generator v0.34.3 // indirect k8s.io/component-base v0.34.3 // indirect - k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b // indirect + k8s.io/gengo/v2 v2.0.0-20250604051438-85fd79dbfd9f // indirect + k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912 // indirect k8s.io/mount-utils v0.34.3 // indirect sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.32.1 // indirect sigs.k8s.io/gateway-api v1.3.0 // indirect - sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect + sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 // indirect sigs.k8s.io/kustomize/api v0.20.0 // indirect sigs.k8s.io/kustomize/cmd/config v0.20.0 // indirect sigs.k8s.io/kustomize/kyaml v0.20.0 // indirect sigs.k8s.io/randfill v1.0.0 // indirect - sigs.k8s.io/structured-merge-diff/v6 v6.3.0 // indirect + sigs.k8s.io/structured-merge-diff/v6 v6.3.2-0.20260122202528-d9cc6641c482 // indirect ) diff --git a/go.sum b/go.sum index d535c6164..4d7e6b67c 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,5 @@ -cel.dev/expr v0.24.0 h1:56OvJKSH3hDGL0ml5uSxZmz3/3Pq4tJ+fb1unVLAFcY= -cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw= +cel.dev/expr v0.25.1 h1:1KrZg61W6TWSxuNZ37Xy49ps13NUovb66QLprthtwi4= +cel.dev/expr v0.25.1/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4= github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI= github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= @@ -33,8 +33,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/emicklei/go-restful/v3 v3.12.2 h1:DhwDP0vY3k8ZzE0RunuJy8GhNpPL6zqLkDf9B/a0/xU= github.com/emicklei/go-restful/v3 v3.12.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= -github.com/envoyproxy/protoc-gen-validate v1.2.1 h1:DEo3O99U8j4hBFwbJfrz9VtgcDfUKS7KJ7spH3d86P8= -github.com/envoyproxy/protoc-gen-validate v1.2.1/go.mod h1:d/C80l/jxXLdfEIhX1W2TmLfsJ31lvEjwamM4DxlWXU= +github.com/envoyproxy/protoc-gen-validate v1.3.0 h1:TvGH1wof4H33rezVKWSpqKz5NXWg5VPuZ0uONDT6eb4= +github.com/envoyproxy/protoc-gen-validate v1.3.0/go.mod h1:HvYl7zwPa5mffgyeTUHA9zHIH36nmrm7oCbo4YKoSWA= github.com/evanphx/json-patch v5.9.0+incompatible h1:fBXyNpNMuTTDdquAq/uisOr2lShz4oaXpDTX2bLe7ls= github.com/evanphx/json-patch v5.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch/v5 v5.9.11 h1:/8HVnzMq13/3x9TPvjG08wUGqBTmZBsCWzjTM0wiaDU= @@ -47,6 +47,12 @@ github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM= github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= +github.com/gkampitakis/ciinfo v0.3.2 h1:JcuOPk8ZU7nZQjdUhctuhQofk7BGHuIy0c9Ez8BNhXs= +github.com/gkampitakis/ciinfo v0.3.2/go.mod h1:1NIwaOcFChN4fa/B0hEBdAb6npDlFL8Bwx4dfRLRqAo= +github.com/gkampitakis/go-diff v1.3.2 h1:Qyn0J9XJSDTgnsgHRdz9Zp24RaJeKMUHg2+PDZZdC4M= +github.com/gkampitakis/go-diff v1.3.2/go.mod h1:LLgOrpqleQe26cte8s36HTWcTmMEur6OPYerdAAS9tk= +github.com/gkampitakis/go-snaps v0.5.15 h1:amyJrvM1D33cPHwVrjo9jQxX8g/7E2wYdZ+01KS3zGE= +github.com/gkampitakis/go-snaps v0.5.15/go.mod h1:HNpx/9GoKisdhw9AFOBT1N7DBs9DiHo/hGheFGBZ+mc= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= @@ -66,6 +72,8 @@ github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1v github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= github.com/gobuffalo/flect v1.0.3 h1:xeWBM2nui+qnVvNM4S3foBhCAL2XgPU+a7FdpelbTq4= github.com/gobuffalo/flect v1.0.3/go.mod h1:A5msMlrHtLqh9umBSnvabjsMrCcCpAyzglnDvkbYKHs= +github.com/goccy/go-yaml v1.18.0 h1:8W7wMFS12Pcas7KU+VVkaiCng+kG8QiFeFwzFb+rwuw= +github.com/goccy/go-yaml v1.18.0/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= @@ -83,8 +91,8 @@ github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/pprof v0.0.0-20250403155104-27863c87afa6 h1:BHT72Gu3keYf3ZEu2J0b1vyeLSOYI8bm5wbJM/8yDe8= -github.com/google/pprof v0.0.0-20250403155104-27863c87afa6/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA= +github.com/google/pprof v0.0.0-20260115054156-294ebfa9ad83 h1:z2ogiKUYzX5Is6zr/vP9vJGqPwcdqsWjOt+V8J7+bTc= +github.com/google/pprof v0.0.0-20260115054156-294ebfa9ad83/go.mod h1:MxpfABSjhmINe3F1It9d+8exIHFvUqtLIRCdOGNXqiI= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 h1:JeSE6pjso5THxAzdVpqr6/geYxZytqFMBCOtn/ujyeo= @@ -103,6 +111,8 @@ github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGw github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/joshdk/go-junit v1.0.0 h1:S86cUKIdwBHWwA6xCmFlf3RTLfVXYQfvanM5Uh+K6GE= +github.com/joshdk/go-junit v1.0.0/go.mod h1:TiiV0PqkaNfFXjEiyjWM3XXrhVyCa1K4Zfga6W52ung= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= @@ -132,11 +142,15 @@ github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0 github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/mailru/easyjson v0.9.0 h1:PrnmzHw7262yW8sTBwxi1PdJA3Iw/EKBa8psRf7d9a4= github.com/mailru/easyjson v0.9.0/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU= +github.com/maruel/natural v1.1.1 h1:Hja7XhhmvEFhcByqDoHz9QZbkWey+COd9xWfCfn1ioo= +github.com/maruel/natural v1.1.1/go.mod h1:v+Rfd79xlw1AgVBjbO0BEQmptqb5HvL/k9GRHB7ZKEg= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mfridman/tparse v0.18.0 h1:wh6dzOKaIwkUGyKgOntDW4liXSo37qg5AXbIhkMV3vE= +github.com/mfridman/tparse v0.18.0/go.mod h1:gEvqZTuCgEhPbYk/2lS3Kcxg1GmTxxU7kTC8DvP0i/A= github.com/miekg/dns v1.1.66 h1:FeZXOS3VCVsKnEAd+wBkjMC3D2K+ww66Cq3VnCINuJE= github.com/miekg/dns v1.1.66/go.mod h1:jGFzBsSNbJw6z1HYut1RKBKHA9PBdxeHrZG8J+gC2WE= github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= @@ -165,18 +179,20 @@ github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/ginkgo/v2 v2.25.3 h1:Ty8+Yi/ayDAGtk4XxmmfUy4GabvM+MegeB4cDLRi6nw= -github.com/onsi/ginkgo/v2 v2.25.3/go.mod h1:43uiyQC4Ed2tkOzLsEYm7hnrb7UJTWHYNsuy3bG/snE= -github.com/onsi/gomega v1.38.2 h1:eZCjf2xjZAqe+LeWvKb5weQ+NcPwX84kqJ0cZNxok2A= -github.com/onsi/gomega v1.38.2/go.mod h1:W2MJcYxRGV63b418Ai34Ud0hEdTVXq9NW9+Sx6uXf3k= -github.com/openshift/api v0.0.0-20260107103503-6d35063ca179 h1:5gMFMmuVLAcEnBAjNFql/8L2ZRPBDOxl7nmbjO5klvk= -github.com/openshift/api v0.0.0-20260107103503-6d35063ca179/go.mod h1:d5uzF0YN2nQQFA0jIEWzzOZ+edmo6wzlGLvx5Fhz4uY= -github.com/openshift/client-go v0.0.0-20260105124352-f93a4291f9ae h1:veyDeAOBVJun1KoOsTIRlD7Q5LwRR32kfS2IPjPXJKE= -github.com/openshift/client-go v0.0.0-20260105124352-f93a4291f9ae/go.mod h1:leoeMrUnO40DwByGl7we2l+h6HQq3Y6bHUa+DnmRl+8= -github.com/openshift/library-go v0.0.0-20260108002748-aca7ba3a9b69 h1:ZWNlBpTRVAc4H22w/CwJpPEwyOHCtsnvVz+tEDquKVU= -github.com/openshift/library-go v0.0.0-20260108002748-aca7ba3a9b69/go.mod h1:nIzWQQE49XbiKizVnVOip9CEB7HJ0hoJwNi3g3YKnKc= -github.com/openshift/topolvm v0.15.3-0.20250902141549-bf55337a0ff7 h1:9mWGtg2xeeQl2z5a2b/7ZsBNT3ylZ+JSZJrsS3hGthQ= -github.com/openshift/topolvm v0.15.3-0.20250902141549-bf55337a0ff7/go.mod h1:b4JULdexs/rnm6HsOVGy8dyEwIHfw89b1zvHqS7kELY= +github.com/onsi/ginkgo/v2 v2.28.1 h1:S4hj+HbZp40fNKuLUQOYLDgZLwNUVn19N3Atb98NCyI= +github.com/onsi/ginkgo/v2 v2.28.1/go.mod h1:CLtbVInNckU3/+gC8LzkGUb9oF+e8W8TdUsxPwvdOgE= +github.com/onsi/gomega v1.39.1 h1:1IJLAad4zjPn2PsnhH70V4DKRFlrCzGBNrNaru+Vf28= +github.com/onsi/gomega v1.39.1/go.mod h1:hL6yVALoTOxeWudERyfppUcZXjMwIMLnuSfruD2lcfg= +github.com/openshift/api v0.0.0-20260213155647-8fe9fe363807 h1:coR/haF16EW8KS1E/PwJfDzMSy4mU9K0H1rcHejqYDY= +github.com/openshift/api v0.0.0-20260213155647-8fe9fe363807/go.mod h1:d5uzF0YN2nQQFA0jIEWzzOZ+edmo6wzlGLvx5Fhz4uY= +github.com/openshift/client-go v0.0.0-20260108185524-48f4ccfc4e13 h1:6rd4zSo2UaWQcAPZfHK9yzKVqH0BnMv1hqMzqXZyTds= +github.com/openshift/client-go v0.0.0-20260108185524-48f4ccfc4e13/go.mod h1:YvOmPmV7wcJxpfhTDuFqqs2Xpb3M3ovsM6Qs/i2ptq4= +github.com/openshift/controller-runtime-common v0.0.0-20260305203102-d1c60045a455 h1:ZpquGa7pP0vz1Mv0Fo8ATOXHQuniVy77+Z7aMlCNKZs= +github.com/openshift/controller-runtime-common v0.0.0-20260305203102-d1c60045a455/go.mod h1:59nLF3/IfhAtoQZfUzlCyidTAdlVT6KiVeTicUi2wuA= +github.com/openshift/library-go v0.0.0-20260213153706-03f1709971c5 h1:9Pe6iVOMjt9CdA/vaKBNUSoEIjIe1po5Ha3ABRYXLJI= +github.com/openshift/library-go v0.0.0-20260213153706-03f1709971c5/go.mod h1:K3FoNLgNBFYbFuG+Kr8usAnQxj1w84XogyUp2M8rK8k= +github.com/openshift/topolvm v0.15.3-0.20260311063523-c3606f6ac8b0 h1:45hZNCcZAuR1i17w5uWfVMb6AD3HHBBQv8k9I+VIr6Q= +github.com/openshift/topolvm v0.15.3-0.20260311063523-c3606f6ac8b0/go.mod h1:SC1v9bNP6uZzFtVc7G9jQs2plhte9aw9Er0ISv/WwrU= github.com/operator-framework/api v0.30.0 h1:44hCmGnEnZk/Miol5o44dhSldNH0EToQUG7vZTl29kk= github.com/operator-framework/api v0.30.0/go.mod h1:FYxAPhjtlXSAty/fbn5YJnFagt6SpJZJgFNNbvDe5W0= github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= @@ -186,20 +202,18 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g= -github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.74.0 h1:AHzMWDxNiAVscJL6+4wkvFRTpMnJqiaZFEKA/osaBXE= github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.74.0/go.mod h1:wAR5JopumPtAZnu0Cjv2PSqV4p4QB09LMhc6fZZTXuA= -github.com/prometheus/client_golang v1.22.0 h1:rb93p9lokFEsctTys46VnV1kLCDpVZ0a/Y92Vm0Zc6Q= -github.com/prometheus/client_golang v1.22.0/go.mod h1:R7ljNsLXhuQXYZYtw6GAE9AZg8Y7vEW5scdCXrWRXC0= +github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o= +github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg= github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= -github.com/prometheus/common v0.64.0 h1:pdZeA+g617P7oGv1CzdTzyeShxAGrTBsolKNOLQPGO4= -github.com/prometheus/common v0.64.0/go.mod h1:0gZns+BLRQ3V6NdaerOhMbwwRbNh9hkGINtQAsP5GS8= +github.com/prometheus/common v0.66.1 h1:h5E0h5/Y8niHc5DlaLlWLArTQI7tMrsfQjHV+d9ZoGs= +github.com/prometheus/common v0.66.1/go.mod h1:gcaUsgf3KfRSwHY4dIMXLPV0K/Wg1oZ8+SbZk/HH/dA= github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg= github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is= -github.com/pseudomuto/protoc-gen-doc v1.5.0 h1:pHZp0MEiT68jrZV8js8BS7E9ZEnlSLegoQbbtXj5lfo= -github.com/pseudomuto/protoc-gen-doc v1.5.0/go.mod h1:exDTOVwqpp30eV/EDPFLZy3Pwr2sn6hBC1WIYH/UbIg= +github.com/pseudomuto/protoc-gen-doc v1.5.1 h1:Ah259kcrio7Ix1Rhb6u8FCaOkzf9qRBqXnvAufg061w= +github.com/pseudomuto/protoc-gen-doc v1.5.1/go.mod h1:XpMKYg6zkcpgfpCfQ8GcWBDRtRxOmMR5w7pz4Xo+dYM= github.com/pseudomuto/protokit v0.2.0 h1:hlnBDcy3YEDXH7kc9gV+NLaN0cDzhDvD1s7Y6FZ8RpM= github.com/pseudomuto/protokit v0.2.0/go.mod h1:2PdH30hxVHsup8KpBTOXTBeMVhJZVio3Q8ViKSAXT0Q= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= @@ -229,6 +243,14 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= +github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY= +github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= +github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= +github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= +github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= +github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY= +github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= github.com/xlab/treeprint v1.2.0 h1:HzHnuAF1plUN2zGlAFHbSQP2qJ0ZAD3XF5XD7OesXRQ= @@ -257,42 +279,40 @@ go.opentelemetry.io/otel/trace v1.40.0 h1:WA4etStDttCSYuhwvEa8OP8I5EWu24lkOzp+ZY go.opentelemetry.io/otel/trace v1.40.0/go.mod h1:zeAhriXecNGP/s2SEG3+Y8X9ujcJOTqQ5RgdEJcawiA= go.opentelemetry.io/proto/otlp v1.6.0 h1:jQjP+AQyTf+Fe7OKj/MfkDrmK4MNVtw2NpXsf9fefDI= go.opentelemetry.io/proto/otlp v1.6.0/go.mod h1:cicgGehlFuNdgZkcALOCh3VE6K/u2tAjzlRhDwmVpZc= -go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= -go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= -go.yaml.in/yaml/v2 v2.4.2 h1:DzmwEr2rDGHl7lsFgAHxmNz/1NlQ7xLIrlN2h5d1eGI= -go.yaml.in/yaml/v2 v2.4.2/go.mod h1:081UH+NErpNdqlCXm3TtEran0rJZGxAYx9hb/ELlsPU= +go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0= +go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8= go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q= -golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4= +golang.org/x/crypto v0.47.0 h1:V6e3FRj+n4dbpw86FJ8Fv7XVOql7TEwpHapKoMJ/GO8= +golang.org/x/crypto v0.47.0/go.mod h1:ff3Y9VzzKbwSSEzWqJsJVBnWmRwRSHt/6Op5n9bQc4A= golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 h1:nDVHiLt8aIbd/VzvPWN6kSOPE7+F/fNFDSXLVYkE/Iw= golang.org/x/exp v0.0.0-20250305212735-054e65f0b394/go.mod h1:sIifuuw/Yco/y6yb6+bDNfyeQ/MdPUy/hKEMYQV17cM= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA= -golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w= +golang.org/x/mod v0.32.0 h1:9F4d3PHLljb6x//jOyokMv3eX+YDeepZSEo3mFJy93c= +golang.org/x/mod v0.32.0/go.mod h1:SgipZ/3h2Ci89DlEtEXWUk/HteuRin+HHhN+WbNhguU= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY= -golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU= -golang.org/x/oauth2 v0.32.0 h1:jsCblLleRMDrxMN29H3z/k1KliIvpLgCkE6R8FXXNgY= -golang.org/x/oauth2 v0.32.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= +golang.org/x/net v0.49.0 h1:eeHFmOGUTtaaPSGNmjBKpbng9MulQsJURQUAfUwY++o= +golang.org/x/net v0.49.0/go.mod h1:/ysNB2EvaqvesRkuLAyjI1ycPZlQHM3q01F02UY/MV8= +golang.org/x/oauth2 v0.34.0 h1:hqK/t4AKgbqWkdkcAeI8XLmbK+4m4G5YeQRrmiotGlw= +golang.org/x/oauth2 v0.34.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I= -golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= +golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= +golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -301,20 +321,20 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ= golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= -golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU= -golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254= +golang.org/x/term v0.39.0 h1:RclSuaJf32jOqZz74CkPA9qFuVTX7vhLlpfj/IGWlqY= +golang.org/x/term v0.39.0/go.mod h1:yxzUCTP/U+FzoxfdKmLaA0RV1WgE0VY7hXBwKtY/4ww= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM= -golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM= +golang.org/x/text v0.33.0 h1:B3njUFyqtHDUI5jMn1YIr5B0IE2U0qck04r6d4KPAxE= +golang.org/x/text v0.33.0/go.mod h1:LuMebE6+rBincTi9+xWTY8TztLzKHc/9C1uBCG27+q8= golang.org/x/time v0.11.0 h1:/bpjEDfN9tkoN/ryeYHnv5hcMlc8ncjMcM4XBk5NWV0= golang.org/x/time v0.11.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ= -golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs= +golang.org/x/tools v0.41.0 h1:a9b8iMweWG+S0OBnlU36rzLp20z1Rp10w+IY2czHTQc= +golang.org/x/tools v0.41.0/go.mod h1:XSY6eDqxVNiYgezAVqqCeihT4j1U2CCsqvH3WhQpnlg= golang.org/x/tools/go/expect v0.1.0-deprecated h1:jY2C5HGYR5lqex3gEniOQL0r7Dq5+VGVgY1nudX5lXY= golang.org/x/tools/go/expect v0.1.0-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY= golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated h1:1h2MnaIAIXISqTFKdENegdpAgUXz6NrPEsbIeWaBRvM= @@ -327,12 +347,12 @@ gomodules.xyz/jsonpatch/v2 v2.5.0 h1:JELs8RLM12qJGXU4u/TO3V25KW8GreMKl9pdkk14RM0 gomodules.xyz/jsonpatch/v2 v2.5.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= -google.golang.org/genproto/googleapis/api v0.0.0-20251029180050-ab9386a59fda h1:+2XxjfsAu6vqFxwGBRcHiMaDCuZiqXGDUDVWVtrFAnE= -google.golang.org/genproto/googleapis/api v0.0.0-20251029180050-ab9386a59fda/go.mod h1:fDMmzKV90WSg1NbozdqrE64fkuTv6mlq2zxo9ad+3yo= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251029180050-ab9386a59fda h1:i/Q+bfisr7gq6feoJnS/DlpdwEL4ihp41fvRiM3Ork0= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251029180050-ab9386a59fda/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= -google.golang.org/grpc v1.78.0 h1:K1XZG/yGDJnzMdd/uZHAkVqJE+xIDOcmdSFZkBUicNc= -google.golang.org/grpc v1.78.0/go.mod h1:I47qjTo4OKbMkjA/aOOwxDIiPSBofUtQUI5EfpWvW7U= +google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 h1:fCvbg86sFXwdrl5LgVcTEvNC+2txB5mgROGmRL5mrls= +google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:+rXWjjaukWZun3mLfjmVnQi18E1AsFbDN9QdJ5YXLto= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 h1:gRkg/vSppuSQoDjxyiGfN4Upv/h/DQmIR10ZU8dh4Ww= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= +google.golang.org/grpc v1.79.3 h1:sybAEdRIEtvcD68Gx7dmnwjZKlyfuc61Dyo9pGXXkKE= +google.golang.org/grpc v1.79.3/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1 h1:F29+wU6Ee6qgu9TddPgooOdaqsxTMunOoj8KA5yuS5A= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1/go.mod h1:5KF+wpkbTSbGcR9zteSqZV6fqFOWBl4Yde8En8MryZA= google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= @@ -341,8 +361,8 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4= -gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M= +gopkg.in/evanphx/json-patch.v4 v4.13.0 h1:czT3CmqEaQ1aanPc5SdlgQrrEIb8w/wwCvWWnfEbYzo= +gopkg.in/evanphx/json-patch.v4 v4.13.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= @@ -367,32 +387,36 @@ k8s.io/apiserver v0.34.3 h1:uGH1qpDvSiYG4HVFqc6A3L4CKiX+aBWDrrsxHYK0Bdo= k8s.io/apiserver v0.34.3/go.mod h1:QPnnahMO5C2m3lm6fPW3+JmyQbvHZQ8uudAu/493P2w= k8s.io/client-go v0.34.3 h1:wtYtpzy/OPNYf7WyNBTj3iUA0XaBHVqhv4Iv3tbrF5A= k8s.io/client-go v0.34.3/go.mod h1:OxxeYagaP9Kdf78UrKLa3YZixMCfP6bgPwPwNBQBzpM= +k8s.io/code-generator v0.34.3 h1:6ipJKsJZZ9q21BO8I2jEj4OLN3y8/1n4aihKN0xKmQk= +k8s.io/code-generator v0.34.3/go.mod h1:oW73UPYpGLsbRN8Ozkhd6ZzkF8hzFCiYmvEuWZDroI4= k8s.io/component-base v0.34.3 h1:zsEgw6ELqK0XncCQomgO9DpUIzlrYuZYA0Cgo+JWpVk= k8s.io/component-base v0.34.3/go.mod h1:5iIlD8wPfWE/xSHTRfbjuvUul2WZbI2nOUK65XL0E/c= k8s.io/component-helpers v0.34.3 h1:Iws1GQfM89Lxo7IZITGmVdFOW0Bmyd7SVwwIu1/CCkE= k8s.io/component-helpers v0.34.3/go.mod h1:S8HjjMTrUDVMVPo2EdNYRtQx9uIEIueQYdPMOe9UxJs= k8s.io/csi-translation-lib v0.34.3 h1:WGE/HPz5D3TIqffhYkk6s4KfW1mcSwSH30MzABK47Pg= k8s.io/csi-translation-lib v0.34.3/go.mod h1:Lx11spUQnRzYFDrTok0/6cQMP3oXHi73+mXWvkRTxbE= +k8s.io/gengo/v2 v2.0.0-20250604051438-85fd79dbfd9f h1:SLb+kxmzfA87x4E4brQzB33VBbT2+x7Zq9ROIHmGn9Q= +k8s.io/gengo/v2 v2.0.0-20250604051438-85fd79dbfd9f/go.mod h1:EJykeLsmFC60UQbYJezXkEsG2FLrt0GPNkU5iK5GWxU= k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= -k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b h1:MloQ9/bdJyIu9lb1PzujOPolHyvO06MXG5TUIj2mNAA= -k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b/go.mod h1:UZ2yyWbFTpuhSbFhv24aGNOdoRdJZgsIObGBUaYVsts= +k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912 h1:Y3gxNAuB0OBLImH611+UDZcmKS3g6CthxToOb37KgwE= +k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912/go.mod h1:kdmbQkyfwUagLfXIad1y2TdrjPFWp2Q89B3qkRwf/pQ= k8s.io/kubelet v0.34.3 h1:8QRev2FmasZ05yCC774qn6ULche72PYM7AQv0CVt9CM= k8s.io/kubelet v0.34.3/go.mod h1:pMgblr+nVQ02UkyaTcgqzS3AIYVQkjlMFg1Pd5rGC1Q= k8s.io/mount-utils v0.34.3 h1:+sk7PVMQhGoNkGnxmxhyjEXpFcTaD6s3a6NXZNhqERc= k8s.io/mount-utils v0.34.3/go.mod h1:MIjjYlqJ0ziYQg0MO09kc9S96GIcMkhF/ay9MncF0GA= -k8s.io/utils v0.0.0-20250820121507-0af2bda4dd1d h1:wAhiDyZ4Tdtt7e46e9M5ZSAJ/MnPGPs+Ki1gHw4w1R0= -k8s.io/utils v0.0.0-20250820121507-0af2bda4dd1d/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/utils v0.0.0-20260108192941-914a6e750570 h1:JT4W8lsdrGENg9W+YwwdLJxklIuKWdRm+BC+xt33FOY= +k8s.io/utils v0.0.0-20260108192941-914a6e750570/go.mod h1:xDxuJ0whA3d0I4mf/C4ppKHxXynQ+fxnkmQH0vTHnuk= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.32.1 h1:Cf+ed5N8038zbsaXFO7mKQDi/+VcSRafb0jM84KX5so= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.32.1/go.mod h1:Ve9uj1L+deCXFrPOk1LpFXqTg7LCFzFso6PA48q/XZw= -sigs.k8s.io/controller-runtime v0.21.0 h1:CYfjpEuicjUecRk+KAeyYh+ouUBn4llGyDYytIGcJS8= -sigs.k8s.io/controller-runtime v0.21.0/go.mod h1:OSg14+F65eWqIu4DceX7k/+QRAbTTvxeQSNSOQpukWM= -sigs.k8s.io/controller-tools v0.17.3 h1:lwFPLicpBKLgIepah+c8ikRBubFW5kOQyT88r3EwfNw= -sigs.k8s.io/controller-tools v0.17.3/go.mod h1:1ii+oXcYZkxcBXzwv3YZBlzjt1fvkrCGjVF73blosJI= +sigs.k8s.io/controller-runtime v0.22.5 h1:v3nfSUMowX/2WMp27J9slwGFyAt7IV0YwBxAkrUr0GE= +sigs.k8s.io/controller-runtime v0.22.5/go.mod h1:pc5SoYWnWI6I+cBHYYdZ7B6YHZVY5xNfll88JB+vniI= +sigs.k8s.io/controller-tools v0.19.0 h1:OU7jrPPiZusryu6YK0jYSjPqg8Vhf8cAzluP9XGI5uk= +sigs.k8s.io/controller-tools v0.19.0/go.mod h1:y5HY/iNDFkmFla2CfQoVb2AQXMsBk4ad84iR1PLANB0= sigs.k8s.io/gateway-api v1.3.0 h1:q6okN+/UKDATola4JY7zXzx40WO4VISk7i9DIfOvr9M= sigs.k8s.io/gateway-api v1.3.0/go.mod h1:d8NV8nJbaRbEKem+5IuxkL8gJGOZ+FJ+NvOIltV8gDk= -sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 h1:gBQPwqORJ8d8/YNZWEjoZs7npUVDpVXUUOFfW6CgAqE= -sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg= +sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 h1:IpInykpT6ceI+QxKBbEflcR5EXP7sU1kvOlxwZh5txg= +sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg= sigs.k8s.io/kustomize/api v0.20.0 h1:xPLqcobHI0bThyRUteO+nCV8G4d1Rlo5HafO57VRcas= sigs.k8s.io/kustomize/api v0.20.0/go.mod h1:F6CfaV27oevRCMJgehLqyX81dlUnRX/Fc13Uo7+OSo4= sigs.k8s.io/kustomize/cmd/config v0.20.0 h1:wE9wdZmCUgXjiSAKCwkZnlQUg4/tSX8tWKTTwO+tfoY= @@ -407,7 +431,7 @@ sigs.k8s.io/sig-storage-lib-external-provisioner/v11 v11.0.1 h1:yB7zWcVJFLN9wB8X sigs.k8s.io/sig-storage-lib-external-provisioner/v11 v11.0.1/go.mod h1:yWwEQYfQG/gSUQbLft2uTF/KPnoMt/cGj9vEMj5ripI= sigs.k8s.io/structured-merge-diff/v4 v4.7.0 h1:qPeWmscJcXP0snki5IYF79Z8xrl8ETFxgMd7wez1XkI= sigs.k8s.io/structured-merge-diff/v4 v4.7.0/go.mod h1:dDy58f92j70zLsuZVuUX5Wp9vtxXpaZnkPGWeqDfCps= -sigs.k8s.io/structured-merge-diff/v6 v6.3.0 h1:jTijUJbW353oVOd9oTlifJqOGEkUw2jB/fXCbTiQEco= -sigs.k8s.io/structured-merge-diff/v6 v6.3.0/go.mod h1:M3W8sfWvn2HhQDIbGWj3S099YozAsymCo/wrT5ohRUE= +sigs.k8s.io/structured-merge-diff/v6 v6.3.2-0.20260122202528-d9cc6641c482 h1:2WOzJpHUBVrrkDjU4KBT8n5LDcj824eX0I5UKcgeRUs= +sigs.k8s.io/structured-merge-diff/v6 v6.3.2-0.20260122202528-d9cc6641c482/go.mod h1:M3W8sfWvn2HhQDIbGWj3S099YozAsymCo/wrT5ohRUE= sigs.k8s.io/yaml v1.6.0 h1:G8fkbMSAFqgEFgh4b1wmtzDnioxFCUgTZhlbj5P9QYs= sigs.k8s.io/yaml v1.6.0/go.mod h1:796bPqUfzR/0jLAl6XjHl3Ck7MiyVv8dbTdyT3/pMf4= diff --git a/internal/controllers/lvmcluster/controller.go b/internal/controllers/lvmcluster/controller.go index 42da697eb..5c7b53b5b 100644 --- a/internal/controllers/lvmcluster/controller.go +++ b/internal/controllers/lvmcluster/controller.go @@ -119,6 +119,7 @@ func (r *Reconciler) GetLogPassthroughOptions() *logpassthrough.Options { //+kubebuilder:rbac:groups=lvm.topolvm.io,resources=lvmvolumegroupnodestatuses/status,verbs=get;update;patch //+kubebuilder:rbac:groups=lvm.topolvm.io,resources=lvmvolumegroupnodestatuses/finalizers,verbs=update //+kubebuilder:rbac:groups=config.openshift.io,resources=infrastructures,verbs=get +//+kubebuilder:rbac:groups=config.openshift.io,resources=apiservers,verbs=get;list;watch //+kubebuilder:rbac:groups=topolvm.io,resources=logicalvolumes,verbs=get;list;watch;create;update;patch;delete //+kubebuilder:rbac:groups=topolvm.io,resources=logicalvolumes/status,verbs=get;list;watch;create;update;patch;delete //+kubebuilder:rbac:groups=core,resources=pods,verbs=get;list;watch;delete diff --git a/internal/controllers/vgmanager/validatelvs_test.go b/internal/controllers/vgmanager/validatelvs_test.go index a8a375a45..cac07362c 100644 --- a/internal/controllers/vgmanager/validatelvs_test.go +++ b/internal/controllers/vgmanager/validatelvs_test.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "fmt" + "slices" "strings" "testing" @@ -16,7 +17,6 @@ import ( "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/utils/ptr" - "k8s.io/utils/strings/slices" "sigs.k8s.io/controller-runtime/pkg/log" )