Update template to latest RobustToolbox version.

- Converts template to use file-scoped namespaces.
- Add manifest.yml and comments for it.
This commit is contained in:
Vera Aguilera Puerto 2021-12-29 12:21:56 +01:00
parent b417f4355e
commit 729c2a6206
18 changed files with 197 additions and 272 deletions

View file

@ -1,12 +1,11 @@
using Robust.Shared.IoC;
namespace Content.Client
namespace Content.Client;
internal static class ClientContentIoC
{
internal static class ClientContentIoC
public static void Register()
{
public static void Register()
{
// DEVNOTE: IoCManager registrations for the client go here and only here.
}
// DEVNOTE: IoCManager registrations for the client go here and only here.
}
}

View file

@ -3,7 +3,7 @@
<PropertyGroup>
<!-- Work around https://github.com/dotnet/project-system/issues/4314 -->
<TargetFramework>$(TargetFramework)</TargetFramework>
<LangVersion>9</LangVersion>
<LangVersion>latest</LangVersion>
<IsPackable>false</IsPackable>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<OutputPath>..\bin\Content.Client\</OutputPath>

View file

@ -6,70 +6,67 @@ using Robust.Shared.IoC;
using Robust.Shared.Prototypes;
using Robust.Shared.Timing;
// DEVNOTE: Games that want to be on the hub are FORCED use the "Content." prefix for assemblies they want to load.
namespace Content.Client
// DEVNOTE: Games that want to be on the hub can change their namespace prefix in the "manifest.yml" file.
namespace Content.Client;
public class EntryPoint : GameClient
{
public class EntryPoint : GameClient
public override void Init()
{
public override void Init()
var factory = IoCManager.Resolve<IComponentFactory>();
var prototypes = IoCManager.Resolve<IPrototypeManager>();
factory.DoAutoRegistrations();
foreach (var ignoreName in IgnoredComponents.List)
{
var factory = IoCManager.Resolve<IComponentFactory>();
var prototypes = IoCManager.Resolve<IPrototypeManager>();
factory.DoAutoRegistrations();
foreach (var ignoreName in IgnoredComponents.List)
{
factory.RegisterIgnore(ignoreName);
}
foreach (var ignoreName in IgnoredPrototypes.List)
{
prototypes.RegisterIgnore(ignoreName);
}
ClientContentIoC.Register();
IoCManager.BuildGraph();
factory.GenerateNetIds();
// DEVNOTE: This is generally where you'll be setting up the IoCManager further.
factory.RegisterIgnore(ignoreName);
}
public override void PostInit()
foreach (var ignoreName in IgnoredPrototypes.List)
{
base.PostInit();
// DEVNOTE: The line below will disable lighting, so you can see in-game sprites without the need for lights
//IoCManager.Resolve<ILightManager>().Enabled = false;
// DEVNOTE: Further setup...
var client = IoCManager.Resolve<IBaseClient>();
// DEVNOTE: You might want a main menu to connect to a server, or start a singleplayer game.
// Be sure to check out StateManager for this! Below you'll find examples to start a game.
// If you want to connect to a server...
// client.ConnectToServer("ip-goes-here", 1212);
// Optionally, singleplayer also works!
// client.StartSinglePlayer();
prototypes.RegisterIgnore(ignoreName);
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
// DEVNOTE: You might want to do a proper shutdown here.
}
ClientContentIoC.Register();
public override void Update(ModUpdateLevel level, FrameEventArgs frameEventArgs)
{
base.Update(level, frameEventArgs);
// DEVNOTE: Game update loop goes here. Usually you'll want some independent GameTicker.
}
IoCManager.BuildGraph();
factory.GenerateNetIds();
// DEVNOTE: This is generally where you'll be setting up the IoCManager further.
}
public override void PostInit()
{
base.PostInit();
// DEVNOTE: The line below will disable lighting, so you can see in-game sprites without the need for lights
//IoCManager.Resolve<ILightManager>().Enabled = false;
// DEVNOTE: Further setup...
var client = IoCManager.Resolve<IBaseClient>();
// DEVNOTE: You might want a main menu to connect to a server, or start a singleplayer game.
// Be sure to check out StateManager for this! Below you'll find examples to start a game.
// If you want to connect to a server...
// client.ConnectToServer("ip-goes-here", 1212);
// Optionally, singleplayer also works!
// client.StartSinglePlayer();
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
// DEVNOTE: You might want to do a proper shutdown here.
}
public override void Update(ModUpdateLevel level, FrameEventArgs frameEventArgs)
{
base.Update(level, frameEventArgs);
// DEVNOTE: Game update loop goes here. Usually you'll want some independent GameTicker.
}
}

View file

@ -1,9 +1,8 @@
namespace Content.Client
namespace Content.Client;
public static class IgnoredComponents
{
public static class IgnoredComponents
{
public static string[] List => new string[] {
// Stick components you want ignored here.
};
}
public static string[] List => new string[] {
// Stick components you want ignored here.
};
}

View file

@ -1,9 +1,8 @@
namespace Content.Client
namespace Content.Client;
public static class IgnoredPrototypes
{
public static class IgnoredPrototypes
{
public static string[] List => new string[] {
// Stick prototypes you want ignored here.
};
}
public static string[] List => new string[] {
// Stick prototypes you want ignored here.
};
}

View file

@ -1,27 +1,26 @@
using Robust.Client;
using Robust.Shared.Utility;
namespace Content.Client
namespace Content.Client;
internal static class Program
{
internal static class Program
public static void Main(string[] args)
{
public static void Main(string[] args)
{
ContentStart.Start(args);
ContentStart.Start(args);
/*
// DEVNOTE: If you want to use RobustToolbox as a library, use the method below instead.
// Keep in mind, this will make your game ineligible from appearing on the SS14 hub, specially if you
// disable sandboxing.
ContentStart.StartLibrary(args, new GameControllerOptions()
{
// DEVNOTE: Your options here.
Sandboxing = false,
SplashLogo = new ResourcePath("/path/to/splash/logo.png"),
// Check "RobustToolbox/Resources/Textures/Logo/icon" for an example window icon set.
WindowIconSet = new ResourcePath("/path/to/folder/with/window/icon/set"),
DefaultWindowTitle = "Robust Template"
});*/
}
/*
// DEVNOTE: If you want to use RobustToolbox as a library, use the method below instead.
// Keep in mind, this will make your game ineligible from appearing on the SS14 hub, specially if you
// disable sandboxing.
ContentStart.StartLibrary(args, new GameControllerOptions()
{
// DEVNOTE: Your options here.
Sandboxing = false,
SplashLogo = new ResourcePath("/path/to/splash/logo.png"),
// Check "RobustToolbox/Resources/Textures/Logo/icon" for an example window icon set.
WindowIconSet = new ResourcePath("/path/to/folder/with/window/icon/set"),
DefaultWindowTitle = "Robust Template"
});*/
}
}

View file

@ -3,7 +3,7 @@
<PropertyGroup>
<!-- Work around https://github.com/dotnet/project-system/issues/4314 -->
<TargetFramework>$(TargetFramework)</TargetFramework>
<LangVersion>9</LangVersion>
<LangVersion>latest</LangVersion>
<IsPackable>false</IsPackable>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<OutputPath>..\bin\Content.Server\</OutputPath>

View file

@ -3,43 +3,42 @@ using Robust.Shared.GameObjects;
using Robust.Shared.IoC;
using Robust.Shared.Timing;
// DEVNOTE: Games that want to be on the hub are FORCED use the "Content." prefix for assemblies they want to load.
namespace Content.Server
// DEVNOTE: Games that want to be on the hub can change their namespace prefix in the "manifest.yml" file.
namespace Content.Server;
public class EntryPoint : GameServer
{
public class EntryPoint : GameServer
public override void Init()
{
public override void Init()
base.Init();
var factory = IoCManager.Resolve<IComponentFactory>();
factory.DoAutoRegistrations();
foreach (var ignoreName in IgnoredComponents.List)
{
base.Init();
factory.RegisterIgnore(ignoreName);
}
var factory = IoCManager.Resolve<IComponentFactory>();
ServerContentIoC.Register();
factory.DoAutoRegistrations();
foreach (var ignoreName in IgnoredComponents.List)
{
factory.RegisterIgnore(ignoreName);
}
ServerContentIoC.Register();
IoCManager.BuildGraph();
IoCManager.BuildGraph();
factory.GenerateNetIds();
factory.GenerateNetIds();
// DEVNOTE: This is generally where you'll be setting up the IoCManager further.
}
public override void PostInit()
{
base.PostInit();
// DEVNOTE: Can also initialize IoC stuff more here.
}
public override void Update(ModUpdateLevel level, FrameEventArgs frameEventArgs)
{
base.Update(level, frameEventArgs);
// DEVNOTE: Game update loop goes here. Usually you'll want some independent GameTicker.
}
// DEVNOTE: This is generally where you'll be setting up the IoCManager further.
}
}
public override void PostInit()
{
base.PostInit();
// DEVNOTE: Can also initialize IoC stuff more here.
}
public override void Update(ModUpdateLevel level, FrameEventArgs frameEventArgs)
{
base.Update(level, frameEventArgs);
// DEVNOTE: Game update loop goes here. Usually you'll want some independent GameTicker.
}
}

View file

@ -1,9 +1,8 @@
namespace Content.Server
namespace Content.Server;
public static class IgnoredComponents
{
public static class IgnoredComponents
{
public static string[] List => new string[] {
// Stick components you want ignored here.
};
}
public static string[] List => new string[] {
// Stick components you want ignored here.
};
}

View file

@ -1,21 +1,20 @@
using Robust.Server;
namespace Content.Server
namespace Content.Server;
internal static class Program
{
internal static class Program
public static void Main(string[] args)
{
public static void Main(string[] args)
{
ContentStart.Start(args);
ContentStart.Start(args);
/*
// DEVNOTE: If you want to use RobustToolbox as a library, use the method below instead.
ContentStart.StartLibrary(args, new ServerOptions()
{
// DEVNOTE: Your options here.
Sandboxing = false,
});
*/
}
/*
// DEVNOTE: If you want to use RobustToolbox as a library, use the method below instead.
ContentStart.StartLibrary(args, new ServerOptions()
{
// DEVNOTE: Your options here.
Sandboxing = false,
});
*/
}
}

View file

@ -1,12 +1,11 @@
using Robust.Shared.IoC;
namespace Content.Server
namespace Content.Server;
internal static class ServerContentIoC
{
internal static class ServerContentIoC
public static void Register()
{
public static void Register()
{
// DEVNOTE: IoCManager registrations for the server go here and only here.
}
// DEVNOTE: IoCManager registrations for the server go here and only here.
}
}

View file

@ -3,7 +3,7 @@
<PropertyGroup>
<!-- Work around https://github.com/dotnet/project-system/issues/4314 -->
<TargetFramework>$(TargetFramework)</TargetFramework>
<LangVersion>9</LangVersion>
<LangVersion>latest</LangVersion>
<IsPackable>false</IsPackable>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<OutputPath>../bin/Content.Shared</OutputPath>

View file

@ -3,40 +3,39 @@ using Robust.Shared.ContentPack;
using Robust.Shared.IoC;
using Robust.Shared.Localization;
// DEVNOTE: Games that want to be on the hub are FORCED use the "Content." prefix for assemblies they want to load.
namespace Content.Shared
// DEVNOTE: Games that want to be on the hub can change their namespace prefix in the "manifest.yml" file.
namespace Content.Shared;
public class EntryPoint : GameShared
{
public class EntryPoint : GameShared
{
// IoC services shared between the client and the server go here...
// IoC services shared between the client and the server go here...
// See line 23. Controls the default game culture and language.
// Robust calls this culture, but you might find it more fitting to call it the game
// language. Robust doesn't support changing this mid-game. Load your config file early
// if you want that.
private const string Culture = "en-US";
// See line 23. Controls the default game culture and language.
// Robust calls this culture, but you might find it more fitting to call it the game
// language. Robust doesn't support changing this mid-game. Load your config file early
// if you want that.
private const string Culture = "en-US";
public override void PreInit()
{
IoCManager.InjectDependencies(this);
public override void PreInit()
{
IoCManager.InjectDependencies(this);
// Default to en-US.
// DEVNOTE: If you want your game to be multiregional at runtime, you'll need to
// do something more complicated here.
IoCManager.Resolve<ILocalizationManager>().LoadCulture(new CultureInfo(Culture));
// TODO: Document what else you might want to put here
}
// Default to en-US.
// DEVNOTE: If you want your game to be multiregional at runtime, you'll need to
// do something more complicated here.
IoCManager.Resolve<ILocalizationManager>().LoadCulture(new CultureInfo(Culture));
// TODO: Document what else you might want to put here
}
public override void Init()
{
// TODO: Document what you put here
}
public override void Init()
{
// TODO: Document what you put here
}
public override void PostInit()
{
base.PostInit();
// DEVNOTE: You might want to put special init handlers for, say, tiles here.
// TODO: Document what else you might want to put here
}
public override void PostInit()
{
base.PostInit();
// DEVNOTE: You might want to put special init handlers for, say, tiles here.
// TODO: Document what else you might want to put here
}
}

View file

@ -1,21 +1,20 @@
using Robust.Shared;
using Robust.Shared.Configuration;
namespace Content.Shared
{
// DEVNOTE: This is the same as SS14's CCVars. Except it's not named CCVars as that name is
// hot garbage.
[CVarDefs]
public sealed class GameConfigVars: CVars
{
// Declare persistent game config variables here.
// ```
// public static readonly CVarDef<SerializableType>
// VariableName = CVarDef.Create("namespace.varname", default_value, CVar.TYPE | CVar.OTHERTYPE)
// ```
// This is a good spot to store your database config, among other things.
namespace Content.Shared;
public static readonly CVarDef<bool>
DummyCVarForTemplate = CVarDef.Create("dummy.whydoineedthis", true, CVar.ARCHIVE);
}
// DEVNOTE: This is the same as SS14's CCVars. Except it's not named CCVars as that name is
// hot garbage.
[CVarDefs]
public sealed class GameConfigVars: CVars
{
// Declare persistent game config variables here.
// ```
// public static readonly CVarDef<SerializableType>
// VariableName = CVarDef.Create("namespace.varname", default_value, CVar.TYPE | CVar.OTHERTYPE)
// ```
// This is a good spot to store your database config, among other things.
public static readonly CVarDef<bool>
DummyCVarForTemplate = CVarDef.Create("dummy.whydoineedthis", true, CVar.ARCHIVE);
}

View file

@ -1,11 +1,10 @@
using Robust.Shared.Input;
namespace Content.Shared.Input
namespace Content.Shared.Input;
[KeyFunctions]
public static class ContentKeyFunctions
{
[KeyFunctions]
public static class ContentKeyFunctions
{
// DEVNOTE: Stick keys you want to be bindable here.
// public static readonly DummyKey = "DummyKey";
}
// DEVNOTE: Stick keys you want to be bindable here.
// public static readonly DummyKey = "DummyKey";
}

2
Resources/manifest.yml Normal file
View file

@ -0,0 +1,2 @@
modules: [] # Any needed RobustToolbox modules here.
assemblyPrefix: Content # Assembly prefix here.

View file

@ -59,16 +59,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Robust.Generators", "Robust
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.Base", "RobustToolbox\Avalonia.Base\Avalonia.Base.csproj", "{BDF16A97-6269-4CA1-8D67-785DDD357B30}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Linguini", "Linguini", "{D23906E1-8276-4D63-9E06-F1194DCCBE3A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Linguini.Bundle", "RobustToolbox\Linguini\Linguini.Bundle\Linguini.Bundle.csproj", "{0B3BC868-306D-4D0D-93E2-38FBC24A4F1D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Linguini.Shared", "RobustToolbox\Linguini\Linguini.Shared\Linguini.Shared.csproj", "{3D1D4CE5-5029-4EDB-882A-CD7951FF1B7A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Linguini.Syntax", "RobustToolbox\Linguini\Linguini.Syntax\Linguini.Syntax.csproj", "{4789A7B8-FC16-4606-8544-94291C148937}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PluralRules.Generator", "RobustToolbox\Linguini\PluralRules.Generator\PluralRules.Generator.csproj", "{72910CCC-6EA7-41CE-9B56-9FFCFBA7BAF2}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -346,54 +336,6 @@ Global
{BDF16A97-6269-4CA1-8D67-785DDD357B30}.Release|x64.Build.0 = Release|Any CPU
{BDF16A97-6269-4CA1-8D67-785DDD357B30}.Release|x86.ActiveCfg = Release|Any CPU
{BDF16A97-6269-4CA1-8D67-785DDD357B30}.Release|x86.Build.0 = Release|Any CPU
{0B3BC868-306D-4D0D-93E2-38FBC24A4F1D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0B3BC868-306D-4D0D-93E2-38FBC24A4F1D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0B3BC868-306D-4D0D-93E2-38FBC24A4F1D}.Debug|x64.ActiveCfg = Debug|Any CPU
{0B3BC868-306D-4D0D-93E2-38FBC24A4F1D}.Debug|x64.Build.0 = Debug|Any CPU
{0B3BC868-306D-4D0D-93E2-38FBC24A4F1D}.Debug|x86.ActiveCfg = Debug|Any CPU
{0B3BC868-306D-4D0D-93E2-38FBC24A4F1D}.Debug|x86.Build.0 = Debug|Any CPU
{0B3BC868-306D-4D0D-93E2-38FBC24A4F1D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0B3BC868-306D-4D0D-93E2-38FBC24A4F1D}.Release|Any CPU.Build.0 = Release|Any CPU
{0B3BC868-306D-4D0D-93E2-38FBC24A4F1D}.Release|x64.ActiveCfg = Release|Any CPU
{0B3BC868-306D-4D0D-93E2-38FBC24A4F1D}.Release|x64.Build.0 = Release|Any CPU
{0B3BC868-306D-4D0D-93E2-38FBC24A4F1D}.Release|x86.ActiveCfg = Release|Any CPU
{0B3BC868-306D-4D0D-93E2-38FBC24A4F1D}.Release|x86.Build.0 = Release|Any CPU
{3D1D4CE5-5029-4EDB-882A-CD7951FF1B7A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3D1D4CE5-5029-4EDB-882A-CD7951FF1B7A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3D1D4CE5-5029-4EDB-882A-CD7951FF1B7A}.Debug|x64.ActiveCfg = Debug|Any CPU
{3D1D4CE5-5029-4EDB-882A-CD7951FF1B7A}.Debug|x64.Build.0 = Debug|Any CPU
{3D1D4CE5-5029-4EDB-882A-CD7951FF1B7A}.Debug|x86.ActiveCfg = Debug|Any CPU
{3D1D4CE5-5029-4EDB-882A-CD7951FF1B7A}.Debug|x86.Build.0 = Debug|Any CPU
{3D1D4CE5-5029-4EDB-882A-CD7951FF1B7A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3D1D4CE5-5029-4EDB-882A-CD7951FF1B7A}.Release|Any CPU.Build.0 = Release|Any CPU
{3D1D4CE5-5029-4EDB-882A-CD7951FF1B7A}.Release|x64.ActiveCfg = Release|Any CPU
{3D1D4CE5-5029-4EDB-882A-CD7951FF1B7A}.Release|x64.Build.0 = Release|Any CPU
{3D1D4CE5-5029-4EDB-882A-CD7951FF1B7A}.Release|x86.ActiveCfg = Release|Any CPU
{3D1D4CE5-5029-4EDB-882A-CD7951FF1B7A}.Release|x86.Build.0 = Release|Any CPU
{4789A7B8-FC16-4606-8544-94291C148937}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4789A7B8-FC16-4606-8544-94291C148937}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4789A7B8-FC16-4606-8544-94291C148937}.Debug|x64.ActiveCfg = Debug|Any CPU
{4789A7B8-FC16-4606-8544-94291C148937}.Debug|x64.Build.0 = Debug|Any CPU
{4789A7B8-FC16-4606-8544-94291C148937}.Debug|x86.ActiveCfg = Debug|Any CPU
{4789A7B8-FC16-4606-8544-94291C148937}.Debug|x86.Build.0 = Debug|Any CPU
{4789A7B8-FC16-4606-8544-94291C148937}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4789A7B8-FC16-4606-8544-94291C148937}.Release|Any CPU.Build.0 = Release|Any CPU
{4789A7B8-FC16-4606-8544-94291C148937}.Release|x64.ActiveCfg = Release|Any CPU
{4789A7B8-FC16-4606-8544-94291C148937}.Release|x64.Build.0 = Release|Any CPU
{4789A7B8-FC16-4606-8544-94291C148937}.Release|x86.ActiveCfg = Release|Any CPU
{4789A7B8-FC16-4606-8544-94291C148937}.Release|x86.Build.0 = Release|Any CPU
{72910CCC-6EA7-41CE-9B56-9FFCFBA7BAF2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{72910CCC-6EA7-41CE-9B56-9FFCFBA7BAF2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{72910CCC-6EA7-41CE-9B56-9FFCFBA7BAF2}.Debug|x64.ActiveCfg = Debug|Any CPU
{72910CCC-6EA7-41CE-9B56-9FFCFBA7BAF2}.Debug|x64.Build.0 = Debug|Any CPU
{72910CCC-6EA7-41CE-9B56-9FFCFBA7BAF2}.Debug|x86.ActiveCfg = Debug|Any CPU
{72910CCC-6EA7-41CE-9B56-9FFCFBA7BAF2}.Debug|x86.Build.0 = Debug|Any CPU
{72910CCC-6EA7-41CE-9B56-9FFCFBA7BAF2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{72910CCC-6EA7-41CE-9B56-9FFCFBA7BAF2}.Release|Any CPU.Build.0 = Release|Any CPU
{72910CCC-6EA7-41CE-9B56-9FFCFBA7BAF2}.Release|x64.ActiveCfg = Release|Any CPU
{72910CCC-6EA7-41CE-9B56-9FFCFBA7BAF2}.Release|x64.Build.0 = Release|Any CPU
{72910CCC-6EA7-41CE-9B56-9FFCFBA7BAF2}.Release|x86.ActiveCfg = Release|Any CPU
{72910CCC-6EA7-41CE-9B56-9FFCFBA7BAF2}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{2A829DE3-FCB2-4FEA-A6F3-B85122C8D11E} = {F5F87A9D-C304-4833-B107-D666317F6931}
@ -420,10 +362,5 @@ Global
{D56D47F6-2C26-42D2-BA00-C39824CFAF55} = {F5F87A9D-C304-4833-B107-D666317F6931}
{62452255-1DE7-4D37-BB01-A690EC7E3156} = {F5F87A9D-C304-4833-B107-D666317F6931}
{BDF16A97-6269-4CA1-8D67-785DDD357B30} = {F5F87A9D-C304-4833-B107-D666317F6931}
{D23906E1-8276-4D63-9E06-F1194DCCBE3A} = {F5F87A9D-C304-4833-B107-D666317F6931}
{0B3BC868-306D-4D0D-93E2-38FBC24A4F1D} = {D23906E1-8276-4D63-9E06-F1194DCCBE3A}
{3D1D4CE5-5029-4EDB-882A-CD7951FF1B7A} = {D23906E1-8276-4D63-9E06-F1194DCCBE3A}
{4789A7B8-FC16-4606-8544-94291C148937} = {D23906E1-8276-4D63-9E06-F1194DCCBE3A}
{72910CCC-6EA7-41CE-9B56-9FFCFBA7BAF2} = {D23906E1-8276-4D63-9E06-F1194DCCBE3A}
EndGlobalSection
EndGlobal

@ -1 +1 @@
Subproject commit 4ba56542531c4d810556455d2891a3ed82a53f86
Subproject commit e3dc446e9ea75d6802686397cf19023bd4433e64