Skip to content

Commit

Permalink
Merge branch 'main' into xcode15.3-bump
Browse files Browse the repository at this point in the history
  • Loading branch information
dalexsoto authored Feb 16, 2024
2 parents 5d28f9b + da2525b commit 1dea30a
Show file tree
Hide file tree
Showing 19 changed files with 627 additions and 80 deletions.
16 changes: 8 additions & 8 deletions eng/Version.Details.xml
Original file line number Diff line number Diff line change
Expand Up @@ -31,21 +31,21 @@
<Sha>45dd3a73dd5b64b010c4251303b3664bb30df029</Sha>
</Dependency>
<!-- This is a subscription of the .NET 7 versions of our packages -->
<Dependency Name="Microsoft.MacCatalyst.Sdk" Version="16.4.7134">
<Dependency Name="Microsoft.MacCatalyst.Sdk" Version="16.4.7135">
<Uri>https://github.com/xamarin/xamarin-macios</Uri>
<Sha>89166ac077c152ff50c4284cf6cc6d1825acc7ac</Sha>
<Sha>82bf12c9d734712985c90200439c67d4f3398184</Sha>
</Dependency>
<Dependency Name="Microsoft.macOS.Sdk" Version="13.3.7134">
<Dependency Name="Microsoft.macOS.Sdk" Version="13.3.7135">
<Uri>https://github.com/xamarin/xamarin-macios</Uri>
<Sha>89166ac077c152ff50c4284cf6cc6d1825acc7ac</Sha>
<Sha>82bf12c9d734712985c90200439c67d4f3398184</Sha>
</Dependency>
<Dependency Name="Microsoft.iOS.Sdk" Version="16.4.7134">
<Dependency Name="Microsoft.iOS.Sdk" Version="16.4.7135">
<Uri>https://github.com/xamarin/xamarin-macios</Uri>
<Sha>89166ac077c152ff50c4284cf6cc6d1825acc7ac</Sha>
<Sha>82bf12c9d734712985c90200439c67d4f3398184</Sha>
</Dependency>
<Dependency Name="Microsoft.tvOS.Sdk" Version="16.4.7134">
<Dependency Name="Microsoft.tvOS.Sdk" Version="16.4.7135">
<Uri>https://github.com/xamarin/xamarin-macios</Uri>
<Sha>89166ac077c152ff50c4284cf6cc6d1825acc7ac</Sha>
<Sha>82bf12c9d734712985c90200439c67d4f3398184</Sha>
</Dependency>
<Dependency Name="Microsoft.NET.Runtime.MonoTargets.Sdk" Version="8.0.0">
<Uri>https://github.com/dotnet/runtime</Uri>
Expand Down
8 changes: 4 additions & 4 deletions eng/Versions.props
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@
<Emscriptennet7WorkloadVersion>$(MicrosoftNETWorkloadEmscriptenCurrentManifest80100Version)</Emscriptennet7WorkloadVersion>
<EmscriptenWorkloadVersion>$(MicrosoftNETWorkloadEmscriptenCurrentManifest80100Version)</EmscriptenWorkloadVersion>
<!-- This is a subscription of the .NET 7 versions of our packages -->
<MicrosoftMacCatalystSdkPackageVersion>16.4.7134</MicrosoftMacCatalystSdkPackageVersion>
<MicrosoftmacOSSdkPackageVersion>13.3.7134</MicrosoftmacOSSdkPackageVersion>
<MicrosoftiOSSdkPackageVersion>16.4.7134</MicrosoftiOSSdkPackageVersion>
<MicrosofttvOSSdkPackageVersion>16.4.7134</MicrosofttvOSSdkPackageVersion>
<MicrosoftMacCatalystSdkPackageVersion>16.4.7135</MicrosoftMacCatalystSdkPackageVersion>
<MicrosoftmacOSSdkPackageVersion>13.3.7135</MicrosoftmacOSSdkPackageVersion>
<MicrosoftiOSSdkPackageVersion>16.4.7135</MicrosoftiOSSdkPackageVersion>
<MicrosofttvOSSdkPackageVersion>16.4.7135</MicrosofttvOSSdkPackageVersion>
</PropertyGroup>
</Project>
10 changes: 7 additions & 3 deletions src/Accessibility/AXHearingUtilities.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,13 @@ public static partial class AXHearingUtilities {
[DllImport (Constants.AccessibilityLibrary)]
static extern /* NSArray<NSUUID *> * */ IntPtr AXMFiHearingDevicePairedUUIDs ();

[DllImport (Constants.AccessibilityLibrary, EntryPoint = "AXSupportsBidirectionalAXMFiHearingDeviceStreaming")]
[return: MarshalAs (UnmanagedType.I1)]
public static extern bool SupportsBidirectionalStreaming ();
[DllImport (Constants.AccessibilityLibrary)]
public static extern byte AXSupportsBidirectionalAXMFiHearingDeviceStreaming ();

public static bool SupportsBidirectionalStreaming ()
{
return AXSupportsBidirectionalAXMFiHearingDeviceStreaming () != 0;
}

public static AXHearingDeviceEar GetMFiHearingDeviceStreamingEar ()
{
Expand Down
17 changes: 12 additions & 5 deletions src/MediaAccessibility/MAImageCaptioning.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,21 +24,24 @@ public static partial class MAImageCaptioning {

[DllImport (Constants.MediaAccessibilityLibrary)]
// __attribute__((cf_returns_retained))
static extern /* CFStringRef _Nullable */ IntPtr MAImageCaptioningCopyCaption (/* CFURLRef _Nonnull */ IntPtr url, /* CFErrorRef _Nullable * */ out IntPtr error);
unsafe static extern /* CFStringRef _Nullable */ IntPtr MAImageCaptioningCopyCaption (/* CFURLRef _Nonnull */ IntPtr url, /* CFErrorRef _Nullable * */ IntPtr* error);

static public string? GetCaption (NSUrl url, out NSError? error)
{
if (url is null)
ObjCRuntime.ThrowHelper.ThrowArgumentNullException (nameof (url));

var result = MAImageCaptioningCopyCaption (url.Handle, out var e);
IntPtr result;
IntPtr e;
unsafe {
result = MAImageCaptioningCopyCaption (url.Handle, &e);
}
error = e == IntPtr.Zero ? null : new NSError (e);
return CFString.FromHandle (result, releaseHandle: true);
}

[DllImport (Constants.MediaAccessibilityLibrary)]
[return: MarshalAs (UnmanagedType.I1)]
static extern bool MAImageCaptioningSetCaption (/* CFURLRef _Nonnull */ IntPtr url, /* CFStringRef _Nullable */ IntPtr @string, /* CFErrorRef _Nullable * */ out IntPtr error);
unsafe static extern byte MAImageCaptioningSetCaption (/* CFURLRef _Nonnull */ IntPtr url, /* CFStringRef _Nullable */ IntPtr @string, /* CFErrorRef _Nullable * */ IntPtr* error);

static public bool SetCaption (NSUrl url, string @string, out NSError? error)
{
Expand All @@ -47,7 +50,11 @@ static public bool SetCaption (NSUrl url, string @string, out NSError? error)

var s = CFString.CreateNative (@string);
try {
var result = MAImageCaptioningSetCaption (url.Handle, s, out var e);
bool result;
IntPtr e;
unsafe {
result = MAImageCaptioningSetCaption (url.Handle, s, &e) != 0;
}
error = e == IntPtr.Zero ? null : new NSError (e);
return result;
} finally {
Expand Down
97 changes: 65 additions & 32 deletions src/MediaAccessibility/MediaAccessibility.cs
Original file line number Diff line number Diff line change
Expand Up @@ -50,15 +50,14 @@ static MACaptionAppearance ()
#endif

[DllImport (Constants.MediaAccessibilityLibrary)]
[return: MarshalAs (UnmanagedType.I1)]
static extern bool MACaptionAppearanceAddSelectedLanguage (nint domain,
static extern byte MACaptionAppearanceAddSelectedLanguage (nint domain,
/* CFStringRef __nonnull */ IntPtr language);

public static bool AddSelectedLanguage (MACaptionAppearanceDomain domain, string language)
{
// this will throw an ANE if language is null
using (var lang = new CFString (language)) {
return MACaptionAppearanceAddSelectedLanguage ((int) domain, lang.Handle);
return MACaptionAppearanceAddSelectedLanguage ((int) domain, lang.Handle) != 0;
}
}

Expand Down Expand Up @@ -107,120 +106,154 @@ public static NSString [] GetPreferredCaptioningMediaCharacteristics (MACaptionA
}

[DllImport (Constants.MediaAccessibilityLibrary)]
static extern /* CGColorRef __nonnull */ IntPtr MACaptionAppearanceCopyForegroundColor (nint domain,
/* MACaptionAppearanceBehavior * __nullable */ ref nint behavior);
unsafe static extern /* CGColorRef __nonnull */ IntPtr MACaptionAppearanceCopyForegroundColor (nint domain,
/* MACaptionAppearanceBehavior * __nullable */ nint* behavior);

public static CGColor GetForegroundColor (MACaptionAppearanceDomain domain, ref MACaptionAppearanceBehavior behavior)
{
nint b = (int) behavior;
var rv = new CGColor (MACaptionAppearanceCopyForegroundColor ((int) domain, ref b), owns: true);
IntPtr handle;
unsafe {
handle = MACaptionAppearanceCopyForegroundColor ((int) domain, &b);
}
var rv = new CGColor (handle, owns: true);
behavior = (MACaptionAppearanceBehavior) (int) b;
return rv;
}

[DllImport (Constants.MediaAccessibilityLibrary)]
static extern /* CGColorRef __nonnull */ IntPtr MACaptionAppearanceCopyBackgroundColor (nint domain,
/* MACaptionAppearanceBehavior * __nullable */ ref nint behavior);
unsafe static extern /* CGColorRef __nonnull */ IntPtr MACaptionAppearanceCopyBackgroundColor (nint domain,
/* MACaptionAppearanceBehavior * __nullable */ nint* behavior);

public static CGColor GetBackgroundColor (MACaptionAppearanceDomain domain, ref MACaptionAppearanceBehavior behavior)
{
nint b = (int) behavior;
var rv = new CGColor (MACaptionAppearanceCopyBackgroundColor ((int) domain, ref b), owns: true);
IntPtr handle;
unsafe {
handle = MACaptionAppearanceCopyBackgroundColor ((int) domain, &b);
}
var rv = new CGColor (handle, owns: true);
behavior = (MACaptionAppearanceBehavior) (int) b;
return rv;
}

[DllImport (Constants.MediaAccessibilityLibrary)]
static extern /* CGColorRef __nonnull */ IntPtr MACaptionAppearanceCopyWindowColor (nint domain,
/* MACaptionAppearanceBehavior * __nullable */ ref nint behavior);
unsafe static extern /* CGColorRef __nonnull */ IntPtr MACaptionAppearanceCopyWindowColor (nint domain,
/* MACaptionAppearanceBehavior * __nullable */ nint* behavior);

public static CGColor GetWindowColor (MACaptionAppearanceDomain domain, ref MACaptionAppearanceBehavior behavior)
{
nint b = (int) behavior;
var rv = new CGColor (MACaptionAppearanceCopyWindowColor ((int) domain, ref b), owns: true);
IntPtr handle;
unsafe {
handle = MACaptionAppearanceCopyWindowColor ((int) domain, &b);
}
var rv = new CGColor (handle, owns: true);
behavior = (MACaptionAppearanceBehavior) (int) b;
return rv;
}

[DllImport (Constants.MediaAccessibilityLibrary)]
static extern nfloat MACaptionAppearanceGetForegroundOpacity (nint domain, ref nint behavior);
unsafe static extern nfloat MACaptionAppearanceGetForegroundOpacity (nint domain, nint* behavior);

public static nfloat GetForegroundOpacity (MACaptionAppearanceDomain domain, ref MACaptionAppearanceBehavior behavior)
{
nint b = (int) behavior;
var rv = MACaptionAppearanceGetForegroundOpacity ((int) domain, ref b);
nfloat rv;
unsafe {
rv = MACaptionAppearanceGetForegroundOpacity ((int) domain, &b);
}
behavior = (MACaptionAppearanceBehavior) (int) b;
return rv;
}

[DllImport (Constants.MediaAccessibilityLibrary)]
static extern nfloat MACaptionAppearanceGetBackgroundOpacity (nint domain,
/* MACaptionAppearanceBehavior * __nullable */ ref nint behavior);
unsafe static extern nfloat MACaptionAppearanceGetBackgroundOpacity (nint domain,
/* MACaptionAppearanceBehavior * __nullable */ nint* behavior);

public static nfloat GetBackgroundOpacity (MACaptionAppearanceDomain domain, ref MACaptionAppearanceBehavior behavior)
{
nint b = (int) behavior;
var rv = MACaptionAppearanceGetBackgroundOpacity ((int) domain, ref b);
nfloat rv;
unsafe {
rv = MACaptionAppearanceGetBackgroundOpacity ((int) domain, &b);
}
behavior = (MACaptionAppearanceBehavior) (int) b;
return rv;
}

[DllImport (Constants.MediaAccessibilityLibrary)]
static extern nfloat MACaptionAppearanceGetWindowOpacity (nint domain,
/* MACaptionAppearanceBehavior * __nullable */ ref nint behavior);
unsafe static extern nfloat MACaptionAppearanceGetWindowOpacity (nint domain,
/* MACaptionAppearanceBehavior * __nullable */ nint* behavior);

public static nfloat GetWindowOpacity (MACaptionAppearanceDomain domain, ref MACaptionAppearanceBehavior behavior)
{
nint b = (int) behavior;
var rv = MACaptionAppearanceGetWindowOpacity ((int) domain, ref b);
nfloat rv;
unsafe {
rv = MACaptionAppearanceGetWindowOpacity ((int) domain, &b);
}
behavior = (MACaptionAppearanceBehavior) (int) b;
return rv;
}

[DllImport (Constants.MediaAccessibilityLibrary)]
static extern nfloat MACaptionAppearanceGetWindowRoundedCornerRadius (nint domain,
/* MACaptionAppearanceBehavior * __nullable */ ref nint behavior);
unsafe static extern nfloat MACaptionAppearanceGetWindowRoundedCornerRadius (nint domain,
/* MACaptionAppearanceBehavior * __nullable */ nint* behavior);

public static nfloat GetWindowRoundedCornerRadius (MACaptionAppearanceDomain domain, ref MACaptionAppearanceBehavior behavior)
{
nint b = (int) behavior;
var rv = MACaptionAppearanceGetWindowRoundedCornerRadius ((int) domain, ref b);
nfloat rv;
unsafe {
rv = MACaptionAppearanceGetWindowRoundedCornerRadius ((int) domain, &b);
}
behavior = (MACaptionAppearanceBehavior) (int) b;
return rv;
}

[DllImport (Constants.MediaAccessibilityLibrary)]
static extern /* CTFontDescriptorRef __nonnull */ IntPtr MACaptionAppearanceCopyFontDescriptorForStyle (nint domain,
/* MACaptionAppearanceBehavior * __nullable */ ref nint behavior, nint fontStyle);
unsafe static extern /* CTFontDescriptorRef __nonnull */ IntPtr MACaptionAppearanceCopyFontDescriptorForStyle (nint domain,
/* MACaptionAppearanceBehavior * __nullable */ nint* behavior, nint fontStyle);

public static CTFontDescriptor GetFontDescriptor (MACaptionAppearanceDomain domain, ref MACaptionAppearanceBehavior behavior, MACaptionAppearanceFontStyle fontStyle)
{
nint b = (int) behavior;
var rv = new CTFontDescriptor (MACaptionAppearanceCopyFontDescriptorForStyle ((int) domain, ref b, (int) fontStyle), owns: true);
IntPtr handle;
unsafe {
handle = MACaptionAppearanceCopyFontDescriptorForStyle ((int) domain, &b, (int) fontStyle);
}
var rv = new CTFontDescriptor (handle, owns: true);
behavior = (MACaptionAppearanceBehavior) (int) b;
return rv;
}

[DllImport (Constants.MediaAccessibilityLibrary)]
static extern nfloat MACaptionAppearanceGetRelativeCharacterSize (nint domain,
/* MACaptionAppearanceBehavior * __nullable */ ref nint behavior);
unsafe static extern nfloat MACaptionAppearanceGetRelativeCharacterSize (nint domain,
/* MACaptionAppearanceBehavior * __nullable */ nint* behavior);

public static nfloat GetRelativeCharacterSize (MACaptionAppearanceDomain domain, ref MACaptionAppearanceBehavior behavior)
{
nint b = (int) behavior;
var rv = MACaptionAppearanceGetRelativeCharacterSize ((int) domain, ref b);
nfloat rv;
unsafe {
rv = MACaptionAppearanceGetRelativeCharacterSize ((int) domain, &b);
}
behavior = (MACaptionAppearanceBehavior) (int) b;
return rv;
}

[DllImport (Constants.MediaAccessibilityLibrary)]
static extern nint MACaptionAppearanceGetTextEdgeStyle (nint domain,
/* MACaptionAppearanceBehavior * __nullable */ ref nint behavior);
unsafe static extern nint MACaptionAppearanceGetTextEdgeStyle (nint domain,
/* MACaptionAppearanceBehavior * __nullable */ nint* behavior);

public static MACaptionAppearanceTextEdgeStyle GetTextEdgeStyle (MACaptionAppearanceDomain domain, ref MACaptionAppearanceBehavior behavior)
{
nint b = (int) behavior;
var rv = MACaptionAppearanceGetTextEdgeStyle ((int) domain, ref b);
nint rv;
unsafe {
rv = MACaptionAppearanceGetTextEdgeStyle ((int) domain, &b);
}
behavior = (MACaptionAppearanceBehavior) (int) b;
return (MACaptionAppearanceTextEdgeStyle) (int) rv;
}
Expand Down
14 changes: 0 additions & 14 deletions tests/cecil-tests/BlittablePInvokes.KnownFailures.cs
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,6 @@ public partial class BlittablePInvokes {
"Security.SslStatus Security.SslContext::SSLRead(System.IntPtr,System.Byte*,System.IntPtr,System.IntPtr&)",
"Security.SslStatus Security.SslContext::SSLSetSessionOption(System.IntPtr,Security.SslSessionOption,System.Boolean)",
"Security.SslStatus Security.SslContext::SSLWrite(System.IntPtr,System.Byte*,System.IntPtr,System.IntPtr&)",
"System.Boolean Accessibility.AXHearingUtilities::SupportsBidirectionalStreaming()",
"System.Boolean AddressBook.ABAddressBook::ABAddressBookAddRecord(System.IntPtr,System.IntPtr,System.IntPtr&)",
"System.Boolean AddressBook.ABAddressBook::ABAddressBookHasUnsavedChanges(System.IntPtr)",
"System.Boolean AddressBook.ABAddressBook::ABAddressBookRemoveRecord(System.IntPtr,System.IntPtr,System.IntPtr&)",
Expand Down Expand Up @@ -329,8 +328,6 @@ public partial class BlittablePInvokes {
"System.Boolean GameController.GCGamepadSnapshot::GCGamepadSnapShotDataV100FromNSData(GameController.GCGamepadSnapShotDataV100&,System.IntPtr)",
"System.Boolean GameController.GCMicroGamepadSnapshot::GCMicroGamepadSnapshotDataFromNSData(GameController.GCMicroGamepadSnapshotData&,System.IntPtr)",
"System.Boolean GameController.GCMicroGamepadSnapshot::GCMicroGamepadSnapShotDataV100FromNSData(GameController.GCMicroGamepadSnapShotDataV100&,System.IntPtr)",
"System.Boolean MediaAccessibility.MACaptionAppearance::MACaptionAppearanceAddSelectedLanguage(System.IntPtr,System.IntPtr)",
"System.Boolean MediaAccessibility.MAImageCaptioning::MAImageCaptioningSetCaption(System.IntPtr,System.IntPtr,System.IntPtr&)",
"System.Boolean Network.NWAdvertiseDescriptor::nw_advertise_descriptor_get_no_auto_rename(System.IntPtr)",
"System.Boolean Network.NWBrowserDescriptor::nw_browse_descriptor_get_include_txt_record(System.IntPtr)",
"System.Boolean Network.NWConnectionGroup::nw_connection_group_reinsert_extracted_connection(System.IntPtr,System.IntPtr)",
Expand Down Expand Up @@ -502,12 +499,6 @@ public partial class BlittablePInvokes {
"System.IntPtr GameController.GCGamepadSnapShotDataV100::NSDataFromGCGamepadSnapShotDataV100(GameController.GCGamepadSnapShotDataV100&)",
"System.IntPtr GameController.GCMicroGamepadSnapshotData::NSDataFromGCMicroGamepadSnapshotData(GameController.GCMicroGamepadSnapshotData&)",
"System.IntPtr GameController.GCMicroGamepadSnapShotDataV100::NSDataFromGCMicroGamepadSnapShotDataV100(GameController.GCMicroGamepadSnapShotDataV100&)",
"System.IntPtr MediaAccessibility.MACaptionAppearance::MACaptionAppearanceCopyBackgroundColor(System.IntPtr,System.IntPtr&)",
"System.IntPtr MediaAccessibility.MACaptionAppearance::MACaptionAppearanceCopyFontDescriptorForStyle(System.IntPtr,System.IntPtr&,System.IntPtr)",
"System.IntPtr MediaAccessibility.MACaptionAppearance::MACaptionAppearanceCopyForegroundColor(System.IntPtr,System.IntPtr&)",
"System.IntPtr MediaAccessibility.MACaptionAppearance::MACaptionAppearanceCopyWindowColor(System.IntPtr,System.IntPtr&)",
"System.IntPtr MediaAccessibility.MACaptionAppearance::MACaptionAppearanceGetTextEdgeStyle(System.IntPtr,System.IntPtr&)",
"System.IntPtr MediaAccessibility.MAImageCaptioning::MAImageCaptioningCopyCaption(System.IntPtr,System.IntPtr&)",
"System.IntPtr ModelIO.MDLVertexDescriptor::MTKModelIOVertexDescriptorFromMetalWithError(System.IntPtr,System.IntPtr&)",
"System.IntPtr ObjCRuntime.Selector::GetHandle(System.String)",
"System.IntPtr SearchKit.SKIndex::SKIndexOpenWithURL(System.IntPtr,System.IntPtr,System.Boolean)",
Expand All @@ -525,11 +516,6 @@ public partial class BlittablePInvokes {
"System.IntPtr SystemConfiguration.NetworkReachability::SCNetworkReachabilityCreateWithAddressPair(System.IntPtr,System.IntPtr,SystemConfiguration.NetworkReachability/sockaddr_in&)",
"System.IntPtr SystemConfiguration.NetworkReachability::SCNetworkReachabilityCreateWithAddressPair(System.IntPtr,SystemConfiguration.NetworkReachability/sockaddr_in&,System.IntPtr)",
"System.IntPtr SystemConfiguration.NetworkReachability::SCNetworkReachabilityCreateWithAddressPair(System.IntPtr,SystemConfiguration.NetworkReachability/sockaddr_in&,SystemConfiguration.NetworkReachability/sockaddr_in&)",
"System.Runtime.InteropServices.NFloat MediaAccessibility.MACaptionAppearance::MACaptionAppearanceGetBackgroundOpacity(System.IntPtr,System.IntPtr&)",
"System.Runtime.InteropServices.NFloat MediaAccessibility.MACaptionAppearance::MACaptionAppearanceGetForegroundOpacity(System.IntPtr,System.IntPtr&)",
"System.Runtime.InteropServices.NFloat MediaAccessibility.MACaptionAppearance::MACaptionAppearanceGetRelativeCharacterSize(System.IntPtr,System.IntPtr&)",
"System.Runtime.InteropServices.NFloat MediaAccessibility.MACaptionAppearance::MACaptionAppearanceGetWindowOpacity(System.IntPtr,System.IntPtr&)",
"System.Runtime.InteropServices.NFloat MediaAccessibility.MACaptionAppearance::MACaptionAppearanceGetWindowRoundedCornerRadius(System.IntPtr,System.IntPtr&)",
"System.Void CoreFoundation.CFMessagePort::CFMessagePortGetContext(System.IntPtr,CoreFoundation.CFMessagePort/ContextProxy&)",
"System.Void CoreFoundation.CFStream::CFStreamCreateBoundPair(System.IntPtr,System.IntPtr&,System.IntPtr&,System.IntPtr)",
"System.Void CoreFoundation.CFStream::CFStreamCreatePairWithPeerSocketSignature(System.IntPtr,CoreFoundation.CFSocketSignature&,System.IntPtr&,System.IntPtr&)",
Expand Down
Loading

0 comments on commit 1dea30a

Please sign in to comment.