Skip to content

Commit

Permalink
Staging: hv: osd.h: remove GUID typedef
Browse files Browse the repository at this point in the history
GUID should not be a typedef.  As proof of the problem of typedefs,
look, we are passing 2 of these as a value in functions!  Bah...

Cc: Hank Janssen <hjanssen@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
Greg Kroah-Hartman committed Sep 15, 2009
1 parent 0ccafb3 commit caf26a3
Show file tree
Hide file tree
Showing 20 changed files with 175 additions and 112 deletions.
18 changes: 12 additions & 6 deletions drivers/staging/hv/BlkVsc.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,11 @@
static const char* gBlkDriverName="blkvsc";

/* {32412632-86cb-44a2-9b5c-50d1417354f5} */
static const GUID gBlkVscDeviceType={
.Data = {0x32, 0x26, 0x41, 0x32, 0xcb, 0x86, 0xa2, 0x44, 0x9b, 0x5c, 0x50, 0xd1, 0x41, 0x73, 0x54, 0xf5}
static const struct hv_guid gBlkVscDeviceType={
.data = {
0x32, 0x26, 0x41, 0x32, 0xcb, 0x86, 0xa2, 0x44,
0x9b, 0x5c, 0x50, 0xd1, 0x41, 0x73, 0x54, 0xf5
}
};

/* Static routines */
Expand All @@ -54,7 +57,7 @@ BlkVscInitialize(
ASSERT(storDriver->RingBufferSize >= (PAGE_SIZE << 1));

Driver->name = gBlkDriverName;
memcpy(&Driver->deviceType, &gBlkVscDeviceType, sizeof(GUID));
memcpy(&Driver->deviceType, &gBlkVscDeviceType, sizeof(struct hv_guid));

storDriver->RequestExtSize = sizeof(STORVSC_REQUEST_EXTENSION);
/* Divide the ring buffer data size (which is 1 page less than the ring buffer size since that page is reserved for the ring buffer indices) */
Expand Down Expand Up @@ -98,10 +101,13 @@ BlkVscOnDeviceAdd(

/* We need to use the device instance guid to set the path and target id. For IDE devices, the */
/* device instance id is formatted as <bus id> - <device id> - 8899 - 000000000000. */
deviceInfo->PathId = Device->deviceInstance.Data[3] << 24 | Device->deviceInstance.Data[2] << 16 |
Device->deviceInstance.Data[1] << 8 |Device->deviceInstance.Data[0];
deviceInfo->PathId = Device->deviceInstance.data[3] << 24 |
Device->deviceInstance.data[2] << 16 |
Device->deviceInstance.data[1] << 8 |
Device->deviceInstance.data[0];

deviceInfo->TargetId = Device->deviceInstance.Data[5] << 8 | Device->deviceInstance.Data[4];
deviceInfo->TargetId = Device->deviceInstance.data[5] << 8 |
Device->deviceInstance.data[4];

DPRINT_EXIT(BLKVSC);

Expand Down
4 changes: 2 additions & 2 deletions drivers/staging/hv/Channel.c
Original file line number Diff line number Diff line change
Expand Up @@ -154,8 +154,8 @@ void VmbusChannelGetDebugInfo(struct vmbus_channel *Channel,

DebugInfo->RelId = Channel->OfferMsg.ChildRelId;
DebugInfo->State = Channel->State;
memcpy(&DebugInfo->InterfaceType, &Channel->OfferMsg.Offer.InterfaceType, sizeof(GUID));
memcpy(&DebugInfo->InterfaceInstance, &Channel->OfferMsg.Offer.InterfaceInstance, sizeof(GUID));
memcpy(&DebugInfo->InterfaceType, &Channel->OfferMsg.Offer.InterfaceType, sizeof(struct hv_guid));
memcpy(&DebugInfo->InterfaceInstance, &Channel->OfferMsg.Offer.InterfaceInstance, sizeof(struct hv_guid));

monitorPage = (HV_MONITOR_PAGE*)gVmbusConnection.MonitorPages;

Expand Down
4 changes: 2 additions & 2 deletions drivers/staging/hv/ChannelInterface.c
Original file line number Diff line number Diff line change
Expand Up @@ -190,8 +190,8 @@ void GetChannelInfo(struct hv_device *Device, DEVICE_INFO *DeviceInfo)

DeviceInfo->ChannelId = debugInfo.RelId;
DeviceInfo->ChannelState = debugInfo.State;
memcpy(&DeviceInfo->ChannelType, &debugInfo.InterfaceType, sizeof(GUID));
memcpy(&DeviceInfo->ChannelInstance, &debugInfo.InterfaceInstance, sizeof(GUID));
memcpy(&DeviceInfo->ChannelType, &debugInfo.InterfaceType, sizeof(struct hv_guid));
memcpy(&DeviceInfo->ChannelInstance, &debugInfo.InterfaceInstance, sizeof(struct hv_guid));

DeviceInfo->MonitorId = debugInfo.MonitorId;

Expand Down
58 changes: 45 additions & 13 deletions drivers/staging/hv/ChannelMgmt.c
Original file line number Diff line number Diff line change
Expand Up @@ -89,16 +89,42 @@ VmbusChannelProcessRescindOffer(

#define MAX_NUM_DEVICE_CLASSES_SUPPORTED 4

static const GUID gSupportedDeviceClasses[MAX_NUM_DEVICE_CLASSES_SUPPORTED]= {
static const struct hv_guid gSupportedDeviceClasses[MAX_NUM_DEVICE_CLASSES_SUPPORTED] = {
/* {ba6163d9-04a1-4d29-b605-72e2ffb1dc7f} */
{.Data = {0xd9, 0x63, 0x61, 0xba, 0xa1, 0x04, 0x29, 0x4d, 0xb6, 0x05, 0x72, 0xe2, 0xff, 0xb1, 0xdc, 0x7f}},/* Storage - SCSI */
/* Storage - SCSI */
{
.data = {
0xd9, 0x63, 0x61, 0xba, 0xa1, 0x04, 0x29, 0x4d,
0xb6, 0x05, 0x72, 0xe2, 0xff, 0xb1, 0xdc, 0x7f
}
},

/* {F8615163-DF3E-46c5-913F-F2D2F965ED0E} */
{.Data = {0x63, 0x51, 0x61, 0xF8, 0x3E, 0xDF, 0xc5, 0x46, 0x91, 0x3F, 0xF2, 0xD2, 0xF9, 0x65, 0xED, 0x0E}}, /* Network */
/* Network */
{
.data = {
0x63, 0x51, 0x61, 0xF8, 0x3E, 0xDF, 0xc5, 0x46,
0x91, 0x3F, 0xF2, 0xD2, 0xF9, 0x65, 0xED, 0x0E
}
},

/* {CFA8B69E-5B4A-4cc0-B98B-8BA1A1F3F95A} */
{.Data = {0x9E, 0xB6, 0xA8, 0xCF, 0x4A, 0x5B, 0xc0, 0x4c, 0xB9, 0x8B, 0x8B, 0xA1, 0xA1, 0xF3, 0xF9, 0x5A}}, /* Input */
/* {32412632-86cb-44a2-9b5c-50d1417354f5} */
{.Data = {0x32, 0x26, 0x41, 0x32, 0xcb, 0x86, 0xa2, 0x44, 0x9b, 0x5c, 0x50, 0xd1, 0x41, 0x73, 0x54, 0xf5}}, /* IDE */
/* Input */
{
.data = {
0x9E, 0xB6, 0xA8, 0xCF, 0x4A, 0x5B, 0xc0, 0x4c,
0xB9, 0x8B, 0x8B, 0xA1, 0xA1, 0xF3, 0xF9, 0x5A
}
},

/* {32412632-86cb-44a2-9b5c-50d1417354f5} */
/* IDE */
{
.data = {
0x32, 0x26, 0x41, 0x32, 0xcb, 0x86, 0xa2, 0x44,
0x9b, 0x5c, 0x50, 0xd1, 0x41, 0x73, 0x54, 0xf5
}
},
};

/* Channel message dispatch table */
Expand Down Expand Up @@ -233,8 +259,8 @@ VmbusChannelProcessOffer(
{
channel = CONTAINING_RECORD(curr, struct vmbus_channel, ListEntry);

if (!memcmp(&channel->OfferMsg.Offer.InterfaceType, &newChannel->OfferMsg.Offer.InterfaceType,sizeof(GUID)) &&
!memcmp(&channel->OfferMsg.Offer.InterfaceInstance, &newChannel->OfferMsg.Offer.InterfaceInstance, sizeof(GUID)))
if (!memcmp(&channel->OfferMsg.Offer.InterfaceType, &newChannel->OfferMsg.Offer.InterfaceType,sizeof(struct hv_guid)) &&
!memcmp(&channel->OfferMsg.Offer.InterfaceInstance, &newChannel->OfferMsg.Offer.InterfaceInstance, sizeof(struct hv_guid)))
{
fNew = false;
break;
Expand Down Expand Up @@ -337,16 +363,16 @@ VmbusChannelOnOffer(
VMBUS_CHANNEL_OFFER_CHANNEL* offer = (VMBUS_CHANNEL_OFFER_CHANNEL*)hdr;
struct vmbus_channel *newChannel;

GUID *guidType;
GUID *guidInstance;
struct hv_guid *guidType;
struct hv_guid *guidInstance;
int i;
int fSupported=0;

DPRINT_ENTER(VMBUS);

for (i=0; i<MAX_NUM_DEVICE_CLASSES_SUPPORTED; i++)
{
if (memcmp(&offer->Offer.InterfaceType, &gSupportedDeviceClasses[i], sizeof(GUID)) == 0)
if (memcmp(&offer->Offer.InterfaceType, &gSupportedDeviceClasses[i], sizeof(struct hv_guid)) == 0)
{
fSupported = 1;
break;
Expand All @@ -370,8 +396,14 @@ VmbusChannelOnOffer(
offer->ChildRelId,
offer->MonitorId,
offer->MonitorAllocated,
guidType->Data[3], guidType->Data[2], guidType->Data[1], guidType->Data[0], guidType->Data[5], guidType->Data[4], guidType->Data[7], guidType->Data[6], guidType->Data[8], guidType->Data[9], guidType->Data[10], guidType->Data[11], guidType->Data[12], guidType->Data[13], guidType->Data[14], guidType->Data[15],
guidInstance->Data[3], guidInstance->Data[2], guidInstance->Data[1], guidInstance->Data[0], guidInstance->Data[5], guidInstance->Data[4], guidInstance->Data[7], guidInstance->Data[6], guidInstance->Data[8], guidInstance->Data[9], guidInstance->Data[10], guidInstance->Data[11], guidInstance->Data[12], guidInstance->Data[13], guidInstance->Data[14], guidInstance->Data[15]);
guidType->data[3], guidType->data[2], guidType->data[1], guidType->data[0],
guidType->data[5], guidType->data[4], guidType->data[7], guidType->data[6],
guidType->data[8], guidType->data[9], guidType->data[10], guidType->data[11],
guidType->data[12], guidType->data[13], guidType->data[14], guidType->data[15],
guidInstance->data[3], guidInstance->data[2], guidInstance->data[1], guidInstance->data[0],
guidInstance->data[5], guidInstance->data[4], guidInstance->data[7], guidInstance->data[6],
guidInstance->data[8], guidInstance->data[9], guidInstance->data[10], guidInstance->data[11],
guidInstance->data[12], guidInstance->data[13], guidInstance->data[14], guidInstance->data[15]);

/* Allocate the channel object and save this offer. */
newChannel = AllocVmbusChannel();
Expand Down
4 changes: 2 additions & 2 deletions drivers/staging/hv/ChannelMgmt.h
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,8 @@ struct vmbus_channel {
struct vmbus_channel_debug_info {
u32 RelId;
enum vmbus_channel_state State;
GUID InterfaceType;
GUID InterfaceInstance;
struct hv_guid InterfaceType;
struct hv_guid InterfaceInstance;
u32 MonitorId;
u32 ServerMonitorPending;
u32 ServerMonitorLatency;
Expand Down
4 changes: 2 additions & 2 deletions drivers/staging/hv/Hv.h
Original file line number Diff line number Diff line change
Expand Up @@ -92,8 +92,8 @@ enum {
/* #define VMBUS_PORT_ID 11 */

/* 628180B8-308D-4c5e-B7DB-1BEB62E62EF4 */
static const GUID VMBUS_SERVICE_ID = {
.Data = {
static const struct hv_guid VMBUS_SERVICE_ID = {
.data = {
0xb8, 0x80, 0x81, 0x62, 0x8d, 0x30, 0x5e, 0x4c,
0xb7, 0xdb, 0x1b, 0xeb, 0x62, 0xe6, 0x2e, 0xf4
},
Expand Down
9 changes: 6 additions & 3 deletions drivers/staging/hv/NetVsc.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,11 @@
static const char* gDriverName="netvsc";

/* {F8615163-DF3E-46c5-913F-F2D2F965ED0E} */
static const GUID gNetVscDeviceType={
.Data = {0x63, 0x51, 0x61, 0xF8, 0x3E, 0xDF, 0xc5, 0x46, 0x91, 0x3F, 0xF2, 0xD2, 0xF9, 0x65, 0xED, 0x0E}
static const struct hv_guid gNetVscDeviceType = {
.data = {
0x63, 0x51, 0x61, 0xF8, 0x3E, 0xDF, 0xc5, 0x46,
0x91, 0x3F, 0xF2, 0xD2, 0xF9, 0x65, 0xED, 0x0E
}
};


Expand Down Expand Up @@ -240,7 +243,7 @@ NetVscInitialize(
ASSERT(driver->RingBufferSize >= (PAGE_SIZE << 1));

drv->name = gDriverName;
memcpy(&drv->deviceType, &gNetVscDeviceType, sizeof(GUID));
memcpy(&drv->deviceType, &gNetVscDeviceType, sizeof(struct hv_guid));

/* Make sure it is set by the caller */
ASSERT(driver->OnReceiveCallback);
Expand Down
9 changes: 6 additions & 3 deletions drivers/staging/hv/StorVsc.c
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,11 @@ typedef struct _STORVSC_DEVICE{
static const char* gDriverName="storvsc";

/* {ba6163d9-04a1-4d29-b605-72e2ffb1dc7f} */
static const GUID gStorVscDeviceType={
.Data = {0xd9, 0x63, 0x61, 0xba, 0xa1, 0x04, 0x29, 0x4d, 0xb6, 0x05, 0x72, 0xe2, 0xff, 0xb1, 0xdc, 0x7f}
static const struct hv_guid gStorVscDeviceType = {
.data = {
0xd9, 0x63, 0x61, 0xba, 0xa1, 0x04, 0x29, 0x4d,
0xb6, 0x05, 0x72, 0xe2, 0xff, 0xb1, 0xdc, 0x7f
}
};


Expand Down Expand Up @@ -270,7 +273,7 @@ StorVscInitialize(
ASSERT(storDriver->RingBufferSize >= (PAGE_SIZE << 1));

Driver->name = gDriverName;
memcpy(&Driver->deviceType, &gStorVscDeviceType, sizeof(GUID));
memcpy(&Driver->deviceType, &gStorVscDeviceType, sizeof(struct hv_guid));

storDriver->RequestExtSize = sizeof(STORVSC_REQUEST_EXTENSION);

Expand Down
24 changes: 15 additions & 9 deletions drivers/staging/hv/Vmbus.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,13 +37,19 @@ static const char* gDriverName="vmbus";
* We defined this to be consistent with other devices
*/
/* {c5295816-f63a-4d5f-8d1a-4daf999ca185} */
static const GUID gVmbusDeviceType={
.Data = {0x16, 0x58, 0x29, 0xc5, 0x3a, 0xf6, 0x5f, 0x4d, 0x8d, 0x1a, 0x4d, 0xaf, 0x99, 0x9c, 0xa1, 0x85}
static const struct hv_guid gVmbusDeviceType = {
.data = {
0x16, 0x58, 0x29, 0xc5, 0x3a, 0xf6, 0x5f, 0x4d,
0x8d, 0x1a, 0x4d, 0xaf, 0x99, 0x9c, 0xa1, 0x85
}
};

/* {ac3760fc-9adf-40aa-9427-a70ed6de95c5} */
static const GUID gVmbusDeviceId={
.Data = {0xfc, 0x60, 0x37, 0xac, 0xdf, 0x9a, 0xaa, 0x40, 0x94, 0x27, 0xa7, 0x0e, 0xd6, 0xde, 0x95, 0xc5}
static const struct hv_guid gVmbusDeviceId = {
.data = {
0xfc, 0x60, 0x37, 0xac, 0xdf, 0x9a, 0xaa, 0x40,
0x94, 0x27, 0xa7, 0x0e, 0xd6, 0xde, 0x95, 0xc5
}
};

static struct hv_driver *gDriver; /* vmbus driver object */
Expand Down Expand Up @@ -130,7 +136,7 @@ VmbusInitialize(
sizeof(struct VMBUS_CHANNEL_PACKET_PAGE_BUFFER), sizeof(struct VMBUS_CHANNEL_PACKET_MULITPAGE_BUFFER));

drv->name = gDriverName;
memcpy(&drv->deviceType, &gVmbusDeviceType, sizeof(GUID));
memcpy(&drv->deviceType, &gVmbusDeviceType, sizeof(struct hv_guid));

/* Setup dispatch table */
driver->Base.OnDeviceAdd = VmbusOnDeviceAdd;
Expand Down Expand Up @@ -225,8 +231,8 @@ VmbusGetChannelInfo(
--*/

struct hv_device *VmbusChildDeviceCreate(GUID DeviceType,
GUID DeviceInstance,
struct hv_device *VmbusChildDeviceCreate(struct hv_guid DeviceType,
struct hv_guid DeviceInstance,
void *Context)
{
VMBUS_DRIVER_OBJECT* vmbusDriver = (VMBUS_DRIVER_OBJECT*)gDriver;
Expand Down Expand Up @@ -315,8 +321,8 @@ VmbusOnDeviceAdd(

gDevice = dev;

memcpy(&gDevice->deviceType, &gVmbusDeviceType, sizeof(GUID));
memcpy(&gDevice->deviceInstance, &gVmbusDeviceId, sizeof(GUID));
memcpy(&gDevice->deviceType, &gVmbusDeviceType, sizeof(struct hv_guid));
memcpy(&gDevice->deviceInstance, &gVmbusDeviceId, sizeof(struct hv_guid));

/* strcpy(dev->name, "vmbus"); */
/* SynIC setup... */
Expand Down
4 changes: 2 additions & 2 deletions drivers/staging/hv/VmbusPrivate.h
Original file line number Diff line number Diff line change
Expand Up @@ -103,8 +103,8 @@ extern struct VMBUS_CONNECTION gVmbusConnection;

/* General vmbus interface */

struct hv_device *VmbusChildDeviceCreate(GUID deviceType,
GUID deviceInstance,
struct hv_device *VmbusChildDeviceCreate(struct hv_guid deviceType,
struct hv_guid deviceInstance,
void *context);

int VmbusChildDeviceAdd(struct hv_device *Device);
Expand Down
2 changes: 1 addition & 1 deletion drivers/staging/hv/blkvsc_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ static int blkvsc_drv_init(PFN_DRIVERINITIALIZE pfn_drv_init)
pfn_drv_init(&storvsc_drv_obj->Base);

drv_ctx->driver.name = storvsc_drv_obj->Base.name;
memcpy(&drv_ctx->class_id, &storvsc_drv_obj->Base.deviceType, sizeof(GUID));
memcpy(&drv_ctx->class_id, &storvsc_drv_obj->Base.deviceType, sizeof(struct hv_guid));

drv_ctx->probe = blkvsc_probe;
drv_ctx->remove = blkvsc_remove;
Expand Down
13 changes: 4 additions & 9 deletions drivers/staging/hv/include/List.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,15 +32,10 @@
*
*/

typedef DLIST_ENTRY LIST_ENTRY;
typedef DLIST_ENTRY *PLIST_ENTRY;

/* typedef struct LIST_ENTRY { */
/* struct LIST_ENTRY * volatile Flink; */
/* struct LIST_ENTRY * volatile Blink; */
/* } LIST_ENTRY, *PLIST_ENTRY; */


typedef struct _LIST_ENTRY {
struct _LIST_ENTRY *Flink;
struct _LIST_ENTRY *Blink;
} LIST_ENTRY, *PLIST_ENTRY;

/*
* void
Expand Down
6 changes: 3 additions & 3 deletions drivers/staging/hv/include/NetVscApi.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
#define _NETVSC_API_H_

#include "VmbusApi.h"

#include "List.h"

/* Defines */

Expand Down Expand Up @@ -56,7 +56,7 @@ typedef void (*PFN_ON_LINKSTATUS_CHANGED)(struct hv_device *dev, u32 Status);

/* Represent the xfer page packet which contains 1 or more netvsc packet */
typedef struct _XFERPAGE_PACKET {
DLIST_ENTRY ListEntry;
LIST_ENTRY ListEntry;

/* # of netvsc packets this xfer packet contains */
u32 Count;
Expand All @@ -72,7 +72,7 @@ typedef struct _XFERPAGE_PACKET {
*/
struct hv_netvsc_packet {
/* Bookkeeping stuff */
DLIST_ENTRY ListEntry;
LIST_ENTRY ListEntry;

struct hv_device *Device;
bool IsDataPacket;
Expand Down
12 changes: 6 additions & 6 deletions drivers/staging/hv/include/VmbusApi.h
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ typedef int (*PFN_ON_ISR)(struct hv_driver *drv);
typedef void (*PFN_ON_DPC)(struct hv_driver *drv);
typedef void (*PFN_GET_CHANNEL_OFFERS)(void);

typedef struct hv_device *(*PFN_ON_CHILDDEVICE_CREATE)(GUID DeviceType, GUID DeviceInstance, void *Context);
typedef struct hv_device *(*PFN_ON_CHILDDEVICE_CREATE)(struct hv_guid DeviceType, struct hv_guid DeviceInstance, void *Context);
typedef void (*PFN_ON_CHILDDEVICE_DESTROY)(struct hv_device *Device);
typedef int (*PFN_ON_CHILDDEVICE_ADD)(struct hv_device *RootDevice, struct hv_device *ChildDevice);
typedef void (*PFN_ON_CHILDDEVICE_REMOVE)(struct hv_device *Device);
Expand Down Expand Up @@ -165,8 +165,8 @@ typedef struct _PORT_INFO {
typedef struct _DEVICE_INFO {
u32 ChannelId;
u32 ChannelState;
GUID ChannelType;
GUID ChannelInstance;
struct hv_guid ChannelType;
struct hv_guid ChannelInstance;

u32 MonitorId;
u32 ServerMonitorPending;
Expand Down Expand Up @@ -200,7 +200,7 @@ typedef void (*VMBUS_GET_CHANNEL_INTERFACE)(VMBUS_CHANNEL_INTERFACE *Interface);
/* Base driver object */
struct hv_driver {
const char* name;
GUID deviceType; /* the device type supported by this driver */
struct hv_guid deviceType; /* the device type supported by this driver */

PFN_ON_DEVICEADD OnDeviceAdd;
PFN_ON_DEVICEREMOVE OnDeviceRemove;
Expand All @@ -215,8 +215,8 @@ struct hv_driver {
struct hv_device {
struct hv_driver *Driver; /* the driver for this device */
char name[64];
GUID deviceType; /* the device type id of this device */
GUID deviceInstance; /* the device instance id of this device */
struct hv_guid deviceType; /* the device type id of this device */
struct hv_guid deviceInstance; /* the device instance id of this device */
void* context;
void* Extension; /* Device extension; */
};
Expand Down
4 changes: 2 additions & 2 deletions drivers/staging/hv/include/VmbusChannelInterface.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,8 @@
typedef struct
{

GUID InterfaceType;
GUID InterfaceInstance;
struct hv_guid InterfaceType;
struct hv_guid InterfaceInstance;
u64 InterruptLatencyIn100nsUnits;
u32 InterfaceRevision;
u32 ServerContextAreaSize; /* in bytes */
Expand Down
Loading

0 comments on commit caf26a3

Please sign in to comment.