Skip to content

Commit c5c1a25

Browse files
authored
Capability def parsing & codegen + disjoint sets (shader-slang#3451)
* Capability def parsing & codegen + disjoint sets This change adds a capability definition file, and a code generator to produce C++ code that defines the capability enums and necessary data structures around the capabilities. Extends the existing CapabilitySet class to support expressing disjoint sets of capabilities. This sets up for the next change that will enhance our type checking with reasoning of capability requirements. * Fix cmake. * Fix warning. * Fix. * Fix isBetterForTarget to prefer less specialized option. * Fix. * Fix premake. * Fix intrinsic. * Fix vs sln file. --------- Co-authored-by: Yong He <yhe@nvidia.com>
1 parent 1a13842 commit c5c1a25

38 files changed

+1905
-562
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ tools/gfx-unit-test/test-tmp-*
5252

5353
# Intermediate source files generated during build process
5454
/source/slang/slang-generated-*.h
55+
/source/slang/slang-lookup-capability-defs.cpp
5556
/source/slang/*.meta.slang.h
5657
prelude/*.h.cpp
5758
/source/slang/cpp.hint

CMakeLists.txt

+3-2
Original file line numberDiff line numberDiff line change
@@ -256,12 +256,13 @@ generator(tools/slang-cpp-extractor USE_FEWER_WARNINGS LINK_WITH_PRIVATE compile
256256
generator(tools/slang-embed)
257257
generator(tools/slang-generate USE_FEWER_WARNINGS)
258258
generator(tools/slang-lookup-generator LINK_WITH_PRIVATE compiler-core)
259+
generator(tools/slang-capability-generator LINK_WITH_PRIVATE compiler-core)
259260
generator(tools/slang-spirv-embed-generator LINK_WITH_PRIVATE compiler-core)
260261
generator(
261262
source/slangc
262263
TARGET_NAME slang-bootstrap
263264
USE_FEWER_WARNINGS
264-
LINK_WITH_PRIVATE prelude slang-no-embedded-stdlib Threads::Threads
265+
LINK_WITH_PRIVATE prelude slang-no-embedded-stdlib slang-capability-lookup Threads::Threads
265266
)
266267

267268
#
@@ -276,7 +277,7 @@ add_subdirectory(source/slang)
276277
slang_add_target(
277278
tools/slangd
278279
EXECUTABLE
279-
LINK_WITH_PRIVATE core slang slang-reflect-headers Threads::Threads
280+
LINK_WITH_PRIVATE core slang slang-reflect-headers slang-capability-defs Threads::Threads
280281
INSTALL
281282
)
282283
slang_add_target(

build/visual-studio/compiler-core/compiler-core.vcxproj

+2
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,7 @@
306306
<ClInclude Include="..\..\..\source\compiler-core\slang-name-convention-util.h" />
307307
<ClInclude Include="..\..\..\source\compiler-core\slang-name.h" />
308308
<ClInclude Include="..\..\..\source\compiler-core\slang-nvrtc-compiler.h" />
309+
<ClInclude Include="..\..\..\source\compiler-core\slang-perfect-hash-codegen.h" />
309310
<ClInclude Include="..\..\..\source\compiler-core\slang-perfect-hash.h" />
310311
<ClInclude Include="..\..\..\source\compiler-core\slang-slice-allocator.h" />
311312
<ClInclude Include="..\..\..\source\compiler-core\slang-source-embed-util.h" />
@@ -354,6 +355,7 @@
354355
<ClCompile Include="..\..\..\source\compiler-core\slang-name-convention-util.cpp" />
355356
<ClCompile Include="..\..\..\source\compiler-core\slang-name.cpp" />
356357
<ClCompile Include="..\..\..\source\compiler-core\slang-nvrtc-compiler.cpp" />
358+
<ClCompile Include="..\..\..\source\compiler-core\slang-perfect-hash-codegen.cpp" />
357359
<ClCompile Include="..\..\..\source\compiler-core\slang-perfect-hash.cpp" />
358360
<ClCompile Include="..\..\..\source\compiler-core\slang-slice-allocator.cpp" />
359361
<ClCompile Include="..\..\..\source\compiler-core\slang-source-embed-util.cpp" />

build/visual-studio/compiler-core/compiler-core.vcxproj.filters

+6
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,9 @@
132132
<ClInclude Include="..\..\..\source\compiler-core\slang-nvrtc-compiler.h">
133133
<Filter>Header Files</Filter>
134134
</ClInclude>
135+
<ClInclude Include="..\..\..\source\compiler-core\slang-perfect-hash-codegen.h">
136+
<Filter>Header Files</Filter>
137+
</ClInclude>
135138
<ClInclude Include="..\..\..\source\compiler-core\slang-perfect-hash.h">
136139
<Filter>Header Files</Filter>
137140
</ClInclude>
@@ -272,6 +275,9 @@
272275
<ClCompile Include="..\..\..\source\compiler-core\slang-nvrtc-compiler.cpp">
273276
<Filter>Source Files</Filter>
274277
</ClCompile>
278+
<ClCompile Include="..\..\..\source\compiler-core\slang-perfect-hash-codegen.cpp">
279+
<Filter>Source Files</Filter>
280+
</ClCompile>
275281
<ClCompile Include="..\..\..\source\compiler-core\slang-perfect-hash.cpp">
276282
<Filter>Source Files</Filter>
277283
</ClCompile>

build/visual-studio/run-generators/run-generators.vcxproj

+17
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,23 @@
319319
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">../../../bin/windows-x64/release/slang-cpp-extractor.exe;../../../source/slang/slang-ast-support-types.h;../../../source/slang/slang-ast-base.h;../../../source/slang/slang-ast-decl.h;../../../source/slang/slang-ast-expr.h;../../../source/slang/slang-ast-modifier.h;../../../source/slang/slang-ast-stmt.h;../../../source/slang/slang-ast-type.h;../../../source/slang/slang-ast-val.h</AdditionalInputs>
320320
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release aarch64|ARM64'">../../../bin/windows-aarch64/release/slang-cpp-extractor.exe;../../../source/slang/slang-ast-support-types.h;../../../source/slang/slang-ast-base.h;../../../source/slang/slang-ast-decl.h;../../../source/slang/slang-ast-expr.h;../../../source/slang/slang-ast-modifier.h;../../../source/slang/slang-ast-stmt.h;../../../source/slang/slang-ast-type.h;../../../source/slang/slang-ast-val.h</AdditionalInputs>
321321
</CustomBuild>
322+
<CustomBuild Include="..\..\..\source\slang\slang-capabilities.capdef">
323+
<FileType>Document</FileType>
324+
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"../../../bin/windows-x86/debug/slang-capability-generator" "%(FullPath)"</Command>
325+
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"../../../bin/windows-x64/debug/slang-capability-generator" "%(FullPath)"</Command>
326+
<Command Condition="'$(Configuration)|$(Platform)'=='Debug aarch64|ARM64'">"../../../bin/windows-aarch64/debug/slang-capability-generator" "%(FullPath)"</Command>
327+
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"../../../bin/windows-x86/release/slang-capability-generator" "%(FullPath)"</Command>
328+
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"../../../bin/windows-x64/release/slang-capability-generator" "%(FullPath)"</Command>
329+
<Command Condition="'$(Configuration)|$(Platform)'=='Release aarch64|ARM64'">"../../../bin/windows-aarch64/release/slang-capability-generator" "%(FullPath)"</Command>
330+
<Outputs>../../../source/slang/slang-generated-capability-defs.h</Outputs>
331+
<Message>slang-capability-generator %(Identity)</Message>
332+
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">../../../source/slang/slang-capabilities.capdef;../../../bin/windows-x86/debug/slang-capability-generator.exe</AdditionalInputs>
333+
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">../../../source/slang/slang-capabilities.capdef;../../../bin/windows-x64/debug/slang-capability-generator.exe</AdditionalInputs>
334+
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug aarch64|ARM64'">../../../source/slang/slang-capabilities.capdef;../../../bin/windows-aarch64/debug/slang-capability-generator.exe</AdditionalInputs>
335+
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">../../../source/slang/slang-capabilities.capdef;../../../bin/windows-x86/release/slang-capability-generator.exe</AdditionalInputs>
336+
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">../../../source/slang/slang-capabilities.capdef;../../../bin/windows-x64/release/slang-capability-generator.exe</AdditionalInputs>
337+
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release aarch64|ARM64'">../../../source/slang/slang-capabilities.capdef;../../../bin/windows-aarch64/release/slang-capability-generator.exe</AdditionalInputs>
338+
</CustomBuild>
322339
</ItemGroup>
323340
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
324341
<ImportGroup Label="ExtensionTargets">

build/visual-studio/run-generators/run-generators.vcxproj.filters

+9
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@
77
<Filter Include="Source Files">
88
<UniqueIdentifier>{E9C7FDCE-D52A-8D73-7EB0-C5296AF258F6}</UniqueIdentifier>
99
</Filter>
10+
<Filter Include="source">
11+
<UniqueIdentifier>{76FF3A1C-62A1-65F2-4B5C-7946379DEC42}</UniqueIdentifier>
12+
</Filter>
13+
<Filter Include="source\slang">
14+
<UniqueIdentifier>{9A9B9613-86FE-25B8-2F84-5E6E1BC6F13A}</UniqueIdentifier>
15+
</Filter>
1016
</ItemGroup>
1117
<ItemGroup>
1218
<ClInclude Include="..\..\..\prelude\slang-cpp-scalar-intrinsics.h">
@@ -58,5 +64,8 @@
5864
<CustomBuild Include="..\..\..\source\slang\slang-ast-reflect.h">
5965
<Filter>Header Files</Filter>
6066
</CustomBuild>
67+
<CustomBuild Include="..\..\..\source\slang\slang-capabilities.capdef">
68+
<Filter>source\slang</Filter>
69+
</CustomBuild>
6170
</ItemGroup>
6271
</Project>

build/visual-studio/slang/slang.vcxproj

+3-1
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,6 @@ IF EXIST ..\..\..\external\slang-glslang\bin\windows-aarch64\release\slang-glsla
325325
<ClInclude Include="..\..\..\source\slang\slang-ast-synthesis.h" />
326326
<ClInclude Include="..\..\..\source\slang\slang-ast-type.h" />
327327
<ClInclude Include="..\..\..\source\slang\slang-ast-val.h" />
328-
<ClInclude Include="..\..\..\source\slang\slang-capability-defs.h" />
329328
<ClInclude Include="..\..\..\source\slang\slang-capability.h" />
330329
<ClInclude Include="..\..\..\source\slang\slang-check-impl.h" />
331330
<ClInclude Include="..\..\..\source\slang\slang-check.h" />
@@ -347,6 +346,8 @@ IF EXIST ..\..\..\external\slang-glslang\bin\windows-aarch64\release\slang-glsla
347346
<ClInclude Include="..\..\..\source\slang\slang-emit-spirv-ops-debug-info-ext.h" />
348347
<ClInclude Include="..\..\..\source\slang\slang-emit-spirv-ops.h" />
349348
<ClInclude Include="..\..\..\source\slang\slang-emit-torch.h" />
349+
<ClInclude Include="..\..\..\source\slang\slang-generated-capability-defs-impl.h" />
350+
<ClInclude Include="..\..\..\source\slang\slang-generated-capability-defs.h" />
350351
<ClInclude Include="..\..\..\source\slang\slang-glsl-extension-tracker.h" />
351352
<ClInclude Include="..\..\..\source\slang\slang-hlsl-to-vulkan-layout-options.h" />
352353
<ClInclude Include="..\..\..\source\slang\slang-image-format-defs.h" />
@@ -698,6 +699,7 @@ IF EXIST ..\..\..\external\slang-glslang\bin\windows-aarch64\release\slang-glsla
698699
<ClCompile Include="..\..\..\source\slang\slang-language-server-semantic-tokens.cpp" />
699700
<ClCompile Include="..\..\..\source\slang\slang-language-server.cpp" />
700701
<ClCompile Include="..\..\..\source\slang\slang-legalize-types.cpp" />
702+
<ClCompile Include="..\..\..\source\slang\slang-lookup-capability-defs.cpp" />
701703
<ClCompile Include="..\..\..\source\slang\slang-lookup-glslstd450.cpp" />
702704
<ClCompile Include="..\..\..\source\slang\slang-lookup.cpp" />
703705
<ClCompile Include="..\..\..\source\slang\slang-lower-to-ir.cpp" />

build/visual-studio/slang/slang.vcxproj.filters

+9-3
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,6 @@
6363
<ClInclude Include="..\..\..\source\slang\slang-ast-val.h">
6464
<Filter>Header Files</Filter>
6565
</ClInclude>
66-
<ClInclude Include="..\..\..\source\slang\slang-capability-defs.h">
67-
<Filter>Header Files</Filter>
68-
</ClInclude>
6966
<ClInclude Include="..\..\..\source\slang\slang-capability.h">
7067
<Filter>Header Files</Filter>
7168
</ClInclude>
@@ -129,6 +126,12 @@
129126
<ClInclude Include="..\..\..\source\slang\slang-emit-torch.h">
130127
<Filter>Header Files</Filter>
131128
</ClInclude>
129+
<ClInclude Include="..\..\..\source\slang\slang-generated-capability-defs-impl.h">
130+
<Filter>Header Files</Filter>
131+
</ClInclude>
132+
<ClInclude Include="..\..\..\source\slang\slang-generated-capability-defs.h">
133+
<Filter>Header Files</Filter>
134+
</ClInclude>
132135
<ClInclude Include="..\..\..\source\slang\slang-glsl-extension-tracker.h">
133136
<Filter>Header Files</Filter>
134137
</ClInclude>
@@ -1178,6 +1181,9 @@
11781181
<ClCompile Include="..\..\..\source\slang\slang-legalize-types.cpp">
11791182
<Filter>Source Files</Filter>
11801183
</ClCompile>
1184+
<ClCompile Include="..\..\..\source\slang\slang-lookup-capability-defs.cpp">
1185+
<Filter>Source Files</Filter>
1186+
</ClCompile>
11811187
<ClCompile Include="..\..\..\source\slang\slang-lookup-glslstd450.cpp">
11821188
<Filter>Source Files</Filter>
11831189
</ClCompile>

premake5.lua

+35-2
Original file line numberDiff line numberDiff line change
@@ -999,6 +999,12 @@ tool "slang-lookup-generator"
999999

10001000
links { "compiler-core", "core" }
10011001

1002+
tool "slang-capability-generator"
1003+
uuid "FD16CA29-C66A-430A-822C-C09655088611"
1004+
includedirs { "." }
1005+
1006+
links { "compiler-core", "core" }
1007+
10021008
tool "test-process"
10031009
uuid "BE412850-4BB9-429A-877C-BFBC4B34186C"
10041010
includedirs { "." }
@@ -1400,6 +1406,26 @@ function preludeGenerator()
14001406
buildinputs { builddir .. "/slang-embed" .. getExecutableSuffix() }
14011407
end
14021408

1409+
function capabilityGenerator()
1410+
filter("files:source/slang/*.capdef")
1411+
1412+
dependson { "slang-capability-generator" }
1413+
local inputFile = "%{file.abspath}"
1414+
local builddir = getBuildDir()
1415+
local outputHeaderFile = "%{wks.location}/source/slang/slang-generated-capability-defs.h"
1416+
local outputCppFile = "%{wks.location}/source/slang/slang-generated-capability-defs-impl.h"
1417+
local outputLookupFile = "%{wks.location}/source/slang/slang-lookup-capability-defs.cpp"
1418+
if executeBinary then
1419+
buildmessage ("slang-capability-generator %{file.relpath}")
1420+
local buildcmd = '"' .. builddir .. '/slang-capability-generator" "%{file.abspath}"'
1421+
buildcommands { buildcmd }
1422+
buildinputs { "%{file.abspath}", builddir .. "/slang-capability-generator" .. getExecutableSuffix() }
1423+
buildoutputs (outputHeaderFile, outputCppFile, outputLookupFile)
1424+
end
1425+
1426+
filter { }
1427+
end
1428+
14031429
if not skipSourceGeneration then
14041430

14051431
generatorProject("run-generators", nil)
@@ -1415,6 +1441,7 @@ generatorProject("run-generators", nil)
14151441
"source/slang/*.meta.slang", -- The stdlib files
14161442
"source/slang/slang-ast-reflect.h", -- C++ reflection
14171443
"prelude/*.h", -- The prelude files
1444+
"source/slang/*.capdef",
14181445

14191446
--
14201447
-- To build we need to have some source! It has to be a source file that
@@ -1428,7 +1455,7 @@ generatorProject("run-generators", nil)
14281455
-- First, we need to ensure that various source-generation tools
14291456
-- get built before `slang`, so we declare a non-linking dependency between
14301457
-- the projects here:
1431-
dependson { "slang-cpp-extractor", "slang-generate", "slang-embed" }
1458+
dependson { "slang-cpp-extractor", "slang-generate", "slang-embed", "slang-capability-generator" }
14321459

14331460
local executableSuffix = getExecutableSuffix()
14341461

@@ -1446,6 +1473,7 @@ generatorProject("run-generators", nil)
14461473
if executeBinary then
14471474
metaSlangGenerator()
14481475
preludeGenerator()
1476+
capabilityGenerator()
14491477
end
14501478

14511479
filter { }
@@ -1564,7 +1592,8 @@ if enableEmbedStdLib then
15641592
"prelude/slang-hlsl-prelude.h.cpp",
15651593
"prelude/slang-cpp-prelude.h.cpp",
15661594
"prelude/slang-cpp-host-prelude.h.cpp",
1567-
"prelude/slang-torch-prelude.h.cpp"
1595+
"prelude/slang-torch-prelude.h.cpp",
1596+
"source/slang/slang-lookup-capability-defs.cpp"
15681597
}
15691598
if not targetInfo.isWindows then
15701599
links { "pthread" }
@@ -1684,6 +1713,9 @@ standardProject("slang", "source/slang")
16841713
-- Similarly for any generated lookup tables
16851714
files {
16861715
"source/slang/slang-lookup-glslstd450.cpp",
1716+
"source/slang/slang-lookup-capability-defs.cpp",
1717+
"source/slang/slang-generated-capability-defs.h",
1718+
"source/slang/slang-generated-capability-defs-impl.h",
16871719
}
16881720

16891721
--
@@ -1695,6 +1727,7 @@ standardProject("slang", "source/slang")
16951727
if not skipSourceGeneration then
16961728
dependson { "run-generators" }
16971729
dependson { "generate-lookup-tables" }
1730+
dependson { "generate-capabilities" }
16981731
dependson { "generate-spirv-embed" }
16991732
end
17001733

slang.sln

+16
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gfx-util", "build\visual-st
1717
EndProject
1818
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "platform", "build\visual-studio\platform\platform.vcxproj", "{3565FE5E-4FA3-11EB-AE93-0242AC130002}"
1919
EndProject
20+
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "slang-capability-generator", "build\visual-studio\slang-capability-generator\slang-capability-generator.vcxproj", "{FD16CA29-C66A-430A-822C-C09655088611}"
21+
EndProject
2022
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "slang-cpp-extractor", "build\visual-studio\slang-cpp-extractor\slang-cpp-extractor.vcxproj", "{CA8A30D1-8FA9-4330-B7F7-84709246D8DC}"
2123
EndProject
2224
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "slang-embed", "build\visual-studio\slang-embed\slang-embed.vcxproj", "{7F773DD9-EB8F-2403-B43C-B49C2014B99C}"
@@ -84,6 +86,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "run-generators", "build\vis
8486
{CA8A30D1-8FA9-4330-B7F7-84709246D8DC} = {CA8A30D1-8FA9-4330-B7F7-84709246D8DC}
8587
{66174227-8541-41FC-A6DF-4764FC66F78E} = {66174227-8541-41FC-A6DF-4764FC66F78E}
8688
{7F773DD9-EB8F-2403-B43C-B49C2014B99C} = {7F773DD9-EB8F-2403-B43C-B49C2014B99C}
89+
{FD16CA29-C66A-430A-822C-C09655088611} = {FD16CA29-C66A-430A-822C-C09655088611}
8790
EndProjectSection
8891
EndProject
8992
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lz4", "build\visual-studio\lz4\lz4.vcxproj", "{E1EC8075-823E-46E5-BC38-C124CCCDF878}"
@@ -169,6 +172,18 @@ Global
169172
{3565FE5E-4FA3-11EB-AE93-0242AC130002}.Release|Win32.Build.0 = Release|Win32
170173
{3565FE5E-4FA3-11EB-AE93-0242AC130002}.Release|x64.ActiveCfg = Release|x64
171174
{3565FE5E-4FA3-11EB-AE93-0242AC130002}.Release|x64.Build.0 = Release|x64
175+
{FD16CA29-C66A-430A-822C-C09655088611}.Debug|aarch64.ActiveCfg = Debug aarch64|ARM64
176+
{FD16CA29-C66A-430A-822C-C09655088611}.Debug|aarch64.Build.0 = Debug aarch64|ARM64
177+
{FD16CA29-C66A-430A-822C-C09655088611}.Debug|Win32.ActiveCfg = Debug|Win32
178+
{FD16CA29-C66A-430A-822C-C09655088611}.Debug|Win32.Build.0 = Debug|Win32
179+
{FD16CA29-C66A-430A-822C-C09655088611}.Debug|x64.ActiveCfg = Debug|x64
180+
{FD16CA29-C66A-430A-822C-C09655088611}.Debug|x64.Build.0 = Debug|x64
181+
{FD16CA29-C66A-430A-822C-C09655088611}.Release|aarch64.ActiveCfg = Release aarch64|ARM64
182+
{FD16CA29-C66A-430A-822C-C09655088611}.Release|aarch64.Build.0 = Release aarch64|ARM64
183+
{FD16CA29-C66A-430A-822C-C09655088611}.Release|Win32.ActiveCfg = Release|Win32
184+
{FD16CA29-C66A-430A-822C-C09655088611}.Release|Win32.Build.0 = Release|Win32
185+
{FD16CA29-C66A-430A-822C-C09655088611}.Release|x64.ActiveCfg = Release|x64
186+
{FD16CA29-C66A-430A-822C-C09655088611}.Release|x64.Build.0 = Release|x64
172187
{CA8A30D1-8FA9-4330-B7F7-84709246D8DC}.Debug|aarch64.ActiveCfg = Debug aarch64|ARM64
173188
{CA8A30D1-8FA9-4330-B7F7-84709246D8DC}.Debug|aarch64.Build.0 = Debug aarch64|ARM64
174189
{CA8A30D1-8FA9-4330-B7F7-84709246D8DC}.Debug|Win32.ActiveCfg = Debug|Win32
@@ -610,6 +625,7 @@ Global
610625
{222F7498-B40C-4F3F-A704-DDEB91A4484A} = {FD47AE19-69FD-260F-F2F1-20E65EA61D13}
611626
{F5ADB74E-02A7-44FB-AA3B-FC02F8AC7A4B} = {FD47AE19-69FD-260F-F2F1-20E65EA61D13}
612627
{3565FE5E-4FA3-11EB-AE93-0242AC130002} = {FD47AE19-69FD-260F-F2F1-20E65EA61D13}
628+
{FD16CA29-C66A-430A-822C-C09655088611} = {FD47AE19-69FD-260F-F2F1-20E65EA61D13}
613629
{CA8A30D1-8FA9-4330-B7F7-84709246D8DC} = {FD47AE19-69FD-260F-F2F1-20E65EA61D13}
614630
{7F773DD9-EB8F-2403-B43C-B49C2014B99C} = {FD47AE19-69FD-260F-F2F1-20E65EA61D13}
615631
{66174227-8541-41FC-A6DF-4764FC66F78E} = {FD47AE19-69FD-260F-F2F1-20E65EA61D13}

0 commit comments

Comments
 (0)