From mboxrd@z Thu Jan 1 00:00:00 1970 From: Vadim Rozenfeld Subject: [PATCH] viostor driver. Add MSI-X support Date: Sun, 25 Oct 2009 13:16:51 +0200 Message-ID: <4AE433A3.6000106@redhat.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------080601040102040902090804" To: kvm@vger.kernel.org Return-path: Received: from mx1.redhat.com ([209.132.183.28]:43078 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753383AbZJYLQ5 (ORCPT ); Sun, 25 Oct 2009 07:16:57 -0400 Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id n9PBH2Ld007453 for ; Sun, 25 Oct 2009 07:17:02 -0400 Received: from localhost.localdomain (vpn-10-20.str.redhat.com [10.32.10.20]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id n9PBGq6s017019 for ; Sun, 25 Oct 2009 07:16:53 -0400 Sender: kvm-owner@vger.kernel.org List-ID: This is a multi-part message in MIME format. --------------080601040102040902090804 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 8bit repository: /home/vadimr/shares/kvm-guest-drivers-windows branch: master commit 8d7431f1080345c06abdb2ec334fb654da2a59fa Author: Vadim Rozenfeld Date: Sun Oct 25 13:04:09 2009 +0200 [PATCH] Add MSI-X support Signed-off-by: Vadim Rozenfeld diff --git a/viostor/SOURCES b/viostor/SOURCES index 561cfc0..1352710 100644 --- a/viostor/SOURCES +++ b/viostor/SOURCES @@ -6,6 +6,7 @@ C_DEFINES = -DUSE_STORPORT=1 $(C_DEFINES) TARGETLIBS=$(SDK_LIB_PATH)\storport.lib !elseif "$(DDK_TARGET_OS)" == "WinLH" C_DEFINES = -DUSE_STORPORT=1 $(C_DEFINES) +C_DEFINES = -DMSI_SUPPORTED=1 $(C_DEFINES) TARGETLIBS=$(SDK_LIB_PATH)\storport.lib !else TARGETLIBS=$(SDK_LIB_PATH)\scsiport.lib diff --git a/viostor/virtio_pci.c b/viostor/virtio_pci.c index 6bf26cc..9d47763 100644 --- a/viostor/virtio_pci.c +++ b/viostor/virtio_pci.c @@ -86,7 +86,7 @@ VirtIODeviceGet( RhelDbgPrint(TRACE_LEVEL_VERBOSE, ("%s\n", __FUNCTION__)); - ioaddr = adaptExt->device_base + VIRTIO_PCI_CONFIG + offset; + ioaddr = adaptExt->device_base + VIRTIO_PCI_CONFIG((adaptExt->msix_vectors> 0)) + offset; for (i = 0; i< len; i++) { ptr[i] = ScsiPortReadPortUchar((PUCHAR)(ioaddr + i)); @@ -125,7 +125,8 @@ struct virtqueue* VirtIODeviceFindVirtualQueue( IN PVOID DeviceExtension, - IN unsigned index) + IN unsigned index, + IN unsigned vector) { virtio_pci_vq_info *info; struct virtqueue *vq; @@ -133,9 +134,20 @@ VirtIODeviceFindVirtualQueue( ULONG dummy; PHYSICAL_ADDRESS pa; ULONG pageNum; + unsigned res; PADAPTER_EXTENSION adaptExt = (PADAPTER_EXTENSION)DeviceExtension; - RhelDbgPrint(TRACE_LEVEL_VERBOSE, ("%s\n", __FUNCTION__)); + RhelDbgPrint(TRACE_LEVEL_VERBOSE, ("%s index = %d, vector = %d\n", __FUNCTION__, index, vector)); + + if(vector) { + ScsiPortWritePortUshort((PUSHORT)(adaptExt->device_base + VIRTIO_MSI_CONFIG_VECTOR),(USHORT)0); + res = ScsiPortReadPortUshort((PUSHORT)(adaptExt->device_base + VIRTIO_MSI_CONFIG_VECTOR)); + RhelDbgPrint(TRACE_LEVEL_FATAL, ("%s>> VIRTIO_MSI_CONFIG_VECTOR res = 0x%x\n", __FUNCTION__, res)); + if(res == VIRTIO_MSI_NO_VECTOR) { + RhelDbgPrint(TRACE_LEVEL_FATAL, ("%s>> Cannot find config vector res = 0x%x\n", __FUNCTION__, res)); + return NULL; + } + } // Select the queue we're interested in ScsiPortWritePortUshort((PUSHORT)(adaptExt->device_base + VIRTIO_PCI_QUEUE_SEL),(USHORT)index); @@ -144,7 +156,7 @@ VirtIODeviceFindVirtualQueue( num = ScsiPortReadPortUshort((PUSHORT)(adaptExt->device_base + VIRTIO_PCI_QUEUE_NUM)); RhelDbgPrint(TRACE_LEVEL_FATAL, ("%s>>> [vp_dev->addr + VIRTIO_PCI_QUEUE_NUM] = %x\n", __FUNCTION__, num) ); - if (!num || ScsiPortReadPortUshort((PUSHORT)(adaptExt->device_base + VIRTIO_PCI_QUEUE_PFN))) + if (!num || ScsiPortReadPortUlong((PULONG)(adaptExt->device_base + VIRTIO_PCI_QUEUE_PFN))) return NULL; // allocate and fill out our structure the represents an active queue @@ -174,7 +186,18 @@ VirtIODeviceFindVirtualQueue( pageNum = (ULONG)(pa.QuadPart>> PAGE_SHIFT); RhelDbgPrint(TRACE_LEVEL_FATAL, ("[%s] queue phys.address %08lx:%08lx, pfn %lx\n", __FUNCTION__, pa.u.HighPart, pa.u.LowPart, pageNum)); ScsiPortWritePortUlong((PULONG)(adaptExt->device_base + VIRTIO_PCI_QUEUE_PFN),(ULONG)(pageNum)); - + + if(vector) { + ScsiPortWritePortUshort((PUSHORT)(adaptExt->device_base + VIRTIO_MSI_QUEUE_VECTOR),(USHORT)vector); + res = ScsiPortReadPortUshort((PUSHORT)(adaptExt->device_base + VIRTIO_MSI_QUEUE_VECTOR)); + RhelDbgPrint(TRACE_LEVEL_FATAL, ("%s>> VIRTIO_MSI_QUEUE_VECTOR vector = %d, res = 0x%x\n", __FUNCTION__, vector, res)); + if(res == VIRTIO_MSI_NO_VECTOR) { + ScsiPortWritePortUlong((PULONG)(adaptExt->device_base + VIRTIO_PCI_QUEUE_PFN),(ULONG)0); + RhelDbgPrint(TRACE_LEVEL_FATAL, ("%s>> Cannot create vq vector\n", __FUNCTION__)); + return NULL; + } + } + return vq; } diff --git a/viostor/virtio_pci.h b/viostor/virtio_pci.h index fc31163..8f99e18 100644 --- a/viostor/virtio_pci.h +++ b/viostor/virtio_pci.h @@ -52,7 +52,15 @@ /* The remaining space is defined by each driver as the per-driver * configuration space */ -#define VIRTIO_PCI_CONFIG 20 +#define VIRTIO_PCI_CONFIG(msix_enabled) (msix_enabled ? 24 : 20) + +/* MSI-X registers: only enabled if MSI-X is enabled. */ +/* A 16-bit vector for configuration changes. */ +#define VIRTIO_MSI_CONFIG_VECTOR 20 +/* A 16-bit vector for selected queue notifications. */ +#define VIRTIO_MSI_QUEUE_VECTOR 22 +/* Vector value used to disable MSI for queue */ +#define VIRTIO_MSI_NO_VECTOR 0xffff typedef struct virtio_pci_vq_info { @@ -98,7 +106,8 @@ struct virtqueue* VirtIODeviceFindVirtualQueue( IN PVOID DeviceExtension, - IN unsigned index); + IN unsigned index, + IN unsigned vector); void VirtIODeviceDeleteVirtualQueue( diff --git a/viostor/virtio_stor.c b/viostor/virtio_stor.c index b972dd2..4c9fe27 100644 --- a/viostor/virtio_stor.c +++ b/viostor/virtio_stor.c @@ -38,6 +38,13 @@ CompleteDpcRoutine( IN PVOID SystemArgument1, IN PVOID SystemArgument2 ) ; +#ifdef MSI_SUPPORTED +BOOLEAN +VirtIoMSInterruptRoutine ( + IN PVOID DeviceExtension, + IN ULONG MessageID + ); +#endif #endif BOOLEAN @@ -103,7 +110,8 @@ VOID FORCEINLINE CompleteDPC( IN PVOID DeviceExtension, - IN pblk_req vbr + IN pblk_req vbr, + IN ULONG MessageID ); ULONG @@ -210,6 +218,10 @@ VirtIoFindAdapter( #ifdef USE_STORPORT ConfigInfo->MapBuffers = STOR_MAP_NON_READ_WRITE_BUFFERS; ConfigInfo->SynchronizationModel = StorSynchronizeFullDuplex; +#ifdef MSI_SUPPORTED + ConfigInfo->HwMSInterruptRoutine = VirtIoMSInterruptRoutine; + ConfigInfo->InterruptSynchronizationMode=InterruptSynchronizePerMessage;//InterruptSynchronizeAll;// +#endif #else ConfigInfo->MapBuffers = TRUE; #endif @@ -325,20 +337,6 @@ VirtIoFindAdapter( adaptExt->pci_vq_info.queue = PAGE_ALIGN(ptr); adaptExt->virtqueue = (vring_virtqueue*)((ULONG_PTR)(adaptExt->pci_vq_info.queue) + vr_sz); - adaptExt->pci_vq_info.vq = VirtIODeviceFindVirtualQueue(DeviceExtension, 0); - if (!adaptExt->pci_vq_info.vq) { - ScsiPortLogError(DeviceExtension, - NULL, - 0, - 0, - 0, - SP_INTERNAL_ADAPTER_ERROR, - __LINE__); - - RhelDbgPrint(TRACE_LEVEL_FATAL, ("Cannot find snd virtual queue\n")); - return SP_RETURN_ERROR; - } - InitializeListHead(&adaptExt->list_head); InitializeListHead(&adaptExt->complete_list); @@ -372,11 +370,47 @@ VirtIoHwInitialize( u64 cap; u32 v; struct virtio_blk_geometry vgeo; +#ifdef MSI_SUPPORTED + MESSAGE_INTERRUPT_INFORMATION msi_info; +#endif RhelDbgPrint(TRACE_LEVEL_VERBOSE, ("%s (%d)\n", __FUNCTION__, KeGetCurrentIrql())); adaptExt = (PADAPTER_EXTENSION)DeviceExtension; +#ifdef MSI_SUPPORTED + while(StorPortGetMSIInfo(DeviceExtension, adaptExt->msix_vectors,&msi_info) == STOR_STATUS_SUCCESS) { + RhelDbgPrint(TRACE_LEVEL_INFORMATION, ("MessageId = %x\n", msi_info.MessageId)); + RhelDbgPrint(TRACE_LEVEL_INFORMATION, ("MessageData = %x\n", msi_info.MessageData)); + RhelDbgPrint(TRACE_LEVEL_INFORMATION, ("InterruptVector = %x\n", msi_info.InterruptVector)); + RhelDbgPrint(TRACE_LEVEL_INFORMATION, ("InterruptLevel = %x\n", msi_info.InterruptLevel)); + RhelDbgPrint(TRACE_LEVEL_INFORMATION, ("InterruptMode = %s\n", msi_info.InterruptMode == LevelSensitive ? "LevelSensitive" : "Latched")); + RhelDbgPrint(TRACE_LEVEL_INFORMATION, ("MessageAddress = %p\n\n", msi_info.MessageAddress)); + ++adaptExt->msix_vectors; + } + + if(!adaptExt->dump_mode&& (adaptExt->msix_vectors> 1)) { + RhelDbgPrint(TRACE_LEVEL_ERROR, ("xru dump_mode = %x\n", adaptExt->dump_mode)); + adaptExt->pci_vq_info.vq = VirtIODeviceFindVirtualQueue(DeviceExtension, 0, adaptExt->msix_vectors - 1); + } +#endif + + if(!adaptExt->pci_vq_info.vq) { + adaptExt->pci_vq_info.vq = VirtIODeviceFindVirtualQueue(DeviceExtension, 0, 0); + } + if (!adaptExt->pci_vq_info.vq) { + ScsiPortLogError(DeviceExtension, + NULL, + 0, + 0, + 0, + SP_INTERNAL_ADAPTER_ERROR, + __LINE__); + + RhelDbgPrint(TRACE_LEVEL_FATAL, ("Cannot find snd virtual queue\n")); + return FALSE; + } + if (VirtIODeviceGetHostFeature(DeviceExtension, VIRTIO_BLK_F_BARRIER)) { RhelDbgPrint(TRACE_LEVEL_INFORMATION, ("VIRTIO_BLK_F_BARRIER\n")); } @@ -612,7 +646,7 @@ VirtIoInterrupt( Srb->SrbStatus = SRB_STATUS_ERROR; break; } - CompleteDPC(DeviceExtension, vbr); + CompleteDPC(DeviceExtension, vbr, 0); } } RhelDbgPrint(TRACE_LEVEL_VERBOSE, ("%s isInterruptServiced = %d\n", __FUNCTION__, isInterruptServiced)); @@ -671,8 +705,15 @@ VirtIoAdapterControl( } case ScsiRestartAdapter: { RhelDbgPrint(TRACE_LEVEL_VERBOSE, ("ScsiRestartAdapter\n")); - - adaptExt->pci_vq_info.vq = VirtIODeviceFindVirtualQueue(DeviceExtension, 0); + adaptExt->pci_vq_info.vq = NULL; +#ifdef MSI_SUPPORTED + if(!adaptExt->dump_mode& adaptExt->msix_vectors) { + adaptExt->pci_vq_info.vq = VirtIODeviceFindVirtualQueue(DeviceExtension, 0, adaptExt->msix_vectors); + } +#endif + if(!adaptExt->pci_vq_info.vq) { + adaptExt->pci_vq_info.vq = VirtIODeviceFindVirtualQueue(DeviceExtension, 0, 0); + } if (!adaptExt->pci_vq_info.vq) { RhelDbgPrint(TRACE_LEVEL_FATAL, ("Cannot find snd virtual queue\n")); @@ -765,6 +806,45 @@ VirtIoBuildIo( return TRUE; } + +#ifdef MSI_SUPPORTED +BOOLEAN +VirtIoMSInterruptRoutine ( + IN PVOID DeviceExtension, + IN ULONG MessageID + ) +{ + pblk_req vbr; + unsigned int len; + unsigned long flags; + PADAPTER_EXTENSION adaptExt; + PSCSI_REQUEST_BLOCK Srb; + + adaptExt = (PADAPTER_EXTENSION)DeviceExtension; + + RhelDbgPrint(TRACE_LEVEL_VERBOSE, + ("<--->%s : MessageID 0x%x\n", __FUNCTION__, MessageID)); + + while((vbr = adaptExt->pci_vq_info.vq->vq_ops->get_buf(adaptExt->pci_vq_info.vq,&len)) != NULL) { + Srb = (PSCSI_REQUEST_BLOCK)vbr->req; + switch (vbr->status) { + case VIRTIO_BLK_S_OK: + Srb->SrbStatus = SRB_STATUS_SUCCESS; + break; + case VIRTIO_BLK_S_UNSUPP: + Srb->SrbStatus = SRB_STATUS_INVALID_REQUEST; + break; + default: + Srb->SrbStatus = SRB_STATUS_ERROR; + break; + } + CompleteDPC(DeviceExtension, vbr, MessageID); + } + + return TRUE; +} +#endif + #endif UCHAR @@ -1031,7 +1111,8 @@ VOID FORCEINLINE CompleteDPC( IN PVOID DeviceExtension, - IN pblk_req vbr + IN pblk_req vbr, + IN ULONG MessageID ) { PSCSI_REQUEST_BLOCK Srb = (PSCSI_REQUEST_BLOCK)vbr->req; @@ -1044,7 +1125,7 @@ CompleteDPC( InsertTailList(&adaptExt->complete_list,&vbr->list_entry); StorPortIssueDpc(DeviceExtension, &adaptExt->completion_dpc, - NULL, + (PVOID)MessageID, NULL); return; } @@ -1063,26 +1144,41 @@ CompleteDpcRoutine( { STOR_LOCK_HANDLE LockHandle; PADAPTER_EXTENSION adaptExt = (PADAPTER_EXTENSION)Context; + ULONG MessageID = (ULONG)SystemArgument1; + ULONG OldIrql; - StorPortAcquireSpinLock ( Context, InterruptLock , NULL,&LockHandle); - + if(adaptExt->msix_vectors) { + StorPortAcquireMSISpinLock (Context, MessageID,&OldIrql); + } else { + StorPortAcquireSpinLock ( Context, InterruptLock , NULL,&LockHandle); + } while (!IsListEmpty(&adaptExt->complete_list)) { PSCSI_REQUEST_BLOCK Srb; pblk_req vbr; vbr = (pblk_req) RemoveHeadList(&adaptExt->complete_list); Srb = (PSCSI_REQUEST_BLOCK)vbr->req; - StorPortReleaseSpinLock (Context,&LockHandle); - + if(adaptExt->msix_vectors) { + StorPortReleaseMSISpinLock (Context, MessageID, OldIrql); + } else { + StorPortReleaseSpinLock (Context,&LockHandle); + } + ScsiPortNotification(RequestComplete, Context, Srb); - StorPortAcquireSpinLock ( Context, InterruptLock , NULL,&LockHandle); - + if(adaptExt->msix_vectors) { + StorPortAcquireMSISpinLock (Context, MessageID,&OldIrql); + } else { + StorPortAcquireSpinLock ( Context, InterruptLock , NULL,&LockHandle); + } } - StorPortReleaseSpinLock (Context,&LockHandle); - + if(adaptExt->msix_vectors) { + StorPortReleaseMSISpinLock (Context, MessageID, OldIrql); + } else { + StorPortReleaseSpinLock (Context,&LockHandle); + } return; } diff --git a/viostor/virtio_stor.h b/viostor/virtio_stor.h index dd4728e..221c653 100644 --- a/viostor/virtio_stor.h +++ b/viostor/virtio_stor.h @@ -105,6 +105,7 @@ typedef struct _ADAPTER_EXTENSION { LIST_ENTRY complete_list; STOR_DPC completion_dpc; BOOLEAN has_sn; + ULONG msix_vectors; }ADAPTER_EXTENSION, *PADAPTER_EXTENSION; typedef struct _RHEL_SRB_EXTENSION { diff --git a/viostor/virtio_stor_hw_helper.c b/viostor/virtio_stor_hw_helper.c index 3c09259..893b40f 100644 --- a/viostor/virtio_stor_hw_helper.c +++ b/viostor/virtio_stor_hw_helper.c @@ -40,7 +40,7 @@ BOOLEAN RhelDoReadWrite(PVOID DeviceExtension, PSCSI_REQUEST_BLOCK Srb) { - return StorPortSynchronizeAccess(DeviceExtension,SynchronizedAccessRoutine, (PVOID)Srb); + return StorPortSynchronizeAccess(DeviceExtension, SynchronizedAccessRoutine, (PVOID)Srb); } #else BOOLEAN diff --git a/viostor/wlh.inf b/viostor/wlh.inf index aae425a..286aca2 100644 --- a/viostor/wlh.inf +++ b/viostor/wlh.inf @@ -1,108 +1,117 @@ -; Copyright (c) 2009, Red Hat Inc. -[Version] -Signature="$Windows NT$" -Provider=%RHEL% -ClassGUID={4D36E97B-E325-11CE-BFC1-08002BE10318} -Class=SCSIAdapter -DriverVer = 05/05/2009,4.3.0.17241 -CatalogFile=viostor.cat - -; -; Source file information -; - -[SourceDisksNames] -1 = %DiskId1%,,,"" - -[SourceDisksFiles] -viostor.sys = 1,, - -[ControlFlags] -;ExcludeFromSelect = * - -[DestinationDirs] -DefaultDestDir = 10 -viostor_Files_Driver = 12 - -; -; Driver information -; - -[Manufacturer] -%RHEL% = RHEL,NTx86,NTamd64 - -[RHEL] -%RHELScsi.DeviceDesc% = rhelscsi_inst, PCI\VEN_1AF4&DEV_1001&SUBSYS_00000000 -%RHELScsi.DeviceDesc% = rhelscsi_inst, PCI\VEN_1AF4&DEV_1001&SUBSYS_00020000 -%RHELScsi.DeviceDesc% = rhelscsi_inst, PCI\VEN_1AF4&DEV_1001&SUBSYS_00021AF4 - -[RHEL.NTx86] -%RHELScsi.DeviceDesc% = rhelscsi_inst, PCI\VEN_1AF4&DEV_1001&SUBSYS_00000000 -%RHELScsi.DeviceDesc% = rhelscsi_inst, PCI\VEN_1AF4&DEV_1001&SUBSYS_00020000 -%RHELScsi.DeviceDesc% = rhelscsi_inst, PCI\VEN_1AF4&DEV_1001&SUBSYS_00021AF4 - -[RHEL.NTamd64] -%RHELScsi.DeviceDesc% = rhelscsi_inst, PCI\VEN_1AF4&DEV_1001&SUBSYS_00000000 -%RHELScsi.DeviceDesc% = rhelscsi_inst, PCI\VEN_1AF4&DEV_1001&SUBSYS_00020000 -%RHELScsi.DeviceDesc% = rhelscsi_inst, PCI\VEN_1AF4&DEV_1001&SUBSYS_00021AF4 - -; -; General installation section -; - -[viostor_Files_Driver] -viostor.sys,,,2 - -[rhelscsi_inst] -CopyFiles=viostor_Files_Driver - - - -; -; Service Installation -; - -[rhelscsi_inst.Services] -AddService = viostor, 0x00000002 , rhelscsi_Service_Inst, rhelscsi_EventLog_Inst - -[rhelscsi_Service_Inst] -ServiceType = %SERVICE_KERNEL_DRIVER% -StartType = %SERVICE_BOOT_START% -ErrorControl = %SERVICE_ERROR_NORMAL% -ServiceBinary = %12%\viostor.sys -LoadOrderGroup = SCSI miniport -AddReg = pnpsafe_pci_addreg - - -[rhelscsi_EventLog_Inst] -AddReg = rhelscsi_EventLog_AddReg - -[rhelscsi_EventLog_AddReg] -HKR,,EventMessageFile,%REG_EXPAND_SZ%,"%%SystemRoot%%\System32\IoLogMsg.dll" -HKR,,TypesSupported,%REG_DWORD%,7 - - -[pnpsafe_pci_addreg] -HKR, "Parameters\PnpInterface", "5", %REG_DWORD%, 0x00000001 -HKR, "Parameters", "BusType", %REG_DWORD%, 0x00000001 - -[Strings] -; -; Localizable Strings -; -diskId1 = "Red Hat VirtIO SCSI controller Installation Disk" -RHELScsi.DeviceDesc = "Red Hat VirtIO SCSI controller" -RHEL = "Red Hat, Inc." - -; -; Non-Localizable Strings -; - -REG_EXPAND_SZ = 0x00020000 -REG_DWORD = 0x00010001 -SERVICE_KERNEL_DRIVER = 1 -SERVICE_BOOT_START = 0 -SERVICE_ERROR_NORMAL = 1 - - - +; Copyright (c) 2009, Red Hat Inc. +[Version] +Signature="$Windows NT$" +Provider=%RHEL% +ClassGUID={4D36E97B-E325-11CE-BFC1-08002BE10318} +Class=SCSIAdapter +DriverVer = 10/10/2009,5.3.0.17241 +CatalogFile=viostor.cat + +; +; Source file information +; + +[SourceDisksNames] +1 = %DiskId1%,,,"" + +[SourceDisksFiles] +viostor.sys = 1,, + +[ControlFlags] +;ExcludeFromSelect = * + +[DestinationDirs] +DefaultDestDir = 10 +viostor_Files_Driver = 12 + +; +; Driver information +; + +[Manufacturer] +%RHEL% = RHEL,NTx86,NTamd64 + +[RHEL] +%RHELScsi.DeviceDesc% = rhelscsi_inst, PCI\VEN_1AF4&DEV_1001&SUBSYS_00000000 +%RHELScsi.DeviceDesc% = rhelscsi_inst, PCI\VEN_1AF4&DEV_1001&SUBSYS_00020000 +%RHELScsi.DeviceDesc% = rhelscsi_inst, PCI\VEN_1AF4&DEV_1001&SUBSYS_00021AF4 + +[RHEL.NTx86] +%RHELScsi.DeviceDesc% = rhelscsi_inst, PCI\VEN_1AF4&DEV_1001&SUBSYS_00000000 +%RHELScsi.DeviceDesc% = rhelscsi_inst, PCI\VEN_1AF4&DEV_1001&SUBSYS_00020000 +%RHELScsi.DeviceDesc% = rhelscsi_inst, PCI\VEN_1AF4&DEV_1001&SUBSYS_00021AF4 + +[RHEL.NTamd64] +%RHELScsi.DeviceDesc% = rhelscsi_inst, PCI\VEN_1AF4&DEV_1001&SUBSYS_00000000 +%RHELScsi.DeviceDesc% = rhelscsi_inst, PCI\VEN_1AF4&DEV_1001&SUBSYS_00020000 +%RHELScsi.DeviceDesc% = rhelscsi_inst, PCI\VEN_1AF4&DEV_1001&SUBSYS_00021AF4 + +; +; General installation section +; + +[viostor_Files_Driver] +viostor.sys,,,2 + +[rhelscsi_inst] +CopyFiles=viostor_Files_Driver + +; +; Service Installation +; + +[rhelscsi_inst.Services] +AddService = viostor, 0x00000002 , rhelscsi_Service_Inst, rhelscsi_EventLog_Inst + +[rhelscsi_Service_Inst] +ServiceType = %SERVICE_KERNEL_DRIVER% +StartType = %SERVICE_BOOT_START% +ErrorControl = %SERVICE_ERROR_NORMAL% +ServiceBinary = %12%\viostor.sys +LoadOrderGroup = SCSI miniport +AddReg = pnpsafe_pci_addreg + +[rhelscsi_inst.HW] +AddReg = pnpsafe_pci_addreg_msix + +[rhelscsi_EventLog_Inst] +AddReg = rhelscsi_EventLog_AddReg + +[rhelscsi_EventLog_AddReg] +HKR,,EventMessageFile,%REG_EXPAND_SZ%,"%%SystemRoot%%\System32\IoLogMsg.dll" +HKR,,TypesSupported,%REG_DWORD%,7 + + +[pnpsafe_pci_addreg] +HKR, "Parameters\PnpInterface", "5", %REG_DWORD%, 0x00000001 +HKR, "Parameters", "BusType", %REG_DWORD%, 0x00000001 + +[pnpsafe_pci_addreg_msix] +HKR, "Interrupt Management",, 0x00000010 +HKR, "Interrupt Management\MessageSignaledInterruptProperties",, 0x00000010 +HKR, "Interrupt Management\MessageSignaledInterruptProperties", MSISupported, 0x00010001, 0 +HKR, "Interrupt Management\MessageSignaledInterruptProperties", MessageNumberLimit, 0x00010001, 2 +HKR, "Interrupt Management\Affinity Policy",, 0x00000010 +HKR, "Interrupt Management\Affinity Policy", DevicePolicy, 0x00010001, 5 + + +[Strings] +; +; Localizable Strings +; +diskId1 = "Red Hat VirtIO SCSI controller Installation Disk" +RHELScsi.DeviceDesc = "Red Hat VirtIO SCSI controller" +RHEL = "Red Hat, Inc." + +; +; Non-Localizable Strings +; + +REG_EXPAND_SZ = 0x00020000 +REG_DWORD = 0x00010001 +SERVICE_KERNEL_DRIVER = 1 +SERVICE_BOOT_START = 0 +SERVICE_ERROR_NORMAL = 1 + + + diff --git a/viostor/wnet.inf b/viostor/wnet.inf index aae425a..81d61be 100644 --- a/viostor/wnet.inf +++ b/viostor/wnet.inf @@ -1,108 +1,104 @@ -; Copyright (c) 2009, Red Hat Inc. -[Version] -Signature="$Windows NT$" -Provider=%RHEL% -ClassGUID={4D36E97B-E325-11CE-BFC1-08002BE10318} -Class=SCSIAdapter -DriverVer = 05/05/2009,4.3.0.17241 -CatalogFile=viostor.cat - -; -; Source file information -; - -[SourceDisksNames] -1 = %DiskId1%,,,"" - -[SourceDisksFiles] -viostor.sys = 1,, - -[ControlFlags] -;ExcludeFromSelect = * - -[DestinationDirs] -DefaultDestDir = 10 -viostor_Files_Driver = 12 - -; -; Driver information -; - -[Manufacturer] -%RHEL% = RHEL,NTx86,NTamd64 - -[RHEL] -%RHELScsi.DeviceDesc% = rhelscsi_inst, PCI\VEN_1AF4&DEV_1001&SUBSYS_00000000 -%RHELScsi.DeviceDesc% = rhelscsi_inst, PCI\VEN_1AF4&DEV_1001&SUBSYS_00020000 -%RHELScsi.DeviceDesc% = rhelscsi_inst, PCI\VEN_1AF4&DEV_1001&SUBSYS_00021AF4 - -[RHEL.NTx86] -%RHELScsi.DeviceDesc% = rhelscsi_inst, PCI\VEN_1AF4&DEV_1001&SUBSYS_00000000 -%RHELScsi.DeviceDesc% = rhelscsi_inst, PCI\VEN_1AF4&DEV_1001&SUBSYS_00020000 -%RHELScsi.DeviceDesc% = rhelscsi_inst, PCI\VEN_1AF4&DEV_1001&SUBSYS_00021AF4 - -[RHEL.NTamd64] -%RHELScsi.DeviceDesc% = rhelscsi_inst, PCI\VEN_1AF4&DEV_1001&SUBSYS_00000000 -%RHELScsi.DeviceDesc% = rhelscsi_inst, PCI\VEN_1AF4&DEV_1001&SUBSYS_00020000 -%RHELScsi.DeviceDesc% = rhelscsi_inst, PCI\VEN_1AF4&DEV_1001&SUBSYS_00021AF4 - -; -; General installation section -; - -[viostor_Files_Driver] -viostor.sys,,,2 - -[rhelscsi_inst] -CopyFiles=viostor_Files_Driver - - - -; -; Service Installation -; - -[rhelscsi_inst.Services] -AddService = viostor, 0x00000002 , rhelscsi_Service_Inst, rhelscsi_EventLog_Inst - -[rhelscsi_Service_Inst] -ServiceType = %SERVICE_KERNEL_DRIVER% -StartType = %SERVICE_BOOT_START% -ErrorControl = %SERVICE_ERROR_NORMAL% -ServiceBinary = %12%\viostor.sys -LoadOrderGroup = SCSI miniport -AddReg = pnpsafe_pci_addreg - - -[rhelscsi_EventLog_Inst] -AddReg = rhelscsi_EventLog_AddReg - -[rhelscsi_EventLog_AddReg] -HKR,,EventMessageFile,%REG_EXPAND_SZ%,"%%SystemRoot%%\System32\IoLogMsg.dll" -HKR,,TypesSupported,%REG_DWORD%,7 - - -[pnpsafe_pci_addreg] -HKR, "Parameters\PnpInterface", "5", %REG_DWORD%, 0x00000001 -HKR, "Parameters", "BusType", %REG_DWORD%, 0x00000001 - -[Strings] -; -; Localizable Strings -; -diskId1 = "Red Hat VirtIO SCSI controller Installation Disk" -RHELScsi.DeviceDesc = "Red Hat VirtIO SCSI controller" -RHEL = "Red Hat, Inc." - -; -; Non-Localizable Strings -; - -REG_EXPAND_SZ = 0x00020000 -REG_DWORD = 0x00010001 -SERVICE_KERNEL_DRIVER = 1 -SERVICE_BOOT_START = 0 -SERVICE_ERROR_NORMAL = 1 - - - +; Copyright (c) 2009, Red Hat Inc. +[Version] +Signature="$Windows NT$" +Provider=%RHEL% +ClassGUID={4D36E97B-E325-11CE-BFC1-08002BE10318} +Class=SCSIAdapter +DriverVer = 10/10/2009,5.3.0.17241 +CatalogFile=viostor.cat + +; +; Source file information +; + +[SourceDisksNames] +1 = %DiskId1%,,,"" + +[SourceDisksFiles] +viostor.sys = 1,, + +[ControlFlags] +;ExcludeFromSelect = * + +[DestinationDirs] +DefaultDestDir = 10 +viostor_Files_Driver = 12 + +; +; Driver information +; + +[Manufacturer] +%RHEL% = RHEL,NTx86,NTamd64 + +[RHEL] +%RHELScsi.DeviceDesc% = rhelscsi_inst, PCI\VEN_1AF4&DEV_1001&SUBSYS_00000000 +%RHELScsi.DeviceDesc% = rhelscsi_inst, PCI\VEN_1AF4&DEV_1001&SUBSYS_00020000 +%RHELScsi.DeviceDesc% = rhelscsi_inst, PCI\VEN_1AF4&DEV_1001&SUBSYS_00021AF4 + +[RHEL.NTx86] +%RHELScsi.DeviceDesc% = rhelscsi_inst, PCI\VEN_1AF4&DEV_1001&SUBSYS_00000000 +%RHELScsi.DeviceDesc% = rhelscsi_inst, PCI\VEN_1AF4&DEV_1001&SUBSYS_00020000 +%RHELScsi.DeviceDesc% = rhelscsi_inst, PCI\VEN_1AF4&DEV_1001&SUBSYS_00021AF4 + +[RHEL.NTamd64] +%RHELScsi.DeviceDesc% = rhelscsi_inst, PCI\VEN_1AF4&DEV_1001&SUBSYS_00000000 +%RHELScsi.DeviceDesc% = rhelscsi_inst, PCI\VEN_1AF4&DEV_1001&SUBSYS_00020000 +%RHELScsi.DeviceDesc% = rhelscsi_inst, PCI\VEN_1AF4&DEV_1001&SUBSYS_00021AF4 + +; +; General installation section +; + +[viostor_Files_Driver] +viostor.sys,,,2 + +[rhelscsi_inst] +CopyFiles=viostor_Files_Driver + +; +; Service Installation +; + +[rhelscsi_inst.Services] +AddService = viostor, 0x00000002 , rhelscsi_Service_Inst, rhelscsi_EventLog_Inst + +[rhelscsi_Service_Inst] +ServiceType = %SERVICE_KERNEL_DRIVER% +StartType = %SERVICE_BOOT_START% +ErrorControl = %SERVICE_ERROR_NORMAL% +ServiceBinary = %12%\viostor.sys +LoadOrderGroup = SCSI miniport +AddReg = pnpsafe_pci_addreg + +[rhelscsi_EventLog_Inst] +AddReg = rhelscsi_EventLog_AddReg + +[rhelscsi_EventLog_AddReg] +HKR,,EventMessageFile,%REG_EXPAND_SZ%,"%%SystemRoot%%\System32\IoLogMsg.dll" +HKR,,TypesSupported,%REG_DWORD%,7 + +[pnpsafe_pci_addreg] +HKR, "Parameters\PnpInterface", "5", %REG_DWORD%, 0x00000001 +HKR, "Parameters", "BusType", %REG_DWORD%, 0x00000001 + +[Strings] +; +; Localizable Strings +; +diskId1 = "Red Hat VirtIO SCSI controller Installation Disk" +RHELScsi.DeviceDesc = "Red Hat VirtIO SCSI controller" +RHEL = "Red Hat, Inc." + +; +; Non-Localizable Strings +; + +REG_EXPAND_SZ = 0x00020000 +REG_DWORD = 0x00010001 +SERVICE_KERNEL_DRIVER = 1 +SERVICE_BOOT_START = 0 +SERVICE_ERROR_NORMAL = 1 + + + -- To unsubscribe from this list: send the line "unsubscribe kvm-commits" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html --------------080601040102040902090804 Content-Type: text/plain; name="add_msix_support.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="add_msix_support.patch" ZGlmZiAtLWdpdCBhL3Zpb3N0b3IvU09VUkNFUyBiL3Zpb3N0b3IvU09VUkNFUwppbmRleCA1 NjFjZmMwLi4xMzUyNzEwIDEwMDY0NAotLS0gYS92aW9zdG9yL1NPVVJDRVMKKysrIGIvdmlv c3Rvci9TT1VSQ0VTCkBAIC02LDYgKzYsNyBAQCBDX0RFRklORVMgPSAtRFVTRV9TVE9SUE9S VD0xICQoQ19ERUZJTkVTKQogVEFSR0VUTElCUz0kKFNES19MSUJfUEFUSClcc3RvcnBvcnQu bGliCiAhZWxzZWlmICIkKERES19UQVJHRVRfT1MpIiA9PSAiV2luTEgiCiBDX0RFRklORVMg PSAtRFVTRV9TVE9SUE9SVD0xICQoQ19ERUZJTkVTKQorQ19ERUZJTkVTID0gLURNU0lfU1VQ UE9SVEVEPTEgJChDX0RFRklORVMpCiBUQVJHRVRMSUJTPSQoU0RLX0xJQl9QQVRIKVxzdG9y cG9ydC5saWIKICFlbHNlCiBUQVJHRVRMSUJTPSQoU0RLX0xJQl9QQVRIKVxzY3NpcG9ydC5s aWIKZGlmZiAtLWdpdCBhL3Zpb3N0b3IvdmlydGlvX3BjaS5jIGIvdmlvc3Rvci92aXJ0aW9f cGNpLmMKaW5kZXggNmJmMjZjYy4uOWQ0Nzc2MyAxMDA2NDQKLS0tIGEvdmlvc3Rvci92aXJ0 aW9fcGNpLmMKKysrIGIvdmlvc3Rvci92aXJ0aW9fcGNpLmMKQEAgLTg2LDcgKzg2LDcgQEAg VmlydElPRGV2aWNlR2V0KAogCiAgICAgUmhlbERiZ1ByaW50KFRSQUNFX0xFVkVMX1ZFUkJP U0UsICgiJXNcbiIsIF9fRlVOQ1RJT05fXykpOwogCi0gICAgaW9hZGRyID0gYWRhcHRFeHQt PmRldmljZV9iYXNlICsgVklSVElPX1BDSV9DT05GSUcgKyBvZmZzZXQ7CisgICAgaW9hZGRy ID0gYWRhcHRFeHQtPmRldmljZV9iYXNlICsgVklSVElPX1BDSV9DT05GSUcoKGFkYXB0RXh0 LT5tc2l4X3ZlY3RvcnMgPiAwKSkgKyBvZmZzZXQ7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwg bGVuOyBpKyspIHsKICAgICAgICAgcHRyW2ldID0gU2NzaVBvcnRSZWFkUG9ydFVjaGFyKChQ VUNIQVIpKGlvYWRkciArIGkpKTsKQEAgLTEyNSw3ICsxMjUsOCBAQCBzdHJ1Y3QKIHZpcnRx dWV1ZSoKIFZpcnRJT0RldmljZUZpbmRWaXJ0dWFsUXVldWUoCiAgICAgSU4gUFZPSUQgRGV2 aWNlRXh0ZW5zaW9uLAotICAgIElOIHVuc2lnbmVkIGluZGV4KQorICAgIElOIHVuc2lnbmVk IGluZGV4LAorICAgIElOIHVuc2lnbmVkIHZlY3RvcikKIHsKICAgICB2aXJ0aW9fcGNpX3Zx X2luZm8gKmluZm87CiAgICAgc3RydWN0IHZpcnRxdWV1ZSAgICp2cTsKQEAgLTEzMyw5ICsx MzQsMjAgQEAgVmlydElPRGV2aWNlRmluZFZpcnR1YWxRdWV1ZSgKICAgICBVTE9ORyAgICAg ICAgICAgICAgZHVtbXk7CiAgICAgUEhZU0lDQUxfQUREUkVTUyAgIHBhOwogICAgIFVMT05H ICAgICAgICAgICAgICBwYWdlTnVtOyAgICAKKyAgICB1bnNpZ25lZCAgICAgICAgICAgcmVz OwogICAgIFBBREFQVEVSX0VYVEVOU0lPTiBhZGFwdEV4dCA9IChQQURBUFRFUl9FWFRFTlNJ T04pRGV2aWNlRXh0ZW5zaW9uOwogCi0gICAgUmhlbERiZ1ByaW50KFRSQUNFX0xFVkVMX1ZF UkJPU0UsICgiJXNcbiIsIF9fRlVOQ1RJT05fXykpOworICAgIFJoZWxEYmdQcmludChUUkFD RV9MRVZFTF9WRVJCT1NFLCAoIiVzICBpbmRleCA9ICVkLCB2ZWN0b3IgPSAlZFxuIiwgX19G VU5DVElPTl9fLCBpbmRleCwgdmVjdG9yKSk7CisKKyAgICBpZih2ZWN0b3IpIHsKKyAgICAg ICAgU2NzaVBvcnRXcml0ZVBvcnRVc2hvcnQoKFBVU0hPUlQpKGFkYXB0RXh0LT5kZXZpY2Vf YmFzZSArIFZJUlRJT19NU0lfQ09ORklHX1ZFQ1RPUiksKFVTSE9SVCkwKTsKKyAgICAgICAg cmVzID0gU2NzaVBvcnRSZWFkUG9ydFVzaG9ydCgoUFVTSE9SVCkoYWRhcHRFeHQtPmRldmlj ZV9iYXNlICsgVklSVElPX01TSV9DT05GSUdfVkVDVE9SKSk7ICAKKyAgICAgICAgUmhlbERi Z1ByaW50KFRSQUNFX0xFVkVMX0ZBVEFMLCAoIiVzPj4gVklSVElPX01TSV9DT05GSUdfVkVD VE9SIHJlcyA9IDB4JXhcbiIsIF9fRlVOQ1RJT05fXywgcmVzKSk7CisgICAgICAgIGlmKHJl cyA9PSBWSVJUSU9fTVNJX05PX1ZFQ1RPUikgeworICAgICAgICAgICBSaGVsRGJnUHJpbnQo VFJBQ0VfTEVWRUxfRkFUQUwsICgiJXM+PiBDYW5ub3QgZmluZCBjb25maWcgdmVjdG9yIHJl cyA9IDB4JXhcbiIsIF9fRlVOQ1RJT05fXywgcmVzKSk7CisgICAgICAgICAgIHJldHVybiBO VUxMOworICAgICAgICB9CisgICAgfQogCiAgICAgLy8gU2VsZWN0IHRoZSBxdWV1ZSB3ZSdy ZSBpbnRlcmVzdGVkIGluCiAgICAgU2NzaVBvcnRXcml0ZVBvcnRVc2hvcnQoKFBVU0hPUlQp KGFkYXB0RXh0LT5kZXZpY2VfYmFzZSArIFZJUlRJT19QQ0lfUVVFVUVfU0VMKSwoVVNIT1JU KWluZGV4KTsKQEAgLTE0NCw3ICsxNTYsNyBAQCBWaXJ0SU9EZXZpY2VGaW5kVmlydHVhbFF1 ZXVlKAogICAgIG51bSA9IFNjc2lQb3J0UmVhZFBvcnRVc2hvcnQoKFBVU0hPUlQpKGFkYXB0 RXh0LT5kZXZpY2VfYmFzZSArIFZJUlRJT19QQ0lfUVVFVUVfTlVNKSk7CiAKICAgICBSaGVs RGJnUHJpbnQoVFJBQ0VfTEVWRUxfRkFUQUwsICgiJXM+Pj4gW3ZwX2Rldi0+YWRkciArIFZJ UlRJT19QQ0lfUVVFVUVfTlVNXSA9ICV4XG4iLCBfX0ZVTkNUSU9OX18sIG51bSkgKTsKLSAg ICBpZiAoIW51bSB8fCBTY3NpUG9ydFJlYWRQb3J0VXNob3J0KChQVVNIT1JUKShhZGFwdEV4 dC0+ZGV2aWNlX2Jhc2UgKyBWSVJUSU9fUENJX1FVRVVFX1BGTikpKQorICAgIGlmICghbnVt IHx8IFNjc2lQb3J0UmVhZFBvcnRVbG9uZygoUFVMT05HKShhZGFwdEV4dC0+ZGV2aWNlX2Jh c2UgKyBWSVJUSU9fUENJX1FVRVVFX1BGTikpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAog ICAgIC8vIGFsbG9jYXRlIGFuZCBmaWxsIG91dCBvdXIgc3RydWN0dXJlIHRoZSByZXByZXNl bnRzIGFuIGFjdGl2ZSBxdWV1ZQpAQCAtMTc0LDcgKzE4NiwxOCBAQCBWaXJ0SU9EZXZpY2VG aW5kVmlydHVhbFF1ZXVlKAogICAgIHBhZ2VOdW0gPSAoVUxPTkcpKHBhLlF1YWRQYXJ0ID4+ IFBBR0VfU0hJRlQpOwogICAgIFJoZWxEYmdQcmludChUUkFDRV9MRVZFTF9GQVRBTCwgKCJb JXNdIHF1ZXVlIHBoeXMuYWRkcmVzcyAlMDhseDolMDhseCwgcGZuICVseFxuIiwgX19GVU5D VElPTl9fLCBwYS51LkhpZ2hQYXJ0LCBwYS51Lkxvd1BhcnQsIHBhZ2VOdW0pKTsKICAgICBT Y3NpUG9ydFdyaXRlUG9ydFVsb25nKChQVUxPTkcpKGFkYXB0RXh0LT5kZXZpY2VfYmFzZSAr IFZJUlRJT19QQ0lfUVVFVUVfUEZOKSwoVUxPTkcpKHBhZ2VOdW0pKTsKLSAgICAKKyAgIAor ICAgIGlmKHZlY3RvcikgeworICAgICAgICBTY3NpUG9ydFdyaXRlUG9ydFVzaG9ydCgoUFVT SE9SVCkoYWRhcHRFeHQtPmRldmljZV9iYXNlICsgVklSVElPX01TSV9RVUVVRV9WRUNUT1Ip LChVU0hPUlQpdmVjdG9yKTsKKyAgICAgICAgcmVzID0gU2NzaVBvcnRSZWFkUG9ydFVzaG9y dCgoUFVTSE9SVCkoYWRhcHRFeHQtPmRldmljZV9iYXNlICsgVklSVElPX01TSV9RVUVVRV9W RUNUT1IpKTsKKyAgICAgICAgUmhlbERiZ1ByaW50KFRSQUNFX0xFVkVMX0ZBVEFMLCAoIiVz Pj4gVklSVElPX01TSV9RVUVVRV9WRUNUT1IgdmVjdG9yID0gJWQsIHJlcyA9IDB4JXhcbiIs IF9fRlVOQ1RJT05fXywgdmVjdG9yLCByZXMpKTsKKyAgICAgICAgaWYocmVzID09IFZJUlRJ T19NU0lfTk9fVkVDVE9SKSB7CisgICAgICAgICAgIFNjc2lQb3J0V3JpdGVQb3J0VWxvbmco KFBVTE9ORykoYWRhcHRFeHQtPmRldmljZV9iYXNlICsgVklSVElPX1BDSV9RVUVVRV9QRk4p LChVTE9ORykwKTsKKyAgICAgICAgICAgUmhlbERiZ1ByaW50KFRSQUNFX0xFVkVMX0ZBVEFM LCAoIiVzPj4gQ2Fubm90IGNyZWF0ZSB2cSB2ZWN0b3JcbiIsIF9fRlVOQ1RJT05fXykpOwor ICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHJldHVy biB2cTsKIH0KIApkaWZmIC0tZ2l0IGEvdmlvc3Rvci92aXJ0aW9fcGNpLmggYi92aW9zdG9y L3ZpcnRpb19wY2kuaAppbmRleCBmYzMxMTYzLi44Zjk5ZTE4IDEwMDY0NAotLS0gYS92aW9z dG9yL3ZpcnRpb19wY2kuaAorKysgYi92aW9zdG9yL3ZpcnRpb19wY2kuaApAQCAtNTIsNyAr NTIsMTUgQEAKIAogLyogVGhlIHJlbWFpbmluZyBzcGFjZSBpcyBkZWZpbmVkIGJ5IGVhY2gg ZHJpdmVyIGFzIHRoZSBwZXItZHJpdmVyCiAgKiBjb25maWd1cmF0aW9uIHNwYWNlICovCi0j ZGVmaW5lIFZJUlRJT19QQ0lfQ09ORklHCQkyMAorI2RlZmluZSBWSVJUSU9fUENJX0NPTkZJ Ryhtc2l4X2VuYWJsZWQpCQkobXNpeF9lbmFibGVkID8gMjQgOiAyMCkKKworLyogTVNJLVgg cmVnaXN0ZXJzOiBvbmx5IGVuYWJsZWQgaWYgTVNJLVggaXMgZW5hYmxlZC4gKi8KKy8qIEEg MTYtYml0IHZlY3RvciBmb3IgY29uZmlndXJhdGlvbiBjaGFuZ2VzLiAqLworI2RlZmluZSBW SVJUSU9fTVNJX0NPTkZJR19WRUNUT1IgICAgICAgIDIwCisvKiBBIDE2LWJpdCB2ZWN0b3Ig Zm9yIHNlbGVjdGVkIHF1ZXVlIG5vdGlmaWNhdGlvbnMuICovCisjZGVmaW5lIFZJUlRJT19N U0lfUVVFVUVfVkVDVE9SICAgICAgICAgMjIKKy8qIFZlY3RvciB2YWx1ZSB1c2VkIHRvIGRp c2FibGUgTVNJIGZvciBxdWV1ZSAqLworI2RlZmluZSBWSVJUSU9fTVNJX05PX1ZFQ1RPUiAg ICAgICAgICAgIDB4ZmZmZgogCiB0eXBlZGVmIHN0cnVjdCB2aXJ0aW9fcGNpX3ZxX2luZm8K IHsKQEAgLTk4LDcgKzEwNiw4IEBAIHN0cnVjdAogdmlydHF1ZXVlKgogVmlydElPRGV2aWNl RmluZFZpcnR1YWxRdWV1ZSgKICAgICBJTiBQVk9JRCBEZXZpY2VFeHRlbnNpb24sCi0gICAg SU4gdW5zaWduZWQgaW5kZXgpOworICAgIElOIHVuc2lnbmVkIGluZGV4LAorICAgIElOIHVu c2lnbmVkIHZlY3Rvcik7CiAKIHZvaWQgCiBWaXJ0SU9EZXZpY2VEZWxldGVWaXJ0dWFsUXVl dWUoCmRpZmYgLS1naXQgYS92aW9zdG9yL3ZpcnRpb19zdG9yLmMgYi92aW9zdG9yL3ZpcnRp b19zdG9yLmMKaW5kZXggYjk3MmRkMi4uNGM5ZmUyNyAxMDA2NDQKLS0tIGEvdmlvc3Rvci92 aXJ0aW9fc3Rvci5jCisrKyBiL3Zpb3N0b3IvdmlydGlvX3N0b3IuYwpAQCAtMzgsNiArMzgs MTMgQEAgQ29tcGxldGVEcGNSb3V0aW5lKAogICAgIElOIFBWT0lEIFN5c3RlbUFyZ3VtZW50 MSwKICAgICBJTiBQVk9JRCBTeXN0ZW1Bcmd1bWVudDIKICAgICApIDsKKyNpZmRlZiBNU0lf U1VQUE9SVEVECitCT09MRUFOCitWaXJ0SW9NU0ludGVycnVwdFJvdXRpbmUgKAorICAgIElO IFBWT0lEICBEZXZpY2VFeHRlbnNpb24sCisgICAgSU4gVUxPTkcgIE1lc3NhZ2VJRAorICAg ICk7CisjZW5kaWYKICNlbmRpZgogCiBCT09MRUFOCkBAIC0xMDMsNyArMTEwLDggQEAgVk9J RAogRk9SQ0VJTkxJTkUKIENvbXBsZXRlRFBDKAogICAgIElOIFBWT0lEIERldmljZUV4dGVu c2lvbiwgCi0gICAgSU4gcGJsa19yZXEgdmJyCisgICAgSU4gcGJsa19yZXEgdmJyLAorICAg IElOIFVMT05HICBNZXNzYWdlSUQKICAgICApOwogCiBVTE9ORwpAQCAtMjEwLDYgKzIxOCwx MCBAQCBWaXJ0SW9GaW5kQWRhcHRlcigKICNpZmRlZiBVU0VfU1RPUlBPUlQKICAgICBDb25m aWdJbmZvLT5NYXBCdWZmZXJzICAgICAgICAgICAgID0gU1RPUl9NQVBfTk9OX1JFQURfV1JJ VEVfQlVGRkVSUzsKICAgICBDb25maWdJbmZvLT5TeW5jaHJvbml6YXRpb25Nb2RlbCAgID0g U3RvclN5bmNocm9uaXplRnVsbER1cGxleDsKKyNpZmRlZiBNU0lfU1VQUE9SVEVECisgICAg Q29uZmlnSW5mby0+SHdNU0ludGVycnVwdFJvdXRpbmUgICA9IFZpcnRJb01TSW50ZXJydXB0 Um91dGluZTsKKyAgICBDb25maWdJbmZvLT5JbnRlcnJ1cHRTeW5jaHJvbml6YXRpb25Nb2Rl PUludGVycnVwdFN5bmNocm9uaXplUGVyTWVzc2FnZTsvL0ludGVycnVwdFN5bmNocm9uaXpl QWxsOy8vCisjZW5kaWYKICNlbHNlCiAgICAgQ29uZmlnSW5mby0+TWFwQnVmZmVycyAgICAg ICAgICAgICA9IFRSVUU7CiAjZW5kaWYKQEAgLTMyNSwyMCArMzM3LDYgQEAgVmlydElvRmlu ZEFkYXB0ZXIoCiAgICAgYWRhcHRFeHQtPnBjaV92cV9pbmZvLnF1ZXVlID0gUEFHRV9BTElH TihwdHIpOwogICAgIGFkYXB0RXh0LT52aXJ0cXVldWUgPSAodnJpbmdfdmlydHF1ZXVlKiko KFVMT05HX1BUUikoYWRhcHRFeHQtPnBjaV92cV9pbmZvLnF1ZXVlKSArIHZyX3N6KTsKIAot ICAgIGFkYXB0RXh0LT5wY2lfdnFfaW5mby52cSA9IFZpcnRJT0RldmljZUZpbmRWaXJ0dWFs UXVldWUoRGV2aWNlRXh0ZW5zaW9uLCAwKTsKLSAgICBpZiAoIWFkYXB0RXh0LT5wY2lfdnFf aW5mby52cSkgewotICAgICAgICBTY3NpUG9ydExvZ0Vycm9yKERldmljZUV4dGVuc2lvbiwK LSAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgICAgICAgICAg ICAgIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgIFNQX0lOVEVSTkFMX0FEQVBU RVJfRVJST1IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgX19MSU5FX18pOwotCi0gICAg ICAgIFJoZWxEYmdQcmludChUUkFDRV9MRVZFTF9GQVRBTCwgKCJDYW5ub3QgZmluZCBzbmQg dmlydHVhbCBxdWV1ZVxuIikpOwotICAgICAgICByZXR1cm4gU1BfUkVUVVJOX0VSUk9SOwot ICAgIH0KLQogICAgIEluaXRpYWxpemVMaXN0SGVhZCgmYWRhcHRFeHQtPmxpc3RfaGVhZCk7 CiAgICAgSW5pdGlhbGl6ZUxpc3RIZWFkKCZhZGFwdEV4dC0+Y29tcGxldGVfbGlzdCk7CiAK QEAgLTM3MiwxMSArMzcwLDQ3IEBAIFZpcnRJb0h3SW5pdGlhbGl6ZSgKICAgICB1NjQgICAg ICAgICAgICAgICAgY2FwOwogICAgIHUzMiAgICAgICAgICAgICAgICB2OwogICAgIHN0cnVj dCB2aXJ0aW9fYmxrX2dlb21ldHJ5IHZnZW87CisjaWZkZWYgTVNJX1NVUFBPUlRFRAorICAg IE1FU1NBR0VfSU5URVJSVVBUX0lORk9STUFUSU9OIG1zaV9pbmZvOworI2VuZGlmCiAKICAg ICBSaGVsRGJnUHJpbnQoVFJBQ0VfTEVWRUxfVkVSQk9TRSwgKCIlcyAoJWQpXG4iLCBfX0ZV TkNUSU9OX18sIEtlR2V0Q3VycmVudElycWwoKSkpOwogCiAgICAgYWRhcHRFeHQgPSAoUEFE QVBURVJfRVhURU5TSU9OKURldmljZUV4dGVuc2lvbjsKICAgICAKKyNpZmRlZiBNU0lfU1VQ UE9SVEVECisgICAgd2hpbGUoU3RvclBvcnRHZXRNU0lJbmZvKERldmljZUV4dGVuc2lvbiwg YWRhcHRFeHQtPm1zaXhfdmVjdG9ycywgJm1zaV9pbmZvKSA9PSBTVE9SX1NUQVRVU19TVUND RVNTKSB7CisgICAgICAgIFJoZWxEYmdQcmludChUUkFDRV9MRVZFTF9JTkZPUk1BVElPTiwg KCJNZXNzYWdlSWQgPSAleFxuIiwgbXNpX2luZm8uTWVzc2FnZUlkKSk7CisgICAgICAgIFJo ZWxEYmdQcmludChUUkFDRV9MRVZFTF9JTkZPUk1BVElPTiwgKCJNZXNzYWdlRGF0YSA9ICV4 XG4iLCBtc2lfaW5mby5NZXNzYWdlRGF0YSkpOworICAgICAgICBSaGVsRGJnUHJpbnQoVFJB Q0VfTEVWRUxfSU5GT1JNQVRJT04sICgiSW50ZXJydXB0VmVjdG9yID0gJXhcbiIsIG1zaV9p bmZvLkludGVycnVwdFZlY3RvcikpOworICAgICAgICBSaGVsRGJnUHJpbnQoVFJBQ0VfTEVW RUxfSU5GT1JNQVRJT04sICgiSW50ZXJydXB0TGV2ZWwgPSAleFxuIiwgbXNpX2luZm8uSW50 ZXJydXB0TGV2ZWwpKTsKKyAgICAgICAgUmhlbERiZ1ByaW50KFRSQUNFX0xFVkVMX0lORk9S TUFUSU9OLCAoIkludGVycnVwdE1vZGUgPSAlc1xuIiwgbXNpX2luZm8uSW50ZXJydXB0TW9k ZSA9PSBMZXZlbFNlbnNpdGl2ZSA/ICJMZXZlbFNlbnNpdGl2ZSIgOiAiTGF0Y2hlZCIpKTsK KyAgICAgICAgUmhlbERiZ1ByaW50KFRSQUNFX0xFVkVMX0lORk9STUFUSU9OLCAoIk1lc3Nh Z2VBZGRyZXNzID0gJXBcblxuIiwgbXNpX2luZm8uTWVzc2FnZUFkZHJlc3MpKTsKKyAgICAg ICAgKythZGFwdEV4dC0+bXNpeF92ZWN0b3JzOworICAgIH0KKworICAgIGlmKCFhZGFwdEV4 dC0+ZHVtcF9tb2RlICYmIChhZGFwdEV4dC0+bXNpeF92ZWN0b3JzID4gMSkpIHsKKyAgICBS aGVsRGJnUHJpbnQoVFJBQ0VfTEVWRUxfRVJST1IsICgieHJ1IGR1bXBfbW9kZSA9ICV4XG4i LCBhZGFwdEV4dC0+ZHVtcF9tb2RlKSk7CisgICAgICAgIGFkYXB0RXh0LT5wY2lfdnFfaW5m by52cSA9IFZpcnRJT0RldmljZUZpbmRWaXJ0dWFsUXVldWUoRGV2aWNlRXh0ZW5zaW9uLCAw LCBhZGFwdEV4dC0+bXNpeF92ZWN0b3JzIC0gMSk7CisgICAgfQorI2VuZGlmCisKKyAgICBp ZighYWRhcHRFeHQtPnBjaV92cV9pbmZvLnZxKSB7CisgICAgICAgIGFkYXB0RXh0LT5wY2lf dnFfaW5mby52cSA9IFZpcnRJT0RldmljZUZpbmRWaXJ0dWFsUXVldWUoRGV2aWNlRXh0ZW5z aW9uLCAwLCAwKTsKKyAgICB9CisgICAgaWYgKCFhZGFwdEV4dC0+cGNpX3ZxX2luZm8udnEp IHsKKyAgICAgICAgU2NzaVBvcnRMb2dFcnJvcihEZXZpY2VFeHRlbnNpb24sCisgICAgICAg ICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAwLAor ICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAg MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBTUF9JTlRFUk5BTF9BREFQVEVSX0VSUk9S LAorICAgICAgICAgICAgICAgICAgICAgICAgIF9fTElORV9fKTsKKworICAgICAgICBSaGVs RGJnUHJpbnQoVFJBQ0VfTEVWRUxfRkFUQUwsICgiQ2Fubm90IGZpbmQgc25kIHZpcnR1YWwg cXVldWVcbiIpKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKwogICAgIGlmIChW aXJ0SU9EZXZpY2VHZXRIb3N0RmVhdHVyZShEZXZpY2VFeHRlbnNpb24sIFZJUlRJT19CTEtf Rl9CQVJSSUVSKSkgewogICAgICAgICBSaGVsRGJnUHJpbnQoVFJBQ0VfTEVWRUxfSU5GT1JN QVRJT04sICgiVklSVElPX0JMS19GX0JBUlJJRVJcbiIpKTsKICAgICB9CkBAIC02MTIsNyAr NjQ2LDcgQEAgVmlydElvSW50ZXJydXB0KAogICAgICAgICAgICAgICAgIFNyYi0+U3JiU3Rh dHVzID0gU1JCX1NUQVRVU19FUlJPUjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg ICAgICAgfQotICAgICAgICAgICBDb21wbGV0ZURQQyhEZXZpY2VFeHRlbnNpb24sIHZicik7 CisgICAgICAgICAgIENvbXBsZXRlRFBDKERldmljZUV4dGVuc2lvbiwgdmJyLCAwKTsKICAg ICAgICAgfQogICAgIH0KICAgICBSaGVsRGJnUHJpbnQoVFJBQ0VfTEVWRUxfVkVSQk9TRSwg KCIlcyBpc0ludGVycnVwdFNlcnZpY2VkID0gJWRcbiIsIF9fRlVOQ1RJT05fXywgaXNJbnRl cnJ1cHRTZXJ2aWNlZCkpOwpAQCAtNjcxLDggKzcwNSwxNSBAQCBWaXJ0SW9BZGFwdGVyQ29u dHJvbCgKICAgICB9CiAgICAgY2FzZSBTY3NpUmVzdGFydEFkYXB0ZXI6IHsKICAgICAgICAg UmhlbERiZ1ByaW50KFRSQUNFX0xFVkVMX1ZFUkJPU0UsICgiU2NzaVJlc3RhcnRBZGFwdGVy XG4iKSk7IAotCi0gICAgICAgIGFkYXB0RXh0LT5wY2lfdnFfaW5mby52cSA9IFZpcnRJT0Rl dmljZUZpbmRWaXJ0dWFsUXVldWUoRGV2aWNlRXh0ZW5zaW9uLCAwKTsKKyAgICAgICAgYWRh cHRFeHQtPnBjaV92cV9pbmZvLnZxID0gTlVMTDsKKyNpZmRlZiBNU0lfU1VQUE9SVEVECisg ICAgICAgIGlmKCFhZGFwdEV4dC0+ZHVtcF9tb2RlICYgYWRhcHRFeHQtPm1zaXhfdmVjdG9y cykgeworICAgICAgICAgICBhZGFwdEV4dC0+cGNpX3ZxX2luZm8udnEgPSBWaXJ0SU9EZXZp Y2VGaW5kVmlydHVhbFF1ZXVlKERldmljZUV4dGVuc2lvbiwgMCwgYWRhcHRFeHQtPm1zaXhf dmVjdG9ycyk7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBpZighYWRhcHRFeHQtPnBj aV92cV9pbmZvLnZxKSB7CisgICAgICAgICAgIGFkYXB0RXh0LT5wY2lfdnFfaW5mby52cSA9 IFZpcnRJT0RldmljZUZpbmRWaXJ0dWFsUXVldWUoRGV2aWNlRXh0ZW5zaW9uLCAwLCAwKTsK KyAgICAgICAgfQogICAgICAgICBpZiAoIWFkYXB0RXh0LT5wY2lfdnFfaW5mby52cSkgCiAg ICAgICAgIHsKICAgICAgICAgICAgUmhlbERiZ1ByaW50KFRSQUNFX0xFVkVMX0ZBVEFMLCAo IkNhbm5vdCBmaW5kIHNuZCB2aXJ0dWFsIHF1ZXVlXG4iKSk7CkBAIC03NjUsNiArODA2LDQ1 IEBAIFZpcnRJb0J1aWxkSW8oCiAKICAgICByZXR1cm4gVFJVRTsKIH0KKworI2lmZGVmIE1T SV9TVVBQT1JURUQKK0JPT0xFQU4KK1ZpcnRJb01TSW50ZXJydXB0Um91dGluZSAoCisgICAg SU4gUFZPSUQgIERldmljZUV4dGVuc2lvbiwKKyAgICBJTiBVTE9ORyAgTWVzc2FnZUlECisg ICAgKQoreworICAgIHBibGtfcmVxICAgICAgICAgICAgdmJyOworICAgIHVuc2lnbmVkIGlu dCAgICAgICAgbGVuOworICAgIHVuc2lnbmVkIGxvbmcgICAgICAgZmxhZ3M7CisgICAgUEFE QVBURVJfRVhURU5TSU9OICBhZGFwdEV4dDsKKyAgICBQU0NTSV9SRVFVRVNUX0JMT0NLIFNy YjsKKworICAgIGFkYXB0RXh0ID0gKFBBREFQVEVSX0VYVEVOU0lPTilEZXZpY2VFeHRlbnNp b247CisKKyAgICBSaGVsRGJnUHJpbnQoVFJBQ0VfTEVWRUxfVkVSQk9TRSwgCisgICAgICAg ICAgICAgICAgICgiPC0tLT4lcyA6IE1lc3NhZ2VJRCAweCV4XG4iLCBfX0ZVTkNUSU9OX18s IE1lc3NhZ2VJRCkpOworCisgICAgd2hpbGUoKHZiciA9IGFkYXB0RXh0LT5wY2lfdnFfaW5m by52cS0+dnFfb3BzLT5nZXRfYnVmKGFkYXB0RXh0LT5wY2lfdnFfaW5mby52cSwgJmxlbikp ICE9IE5VTEwpIHsKKyAgICAgICBTcmIgPSAoUFNDU0lfUkVRVUVTVF9CTE9DSyl2YnItPnJl cTsKKyAgICAgICBzd2l0Y2ggKHZici0+c3RhdHVzKSB7CisgICAgICAgY2FzZSBWSVJUSU9f QkxLX1NfT0s6CisgICAgICAgICAgICBTcmItPlNyYlN0YXR1cyA9IFNSQl9TVEFUVVNfU1VD Q0VTUzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgIGNhc2UgVklSVElPX0JMS19TX1VO U1VQUDoKKyAgICAgICAgICAgIFNyYi0+U3JiU3RhdHVzID0gU1JCX1NUQVRVU19JTlZBTElE X1JFUVVFU1Q7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICBkZWZhdWx0OgorICAgICAg ICAgICAgU3JiLT5TcmJTdGF0dXMgPSBTUkJfU1RBVFVTX0VSUk9SOworICAgICAgICAgICAg YnJlYWs7CisgICAgICAgfQorICAgICAgIENvbXBsZXRlRFBDKERldmljZUV4dGVuc2lvbiwg dmJyLCBNZXNzYWdlSUQpOworICAgIH0KKworICAgIHJldHVybiBUUlVFOworfQorI2VuZGlm CisKICNlbmRpZgogCiBVQ0hBUgpAQCAtMTAzMSw3ICsxMTExLDggQEAgVk9JRAogRk9SQ0VJ TkxJTkUKIENvbXBsZXRlRFBDKAogICAgIElOIFBWT0lEIERldmljZUV4dGVuc2lvbiwgCi0g ICAgSU4gcGJsa19yZXEgdmJyCisgICAgSU4gcGJsa19yZXEgdmJyLAorICAgIElOIFVMT05H IE1lc3NhZ2VJRAogICAgICkKIHsKICAgICBQU0NTSV9SRVFVRVNUX0JMT0NLIFNyYiA9IChQ U0NTSV9SRVFVRVNUX0JMT0NLKXZici0+cmVxOwpAQCAtMTA0NCw3ICsxMTI1LDcgQEAgQ29t cGxldGVEUEMoCiAgICAgICAgIEluc2VydFRhaWxMaXN0KCZhZGFwdEV4dC0+Y29tcGxldGVf bGlzdCwgJnZici0+bGlzdF9lbnRyeSk7CiAgICAgICAgIFN0b3JQb3J0SXNzdWVEcGMoRGV2 aWNlRXh0ZW5zaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICZhZGFwdEV4dC0+Y29t cGxldGlvbl9kcGMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAoUFZPSUQpTWVzc2FnZUlELAogICAgICAgICAgICAgICAgICAg ICAgICAgIE5VTEwpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTA2MywyNiArMTE0 NCw0MSBAQCBDb21wbGV0ZURwY1JvdXRpbmUoCiB7CiAgICAgU1RPUl9MT0NLX0hBTkRMRSAg TG9ja0hhbmRsZTsKICAgICBQQURBUFRFUl9FWFRFTlNJT04gYWRhcHRFeHQgPSAoUEFEQVBU RVJfRVhURU5TSU9OKUNvbnRleHQ7CisgICAgVUxPTkcgTWVzc2FnZUlEID0gKFVMT05HKVN5 c3RlbUFyZ3VtZW50MTsKKyAgICBVTE9ORyBPbGRJcnFsOwogCi0gICAgU3RvclBvcnRBY3F1 aXJlU3BpbkxvY2sgKCBDb250ZXh0LCBJbnRlcnJ1cHRMb2NrICwgTlVMTCwgJkxvY2tIYW5k bGUpOyAKLQorICAgIGlmKGFkYXB0RXh0LT5tc2l4X3ZlY3RvcnMpIHsKKyAgICAgICAgU3Rv clBvcnRBY3F1aXJlTVNJU3BpbkxvY2sgKENvbnRleHQsIE1lc3NhZ2VJRCwgJk9sZElycWwp OworICAgIH0gZWxzZSB7CisgICAgICAgIFN0b3JQb3J0QWNxdWlyZVNwaW5Mb2NrICggQ29u dGV4dCwgSW50ZXJydXB0TG9jayAsIE5VTEwsICZMb2NrSGFuZGxlKTsgCisgICAgfQogICAg IHdoaWxlICghSXNMaXN0RW1wdHkoJmFkYXB0RXh0LT5jb21wbGV0ZV9saXN0KSkgewogICAg ICAgICBQU0NTSV9SRVFVRVNUX0JMT0NLIFNyYjsKICAgICAgICAgcGJsa19yZXEgdmJyOwog ICAgICAgICB2YnIgID0gKHBibGtfcmVxKSBSZW1vdmVIZWFkTGlzdCgmYWRhcHRFeHQtPmNv bXBsZXRlX2xpc3QpOwogICAgICAgICBTcmIgPSAoUFNDU0lfUkVRVUVTVF9CTE9DSyl2YnIt PnJlcTsKIAotICAgICAgICBTdG9yUG9ydFJlbGVhc2VTcGluTG9jayAoQ29udGV4dCwgJkxv Y2tIYW5kbGUpOwotCisgICAgICAgIGlmKGFkYXB0RXh0LT5tc2l4X3ZlY3RvcnMpIHsKKyAg ICAgICAgICAgU3RvclBvcnRSZWxlYXNlTVNJU3BpbkxvY2sgKENvbnRleHQsIE1lc3NhZ2VJ RCwgT2xkSXJxbCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgIFN0b3JQb3J0UmVs ZWFzZVNwaW5Mb2NrIChDb250ZXh0LCAmTG9ja0hhbmRsZSk7CisgICAgICAgIH0KKyAgICAg ICAgCiAgICAgICAgIFNjc2lQb3J0Tm90aWZpY2F0aW9uKFJlcXVlc3RDb21wbGV0ZSwKICAg ICAgICAgICAgICAgICAgICAgICAgICBDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAg ICAgIFNyYik7CiAKLSAgICAgICAgU3RvclBvcnRBY3F1aXJlU3BpbkxvY2sgKCBDb250ZXh0 LCBJbnRlcnJ1cHRMb2NrICwgTlVMTCwgJkxvY2tIYW5kbGUpOyAKLQorICAgICAgICBpZihh ZGFwdEV4dC0+bXNpeF92ZWN0b3JzKSB7CisgICAgICAgICAgIFN0b3JQb3J0QWNxdWlyZU1T SVNwaW5Mb2NrIChDb250ZXh0LCBNZXNzYWdlSUQsICZPbGRJcnFsKTsKKyAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgU3RvclBvcnRBY3F1aXJlU3BpbkxvY2sgKCBDb250ZXh0LCBJ bnRlcnJ1cHRMb2NrICwgTlVMTCwgJkxvY2tIYW5kbGUpOyAKKyAgICAgICAgfQogICAgIH0K IAotICAgIFN0b3JQb3J0UmVsZWFzZVNwaW5Mb2NrIChDb250ZXh0LCAmTG9ja0hhbmRsZSk7 Ci0KKyAgICBpZihhZGFwdEV4dC0+bXNpeF92ZWN0b3JzKSB7CisgICAgICAgIFN0b3JQb3J0 UmVsZWFzZU1TSVNwaW5Mb2NrIChDb250ZXh0LCBNZXNzYWdlSUQsIE9sZElycWwpOworICAg IH0gZWxzZSB7CisgICAgICAgIFN0b3JQb3J0UmVsZWFzZVNwaW5Mb2NrIChDb250ZXh0LCAm TG9ja0hhbmRsZSk7CisgICAgfQogICAgIHJldHVybjsKIH0KZGlmZiAtLWdpdCBhL3Zpb3N0 b3IvdmlydGlvX3N0b3IuaCBiL3Zpb3N0b3IvdmlydGlvX3N0b3IuaAppbmRleCBkZDQ3Mjhl Li4yMjFjNjUzIDEwMDY0NAotLS0gYS92aW9zdG9yL3ZpcnRpb19zdG9yLmgKKysrIGIvdmlv c3Rvci92aXJ0aW9fc3Rvci5oCkBAIC0xMDUsNiArMTA1LDcgQEAgdHlwZWRlZiBzdHJ1Y3Qg X0FEQVBURVJfRVhURU5TSU9OIHsKICAgICBMSVNUX0VOVFJZICAgICAgICAgICAgY29tcGxl dGVfbGlzdDsKICAgICBTVE9SX0RQQyAgICAgICAgICAgICAgY29tcGxldGlvbl9kcGM7CiAg ICAgQk9PTEVBTiAgICAgICAgICAgICAgIGhhc19zbjsKKyAgICBVTE9ORyAgICAgICAgICAg ICAgICAgbXNpeF92ZWN0b3JzOwogfUFEQVBURVJfRVhURU5TSU9OLCAqUEFEQVBURVJfRVhU RU5TSU9OOwogCiB0eXBlZGVmIHN0cnVjdCBfUkhFTF9TUkJfRVhURU5TSU9OIHsKZGlmZiAt LWdpdCBhL3Zpb3N0b3IvdmlydGlvX3N0b3JfaHdfaGVscGVyLmMgYi92aW9zdG9yL3ZpcnRp b19zdG9yX2h3X2hlbHBlci5jCmluZGV4IDNjMDkyNTkuLjg5M2I0MGYgMTAwNjQ0Ci0tLSBh L3Zpb3N0b3IvdmlydGlvX3N0b3JfaHdfaGVscGVyLmMKKysrIGIvdmlvc3Rvci92aXJ0aW9f c3Rvcl9od19oZWxwZXIuYwpAQCAtNDAsNyArNDAsNyBAQCBCT09MRUFOCiBSaGVsRG9SZWFk V3JpdGUoUFZPSUQgRGV2aWNlRXh0ZW5zaW9uLAogICAgICAgICAgICAgICAgIFBTQ1NJX1JF UVVFU1RfQkxPQ0sgU3JiKQogewotICAgIHJldHVybiBTdG9yUG9ydFN5bmNocm9uaXplQWNj ZXNzKERldmljZUV4dGVuc2lvbixTeW5jaHJvbml6ZWRBY2Nlc3NSb3V0aW5lLCAoUFZPSUQp U3JiKTsKKyAgICByZXR1cm4gU3RvclBvcnRTeW5jaHJvbml6ZUFjY2VzcyhEZXZpY2VFeHRl bnNpb24sIFN5bmNocm9uaXplZEFjY2Vzc1JvdXRpbmUsIChQVk9JRClTcmIpOwogfQogI2Vs c2UKIEJPT0xFQU4gCmRpZmYgLS1naXQgYS92aW9zdG9yL3dsaC5pbmYgYi92aW9zdG9yL3ds aC5pbmYKaW5kZXggYWFlNDI1YS4uMjg2YWNhMiAxMDA2NDQKLS0tIGEvdmlvc3Rvci93bGgu aW5mCisrKyBiL3Zpb3N0b3Ivd2xoLmluZgpAQCAtMSwxMDggKzEsMTE3IEBACi3vu787IENv cHlyaWdodCAoYykgMjAwOSwgUmVkIEhhdCBJbmMuCi1bVmVyc2lvbl0KLVNpZ25hdHVyZT0i JFdpbmRvd3MgTlQkIgotUHJvdmlkZXI9JVJIRUwlCi1DbGFzc0dVSUQ9ezREMzZFOTdCLUUz MjUtMTFDRS1CRkMxLTA4MDAyQkUxMDMxOH0KLUNsYXNzPVNDU0lBZGFwdGVyCi1Ecml2ZXJW ZXIgICA9IDA1LzA1LzIwMDksNC4zLjAuMTcyNDEKLUNhdGFsb2dGaWxlPXZpb3N0b3IuY2F0 Ci0KLTsKLTsgU291cmNlIGZpbGUgaW5mb3JtYXRpb24KLTsKLQotW1NvdXJjZURpc2tzTmFt ZXNdCi0xID0gJURpc2tJZDElLCwsIiIKLQotW1NvdXJjZURpc2tzRmlsZXNdCi12aW9zdG9y LnN5cyA9IDEsLAotCi1bQ29udHJvbEZsYWdzXQotO0V4Y2x1ZGVGcm9tU2VsZWN0ID0gKgot Ci1bRGVzdGluYXRpb25EaXJzXQotRGVmYXVsdERlc3REaXIgPSAxMAotdmlvc3Rvcl9GaWxl c19Ecml2ZXIgPSAxMgotCi07Ci07IERyaXZlciBpbmZvcm1hdGlvbgotOwotCi1bTWFudWZh Y3R1cmVyXQotJVJIRUwlICAgPSBSSEVMLE5UeDg2LE5UYW1kNjQKLQotW1JIRUxdCi0lUkhF TFNjc2kuRGV2aWNlRGVzYyUgPSByaGVsc2NzaV9pbnN0LCBQQ0lcVkVOXzFBRjQmREVWXzEw MDEmU1VCU1lTXzAwMDAwMDAwCi0lUkhFTFNjc2kuRGV2aWNlRGVzYyUgPSByaGVsc2NzaV9p bnN0LCBQQ0lcVkVOXzFBRjQmREVWXzEwMDEmU1VCU1lTXzAwMDIwMDAwCi0lUkhFTFNjc2ku RGV2aWNlRGVzYyUgPSByaGVsc2NzaV9pbnN0LCBQQ0lcVkVOXzFBRjQmREVWXzEwMDEmU1VC U1lTXzAwMDIxQUY0Ci0KLVtSSEVMLk5UeDg2XQotJVJIRUxTY3NpLkRldmljZURlc2MlID0g cmhlbHNjc2lfaW5zdCwgUENJXFZFTl8xQUY0JkRFVl8xMDAxJlNVQlNZU18wMDAwMDAwMAot JVJIRUxTY3NpLkRldmljZURlc2MlID0gcmhlbHNjc2lfaW5zdCwgUENJXFZFTl8xQUY0JkRF Vl8xMDAxJlNVQlNZU18wMDAyMDAwMAotJVJIRUxTY3NpLkRldmljZURlc2MlID0gcmhlbHNj c2lfaW5zdCwgUENJXFZFTl8xQUY0JkRFVl8xMDAxJlNVQlNZU18wMDAyMUFGNAotCi1bUkhF TC5OVGFtZDY0XQotJVJIRUxTY3NpLkRldmljZURlc2MlID0gcmhlbHNjc2lfaW5zdCwgUENJ XFZFTl8xQUY0JkRFVl8xMDAxJlNVQlNZU18wMDAwMDAwMAotJVJIRUxTY3NpLkRldmljZURl c2MlID0gcmhlbHNjc2lfaW5zdCwgUENJXFZFTl8xQUY0JkRFVl8xMDAxJlNVQlNZU18wMDAy MDAwMAotJVJIRUxTY3NpLkRldmljZURlc2MlID0gcmhlbHNjc2lfaW5zdCwgUENJXFZFTl8x QUY0JkRFVl8xMDAxJlNVQlNZU18wMDAyMUFGNAotCi07Ci07IEdlbmVyYWwgaW5zdGFsbGF0 aW9uIHNlY3Rpb24KLTsKLQotW3Zpb3N0b3JfRmlsZXNfRHJpdmVyXQotdmlvc3Rvci5zeXMs LCwyCi0KLVtyaGVsc2NzaV9pbnN0XQotQ29weUZpbGVzPXZpb3N0b3JfRmlsZXNfRHJpdmVy Ci0KLQotCi07Ci07IFNlcnZpY2UgSW5zdGFsbGF0aW9uCi07Ci0KLVtyaGVsc2NzaV9pbnN0 LlNlcnZpY2VzXQotQWRkU2VydmljZSA9IHZpb3N0b3IsIDB4MDAwMDAwMDIgLCByaGVsc2Nz aV9TZXJ2aWNlX0luc3QsIHJoZWxzY3NpX0V2ZW50TG9nX0luc3QKLQotW3JoZWxzY3NpX1Nl cnZpY2VfSW5zdF0KLVNlcnZpY2VUeXBlICAgID0gJVNFUlZJQ0VfS0VSTkVMX0RSSVZFUiUK LVN0YXJ0VHlwZSAgICAgID0gJVNFUlZJQ0VfQk9PVF9TVEFSVCUKLUVycm9yQ29udHJvbCAg ID0gJVNFUlZJQ0VfRVJST1JfTk9STUFMJQotU2VydmljZUJpbmFyeSAgPSAlMTIlXHZpb3N0 b3Iuc3lzCi1Mb2FkT3JkZXJHcm91cCA9IFNDU0kgbWluaXBvcnQKLUFkZFJlZyAgICAgICAg ID0gcG5wc2FmZV9wY2lfYWRkcmVnCi0KLQotW3JoZWxzY3NpX0V2ZW50TG9nX0luc3RdCi1B ZGRSZWcgPSByaGVsc2NzaV9FdmVudExvZ19BZGRSZWcKLQotW3JoZWxzY3NpX0V2ZW50TG9n X0FkZFJlZ10KLUhLUiwsRXZlbnRNZXNzYWdlRmlsZSwlUkVHX0VYUEFORF9TWiUsIiUlU3lz dGVtUm9vdCUlXFN5c3RlbTMyXElvTG9nTXNnLmRsbCIKLUhLUiwsVHlwZXNTdXBwb3J0ZWQs JVJFR19EV09SRCUsNwotCi0KLVtwbnBzYWZlX3BjaV9hZGRyZWddCi1IS1IsICJQYXJhbWV0 ZXJzXFBucEludGVyZmFjZSIsICI1IiwgJVJFR19EV09SRCUsIDB4MDAwMDAwMDEKLUhLUiwg IlBhcmFtZXRlcnMiLCAiQnVzVHlwZSIsICVSRUdfRFdPUkQlLCAweDAwMDAwMDAxCi0KLVtT dHJpbmdzXQotOwotOyBMb2NhbGl6YWJsZSBTdHJpbmdzCi07Ci1kaXNrSWQxID0gIlJlZCBI YXQgVmlydElPIFNDU0kgY29udHJvbGxlciBJbnN0YWxsYXRpb24gRGlzayIKLVJIRUxTY3Np LkRldmljZURlc2MgPSAiUmVkIEhhdCBWaXJ0SU8gU0NTSSBjb250cm9sbGVyIgotUkhFTCA9 ICJSZWQgSGF0LCBJbmMuIgotCi07Ci07IE5vbi1Mb2NhbGl6YWJsZSBTdHJpbmdzCi07Ci0K LVJFR19FWFBBTkRfU1ogID0gMHgwMDAyMDAwMAotUkVHX0RXT1JEICAgICAgPSAweDAwMDEw MDAxCi1TRVJWSUNFX0tFUk5FTF9EUklWRVIgID0gMQotU0VSVklDRV9CT09UX1NUQVJUICAg ICA9IDAKLVNFUlZJQ0VfRVJST1JfTk9STUFMICAgPSAxCi0KLQotCivvu787IENvcHlyaWdo dCAoYykgMjAwOSwgUmVkIEhhdCBJbmMuDQorW1ZlcnNpb25dDQorU2lnbmF0dXJlPSIkV2lu ZG93cyBOVCQiDQorUHJvdmlkZXI9JVJIRUwlDQorQ2xhc3NHVUlEPXs0RDM2RTk3Qi1FMzI1 LTExQ0UtQkZDMS0wODAwMkJFMTAzMTh9DQorQ2xhc3M9U0NTSUFkYXB0ZXINCitEcml2ZXJW ZXIgICA9IDEwLzEwLzIwMDksNS4zLjAuMTcyNDENCitDYXRhbG9nRmlsZT12aW9zdG9yLmNh dA0KKw0KKzsNCis7IFNvdXJjZSBmaWxlIGluZm9ybWF0aW9uDQorOw0KKw0KK1tTb3VyY2VE aXNrc05hbWVzXQ0KKzEgPSAlRGlza0lkMSUsLCwiIg0KKw0KK1tTb3VyY2VEaXNrc0ZpbGVz XQ0KK3Zpb3N0b3Iuc3lzID0gMSwsDQorDQorW0NvbnRyb2xGbGFnc10NCis7RXhjbHVkZUZy b21TZWxlY3QgPSAqDQorDQorW0Rlc3RpbmF0aW9uRGlyc10NCitEZWZhdWx0RGVzdERpciA9 IDEwDQordmlvc3Rvcl9GaWxlc19Ecml2ZXIgPSAxMg0KKw0KKzsNCis7IERyaXZlciBpbmZv cm1hdGlvbg0KKzsNCisNCitbTWFudWZhY3R1cmVyXQ0KKyVSSEVMJSAgID0gUkhFTCxOVHg4 NixOVGFtZDY0DQorDQorW1JIRUxdDQorJVJIRUxTY3NpLkRldmljZURlc2MlID0gcmhlbHNj c2lfaW5zdCwgUENJXFZFTl8xQUY0JkRFVl8xMDAxJlNVQlNZU18wMDAwMDAwMA0KKyVSSEVM U2NzaS5EZXZpY2VEZXNjJSA9IHJoZWxzY3NpX2luc3QsIFBDSVxWRU5fMUFGNCZERVZfMTAw MSZTVUJTWVNfMDAwMjAwMDANCislUkhFTFNjc2kuRGV2aWNlRGVzYyUgPSByaGVsc2NzaV9p bnN0LCBQQ0lcVkVOXzFBRjQmREVWXzEwMDEmU1VCU1lTXzAwMDIxQUY0DQorDQorW1JIRUwu TlR4ODZdDQorJVJIRUxTY3NpLkRldmljZURlc2MlID0gcmhlbHNjc2lfaW5zdCwgUENJXFZF Tl8xQUY0JkRFVl8xMDAxJlNVQlNZU18wMDAwMDAwMA0KKyVSSEVMU2NzaS5EZXZpY2VEZXNj JSA9IHJoZWxzY3NpX2luc3QsIFBDSVxWRU5fMUFGNCZERVZfMTAwMSZTVUJTWVNfMDAwMjAw MDANCislUkhFTFNjc2kuRGV2aWNlRGVzYyUgPSByaGVsc2NzaV9pbnN0LCBQQ0lcVkVOXzFB RjQmREVWXzEwMDEmU1VCU1lTXzAwMDIxQUY0DQorDQorW1JIRUwuTlRhbWQ2NF0NCislUkhF TFNjc2kuRGV2aWNlRGVzYyUgPSByaGVsc2NzaV9pbnN0LCBQQ0lcVkVOXzFBRjQmREVWXzEw MDEmU1VCU1lTXzAwMDAwMDAwDQorJVJIRUxTY3NpLkRldmljZURlc2MlID0gcmhlbHNjc2lf aW5zdCwgUENJXFZFTl8xQUY0JkRFVl8xMDAxJlNVQlNZU18wMDAyMDAwMA0KKyVSSEVMU2Nz aS5EZXZpY2VEZXNjJSA9IHJoZWxzY3NpX2luc3QsIFBDSVxWRU5fMUFGNCZERVZfMTAwMSZT VUJTWVNfMDAwMjFBRjQNCisNCis7DQorOyBHZW5lcmFsIGluc3RhbGxhdGlvbiBzZWN0aW9u DQorOw0KKw0KK1t2aW9zdG9yX0ZpbGVzX0RyaXZlcl0NCit2aW9zdG9yLnN5cywsLDINCisN CitbcmhlbHNjc2lfaW5zdF0NCitDb3B5RmlsZXM9dmlvc3Rvcl9GaWxlc19Ecml2ZXINCisN Cis7DQorOyBTZXJ2aWNlIEluc3RhbGxhdGlvbg0KKzsNCisNCitbcmhlbHNjc2lfaW5zdC5T ZXJ2aWNlc10NCitBZGRTZXJ2aWNlID0gdmlvc3RvciwgMHgwMDAwMDAwMiAsIHJoZWxzY3Np X1NlcnZpY2VfSW5zdCwgcmhlbHNjc2lfRXZlbnRMb2dfSW5zdA0KKw0KK1tyaGVsc2NzaV9T ZXJ2aWNlX0luc3RdDQorU2VydmljZVR5cGUgICAgPSAlU0VSVklDRV9LRVJORUxfRFJJVkVS JQ0KK1N0YXJ0VHlwZSAgICAgID0gJVNFUlZJQ0VfQk9PVF9TVEFSVCUNCitFcnJvckNvbnRy b2wgICA9ICVTRVJWSUNFX0VSUk9SX05PUk1BTCUNCitTZXJ2aWNlQmluYXJ5ICA9ICUxMiVc dmlvc3Rvci5zeXMNCitMb2FkT3JkZXJHcm91cCA9IFNDU0kgbWluaXBvcnQNCitBZGRSZWcg ICAgICAgICA9IHBucHNhZmVfcGNpX2FkZHJlZw0KKw0KK1tyaGVsc2NzaV9pbnN0LkhXXQ0K K0FkZFJlZyAgICAgICAgID0gcG5wc2FmZV9wY2lfYWRkcmVnX21zaXgNCisNCitbcmhlbHNj c2lfRXZlbnRMb2dfSW5zdF0NCitBZGRSZWcgPSByaGVsc2NzaV9FdmVudExvZ19BZGRSZWcN CisNCitbcmhlbHNjc2lfRXZlbnRMb2dfQWRkUmVnXQ0KK0hLUiwsRXZlbnRNZXNzYWdlRmls ZSwlUkVHX0VYUEFORF9TWiUsIiUlU3lzdGVtUm9vdCUlXFN5c3RlbTMyXElvTG9nTXNnLmRs bCINCitIS1IsLFR5cGVzU3VwcG9ydGVkLCVSRUdfRFdPUkQlLDcNCisNCisNCitbcG5wc2Fm ZV9wY2lfYWRkcmVnXQ0KK0hLUiwgIlBhcmFtZXRlcnNcUG5wSW50ZXJmYWNlIiwgIjUiLCAl UkVHX0RXT1JEJSwgMHgwMDAwMDAwMQ0KK0hLUiwgIlBhcmFtZXRlcnMiLCAiQnVzVHlwZSIs ICVSRUdfRFdPUkQlLCAweDAwMDAwMDAxDQorDQorW3BucHNhZmVfcGNpX2FkZHJlZ19tc2l4 XQ0KK0hLUiwgIkludGVycnVwdCBNYW5hZ2VtZW50IiwsIDB4MDAwMDAwMTANCitIS1IsICJJ bnRlcnJ1cHQgTWFuYWdlbWVudFxNZXNzYWdlU2lnbmFsZWRJbnRlcnJ1cHRQcm9wZXJ0aWVz IiwsIDB4MDAwMDAwMTANCitIS1IsICJJbnRlcnJ1cHQgTWFuYWdlbWVudFxNZXNzYWdlU2ln bmFsZWRJbnRlcnJ1cHRQcm9wZXJ0aWVzIiwgTVNJU3VwcG9ydGVkLCAweDAwMDEwMDAxLCAw DQorSEtSLCAiSW50ZXJydXB0IE1hbmFnZW1lbnRcTWVzc2FnZVNpZ25hbGVkSW50ZXJydXB0 UHJvcGVydGllcyIsIE1lc3NhZ2VOdW1iZXJMaW1pdCwgMHgwMDAxMDAwMSwgMg0KK0hLUiwg IkludGVycnVwdCBNYW5hZ2VtZW50XEFmZmluaXR5IFBvbGljeSIsLCAweDAwMDAwMDEwDQor SEtSLCAiSW50ZXJydXB0IE1hbmFnZW1lbnRcQWZmaW5pdHkgUG9saWN5IiwgRGV2aWNlUG9s aWN5LCAweDAwMDEwMDAxLCA1DQorDQorDQorW1N0cmluZ3NdDQorOw0KKzsgTG9jYWxpemFi bGUgU3RyaW5ncw0KKzsNCitkaXNrSWQxID0gIlJlZCBIYXQgVmlydElPIFNDU0kgY29udHJv bGxlciBJbnN0YWxsYXRpb24gRGlzayINCitSSEVMU2NzaS5EZXZpY2VEZXNjID0gIlJlZCBI YXQgVmlydElPIFNDU0kgY29udHJvbGxlciINCitSSEVMID0gIlJlZCBIYXQsIEluYy4iDQor DQorOw0KKzsgTm9uLUxvY2FsaXphYmxlIFN0cmluZ3MNCis7DQorDQorUkVHX0VYUEFORF9T WiAgPSAweDAwMDIwMDAwDQorUkVHX0RXT1JEICAgICAgPSAweDAwMDEwMDAxDQorU0VSVklD RV9LRVJORUxfRFJJVkVSICA9IDENCitTRVJWSUNFX0JPT1RfU1RBUlQgICAgID0gMA0KK1NF UlZJQ0VfRVJST1JfTk9STUFMICAgPSAxDQorDQorDQorDQpkaWZmIC0tZ2l0IGEvdmlvc3Rv ci93bmV0LmluZiBiL3Zpb3N0b3Ivd25ldC5pbmYKaW5kZXggYWFlNDI1YS4uODFkNjFiZSAx MDA2NDQKLS0tIGEvdmlvc3Rvci93bmV0LmluZgorKysgYi92aW9zdG9yL3duZXQuaW5mCkBA IC0xLDEwOCArMSwxMDQgQEAKLe+7vzsgQ29weXJpZ2h0IChjKSAyMDA5LCBSZWQgSGF0IElu Yy4KLVtWZXJzaW9uXQotU2lnbmF0dXJlPSIkV2luZG93cyBOVCQiCi1Qcm92aWRlcj0lUkhF TCUKLUNsYXNzR1VJRD17NEQzNkU5N0ItRTMyNS0xMUNFLUJGQzEtMDgwMDJCRTEwMzE4fQot Q2xhc3M9U0NTSUFkYXB0ZXIKLURyaXZlclZlciAgID0gMDUvMDUvMjAwOSw0LjMuMC4xNzI0 MQotQ2F0YWxvZ0ZpbGU9dmlvc3Rvci5jYXQKLQotOwotOyBTb3VyY2UgZmlsZSBpbmZvcm1h dGlvbgotOwotCi1bU291cmNlRGlza3NOYW1lc10KLTEgPSAlRGlza0lkMSUsLCwiIgotCi1b U291cmNlRGlza3NGaWxlc10KLXZpb3N0b3Iuc3lzID0gMSwsCi0KLVtDb250cm9sRmxhZ3Nd Ci07RXhjbHVkZUZyb21TZWxlY3QgPSAqCi0KLVtEZXN0aW5hdGlvbkRpcnNdCi1EZWZhdWx0 RGVzdERpciA9IDEwCi12aW9zdG9yX0ZpbGVzX0RyaXZlciA9IDEyCi0KLTsKLTsgRHJpdmVy IGluZm9ybWF0aW9uCi07Ci0KLVtNYW51ZmFjdHVyZXJdCi0lUkhFTCUgICA9IFJIRUwsTlR4 ODYsTlRhbWQ2NAotCi1bUkhFTF0KLSVSSEVMU2NzaS5EZXZpY2VEZXNjJSA9IHJoZWxzY3Np X2luc3QsIFBDSVxWRU5fMUFGNCZERVZfMTAwMSZTVUJTWVNfMDAwMDAwMDAKLSVSSEVMU2Nz aS5EZXZpY2VEZXNjJSA9IHJoZWxzY3NpX2luc3QsIFBDSVxWRU5fMUFGNCZERVZfMTAwMSZT VUJTWVNfMDAwMjAwMDAKLSVSSEVMU2NzaS5EZXZpY2VEZXNjJSA9IHJoZWxzY3NpX2luc3Qs IFBDSVxWRU5fMUFGNCZERVZfMTAwMSZTVUJTWVNfMDAwMjFBRjQKLQotW1JIRUwuTlR4ODZd Ci0lUkhFTFNjc2kuRGV2aWNlRGVzYyUgPSByaGVsc2NzaV9pbnN0LCBQQ0lcVkVOXzFBRjQm REVWXzEwMDEmU1VCU1lTXzAwMDAwMDAwCi0lUkhFTFNjc2kuRGV2aWNlRGVzYyUgPSByaGVs c2NzaV9pbnN0LCBQQ0lcVkVOXzFBRjQmREVWXzEwMDEmU1VCU1lTXzAwMDIwMDAwCi0lUkhF TFNjc2kuRGV2aWNlRGVzYyUgPSByaGVsc2NzaV9pbnN0LCBQQ0lcVkVOXzFBRjQmREVWXzEw MDEmU1VCU1lTXzAwMDIxQUY0Ci0KLVtSSEVMLk5UYW1kNjRdCi0lUkhFTFNjc2kuRGV2aWNl RGVzYyUgPSByaGVsc2NzaV9pbnN0LCBQQ0lcVkVOXzFBRjQmREVWXzEwMDEmU1VCU1lTXzAw MDAwMDAwCi0lUkhFTFNjc2kuRGV2aWNlRGVzYyUgPSByaGVsc2NzaV9pbnN0LCBQQ0lcVkVO XzFBRjQmREVWXzEwMDEmU1VCU1lTXzAwMDIwMDAwCi0lUkhFTFNjc2kuRGV2aWNlRGVzYyUg PSByaGVsc2NzaV9pbnN0LCBQQ0lcVkVOXzFBRjQmREVWXzEwMDEmU1VCU1lTXzAwMDIxQUY0 Ci0KLTsKLTsgR2VuZXJhbCBpbnN0YWxsYXRpb24gc2VjdGlvbgotOwotCi1bdmlvc3Rvcl9G aWxlc19Ecml2ZXJdCi12aW9zdG9yLnN5cywsLDIKLQotW3JoZWxzY3NpX2luc3RdCi1Db3B5 RmlsZXM9dmlvc3Rvcl9GaWxlc19Ecml2ZXIKLQotCi0KLTsKLTsgU2VydmljZSBJbnN0YWxs YXRpb24KLTsKLQotW3JoZWxzY3NpX2luc3QuU2VydmljZXNdCi1BZGRTZXJ2aWNlID0gdmlv c3RvciwgMHgwMDAwMDAwMiAsIHJoZWxzY3NpX1NlcnZpY2VfSW5zdCwgcmhlbHNjc2lfRXZl bnRMb2dfSW5zdAotCi1bcmhlbHNjc2lfU2VydmljZV9JbnN0XQotU2VydmljZVR5cGUgICAg PSAlU0VSVklDRV9LRVJORUxfRFJJVkVSJQotU3RhcnRUeXBlICAgICAgPSAlU0VSVklDRV9C T09UX1NUQVJUJQotRXJyb3JDb250cm9sICAgPSAlU0VSVklDRV9FUlJPUl9OT1JNQUwlCi1T ZXJ2aWNlQmluYXJ5ICA9ICUxMiVcdmlvc3Rvci5zeXMKLUxvYWRPcmRlckdyb3VwID0gU0NT SSBtaW5pcG9ydAotQWRkUmVnICAgICAgICAgPSBwbnBzYWZlX3BjaV9hZGRyZWcKLQotCi1b cmhlbHNjc2lfRXZlbnRMb2dfSW5zdF0KLUFkZFJlZyA9IHJoZWxzY3NpX0V2ZW50TG9nX0Fk ZFJlZwotCi1bcmhlbHNjc2lfRXZlbnRMb2dfQWRkUmVnXQotSEtSLCxFdmVudE1lc3NhZ2VG aWxlLCVSRUdfRVhQQU5EX1NaJSwiJSVTeXN0ZW1Sb290JSVcU3lzdGVtMzJcSW9Mb2dNc2cu ZGxsIgotSEtSLCxUeXBlc1N1cHBvcnRlZCwlUkVHX0RXT1JEJSw3Ci0KLQotW3BucHNhZmVf cGNpX2FkZHJlZ10KLUhLUiwgIlBhcmFtZXRlcnNcUG5wSW50ZXJmYWNlIiwgIjUiLCAlUkVH X0RXT1JEJSwgMHgwMDAwMDAwMQotSEtSLCAiUGFyYW1ldGVycyIsICJCdXNUeXBlIiwgJVJF R19EV09SRCUsIDB4MDAwMDAwMDEKLQotW1N0cmluZ3NdCi07Ci07IExvY2FsaXphYmxlIFN0 cmluZ3MKLTsKLWRpc2tJZDEgPSAiUmVkIEhhdCBWaXJ0SU8gU0NTSSBjb250cm9sbGVyIElu c3RhbGxhdGlvbiBEaXNrIgotUkhFTFNjc2kuRGV2aWNlRGVzYyA9ICJSZWQgSGF0IFZpcnRJ TyBTQ1NJIGNvbnRyb2xsZXIiCi1SSEVMID0gIlJlZCBIYXQsIEluYy4iCi0KLTsKLTsgTm9u LUxvY2FsaXphYmxlIFN0cmluZ3MKLTsKLQotUkVHX0VYUEFORF9TWiAgPSAweDAwMDIwMDAw Ci1SRUdfRFdPUkQgICAgICA9IDB4MDAwMTAwMDEKLVNFUlZJQ0VfS0VSTkVMX0RSSVZFUiAg PSAxCi1TRVJWSUNFX0JPT1RfU1RBUlQgICAgID0gMAotU0VSVklDRV9FUlJPUl9OT1JNQUwg ICA9IDEKLQotCi0KK++7vzsgQ29weXJpZ2h0IChjKSAyMDA5LCBSZWQgSGF0IEluYy4NCitb VmVyc2lvbl0NCitTaWduYXR1cmU9IiRXaW5kb3dzIE5UJCINCitQcm92aWRlcj0lUkhFTCUN CitDbGFzc0dVSUQ9ezREMzZFOTdCLUUzMjUtMTFDRS1CRkMxLTA4MDAyQkUxMDMxOH0NCitD bGFzcz1TQ1NJQWRhcHRlcg0KK0RyaXZlclZlciAgID0gMTAvMTAvMjAwOSw1LjMuMC4xNzI0 MQ0KK0NhdGFsb2dGaWxlPXZpb3N0b3IuY2F0DQorDQorOw0KKzsgU291cmNlIGZpbGUgaW5m b3JtYXRpb24NCis7DQorDQorW1NvdXJjZURpc2tzTmFtZXNdDQorMSA9ICVEaXNrSWQxJSws LCIiDQorDQorW1NvdXJjZURpc2tzRmlsZXNdDQordmlvc3Rvci5zeXMgPSAxLCwNCisNCitb Q29udHJvbEZsYWdzXQ0KKztFeGNsdWRlRnJvbVNlbGVjdCA9ICoNCisNCitbRGVzdGluYXRp b25EaXJzXQ0KK0RlZmF1bHREZXN0RGlyID0gMTANCit2aW9zdG9yX0ZpbGVzX0RyaXZlciA9 IDEyDQorDQorOw0KKzsgRHJpdmVyIGluZm9ybWF0aW9uDQorOw0KKw0KK1tNYW51ZmFjdHVy ZXJdDQorJVJIRUwlICAgPSBSSEVMLE5UeDg2LE5UYW1kNjQNCisNCitbUkhFTF0NCislUkhF TFNjc2kuRGV2aWNlRGVzYyUgPSByaGVsc2NzaV9pbnN0LCBQQ0lcVkVOXzFBRjQmREVWXzEw MDEmU1VCU1lTXzAwMDAwMDAwDQorJVJIRUxTY3NpLkRldmljZURlc2MlID0gcmhlbHNjc2lf aW5zdCwgUENJXFZFTl8xQUY0JkRFVl8xMDAxJlNVQlNZU18wMDAyMDAwMA0KKyVSSEVMU2Nz aS5EZXZpY2VEZXNjJSA9IHJoZWxzY3NpX2luc3QsIFBDSVxWRU5fMUFGNCZERVZfMTAwMSZT VUJTWVNfMDAwMjFBRjQNCisNCitbUkhFTC5OVHg4Nl0NCislUkhFTFNjc2kuRGV2aWNlRGVz YyUgPSByaGVsc2NzaV9pbnN0LCBQQ0lcVkVOXzFBRjQmREVWXzEwMDEmU1VCU1lTXzAwMDAw MDAwDQorJVJIRUxTY3NpLkRldmljZURlc2MlID0gcmhlbHNjc2lfaW5zdCwgUENJXFZFTl8x QUY0JkRFVl8xMDAxJlNVQlNZU18wMDAyMDAwMA0KKyVSSEVMU2NzaS5EZXZpY2VEZXNjJSA9 IHJoZWxzY3NpX2luc3QsIFBDSVxWRU5fMUFGNCZERVZfMTAwMSZTVUJTWVNfMDAwMjFBRjQN CisNCitbUkhFTC5OVGFtZDY0XQ0KKyVSSEVMU2NzaS5EZXZpY2VEZXNjJSA9IHJoZWxzY3Np X2luc3QsIFBDSVxWRU5fMUFGNCZERVZfMTAwMSZTVUJTWVNfMDAwMDAwMDANCislUkhFTFNj c2kuRGV2aWNlRGVzYyUgPSByaGVsc2NzaV9pbnN0LCBQQ0lcVkVOXzFBRjQmREVWXzEwMDEm U1VCU1lTXzAwMDIwMDAwDQorJVJIRUxTY3NpLkRldmljZURlc2MlID0gcmhlbHNjc2lfaW5z dCwgUENJXFZFTl8xQUY0JkRFVl8xMDAxJlNVQlNZU18wMDAyMUFGNA0KKw0KKzsNCis7IEdl bmVyYWwgaW5zdGFsbGF0aW9uIHNlY3Rpb24NCis7DQorDQorW3Zpb3N0b3JfRmlsZXNfRHJp dmVyXQ0KK3Zpb3N0b3Iuc3lzLCwsMg0KKw0KK1tyaGVsc2NzaV9pbnN0XQ0KK0NvcHlGaWxl cz12aW9zdG9yX0ZpbGVzX0RyaXZlcg0KKw0KKzsNCis7IFNlcnZpY2UgSW5zdGFsbGF0aW9u DQorOw0KKw0KK1tyaGVsc2NzaV9pbnN0LlNlcnZpY2VzXQ0KK0FkZFNlcnZpY2UgPSB2aW9z dG9yLCAweDAwMDAwMDAyICwgcmhlbHNjc2lfU2VydmljZV9JbnN0LCByaGVsc2NzaV9FdmVu dExvZ19JbnN0DQorDQorW3JoZWxzY3NpX1NlcnZpY2VfSW5zdF0NCitTZXJ2aWNlVHlwZSAg ICA9ICVTRVJWSUNFX0tFUk5FTF9EUklWRVIlDQorU3RhcnRUeXBlICAgICAgPSAlU0VSVklD RV9CT09UX1NUQVJUJQ0KK0Vycm9yQ29udHJvbCAgID0gJVNFUlZJQ0VfRVJST1JfTk9STUFM JQ0KK1NlcnZpY2VCaW5hcnkgID0gJTEyJVx2aW9zdG9yLnN5cw0KK0xvYWRPcmRlckdyb3Vw ID0gU0NTSSBtaW5pcG9ydA0KK0FkZFJlZyAgICAgICAgID0gcG5wc2FmZV9wY2lfYWRkcmVn DQorDQorW3JoZWxzY3NpX0V2ZW50TG9nX0luc3RdDQorQWRkUmVnID0gcmhlbHNjc2lfRXZl bnRMb2dfQWRkUmVnDQorDQorW3JoZWxzY3NpX0V2ZW50TG9nX0FkZFJlZ10NCitIS1IsLEV2 ZW50TWVzc2FnZUZpbGUsJVJFR19FWFBBTkRfU1olLCIlJVN5c3RlbVJvb3QlJVxTeXN0ZW0z MlxJb0xvZ01zZy5kbGwiDQorSEtSLCxUeXBlc1N1cHBvcnRlZCwlUkVHX0RXT1JEJSw3DQor DQorW3BucHNhZmVfcGNpX2FkZHJlZ10NCitIS1IsICJQYXJhbWV0ZXJzXFBucEludGVyZmFj ZSIsICI1IiwgJVJFR19EV09SRCUsIDB4MDAwMDAwMDENCitIS1IsICJQYXJhbWV0ZXJzIiwg IkJ1c1R5cGUiLCAlUkVHX0RXT1JEJSwgMHgwMDAwMDAwMQ0KKw0KK1tTdHJpbmdzXQ0KKzsN Cis7IExvY2FsaXphYmxlIFN0cmluZ3MNCis7DQorZGlza0lkMSA9ICJSZWQgSGF0IFZpcnRJ TyBTQ1NJIGNvbnRyb2xsZXIgSW5zdGFsbGF0aW9uIERpc2siDQorUkhFTFNjc2kuRGV2aWNl RGVzYyA9ICJSZWQgSGF0IFZpcnRJTyBTQ1NJIGNvbnRyb2xsZXIiDQorUkhFTCA9ICJSZWQg SGF0LCBJbmMuIg0KKw0KKzsNCis7IE5vbi1Mb2NhbGl6YWJsZSBTdHJpbmdzDQorOw0KKw0K K1JFR19FWFBBTkRfU1ogID0gMHgwMDAyMDAwMA0KK1JFR19EV09SRCAgICAgID0gMHgwMDAx MDAwMQ0KK1NFUlZJQ0VfS0VSTkVMX0RSSVZFUiAgPSAxDQorU0VSVklDRV9CT09UX1NUQVJU ICAgICA9IDANCitTRVJWSUNFX0VSUk9SX05PUk1BTCAgID0gMQ0KKw0KKw0KKw0K --------------080601040102040902090804--