Uploaded using `kernel-builder`.

#7
README.md CHANGED
@@ -21,6 +21,9 @@ ESMFold2TriangleMultiplication(...)
21
  - `ESMFold2TriangleMultiplication`
22
  - `triangle_multiplicative_update_with_residual`
23
 
 
 
 
24
  ## Benchmarks
25
 
26
  No benchmark available yet.
 
21
  - `ESMFold2TriangleMultiplication`
22
  - `triangle_multiplicative_update_with_residual`
23
 
24
+ ## Available layers
25
+ - `ESMFold2TriangleMultiplication`
26
+
27
  ## Benchmarks
28
 
29
  No benchmark available yet.
build/torch-cuda/_ops.py CHANGED
@@ -4,7 +4,13 @@ def get_backend() -> str:
4
  """Detect the backend by inspecting torch."""
5
  import torch
6
 
7
- if hasattr(torch, "neuron"):
 
 
 
 
 
 
8
  # Needs to be sorted before specific Torch builds, since Neuron
9
  # extension can be loaded into e.g. CUDA Torch builds.
10
  return "neuron"
@@ -22,7 +28,7 @@ def get_backend() -> str:
22
 
23
  def _find_ops_name() -> str:
24
  kernel_name = "esmfold2_trimul"
25
- unique_id = "f3cf427"
26
  backend = get_backend()
27
  return f"_{kernel_name}_{backend}_{unique_id}"
28
 
 
4
  """Detect the backend by inspecting torch."""
5
  import torch
6
 
7
+ if hasattr(torch.backends, "tpu"):
8
+ # torch_tpu sets torch.backends.tpu when it is imported (via
9
+ # torch's device-backend autoload), regardless of whether TPU
10
+ # hardware is present — analogous to torch.version.cuda being
11
+ # set on CUDA builds without a GPU.
12
+ return "tpu"
13
+ elif hasattr(torch, "neuron"):
14
  # Needs to be sorted before specific Torch builds, since Neuron
15
  # extension can be loaded into e.g. CUDA Torch builds.
16
  return "neuron"
 
28
 
29
  def _find_ops_name() -> str:
30
  kernel_name = "esmfold2_trimul"
31
+ unique_id = "cafe8d5"
32
  backend = get_backend()
33
  return f"_{kernel_name}_{backend}_{unique_id}"
34
 
build/torch-cuda/esmfold2_trimul/__init__.py DELETED
@@ -1,26 +0,0 @@
1
- import ctypes
2
- import importlib.util
3
- import sys
4
- from pathlib import Path
5
- from types import ModuleType
6
-
7
-
8
- def _import_from_path(file_path: Path) -> ModuleType:
9
- # We cannot use the module name as-is, after adding it to `sys.modules`,
10
- # it would also be used for other imports. So, we make a module name that
11
- # depends on the path for it to be unique using the hex-encoded hash of
12
- # the path.
13
- path_hash = "{:x}".format(ctypes.c_size_t(hash(file_path.absolute())).value)
14
- module_name = path_hash
15
- spec = importlib.util.spec_from_file_location(module_name, file_path)
16
- if spec is None:
17
- raise ImportError(f"Cannot load spec for {module_name} from {file_path}")
18
- module = importlib.util.module_from_spec(spec)
19
- if module is None:
20
- raise ImportError(f"Cannot load module {module_name} from spec")
21
- sys.modules[module_name] = module
22
- spec.loader.exec_module(module) # type: ignore
23
- return module
24
-
25
-
26
- globals().update(vars(_import_from_path(Path(__file__).parent.parent / "__init__.py")))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
build/torch-cuda/fused_ln_residual.py CHANGED
@@ -60,7 +60,9 @@ def _ln_fwd_kernel(
60
  TILE_M: tl.constexpr,
61
  ):
62
  pid = tl.program_id(axis=0).to(tl.int64)
63
- M64 = M.to(tl.int64)
 
 
64
 
65
  offs_m = pid * TILE_M + tl.arange(0, TILE_M).to(tl.int64)
66
  offs_d = tl.arange(0, D).to(tl.int64)
@@ -108,7 +110,9 @@ def _ln_bwd_kernel(
108
  TILE_M: tl.constexpr,
109
  ):
110
  pid = tl.program_id(axis=0).to(tl.int64)
111
- M64 = M.to(tl.int64)
 
 
112
 
113
  offs_m = pid * TILE_M + tl.arange(0, TILE_M).to(tl.int64)
114
  offs_d = tl.arange(0, D).to(tl.int64)
 
60
  TILE_M: tl.constexpr,
61
  ):
62
  pid = tl.program_id(axis=0).to(tl.int64)
63
+ # tl.cast, not M.to: M is a plain int when Triton specializes it (M == 1),
64
+ # and when torch.compile analyzes the kernel.
65
+ M64 = tl.cast(M, tl.int64)
66
 
67
  offs_m = pid * TILE_M + tl.arange(0, TILE_M).to(tl.int64)
68
  offs_d = tl.arange(0, D).to(tl.int64)
 
110
  TILE_M: tl.constexpr,
111
  ):
112
  pid = tl.program_id(axis=0).to(tl.int64)
113
+ # tl.cast, not M.to: M is a plain int when Triton specializes it (M == 1),
114
+ # and when torch.compile analyzes the kernel.
115
+ M64 = tl.cast(M, tl.int64)
116
 
117
  offs_m = pid * TILE_M + tl.arange(0, TILE_M).to(tl.int64)
118
  offs_d = tl.arange(0, D).to(tl.int64)
build/torch-cuda/layers.py CHANGED
@@ -33,6 +33,8 @@ def _bf16(t):
33
 
34
 
35
  class ESMFold2TriangleMultiplication(nn.Module):
 
 
36
  def forward(self, pair_grid: torch.Tensor, visibility: torch.Tensor | None = None) -> torch.Tensor:
37
  lat = self.dim
38
  pb = self.proj_bundle.weight
 
33
 
34
 
35
  class ESMFold2TriangleMultiplication(nn.Module):
36
+ can_torch_compile = True
37
+
38
  def forward(self, pair_grid: torch.Tensor, visibility: torch.Tensor | None = None) -> torch.Tensor:
39
  lat = self.dim
40
  pb = self.proj_bundle.weight
build/torch-cuda/metadata.json CHANGED
@@ -1,9 +1,11 @@
1
  {
2
  "name": "esmfold2-trimul",
3
- "id": "_esmfold2_trimul_cuda_f3cf427",
4
  "version": 1,
 
5
  "license": "Apache-2.0",
6
  "python-depends": [],
 
7
  "backend": {
8
  "type": "cuda"
9
  },
@@ -11,23 +13,22 @@
11
  "algorithm": "sha256",
12
  "files": {
13
  "__init__.py": "QEOcPj5Hqkgyj1VMevVV+y5HuW6RfuNgx1ssRFeMqb8=",
14
- "_ops.py": "/4Wxb/Y81Pq33vEqjfD22UtiVsXwYag7k/twtMh83js=",
15
- "esmfold2_trimul/__init__.py": "DFYPlrhXwYjEqCl/8n0SmWGZV8NFml5DPhMjKfv98GY=",
16
  "fused_dual_gemm.py": "5wIgwoeeDYcMG4yeKfkxDS1nhxVpDc8Nxx1wo32u+Kk=",
17
- "fused_ln_residual.py": "6GsiK/wIdtf7Lf8gGdLDrudzyIQjIM8O4B3+bD3Xk6s=",
18
- "layers.py": "iDMKA5XPxtPYl4KXDAPVF2O3SkVTvTPipHjxPmmdTyc=",
19
  "trimul_einsum_triton.py": "77kcCDRV/eHG/LoycgXMvoc0UsAOcgG/+j8E4DiwcTw=",
20
- "trimul_with_residual.py": "gxqMyKd488c9HJqu9z9WIJ0oxeMz7cEwbKp4cdmGzMI="
21
  }
22
  },
23
  "provenance": {
24
  "kernel-builder": {
25
  "version": "0.17.0-dev0",
26
- "sha": "81580bb92577f2f7228661ca2a221fc052375709",
27
  "dirty": false
28
  },
29
  "kernel": {
30
- "sha": "f3cf4277a3fb75e04f9a9594b4abf8edf94ddd3d",
31
  "dirty": false
32
  }
33
  }
 
1
  {
2
  "name": "esmfold2-trimul",
3
+ "id": "_esmfold2_trimul_cuda_cafe8d5",
4
  "version": 1,
5
+ "kernels-minver": "0.14.0",
6
  "license": "Apache-2.0",
7
  "python-depends": [],
8
+ "kernel-depends": [],
9
  "backend": {
10
  "type": "cuda"
11
  },
 
13
  "algorithm": "sha256",
14
  "files": {
15
  "__init__.py": "QEOcPj5Hqkgyj1VMevVV+y5HuW6RfuNgx1ssRFeMqb8=",
16
+ "_ops.py": "2/hlli9ZZts2pwZsCA8kTb1G8ArN/vNtDrOaqaDlnbQ=",
 
17
  "fused_dual_gemm.py": "5wIgwoeeDYcMG4yeKfkxDS1nhxVpDc8Nxx1wo32u+Kk=",
18
+ "fused_ln_residual.py": "inG8a2sHTGrIJSXH8bB10zzNOyaMtLmjAMlc/e6vSlc=",
19
+ "layers.py": "UuuCrpDruJguKKaruy3Btgn5Q7jH/JwkjwB81zWNT6A=",
20
  "trimul_einsum_triton.py": "77kcCDRV/eHG/LoycgXMvoc0UsAOcgG/+j8E4DiwcTw=",
21
+ "trimul_with_residual.py": "KutJ8jQf2f4ngrXNVfl52bRedkqYWyIvySpIoD5RKWk="
22
  }
23
  },
24
  "provenance": {
25
  "kernel-builder": {
26
  "version": "0.17.0-dev0",
27
+ "commit": "a7f0afdb29a6a3372b1d47180cc0c182454c5e3b",
28
  "dirty": false
29
  },
30
  "kernel": {
31
+ "commit": "cafe8d54340b6a2e0466a13ef60986d05193f9cb",
32
  "dirty": false
33
  }
34
  }
build/torch-cuda/metadata.json.sigstore CHANGED
@@ -1 +1 @@
1
- {"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json", "verificationMaterial":{"certificate":{"rawBytes":"MIIHSjCCBtCgAwIBAgIUYfI48cXEVi76NfJGXnr+fuHbc0IwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYwODAxMDE1OTAwWhcNMjYwODAxMDIwOTAwWjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAESGojDXChYtvcB4s/Qq/+/gZY5xZMOTr86NFEzCXn47kCzrOAr0OfoNS+3t9xwp8kpnhZR1l2qQF1CDlTri4CSqOCBe8wggXrMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUulGdqCXp1O8mcLrCnA9hbb50NvMwHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wawYDVR0RAQH/BGEwX4ZdaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL2J1aWxkLnlhbWxAcmVmcy9oZWFkcy9tYWluMDkGCisGAQQBg78wAQEEK2h0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20wHwYKKwYBBAGDvzABAgQRd29ya2Zsb3dfZGlzcGF0Y2gwNgYKKwYBBAGDvzABAwQoZjNjZjQyNzdhM2ZiNzVlMDRmOWE5NTk0YjRhYmY4ZWRmOTRkZGQzZDATBgorBgEEAYO/MAEEBAVCdWlsZDArBgorBgEEAYO/MAEFBB1odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eTAdBgorBgEEAYO/MAEGBA9yZWZzL2hlYWRzL21haW4wOwYKKwYBBAGDvzABCAQtDCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMG0GCisGAQQBg78wAQkEXwxdaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL2J1aWxkLnlhbWxAcmVmcy9oZWFkcy9tYWluMDgGCisGAQQBg78wAQoEKgwoZjNjZjQyNzdhM2ZiNzVlMDRmOWE5NTk0YjRhYmY4ZWRmOTRkZGQzZDAbBgorBgEEAYO/MAELBA0MC3NlbGYtaG9zdGVkMEAGCisGAQQBg78wAQwEMgwwaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5MDgGCisGAQQBg78wAQ0EKgwoZjNjZjQyNzdhM2ZiNzVlMDRmOWE5NTk0YjRhYmY4ZWRmOTRkZGQzZDAfBgorBgEEAYO/MAEOBBEMD3JlZnMvaGVhZHMvbWFpbjAaBgorBgEEAYO/MAEPBAwMCjEwNzE0NzU1MjkwLgYKKwYBBAGDvzABEAQgDB5odHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2UwGAYKKwYBBAGDvzABEQQKDAgyNTcyMDc0MzBtBgorBgEEAYO/MAESBF8MXWh0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eS8uZ2l0aHViL3dvcmtmbG93cy9idWlsZC55YW1sQHJlZnMvaGVhZHMvbWFpbjA4BgorBgEEAYO/MAETBCoMKGYzY2Y0Mjc3YTNmYjc1ZTA0ZjlhOTU5NGI0YWJmOGVkZjk0ZGRkM2QwIQYKKwYBBAGDvzABFAQTDBF3b3JrZmxvd19kaXNwYXRjaDBkBgorBgEEAYO/MAEVBFYMVGh0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eS9hY3Rpb25zL3J1bnMvMzA2Nzg5ODIwMDcvYXR0ZW1wdHMvMTAWBgorBgEEAYO/MAEWBAgMBnB1YmxpYzBGBgorBgEEAYO/MAEYBDgMNnJlcG86aHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHk6cmVmOnJlZnMvaGVhZHMvbWFpbjCBiQYKKwYBBAHWeQIEAgR7BHkAdwB1AN09MGrGxxEyYxkeHJlnNwKiSl643jyt/4eKcoAvKe6OAAABn7sLzb8AAAQDAEYwRAIgPHpReH5gaoXDxqHS1+zELpw6ITj3kb/R+pprLCql56UCIHLdjt2Sk8fW1edNMf7RuS83UHrI0QKU0yuMqXRpEywBMAoGCCqGSM49BAMDA2gAMGUCMBvpIyo2WrO6mh1e99Sb9S1t7XyAMpgac6U5k69whppq05DNew6TXOGKxXmwfGgG1QIxALWkhkFgjewCT1RD2T7fc3WULI9h2ncdA3xYcuTnNAXnaFAqjvZ0PW3n1cmdh7lHtQ=="}, "tlogEntries":[{"logIndex":"2309786999", "logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="}, "kindVersion":{"kind":"hashedrekord", "version":"0.0.1"}, "integratedTime":"1785549541", "inclusionPromise":{"signedEntryTimestamp":"MEYCIQDdg3ECLk+GJrtiOr7kBAmHtPLCVOdIKPXiTHg+ZLFtrwIhAKcPi4YcMIVjph/dA+d4262N9QANlDOWJulhVfKRncio"}, "inclusionProof":{"logIndex":"2187882737", "rootHash":"NbO62cQsz+FY8D3iX1qqHJeFNV65bgzki3v/hLi9RaY=", "treeSize":"2187882742", "hashes":["YhvO6mvV93Kt7R9MdjnH3iv5AV4AEo0BKjZpxan+cpQ=", "syoHbPGJCi/D7929SzxJZiDxhuy09kX2wdI5auoEKIQ=", "SATpnKnVUzNgbs4FALsEifAcFozgJWWgSeFNYbhB0N8=", "7ecGOrhJsCOI0+KLMDn3UV+jQoxJ4y45K+uAqbk6mXE=", "WQsYJpBWbhbvVfMT/JT2NeOInVzBbYR2pzzX0/1Itn0=", "dFHFNYQ5SpV9IsLEnh7ZtCcUtPKYilpHXlq+9ZR3LQo=", "qtHwOXamJdNALEkDGZmNxpmcn3mSv8P4k1Cs5/oRTuM=", "Kqh65kZIZwWtR0ipnIGC/QthRdkrJea5GOiA5sFqWEg=", "+Ki3LxPDAZmxPTG+0qz+CjWaJj5dApqYfJiTQ7rqM0w=", "c+dRUQwBu38/zsU0oSvn6vFebFhtosJtQ0IUtDcU3zQ=", "LyF9sTOxKmJohoGiACpHJ2ZVtYTjqHbSKTKMIMpbCz8=", "59j/+9iGeAh3rji6yNS04n6aeLaAXOGkyBUw1xSctkc=", "izc1AepmrGt0ZNyXvDMfDKzrzdWHPO3Kzl1jsp4xSQc=", "N2cxe8veqi3iG/EGf1zAagt4SqsWKwgyxNCegSDc60s=", "xH/DCseLHr9eKoYT8qsORZK7zVdEGYWHuVtsVrD95wY="], "checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n2187882742\nNbO62cQsz+FY8D3iX1qqHJeFNV65bgzki3v/hLi9RaY=\n\n— rekor.sigstore.dev wNI9ajBFAiEAw/4EL3UX3QzmXSm7pUksHhEfDtxLQ+gvv24Vsws3ej0CIE7NAuM9mAgX91LtFAdC7OscqHxYkGpsAFbFQEsoIlgS\n"}}, "canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiIwNjVlNTExMGYzM2Q2YTRmNjNmZDJkZmJmZjM2NGI2ODAzZDc0MWUyOWNmODU0OThkODE5MmU0NDBmZDZhYWMzIn19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FWUNJUURFYm1jM3RsWlJMMXlhamwyRzFsSDI4MVRPNVpCNHlYQXBxb05zaGlZZGdBSWhBTFlaYU4vbVd3RkhDWHk5T05WU2xUNW1ZN3R1NHI1eG5ja2cvWXZKTFAxcyIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaFRha05EUW5SRFowRjNTVUpCWjBsVldXWkpORGhqV0VWV2FUYzJUbVpLUjFodWNpdG1kVWhpWXpCSmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFpkMDlFUVhoTlJFVXhUMVJCZDFkb1kwNU5hbGwzVDBSQmVFMUVTWGRQVkVGM1YycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZUUjI5cVJGaERhRmwwZG1OQ05ITXZVWEV2S3k5bldsazFlRnBOVDFSeU9EWk9Sa1VLZWtOWWJqUTNhME42Y2s5QmNqQlBabTlPVXlzemREbDRkM0E0YTNCdWFGcFNNV3d5Y1ZGR01VTkViRlJ5YVRSRFUzRlBRMEpsT0hkbloxaHlUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlYxYkVka0NuRkRXSEF4VHpodFkweHlRMjVCT1doaVlqVXdUblpOZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDJGM1dVUldVakJTUVZGSUwwSkhSWGRZTkZwa1lVaFNNR05JVFRaTWVUbHVZVmhTYjJSWFNYVlpNamwwVERKb01Wb3laSEJpYldSdFdWZE9iQXBNTW5Sc1kyMDFiR0pJVFhSWk1qbDBZbGhXZFdGWVVqVk1lVFZ1WVZoU2IyUlhTWFprTWpsNVlUSmFjMkl6WkhwTU1rb3hZVmQ0YTB4dWJHaGlWM2hCQ21OdFZtMWplVGx2V2xkR2EyTjVPWFJaVjJ4MVRVUnJSME5wYzBkQlVWRkNaemM0ZDBGUlJVVkxNbWd3WkVoQ2VrOXBPSFprUnpseVdsYzBkVmxYVGpBS1lWYzVkV041Tlc1aFdGSnZaRmRLTVdNeVZubFpNamwxWkVkV2RXUkROV3BpTWpCM1NIZFpTMHQzV1VKQ1FVZEVkbnBCUWtGblVWSmtNamw1WVRKYWN3cGlNMlJtV2tkc2VtTkhSakJaTW1kM1RtZFpTMHQzV1VKQ1FVZEVkbnBCUWtGM1VXOWFhazVxV21wUmVVNTZaR2hOTWxwcFRucFdiRTFFVW0xUFYwVTFDazVVYXpCWmFsSm9XVzFaTkZwWFVtMVBWRkpyV2tkUmVscEVRVlJDWjI5eVFtZEZSVUZaVHk5TlFVVkZRa0ZXUTJSWGJITmFSRUZ5UW1kdmNrSm5SVVVLUVZsUEwwMUJSVVpDUWpGdlpGZGtibUZYTlc1YWJVWnFXbE01Y2xwWVNuVmFWM2g2VEZkT2RtSlhNVEZpYld3d1pWUkJaRUpuYjNKQ1owVkZRVmxQTHdwTlFVVkhRa0U1ZVZwWFducE1NbWhzV1ZkU2Vrd3lNV2hoVnpSM1QzZFpTMHQzV1VKQ1FVZEVkbnBCUWtOQlVYUkVRM1J2WkVoU2QyTjZiM1pNTTFKMkNtRXlWblZNYlVacVpFZHNkbUp1VFhWYU1td3dZVWhXYVdSWVRteGpiVTUyWW01U2JHSnVVWFZaTWpsMFRVY3dSME5wYzBkQlVWRkNaemM0ZDBGUmEwVUtXSGQ0WkdGSVVqQmpTRTAyVEhrNWJtRllVbTlrVjBsMVdUSTVkRXd5YURGYU1tUndZbTFrYlZsWFRteE1NblJzWTIwMWJHSklUWFJaTWpsMFlsaFdkUXBoV0ZJMVRIazFibUZZVW05a1YwbDJaREk1ZVdFeVduTmlNMlI2VERKS01XRlhlR3RNYm14b1lsZDRRV050Vm0xamVUbHZXbGRHYTJONU9YUlpWMngxQ2sxRVowZERhWE5IUVZGUlFtYzNPSGRCVVc5RlMyZDNiMXBxVG1wYWFsRjVUbnBrYUUweVdtbE9lbFpzVFVSU2JVOVhSVFZPVkdzd1dXcFNhRmx0V1RRS1dsZFNiVTlVVW10YVIxRjZXa1JCWWtKbmIzSkNaMFZGUVZsUEwwMUJSVXhDUVRCTlF6Tk9iR0pIV1hSaFJ6bDZaRWRXYTAxRlFVZERhWE5IUVZGUlFncG5OemgzUVZGM1JVMW5kM2RoU0ZJd1kwaE5Oa3g1T1c1aFdGSnZaRmRKZFZreU9YUk1NbWd4V2pKa2NHSnRaRzFaVjA1c1RESjBiR050Tld4aVNFMTBDbGt5T1hSaVdGWjFZVmhTTlUxRVowZERhWE5IUVZGUlFtYzNPSGRCVVRCRlMyZDNiMXBxVG1wYWFsRjVUbnBrYUUweVdtbE9lbFpzVFVSU2JVOVhSVFVLVGxSck1GbHFVbWhaYlZrMFdsZFNiVTlVVW10YVIxRjZXa1JCWmtKbmIzSkNaMFZGUVZsUEwwMUJSVTlDUWtWTlJETktiRnB1VFhaaFIxWm9Xa2hOZGdwaVYwWndZbXBCWVVKbmIzSkNaMFZGUVZsUEwwMUJSVkJDUVhkTlEycEZkMDU2UlRCT2VsVXhUV3ByZDB4bldVdExkMWxDUWtGSFJIWjZRVUpGUVZGbkNrUkNOVzlrU0ZKM1kzcHZka3d5WkhCa1IyZ3hXV2sxYW1JeU1IWmhTRlp1V2pKc2RWb3lXbWhaTWxWM1IwRlpTMHQzV1VKQ1FVZEVkbnBCUWtWUlVVc0tSRUZuZVU1VVkzbE5SR013VFhwQ2RFSm5iM0pDWjBWRlFWbFBMMDFCUlZOQ1JqaE5XRmRvTUdSSVFucFBhVGgyV2pKc01HRklWbWxNYlU1MllsTTVid3BrVjJSdVlWYzFibHB0Um1wYVV6bHlXbGhLZFZwWGVIcE1WMDUyWWxjeE1XSnRiREJsVXpoMVdqSnNNR0ZJVm1sTU0yUjJZMjEwYldKSE9UTmplVGxwQ21SWGJITmFRelUxV1ZjeGMxRklTbXhhYmsxMllVZFdhRnBJVFhaaVYwWndZbXBCTkVKbmIzSkNaMFZGUVZsUEwwMUJSVlJDUTI5TlMwZFplbGt5V1RBS1RXcGpNMWxVVG0xWmFtTXhXbFJCTUZwcWJHaFBWRlUxVGtkSk1GbFhTbTFQUjFacldtcHJNRnBIVW10Tk1sRjNTVkZaUzB0M1dVSkNRVWRFZG5wQlFncEdRVkZVUkVKR00ySXpTbkphYlhoMlpERTVhMkZZVG5kWldGSnFZVVJDYTBKbmIzSkNaMFZGUVZsUEwwMUJSVlpDUmxsTlZrZG9NR1JJUW5wUGFUaDJDbG95YkRCaFNGWnBURzFPZG1KVE9XOWtWMlJ1WVZjMWJscHRSbXBhVXpseVdsaEtkVnBYZUhwTVYwNTJZbGN4TVdKdGJEQmxVemxvV1ROU2NHSXlOWG9LVEROS01XSnVUWFpOZWtFeVRucG5OVTlFU1hkTlJHTjJXVmhTTUZwWE1YZGtTRTEyVFZSQlYwSm5iM0pDWjBWRlFWbFBMMDFCUlZkQ1FXZE5RbTVDTVFwWmJYaHdXWHBDUjBKbmIzSkNaMFZGUVZsUEwwMUJSVmxDUkdkTlRtNUtiR05IT0RaaFNGWnVXakpzZFZveVdtaFpNbFYyWVRKV2VXSnRWbk5qZVRGcUNtSXlNWFJrVnpWd1pFaHJObU50Vm0xUGJrcHNXbTVOZG1GSFZtaGFTRTEyWWxkR2NHSnFRMEpwVVZsTFMzZFpRa0pCU0ZkbFVVbEZRV2RTTjBKSWEwRUtaSGRDTVVGT01EbE5SM0pIZUhoRmVWbDRhMlZJU214dVRuZExhVk5zTmpRemFubDBMelJsUzJOdlFYWkxaVFpQUVVGQlFtNDNjMHg2WWpoQlFVRlJSQXBCUlZsM1VrRkpaMUJJY0ZKbFNEVm5ZVzlZUkhoeFNGTXhLM3BGVEhCM05rbFVhak5yWWk5U0szQndja3hEY1d3MU5sVkRTVWhNWkdwME1sTnJPR1pYQ2pGbFpFNU5aamRTZFZNNE0xVklja2t3VVV0Vk1IbDFUWEZZVW5CRmVYZENUVUZ2UjBORGNVZFRUVFE1UWtGTlJFRXlaMEZOUjFWRFRVSjJjRWw1YnpJS1YzSlBObTFvTVdVNU9WTmlPVk14ZERkWWVVRk5jR2RoWXpaVk5XczJPWGRvY0hCeE1EVkVUbVYzTmxSWVQwZExlRmh0ZDJaSFowY3hVVWw0UVV4WGF3cG9hMFpuYW1WM1ExUXhVa1F5VkRkbVl6TlhWVXhKT1dneWJtTmtRVE40V1dOMVZHNU9RVmh1WVVaQmNXcDJXakJRVnpOdU1XTnRaR2czYkVoMFVUMDlDaTB0TFMwdFJVNUVJRU5GVWxSSlJrbERRVlJGTFMwdExTMEsifX19fQ=="}], "timestampVerificationData":{"rfc3161Timestamps":[{"signedTimestamp":"MIICyzADAgEAMIICwgYJKoZIhvcNAQcCoIICszCCAq8CAQMxDTALBglghkgBZQMEAgEwgbgGCyqGSIb3DQEJEAEEoIGoBIGlMIGiAgEBBgkrBgEEAYO/MAIwMTANBglghkgBZQMEAgEFAAQgeVPMBeFta9HOst8VJ7Q/EOzmAcIgYlWGNPEKRpSJkB8CFQC+FhTQ8y6Euo8ZPNd2XQ6EYpQJiRgPMjAyNjA4MDEwMTU5MDBaMAMCAQGgMqQwMC4xFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEVMBMGA1UEAxMMc2lnc3RvcmUtdHNhoAAxggHcMIIB2AIBATBRMDkxFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEgMB4GA1UEAxMXc2lnc3RvcmUtdHNhLXNlbGZzaWduZWQCFDoTVC8MkGHuvMFDL8uKjosqI4sMMAsGCWCGSAFlAwQCAaCB/DAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTI2MDgwMTAxNTkwMFowLwYJKoZIhvcNAQkEMSIEIHuyxp/cP86DljDvclmI0zhPCOqH5XLPXI8nWnaulAYNMIGOBgsqhkiG9w0BCRACLzF/MH0wezB5BCCF+Se8B6tiysO0Q1bBDvyBssaIP9p6uebYcNnROs0FtzBVMD2kOzA5MRUwEwYDVQQKEwxzaWdzdG9yZS5kZXYxIDAeBgNVBAMTF3NpZ3N0b3JlLXRzYS1zZWxmc2lnbmVkAhQ6E1QvDJBh7rzBQy/Lio6LKiOLDDAKBggqhkjOPQQDAgRoMGYCMQCvxR1pDK5K+PHWS1j7QKeILZmaAY6SorzCV1VSyeC9d1UDUtbinFqMPdL4QQuSKRQCMQDqYniAHmsG+QbgEg1kdskK2UpuB0fPM5gu5Z4OCq2XDzajz6boQKJ+PbyF18BCygo="}]}}, "messageSignature":{"messageDigest":{"algorithm":"SHA2_256", "digest":"Bl5REPM9ak9j/S37/zZLaAPXQeKc+FSY2BkuRA/WqsM="}, "signature":"MEYCIQDEbmc3tlZRL1yajl2G1lH281TO5ZB4yXApqoNshiYdgAIhALYZaN/mWwFHCXy9ONVSlT5mY7tu4r5xnckg/YvJLP1s"}}
 
1
+ {"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"MIIHLTCCBrKgAwIBAgIUIFkh9QbRAF/TVaV7J465qynASu0wCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYxMDEzMTgzNzExWhcNMjYxMDEzMTg0NzExWjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEXHwy3PSpmHi3QPuLDuiGgC1gCHG1XN7uIHb05UZNjr3s7EJ6cLy4VSCiyN6539W4ORgfXuRg5FXhiEWpxc++IaOCBdEwggXNMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAfBgNVHSMEGDAWgBTf0+nPViQRlvmo2OkoVaLGLhhkPzBrBgNVHREBAf8EYTBfhl1odHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkvLmdpdGh1Yi93b3JrZmxvd3MvYnVpbGQueWFtbEByZWZzL2hlYWRzL21haW4wOQYKKwYBBAGDvzABAQQraHR0cHM6Ly90b2tlbi5hY3Rpb25zLmdpdGh1YnVzZXJjb250ZW50LmNvbTAfBgorBgEEAYO/MAECBBF3b3JrZmxvd19kaXNwYXRjaDA2BgorBgEEAYO/MAEDBChjYWZlOGQ1NDM0MGI2YTJlMDQ2NmExM2VmNjA5ODZkMDUxOTNmOWNiMBMGCisGAQQBg78wAQQEBUJ1aWxkMCsGCisGAQQBg78wAQUEHWh1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5MB0GCisGAQQBg78wAQYED3JlZnMvaGVhZHMvbWFpbjA7BgorBgEEAYO/MAEIBC0MK2h0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20wbQYKKwYBBAGDvzABCQRfDF1odHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkvLmdpdGh1Yi93b3JrZmxvd3MvYnVpbGQueWFtbEByZWZzL2hlYWRzL21haW4wOAYKKwYBBAGDvzABCgQqDChjYWZlOGQ1NDM0MGI2YTJlMDQ2NmExM2VmNjA5ODZkMDUxOTNmOWNiMBsGCisGAQQBg78wAQsEDQwLc2VsZi1ob3N0ZWQwQAYKKwYBBAGDvzABDAQyDDBodHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkwOAYKKwYBBAGDvzABDQQqDChjYWZlOGQ1NDM0MGI2YTJlMDQ2NmExM2VmNjA5ODZkMDUxOTNmOWNiMB8GCisGAQQBg78wAQ4EEQwPcmVmcy9oZWFkcy9tYWluMBoGCisGAQQBg78wAQ8EDAwKMTA3MTQ3NTUyOTAuBgorBgEEAYO/MAEQBCAMHmh0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZTAYBgorBgEEAYO/MAERBAoMCDI1NzIwNzQzMG0GCisGAQQBg78wARIEXwxdaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL2J1aWxkLnlhbWxAcmVmcy9oZWFkcy9tYWluMDgGCisGAQQBg78wARMEKgwoY2FmZThkNTQzNDBiNmEyZTA0NjZhMTNlZjYwOTg2ZDA1MTkzZjljYjAhBgorBgEEAYO/MAEUBBMMEXdvcmtmbG93X2Rpc3BhdGNoMGQGCisGAQQBg78wARUEVgxUaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5L2FjdGlvbnMvcnVucy8zODQ0NzYwODE1MC9hdHRlbXB0cy8xMBYGCisGAQQBg78wARYECAwGcHVibGljMEYGCisGAQQBg78wARgEOAw2cmVwbzpodWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eTpyZWY6cmVmcy9oZWFkcy9tYWluMIGKBgorBgEEAdZ5AgQCBHwEegB4AHYA3T0wasbHETJjGR4cmWc3AqJKXrjePK3/h4pygC8p7o4AAAGhNo3kkgAABAMARzBFAiAhSPdVqUxxoGVcQRn6sB4V1pSPOln+vI2j51sOPGtWSQIhAPRcgpC+d4uUPvK+Of07hTy1leJ6twxTNWDR70gJZSIoMAoGCCqGSM49BAMDA2kAMGYCMQDpGrNV0B990Z5S5vhKSkUzfRwUDaEs+1veTfwlUXSXqnEPIS8kW0mzkgwIpYX0xGUCMQDqUTiV7ojwkOepi5aVURKm86/E5Frx5bnwSaSkZ3Nlp5QzJ8Pw4/vi6fBTYxrr1Nk="},"tlogEntries":[{"logIndex":"3245683659","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"hashedrekord","version":"0.0.1"},"integratedTime":"1791916631","inclusionPromise":{"signedEntryTimestamp":"MEUCIFfYECeOihBdsDNuAT0NxsiTS2Gc1mc2wddFlQ36DitoAiEA0SesIAyZeHjOqAv+xmdsKmDcAPzhVYjMYAaQh19+Mng="},"inclusionProof":{"logIndex":"3123779397","rootHash":"xZBjtmNRSDMJztWo1mFACvuHRQ2FmgtYCQtixE4rqD0=","treeSize":"3123779400","hashes":["8xNmtHuGOZ2fUJxdEnKxI04pMyBHGqKMJ4J6AEzyUZo=","MCVzt1Z5Zkc5oi/kE047VNmfObIQNMc8dm5FqPZ6EYY=","KWtsO+7CIToBADmQVOPlAV7Nd/aYLdzv6wPPuz964PQ=","qJ/5m/1+W9csWxv0b+3Zt8Qu7I/FAEW+S0U6Q4aPoqQ=","4HGmzuueK2gUiIlvG41HBwRbf2PzZKmVhQACsxJkjac=","Yyz4oSOafpKytFIImuUnYy4fYuC7gFE3NZTmGSYCLYM=","NJdYww9CytjKhJEhPYmjJka1JynsX0epQ36E8iE3bBU=","w8GHB0rGyCddAbcGoMYGKGD47C4B5+THBe6hqWHWnIM=","OfnMyFbX0aIQFac+OGdwkhE+8tHdlXzjyMQpTMUsBIQ=","BxH70kWpa653eIhftJ+Xn3oIeDX99Uhe+yLq/I+F4KM=","WBnCpmPsm2ENKXQ7ULpLhRp7NUtq0/FBhfeohtWPKZ8=","wk2tYV/zs2FUIlhL9YQeUw8UqKbqhapvz1h7jtdeQWw=","gg9GNApNke3+zNhl4tsWtmIycCFrOMCB3lys6XuSQNQ=","NlOclldmKPA1tMKIskqHAwuQDYHp31YwpK+OOMrMccc=","qxzHanAzz57SDdmJe0B7bJK72NTIBbwEMGBBKvDOROw=","xH/DCseLHr9eKoYT8qsORZK7zVdEGYWHuVtsVrD95wY="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n3123779400\nxZBjtmNRSDMJztWo1mFACvuHRQ2FmgtYCQtixE4rqD0=\n\n— rekor.sigstore.dev wNI9ajBFAiEA2Z1O3bclRWR3tiiivYmF0vBQi7XxJIBrL0r+8YK2luwCIExGpztUeUtphMKXToINO06jj5wVGT2hOd2SsIDiRJyG\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiI4YzZmMDI1OGUwN2Y0MDRkYjM4MDdlYTU3ZDQ1OTZjYmU0ZDQyZjNjMmRlMzRkZDQyZjNlMmFkZDllZGE3OWY1In19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FUUNJRnhzZlcza21iejBzUXRUaWxvLzdoRzYyNnN0Z0FTREVzUXV2TTdZQU90WUFpQTJqSCtGcUljQ01PSWRDbnhsZ0VhTU5ZMmFFeEJJTnhLV1hLMXNraUxEbEE9PSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaE1WRU5EUW5KTFowRjNTVUpCWjBsVlNVWnJhRGxSWWxKQlJpOVVWbUZXTjBvME5qVnhlVzVCVTNVd2QwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFplRTFFUlhwTlZHZDZUbnBGZUZkb1kwNU5hbGw0VFVSRmVrMVVaekJPZWtWNFYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZZU0hkNU0xQlRjRzFJYVROUlVIVk1SSFZwUjJkRE1XZERTRWN4V0U0M2RVbElZakFLTlZWYVRtcHlNM00zUlVvMlkweDVORlpUUTJsNVRqWTFNemxYTkU5U1oyWllkVkpuTlVaWWFHbEZWM0I0WXlzclNXRlBRMEprUlhkbloxaE9UVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXWkNaMDVXU0ZOTlJVZEVRVmRuUWxSbUNqQXJibEJXYVZGU2JIWnRiekpQYTI5V1lVeEhUR2hvYTFCNlFuSkNaMDVXU0ZKRlFrRm1PRVZaVkVKbWFHd3hiMlJJVW5kamVtOTJUREprY0dSSGFERUtXV2sxYW1JeU1IWmhTRlp1V2pKc2RWb3lXbWhaTWxWMllUSldlV0p0Vm5OamVURnFZakl4ZEdSWE5YQmtTR3QyVEcxa2NHUkhhREZaYVRrellqTktjZ3BhYlhoMlpETk5kbGx1Vm5CaVIxRjFaVmRHZEdKRlFubGFWMXA2VERKb2JGbFhVbnBNTWpGb1lWYzBkMDlSV1V0TGQxbENRa0ZIUkhaNlFVSkJVVkZ5Q21GSVVqQmpTRTAyVEhrNU1HSXlkR3hpYVRWb1dUTlNjR0l5TlhwTWJXUndaRWRvTVZsdVZucGFXRXBxWWpJMU1GcFhOVEJNYlU1MllsUkJaa0puYjNJS1FtZEZSVUZaVHk5TlFVVkRRa0pHTTJJelNuSmFiWGgyWkRFNWEyRllUbmRaV0ZKcVlVUkJNa0puYjNKQ1owVkZRVmxQTDAxQlJVUkNRMmhxV1ZkYWJBcFBSMUV4VGtSTk1FMUhTVEpaVkVwc1RVUlJNazV0UlhoTk1sWnRUbXBCTlU5RVdtdE5SRlY0VDFST2JVOVhUbWxOUWsxSFEybHpSMEZSVVVKbk56aDNDa0ZSVVVWQ1ZVb3hZVmQ0YTAxRGMwZERhWE5IUVZGUlFtYzNPSGRCVVZWRlNGZG9NVm95WkhCaWJXUnRXVmRPYkV3eWRHeGpiVFZzWWtoTmRGa3lPWFFLWWxoV2RXRllValZOUWpCSFEybHpSMEZSVVVKbk56aDNRVkZaUlVRelNteGFiazEyWVVkV2FGcElUWFppVjBad1ltcEJOMEpuYjNKQ1owVkZRVmxQTHdwTlFVVkpRa013VFVzeWFEQmtTRUo2VDJrNGRtUkhPWEphVnpSMVdWZE9NR0ZYT1hWamVUVnVZVmhTYjJSWFNqRmpNbFo1V1RJNWRXUkhWblZrUXpWcUNtSXlNSGRpVVZsTFMzZFpRa0pCUjBSMmVrRkNRMUZTWmtSR01XOWtTRkozWTNwdmRrd3laSEJrUjJneFdXazFhbUl5TUhaaFNGWnVXakpzZFZveVdtZ0tXVEpWZG1FeVZubGliVlp6WTNreGFtSXlNWFJrVnpWd1pFaHJka3h0WkhCa1IyZ3hXV2s1TTJJelNuSmFiWGgyWkROTmRsbHVWbkJpUjFGMVpWZEdkQXBpUlVKNVdsZGFla3d5YUd4WlYxSjZUREl4YUdGWE5IZFBRVmxMUzNkWlFrSkJSMFIyZWtGQ1EyZFJjVVJEYUdwWlYxcHNUMGRSTVU1RVRUQk5SMGt5Q2xsVVNteE5SRkV5VG0xRmVFMHlWbTFPYWtFMVQwUmFhMDFFVlhoUFZFNXRUMWRPYVUxQ2MwZERhWE5IUVZGUlFtYzNPSGRCVVhORlJGRjNUR015Vm5NS1dta3hiMkl6VGpCYVYxRjNVVUZaUzB0M1dVSkNRVWRFZG5wQlFrUkJVWGxFUkVKdlpFaFNkMk42YjNaTU1tUndaRWRvTVZscE5XcGlNakIyWVVoV2JncGFNbXgxV2pKYWFGa3lWWFpoTWxaNVltMVdjMk41TVdwaU1qRjBaRmMxY0dSSWEzZFBRVmxMUzNkWlFrSkJSMFIyZWtGQ1JGRlJjVVJEYUdwWlYxcHNDazlIVVRGT1JFMHdUVWRKTWxsVVNteE5SRkV5VG0xRmVFMHlWbTFPYWtFMVQwUmFhMDFFVlhoUFZFNXRUMWRPYVUxQ09FZERhWE5IUVZGUlFtYzNPSGNLUVZFMFJVVlJkMUJqYlZadFkzazViMXBYUm10amVUbDBXVmRzZFUxQ2IwZERhWE5IUVZGUlFtYzNPSGRCVVRoRlJFRjNTMDFVUVROTlZGRXpUbFJWZVFwUFZFRjFRbWR2Y2tKblJVVkJXVTh2VFVGRlVVSkRRVTFJYldnd1pFaENlazlwT0haYU1td3dZVWhXYVV4dFRuWmlVemx2WkZka2JtRlhOVzVhYlVacUNscFVRVmxDWjI5eVFtZEZSVUZaVHk5TlFVVlNRa0Z2VFVORVNURk9la2wzVG5wUmVrMUhNRWREYVhOSFFWRlJRbWMzT0hkQlVrbEZXSGQ0WkdGSVVqQUtZMGhOTmt4NU9XNWhXRkp2WkZkSmRWa3lPWFJNTW1neFdqSmtjR0p0WkcxWlYwNXNUREowYkdOdE5XeGlTRTEwV1RJNWRHSllWblZoV0ZJMVRIazFiZ3BoV0ZKdlpGZEpkbVF5T1hsaE1scHpZak5rZWt3eVNqRmhWM2hyVEc1c2FHSlhlRUZqYlZadFkzazViMXBYUm10amVUbDBXVmRzZFUxRVowZERhWE5IQ2tGUlVVSm5OemgzUVZKTlJVdG5kMjlaTWtadFdsUm9hMDVVVVhwT1JFSnBUbTFGZVZwVVFUQk9hbHBvVFZST2JGcHFXWGRQVkdjeVdrUkJNVTFVYTNvS1dtcHNhbGxxUVdoQ1oyOXlRbWRGUlVGWlR5OU5RVVZWUWtKTlRVVllaSFpqYlhSdFlrYzVNMWd5VW5Cak0wSm9aRWRPYjAxSFVVZERhWE5IUVZGUlFncG5OemgzUVZKVlJWWm5lRlZoU0ZJd1kwaE5Oa3g1T1c1aFdGSnZaRmRKZFZreU9YUk1NbWd4V2pKa2NHSnRaRzFaVjA1c1RESjBiR050Tld4aVNFMTBDbGt5T1hSaVdGWjFZVmhTTlV3eVJtcGtSMngyWW01TmRtTnVWblZqZVRoNlQwUlJNRTU2V1hkUFJFVXhUVU01YUdSSVVteGlXRUl3WTNrNGVFMUNXVWNLUTJselIwRlJVVUpuTnpoM1FWSlpSVU5CZDBkalNGWnBZa2RzYWsxRldVZERhWE5IUVZGUlFtYzNPSGRCVW1kRlQwRjNNbU50Vm5kaWVuQnZaRmRrYmdwaFZ6VnVXbTFHYWxwVE9YSmFXRXAxV2xkNGVreFhUblppVnpFeFltMXNNR1ZVY0hsYVYxazJZMjFXYldONU9XOWFWMFpyWTNrNWRGbFhiSFZOU1VkTENrSm5iM0pDWjBWRlFXUmFOVUZuVVVOQ1NIZEZaV2RDTkVGSVdVRXpWREIzWVhOaVNFVlVTbXBIVWpSamJWZGpNMEZ4U2t0WWNtcGxVRXN6TDJnMGNIa0taME00Y0Rkdk5FRkJRVWRvVG04emEydG5RVUZDUVUxQlVucENSa0ZwUVdoVFVHUldjVlY0ZUc5SFZtTlJVbTQyYzBJMFZqRndVMUJQYkc0cmRra3lhZ28xTVhOUFVFZDBWMU5SU1doQlVGSmpaM0JESzJRMGRWVlFka3NyVDJZd04yaFVlVEZzWlVvMmRIZDRWRTVYUkZJM01HZEtXbE5KYjAxQmIwZERRM0ZIQ2xOTk5EbENRVTFFUVRKclFVMUhXVU5OVVVSd1IzSk9WakJDT1Rrd1dqVlROWFpvUzFOclZYcG1VbmRWUkdGRmN5c3hkbVZVWm5kc1ZWaFRXSEZ1UlZBS1NWTTRhMWN3YlhwclozZEpjRmxZTUhoSFZVTk5VVVJ4VlZScFZqZHZhbmRyVDJWd2FUVmhWbFZTUzIwNE5pOUZOVVp5ZURWaWJuZFRZVk5yV2pOT2JBcHdOVkY2U2poUWR6UXZkbWsyWmtKVVdYaHljakZPYXowS0xTMHRMUzFGVGtRZ1EwVlNWRWxHU1VOQlZFVXRMUzB0TFFvPSJ9fX19"}],"timestampVerificationData":{"rfc3161Timestamps":[{"signedTimestamp":"MIICyTADAgEAMIICwAYJKoZIhvcNAQcCoIICsTCCAq0CAQMxDTALBglghkgBZQMEAgEwgbcGCyqGSIb3DQEJEAEEoIGnBIGkMIGhAgEBBgkrBgEEAYO/MAIwMTANBglghkgBZQMEAgEFAAQgfVl8qCV32ugvVUM9N9uo03SnZJDOqIaqH/WOpSOn1vYCFGyJZHLdT3/gLeyv4dRDHYtbPYjAGA8yMDI2MTAxMzE4MzcxMVowAwIBAaAypDAwLjEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MRUwEwYDVQQDEwxzaWdzdG9yZS10c2GgADGCAdswggHXAgEBMFEwOTEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MSAwHgYDVQQDExdzaWdzdG9yZS10c2Etc2VsZnNpZ25lZAIUOhNULwyQYe68wUMvy4qOiyojiwwwCwYJYIZIAWUDBAIBoIH8MBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjYxMDEzMTgzNzExWjAvBgkqhkiG9w0BCQQxIgQgE5tOov5DszI3bIJpXZ0o2auzSVInVnva1CdguVwI+B4wgY4GCyqGSIb3DQEJEAIvMX8wfTB7MHkEIIX5J7wHq2LKw7RDVsEO/IGyxog/2nq55thw2dE6zQW3MFUwPaQ7MDkxFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEgMB4GA1UEAxMXc2lnc3RvcmUtdHNhLXNlbGZzaWduZWQCFDoTVC8MkGHuvMFDL8uKjosqI4sMMAoGCCqGSM49BAMCBGcwZQIwBsabhgNO3C8jEYoeuQSAd/qIKg2UTewa08MX1sG3WlODqI7UIyFmnb0m6GOoSJhDAjEAk41Kmw+/15WU+UN52KJK254ZyJSjn74pHLpc39g7mP+bEurNqs5Bn+uKpOa934ph"}]}},"messageSignature":{"messageDigest":{"algorithm":"SHA2_256","digest":"jG8CWOB/QE2zgH6lfUWWy+TULzwt403ULz4q3Z7aefU="},"signature":"MEQCIFxsfW3kmbz0sQtTilo/7hG626stgASDEsQuvM7YAOtYAiA2jH+FqIcCMOIdCnxlgEaMNY2aExBINxKWXK1skiLDlA=="}}
build/torch-cuda/trimul_with_residual.py CHANGED
@@ -76,8 +76,10 @@ def _gated_gemm_with_residual_kernel(
76
  M,
77
  N,
78
  K,
79
- STRIDE_B: tl.constexpr, # = N_ROW * N_COL (for decoding b from m)
80
- N_COL: tl.constexpr, # = L_col (for decoding j from m)
 
 
81
  TILE_M: tl.constexpr,
82
  TILE_N: tl.constexpr,
83
  TILE_K: tl.constexpr,
@@ -215,8 +217,8 @@ def _gated_gemm_with_residual_backward_kernel(
215
  M,
216
  N,
217
  K,
218
- STRIDE_B: tl.constexpr,
219
- N_COL: tl.constexpr,
220
  TILE_M: tl.constexpr,
221
  TILE_N: tl.constexpr,
222
  TILE_K: tl.constexpr,
@@ -531,7 +533,6 @@ def _gated_gemm_with_residual(
531
  )
532
 
533
 
534
- @torch._dynamo.disable
535
  def triangle_multiplicative_update_with_residual(
536
  pair: torch.Tensor,
537
  direction: str,
 
76
  M,
77
  N,
78
  K,
79
+ # Runtime args, not constexpr: both scale with sequence length, so constexpr
80
+ # would recompile the kernel (and torch.compile the graph) per distinct L.
81
+ STRIDE_B, # = N_ROW * N_COL (for decoding b from m)
82
+ N_COL, # = L_col (for decoding j from m)
83
  TILE_M: tl.constexpr,
84
  TILE_N: tl.constexpr,
85
  TILE_K: tl.constexpr,
 
217
  M,
218
  N,
219
  K,
220
+ STRIDE_B, # runtime, not constexpr: see the forward kernel
221
+ N_COL,
222
  TILE_M: tl.constexpr,
223
  TILE_N: tl.constexpr,
224
  TILE_K: tl.constexpr,
 
533
  )
534
 
535
 
 
536
  def triangle_multiplicative_update_with_residual(
537
  pair: torch.Tensor,
538
  direction: str,