From 93c267852ea1e923fccdd3543a5b8bec88b34561 Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Fri, 10 Jul 2026 16:04:15 -0500 Subject: [PATCH 1/2] cuopt-skill-evolution: add low-maintenance/fail-loud design rule to cuopt-developer Refactoring the routing DataModel (PR #1556) surfaced recurring maintenance footguns: a hand-maintained list mirroring the Cython wrapper's method surface, and shadow state kept only for a set-time check. Generalize the lesson into a contribution design heuristic that applies to adding any API/layer -- derive from a single source of truth rather than duplicating a surface, and prefer designs that fail loudly (guarded by a coverage test) over ones that silently misbehave. Co-Authored-By: Claude Opus 4.8 (1M context) Signed-off-by: Ramakrishna Prabhu --- skills/cuopt-developer/SKILL.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/skills/cuopt-developer/SKILL.md b/skills/cuopt-developer/SKILL.md index ecc1187e29..5028fb657a 100644 --- a/skills/cuopt-developer/SKILL.md +++ b/skills/cuopt-developer/SKILL.md @@ -88,6 +88,13 @@ Is this correct?" `sudo`/system-level changes are the one non-negotiable refusal; user-space installs and conda env setup are allowed. See [Refusal Rules — Read First](#refusal-rules--read-first). +### 6. Prefer Low-Maintenance, Hard-to-Break Designs + +When adding an API — a setter, endpoint, parameter, or a layer that wraps another — favor the design that keeps a single source of truth and has no silent-failure path: + +- **Derive, don't duplicate.** A second copy of a surface (a hand-maintained list of the methods/fields another layer already defines, or shadow state kept in parallel with the real data) drifts the moment someone forgets to update it. Derive it from the single source instead, so there is nothing to keep in sync. +- **Fail loud, not silent.** Prefer a design where forgetting a step is caught automatically over one that quietly does the wrong thing. When a mechanism leans on a convention, add a test that asserts full coverage, so a case that slips the convention fails CI instead of silently misbehaving. + --- ## Before You Start: Required Questions From 2ace0f48b9e72a8bd0f2821a5cec8f691b3eedb6 Mon Sep 17 00:00:00 2001 From: nvskills-svc-account Date: Fri, 10 Jul 2026 22:14:27 +0000 Subject: [PATCH 2/2] Attach NVSkills validation signatures Signed-off-by: nvskills-svc-account --- skills/cuopt-developer/BENCHMARK.md | 10 +++++----- skills/cuopt-developer/skill-card.md | 27 +++++++++++++-------------- skills/cuopt-developer/skill.oms.sig | 2 +- 3 files changed, 19 insertions(+), 20 deletions(-) diff --git a/skills/cuopt-developer/BENCHMARK.md b/skills/cuopt-developer/BENCHMARK.md index 03b7f4d398..98d25f627d 100644 --- a/skills/cuopt-developer/BENCHMARK.md +++ b/skills/cuopt-developer/BENCHMARK.md @@ -7,7 +7,7 @@ This benchmark summarizes 3-Tier Evaluation from NVSkills-Eval results for the s ## Evaluation Summary - Skill: `cuopt-developer` -- Evaluation date: 2026-07-02 +- Evaluation date: 2026-07-10 - NVSkills-Eval profile: `external` - Environment: `astra-sandbox` - Dataset: 3 evaluation tasks @@ -55,10 +55,10 @@ Task composition is derived from the evaluation dataset when possible. Entries w | Dimension | Num | `claude-code` | `codex` | |---|---:|---:|---:| | Security | 3 | 100% (+0%) | 100% (+0%) | -| Correctness | 3 | 75% (+20%) | 90% (+43%) | -| Discoverability | 3 | 42% (+25%) | 79% (+52%) | -| Effectiveness | 3 | 95% (+26%) | 78% (+35%) | -| Efficiency | 3 | 48% (+22%) | 77% (+35%) | +| Correctness | 3 | 75% (+18%) | 90% (+38%) | +| Discoverability | 3 | 42% (+25%) | 88% (+62%) | +| Effectiveness | 3 | 94% (+32%) | 90% (+36%) | +| Efficiency | 3 | 48% (+22%) | 89% (+49%) | Score values show skill-assisted performance. Values in parentheses show uplift versus the no-skill baseline when baseline data is available. diff --git a/skills/cuopt-developer/skill-card.md b/skills/cuopt-developer/skill-card.md index b39e79af36..2e897b0149 100644 --- a/skills/cuopt-developer/skill-card.md +++ b/skills/cuopt-developer/skill-card.md @@ -9,14 +9,14 @@ NVIDIA
### License/Terms of Use:
Apache 2.0
## Use Case:
-Developers and engineers who modify, build, test, and contribute to the NVIDIA cuOpt GPU-accelerated optimization engine codebase.
+Developers and engineers contributing to the NVIDIA cuOpt codebase use this skill to navigate the build system, follow coding conventions, submit PRs with DCO sign-off, and debug solver internals across C++/CUDA, Python, and server components.
### Deployment Geography for Use:
Global
## Requirements / Dependencies:
-**Requires API Key or External Credential:** [Not Specified]
-**Credential Type(s):** [None identified]
+**Requires API Key or External Credential:** [Yes]
+**Credential Type(s):** [API key]
Do not include secrets in prompts/logs/output; use least-privilege credentials; rotate keys as appropriate.
@@ -25,32 +25,31 @@ Risk: Review before execution as proposals could introduce incorrect or misleadi Mitigation: Review and scan skill before deployment.
## Reference(s):
-- [first_time_setup.md](references/first_time_setup.md)
- [build_and_test.md](references/build_and_test.md)
- [contributing.md](references/contributing.md)
- [conventions.md](references/conventions.md)
+- [first_time_setup.md](references/first_time_setup.md)
- [python_bindings.md](references/python_bindings.md)
- [troubleshooting.md](references/troubleshooting.md)
- [vrp_skills.md](references/vrp_skills.md)
-- [numerical_debugging.md](resources/numerical_debugging.md)
- [cuOpt User Guide](https://docs.nvidia.com/cuopt/user-guide/latest/introduction.html)
- [cuopt-examples](https://github.com/NVIDIA/cuopt-examples)
## Skill Output:
-**Output Type(s):** [Shell commands, Code, Configuration instructions]
+**Output Type(s):** [Code, Shell commands, Configuration instructions, Analysis]
**Output Format:** [Markdown with inline code blocks]
**Output Parameters:** [1D]
**Other Properties Related to Output:** [None]
## Evaluation Agents Used:
-- `claude-code`
-- `codex`
+- claude-code
+- codex
## Evaluation Tasks:
-Evaluated against 3 evaluation tasks in the NVSkills-Eval external profile (astra-sandbox environment, 1 attempt per task, 50% pass threshold).
+Evaluated against 3 internal evaluation tasks (positive skill-activation cases).
## Evaluation Metrics Used:
Reported benchmark dimensions:
@@ -75,13 +74,13 @@ Underlying evaluation signals used in this run:
| Dimension | Num | `claude-code` | `codex` | |---|---:|---:|---:| | Security | 3 | 100% (+0%) | 100% (+0%) | -| Correctness | 3 | 75% (+20%) | 90% (+43%) | -| Discoverability | 3 | 42% (+25%) | 79% (+52%) | -| Effectiveness | 3 | 95% (+26%) | 78% (+35%) | -| Efficiency | 3 | 48% (+22%) | 77% (+35%) | +| Correctness | 3 | 75% (+18%) | 90% (+38%) | +| Discoverability | 3 | 42% (+25%) | 88% (+62%) | +| Effectiveness | 3 | 94% (+32%) | 90% (+36%) | +| Efficiency | 3 | 48% (+22%) | 89% (+49%) | ## Skill Version(s):
-26.08.00 (source: frontmatter)
+26.08.00 (source: frontmatter, pyproject.toml)
## Ethical Considerations:
NVIDIA believes Trustworthy AI is a shared responsibility and we have established policies and practices to enable development for a wide array of AI applications. When downloaded or used in accordance with our terms of service, developers should work with their internal team to ensure this skill meets requirements for the relevant industry and use case and addresses unforeseen product misuse.
diff --git a/skills/cuopt-developer/skill.oms.sig b/skills/cuopt-developer/skill.oms.sig index 00d9d360f0..532d3243e2 100644 --- a/skills/cuopt-developer/skill.oms.sig +++ b/skills/cuopt-developer/skill.oms.sig @@ -1 +1 @@ -{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"x509CertificateChain":{"certificates":[{"rawBytes":"MIICgzCCAgmgAwIBAgIUKIyS7SxNteQIiWzK1dWj85E6520wCgYIKoZIzj0EAwMwVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwHhcNMjYwNDAxMDAwMDAwWhcNMjgwNDIyMTUzMzA5WjBUMQswCQYDVQQGEwJVUzEbMBkGA1UECgwSTlZJRElBIENvcnBvcmF0aW9uMSgwJgYDVQQDDB9OVklESUEgQWdlbnQgU2tpbGxzIFNpZ25pbmcgMDAxMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEYoRM9bQl/dGlwSRNi6bTpIJUXH8Nv9GciP6LSflJYYMLCc296kpyuTSsk5ddbAWiDcFX3C/ydX3jwc+qCLYP6uHy9XphyLjOQ27Yb2J6rBLVtRBS1mgGco/Gr7fL6ODco4GaMIGXMB0GA1UdDgQWBBRQ/5ZW3nJ6lmo9SVk7I15o7UGmpTAfBgNVHSMEGDAWgBRPGpILxMBBleJSsBGjrMKsby1CgjAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9vY3NwLm5kaXMubnZpZGlhLmNvbTAKBggqhkjOPQQDAwNoADBlAjAUygu/GiOCIXrgGr4SmLgeEVDcEitfFUv7ALbvLVGVyMysB3mxmO/uInZfXzWcJZsCMQDxuoxj4ZmO30jhkPIcCxGFCOvnUsnfU3TfGcouYm4M6iRpbKvtVnHPiy4bi6pcKf0="},{"rawBytes":"MIICiDCCAg6gAwIBAgIUZsIuSv9NkpJCNqtYEfCouVv5BzowCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASI72cR3ctKGg4VWnB3bNja6g1Z2PnOmFEopkPof+QeIcPk9rT+g9MjJnq51EQXL93a7C2GJ9J985G4o2V85VD7wJ1RaXhluHW2rf3y8bQGeAYaKMr5s/hUgn+M3/9WlWejgaAwgZ0wHQYDVR0OBBYEFE8akgvEwEGV4lKwEaOswqxvLUKCMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMDcGCCsGAQUFBwEBBCswKTAnBggrBgEFBQcwAYYbaHR0cDovL29jc3AubmRpcy5udmlkaWEuY29tMAoGCCqGSM49BAMDA2gAMGUCMQCeIMMfAbyzPDacw2MxG+Yt1cikrJX/DVxiGfXuHmkkXn6VgSzE79+lkqDErpVO2gYCMCNEColOyvUvkzZGUEI1hQ3PfMgi3FIo9tHoBKMw4/wGBLFpu/0ubtmbBXM6/UMOEw=="},{"rawBytes":"MIICRTCCAcygAwIBAgIUeJdY3rV86EdvFmG7L8LJBsyQFYkwCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABAYpiXCDjJ9NT2eSDhyHJVSw1Tbze18cGG2F/578oWvHxg23eQAhNRYdq88i1iOshZSO6C29doKui5Xpmo/7Ctw9Sx4PP2RzOmIuOLCuTdNtKcTRwi4GEsd5BAFvWj42M6NjMGEwHQYDVR0OBBYEFItnoAjjfuCEUvzyvWyI2vOGvwPjMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2cAMGQCMCwtAjWLaNwgGWNCgdyNoTyvNhqWRECRJV2r3+7w8g0PL6NHLOsbkgE09BH95h8XlgIwTaQmbbUh2ChAJ5TA1wRiVDnCcvbzHlZl2jM2FcwQQZlk19LOAbyGMRixbu2Ww/rj"}]},"tlogEntries":[]},"dsseEnvelope":{"payload":"ewogICJfdHlwZSI6ICJodHRwczovL2luLXRvdG8uaW8vU3RhdGVtZW50L3YxIiwKICAic3ViamVjdCI6IFsKICAgIHsKICAgICAgIm5hbWUiOiAiY3VvcHQtZGV2ZWxvcGVyIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjMzMWQ3YWMyMTFiNDdmNzg3YTg5MTU5ZjhkYTRiOWNiMDEwNGE5YTQ5MjE3MWM4Y2NlMTUzMTU3ZWRlNDk4MDciCiAgICAgIH0KICAgIH0KICBdLAogICJwcmVkaWNhdGVUeXBlIjogImh0dHBzOi8vbW9kZWxfc2lnbmluZy9zaWduYXR1cmUvdjEuMCIsCiAgInByZWRpY2F0ZSI6IHsKICAgICJzZXJpYWxpemF0aW9uIjogewogICAgICAibWV0aG9kIjogImZpbGVzIiwKICAgICAgImhhc2hfdHlwZSI6ICJzaGEyNTYiLAogICAgICAiYWxsb3dfc3ltbGlua3MiOiBmYWxzZSwKICAgICAgImlnbm9yZV9wYXRocyI6IFsKICAgICAgICAiLmdpdGh1YiIsCiAgICAgICAgIi5naXQiLAogICAgICAgICIuZ2l0aWdub3JlIiwKICAgICAgICAiLmdpdGF0dHJpYnV0ZXMiCiAgICAgIF0KICAgIH0sCiAgICAicmVzb3VyY2VzIjogWwogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogIkJFTkNITUFSSy5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICIyMjRiMTc1OWJmNDViYjc5MjU1NjM3NDMwZmQzMWRmMjk5ZDA1OGFiMjkwMzkzMGNkZjVmMWM1MWRjNmNlYjFjIgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogIlNLSUxMLm1kIiwKICAgICAgICAiZGlnZXN0IjogIjkyYTNhZWY0Y2Y2MDc2NTZkNjY1MDg3YjY5ODI5NjYzZGNjYTJhNTE4YzE5YWRlYjVmNTIwMThmYmYyOTI5YTQiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAiYmVuY2htYXJrL2V2YWxzLmpzb24iLAogICAgICAgICJkaWdlc3QiOiAiMjFkNDVkY2QyMzNhMGMxOGM3NmI1MzIyOTAzMTY4ZGRmZWNjYWU5OWZjMWExMDliYTk2MDU3MDhlMTJhNDc5OSIKICAgICAgfSwKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJldmFscy9ldmFscy5qc29uIiwKICAgICAgICAiZGlnZXN0IjogIjBhYTcxYTM5NTc3MTUxYjU3NGQ2MDg4NTM5NzU5YmIzZTI2MzdlM2M5MTZmMWZmM2IyYWI3MTUzN2QwZTgyZmIiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAicmVmZXJlbmNlcy9idWlsZF9hbmRfdGVzdC5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICIwNmI1MWUyYmU3ODIzN2QzMjE3NGZiYTcwOGZkZGVmNzMyMGI1YzUzNzUwMTg1NTNmNGM5OTMzZWE1NTM5MzhhIgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvY29udHJpYnV0aW5nLm1kIiwKICAgICAgICAiZGlnZXN0IjogImNhMmMwYWJkNjZlZmZjMGIzNjk1MmZiNzRlYmZiOWZmOWQzYmM5N2E5ZDUwNWQ3ZTI1YTA1M2VkOWEwMjg0NTEiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAicmVmZXJlbmNlcy9jb252ZW50aW9ucy5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICIxMjU5ZDAzMzFiNWU5ZTdlMjI5OWJmMjg4Y2U3MTM3Yzk3YzI5N2YxNjU0NzAwYTM1NjE4OTNiYjMxYmY5YzZlIgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvZmlyc3RfdGltZV9zZXR1cC5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICJlNWU1MDUxNzVmZTJmNjNlMTE0YmU3ZmUxOTkyN2I4NDIwZGM1ODdmM2Y2YTEyNjgxNmFmNWE2MDhmZDc2MzEzIgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvcHl0aG9uX2JpbmRpbmdzLm1kIiwKICAgICAgICAiZGlnZXN0IjogIjZhNDM2MzgwMTdkMzU5MmUyNWI3YzY0YTBiNmFiZDAyNDQ2Y2NkZDI0MmI4YTRmZGQ3MmJkMDJiNGRiZjIyOTQiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgIm5hbWUiOiAicmVmZXJlbmNlcy90cm91Ymxlc2hvb3RpbmcubWQiLAogICAgICAgICJkaWdlc3QiOiAiOTJhZDZiZDFhMmM2NjhjMjhiYzZmNTBjY2M2NDlhNmE5NWE4YjcwODYxNThiZTBkNjg5MmJlOTU3MTdlM2E1NyIKICAgICAgfSwKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJyZWZlcmVuY2VzL3ZycF9za2lsbHMubWQiLAogICAgICAgICJkaWdlc3QiOiAiOTlhMGZkZmY2YjQ2NDhiZmIwYmUyNmQ2ZTM3OWQ1MzlmMmJkMThmN2YzYzBkYWM5OGIxODI2MDNiYTliYThhZCIKICAgICAgfSwKICAgICAgewogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAibmFtZSI6ICJyZXNvdXJjZXMvbnVtZXJpY2FsX2RlYnVnZ2luZy5tZCIsCiAgICAgICAgImRpZ2VzdCI6ICJkNTQ5NjFlZmY3Mjk4NTBjM2UxNzgwNjJmN2Y2NGU1MzJhOWM4OTUxMjNjZTFkYTFmNzYyNzU3NGY2MjMyNjgxIgogICAgICB9LAogICAgICB7CiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJuYW1lIjogInNraWxsLWNhcmQubWQiLAogICAgICAgICJkaWdlc3QiOiAiMzJkMTVlNWFkM2Y1NDk4NzdkZDJkMzY3MzBlNjgwNzk3ZTcwNTEyYmI5YzIwOTUzZGMyZWU3MTFiZDE1YTA1MiIKICAgICAgfQogICAgXQogIH0KfQ==","payloadType":"application/vnd.in-toto+json","signatures":[{"sig":"MGUCMQCBBNocNrC4WzFneNrCWlxmZIddPgfFW1jh9QHUh+ykqCWSqybiUzMIUyygnBTwtUwCMExvoWFMjXEztVVPEyCYM+K/R7/zI05sMwJEJM9+rK72SIk/iTsVMOAeJ+R9gIoqQg==","keyid":""}]}} \ No newline at end of file +{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"x509CertificateChain":{"certificates":[{"rawBytes":"MIICgzCCAgmgAwIBAgIUKIyS7SxNteQIiWzK1dWj85E6520wCgYIKoZIzj0EAwMwVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwHhcNMjYwNDAxMDAwMDAwWhcNMjgwNDIyMTUzMzA5WjBUMQswCQYDVQQGEwJVUzEbMBkGA1UECgwSTlZJRElBIENvcnBvcmF0aW9uMSgwJgYDVQQDDB9OVklESUEgQWdlbnQgU2tpbGxzIFNpZ25pbmcgMDAxMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEYoRM9bQl/dGlwSRNi6bTpIJUXH8Nv9GciP6LSflJYYMLCc296kpyuTSsk5ddbAWiDcFX3C/ydX3jwc+qCLYP6uHy9XphyLjOQ27Yb2J6rBLVtRBS1mgGco/Gr7fL6ODco4GaMIGXMB0GA1UdDgQWBBRQ/5ZW3nJ6lmo9SVk7I15o7UGmpTAfBgNVHSMEGDAWgBRPGpILxMBBleJSsBGjrMKsby1CgjAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9vY3NwLm5kaXMubnZpZGlhLmNvbTAKBggqhkjOPQQDAwNoADBlAjAUygu/GiOCIXrgGr4SmLgeEVDcEitfFUv7ALbvLVGVyMysB3mxmO/uInZfXzWcJZsCMQDxuoxj4ZmO30jhkPIcCxGFCOvnUsnfU3TfGcouYm4M6iRpbKvtVnHPiy4bi6pcKf0="},{"rawBytes":"MIICiDCCAg6gAwIBAgIUZsIuSv9NkpJCNqtYEfCouVv5BzowCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASI72cR3ctKGg4VWnB3bNja6g1Z2PnOmFEopkPof+QeIcPk9rT+g9MjJnq51EQXL93a7C2GJ9J985G4o2V85VD7wJ1RaXhluHW2rf3y8bQGeAYaKMr5s/hUgn+M3/9WlWejgaAwgZ0wHQYDVR0OBBYEFE8akgvEwEGV4lKwEaOswqxvLUKCMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMDcGCCsGAQUFBwEBBCswKTAnBggrBgEFBQcwAYYbaHR0cDovL29jc3AubmRpcy5udmlkaWEuY29tMAoGCCqGSM49BAMDA2gAMGUCMQCeIMMfAbyzPDacw2MxG+Yt1cikrJX/DVxiGfXuHmkkXn6VgSzE79+lkqDErpVO2gYCMCNEColOyvUvkzZGUEI1hQ3PfMgi3FIo9tHoBKMw4/wGBLFpu/0ubtmbBXM6/UMOEw=="},{"rawBytes":"MIICRTCCAcygAwIBAgIUeJdY3rV86EdvFmG7L8LJBsyQFYkwCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABAYpiXCDjJ9NT2eSDhyHJVSw1Tbze18cGG2F/578oWvHxg23eQAhNRYdq88i1iOshZSO6C29doKui5Xpmo/7Ctw9Sx4PP2RzOmIuOLCuTdNtKcTRwi4GEsd5BAFvWj42M6NjMGEwHQYDVR0OBBYEFItnoAjjfuCEUvzyvWyI2vOGvwPjMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2cAMGQCMCwtAjWLaNwgGWNCgdyNoTyvNhqWRECRJV2r3+7w8g0PL6NHLOsbkgE09BH95h8XlgIwTaQmbbUh2ChAJ5TA1wRiVDnCcvbzHlZl2jM2FcwQQZlk19LOAbyGMRixbu2Ww/rj"}]},"tlogEntries":[]},"dsseEnvelope":{"payload":"ewogICJfdHlwZSI6ICJodHRwczovL2luLXRvdG8uaW8vU3RhdGVtZW50L3YxIiwKICAic3ViamVjdCI6IFsKICAgIHsKICAgICAgIm5hbWUiOiAiY3VvcHQtZGV2ZWxvcGVyIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjQ2NTE3YzQyNjNlN2E0NTNmYjI3NWIwOGU0ZWE3YjY1NjQxY2FjNTJiYmMwYmE3ZThkZDBiZTdmMWQ3MWZhM2UiCiAgICAgIH0KICAgIH0KICBdLAogICJwcmVkaWNhdGVUeXBlIjogImh0dHBzOi8vbW9kZWxfc2lnbmluZy9zaWduYXR1cmUvdjEuMCIsCiAgInByZWRpY2F0ZSI6IHsKICAgICJyZXNvdXJjZXMiOiBbCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogIjcwYjFkOGU3NzQxMWI1ZjA3ZjJiZWIzZTE2MDU2MTQ4NzY3MjM4MzJkNzU2ZmZlMjQ4ZjE5MDBhY2Q5MTY4YjYiLAogICAgICAgICJuYW1lIjogIkJFTkNITUFSSy5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogIjRkNWQ4MGUyYWNkMWM2YWM5MjZlMzJiMmQ0NGEwNjA5ZTgyZTJjYzdmYjFiMmY3ZDNlNjRjMzk1MjdhNjYzMmEiLAogICAgICAgICJuYW1lIjogIlNLSUxMLm1kIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJkaWdlc3QiOiAiMjFkNDVkY2QyMzNhMGMxOGM3NmI1MzIyOTAzMTY4ZGRmZWNjYWU5OWZjMWExMDliYTk2MDU3MDhlMTJhNDc5OSIsCiAgICAgICAgIm5hbWUiOiAiYmVuY2htYXJrL2V2YWxzLmpzb24iLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICIwYWE3MWEzOTU3NzE1MWI1NzRkNjA4ODUzOTc1OWJiM2UyNjM3ZTNjOTE2ZjFmZjNiMmFiNzE1MzdkMGU4MmZiIiwKICAgICAgICAibmFtZSI6ICJldmFscy9ldmFscy5qc29uIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJkaWdlc3QiOiAiMDZiNTFlMmJlNzgyMzdkMzIxNzRmYmE3MDhmZGRlZjczMjBiNWM1Mzc1MDE4NTUzZjRjOTkzM2VhNTUzOTM4YSIsCiAgICAgICAgIm5hbWUiOiAicmVmZXJlbmNlcy9idWlsZF9hbmRfdGVzdC5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogImNhMmMwYWJkNjZlZmZjMGIzNjk1MmZiNzRlYmZiOWZmOWQzYmM5N2E5ZDUwNWQ3ZTI1YTA1M2VkOWEwMjg0NTEiLAogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvY29udHJpYnV0aW5nLm1kIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJkaWdlc3QiOiAiMTI1OWQwMzMxYjVlOWU3ZTIyOTliZjI4OGNlNzEzN2M5N2MyOTdmMTY1NDcwMGEzNTYxODkzYmIzMWJmOWM2ZSIsCiAgICAgICAgIm5hbWUiOiAicmVmZXJlbmNlcy9jb252ZW50aW9ucy5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogImU1ZTUwNTE3NWZlMmY2M2UxMTRiZTdmZTE5OTI3Yjg0MjBkYzU4N2YzZjZhMTI2ODE2YWY1YTYwOGZkNzYzMTMiLAogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvZmlyc3RfdGltZV9zZXR1cC5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogIjZhNDM2MzgwMTdkMzU5MmUyNWI3YzY0YTBiNmFiZDAyNDQ2Y2NkZDI0MmI4YTRmZGQ3MmJkMDJiNGRiZjIyOTQiLAogICAgICAgICJuYW1lIjogInJlZmVyZW5jZXMvcHl0aG9uX2JpbmRpbmdzLm1kIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJkaWdlc3QiOiAiOTJhZDZiZDFhMmM2NjhjMjhiYzZmNTBjY2M2NDlhNmE5NWE4YjcwODYxNThiZTBkNjg5MmJlOTU3MTdlM2E1NyIsCiAgICAgICAgIm5hbWUiOiAicmVmZXJlbmNlcy90cm91Ymxlc2hvb3RpbmcubWQiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICI5OWEwZmRmZjZiNDY0OGJmYjBiZTI2ZDZlMzc5ZDUzOWYyYmQxOGY3ZjNjMGRhYzk4YjE4MjYwM2JhOWJhOGFkIiwKICAgICAgICAibmFtZSI6ICJyZWZlcmVuY2VzL3ZycF9za2lsbHMubWQiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICJkNTQ5NjFlZmY3Mjk4NTBjM2UxNzgwNjJmN2Y2NGU1MzJhOWM4OTUxMjNjZTFkYTFmNzYyNzU3NGY2MjMyNjgxIiwKICAgICAgICAibmFtZSI6ICJyZXNvdXJjZXMvbnVtZXJpY2FsX2RlYnVnZ2luZy5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICAiZGlnZXN0IjogIjA0YjkyMTVhZGQ5OTMwZmU2MmZiOGViYjc2ZTBhMDk2MTdhMjMzNWEzZjE5ZDJlMjA3ZWViYmQwOWNmYTIwMTIiLAogICAgICAgICJuYW1lIjogInNraWxsLWNhcmQubWQiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9CiAgICBdLAogICAgInNlcmlhbGl6YXRpb24iOiB7CiAgICAgICJtZXRob2QiOiAiZmlsZXMiLAogICAgICAiaWdub3JlX3BhdGhzIjogWwogICAgICAgICIuZ2l0YXR0cmlidXRlcyIsCiAgICAgICAgIi5naXRpZ25vcmUiLAogICAgICAgICIuZ2l0aHViIiwKICAgICAgICAiLmdpdCIKICAgICAgXSwKICAgICAgImhhc2hfdHlwZSI6ICJzaGEyNTYiLAogICAgICAiYWxsb3dfc3ltbGlua3MiOiBmYWxzZQogICAgfQogIH0KfQ==","payloadType":"application/vnd.in-toto+json","signatures":[{"sig":"MGUCMQCWXYiyGETmca5/9e+PWKyj0Pv8WtXXLQ+1N4yvGHkLMHlMqm67ATwAXwkCoIxsJEMCMEEhdmimxfRrsotNW7ECDPyBs1ItxczE8J4mqUDTyWDjAHDmQ1nFfGdktWRnaGf+vg==","keyid":""}]}} \ No newline at end of file