usbdi.c regression: mouse pointer freeze on two finger gesture

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
9 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

usbdi.c regression: mouse pointer freeze on two finger gesture

Theo Buehler
>Synopsis: two finger gesture leads to mouse pointer freeze
>Category: kernel, amd64, usb
>Environment:
        System      : OpenBSD 6.1
        Details     : OpenBSD 6.1-beta (GENERIC.MP) #20: Wed Mar 15 01:49:05 MDT 2017
                         [hidden email]:/usr/src/sys/arch/amd64/compile/GENERIC.MP

        Architecture: OpenBSD.amd64
        Machine     : amd64
>Description:
        Wenever I touch the touchpad of my MacBook pro with two fingers
        simultaneously, the mouse pointer freezes and remains unusable
        until I restart X. The output of xinput --test /dev/wsmouse1
        stops as soon as two fingers touch the pad.
       
>How-To-Repeat:
        Start an X session, touch touchpad with two fingers simultaneously.
>Fix:
        Reverting usbdi.c to r1.85 fixes the problem.

dmesg:
OpenBSD 6.1-beta (GENERIC.MP) #20: Wed Mar 15 01:49:05 MDT 2017
    [hidden email]:/usr/src/sys/arch/amd64/compile/GENERIC.MP
real mem = 2110599168 (2012MB)
avail mem = 2042011648 (1947MB)
mpath0 at root
scsibus0 at mpath0: 256 targets
mainbus0 at root
bios0 at mainbus0: SMBIOS rev. 2.4 @ 0xe0000 (45 entries)
bios0: vendor Apple Inc. version "MBP41.88Z.00C1.B03.0802271651" date 02/27/08
bios0: Apple Inc. MacBookPro4,1
acpi0 at bios0: rev 2
acpi0: sleep states S0 S3 S4 S5
acpi0: tables DSDT FACP HPET APIC MCFG ASF! SBST ECDT SSDT SSDT SSDT SSDT SSDT
acpi0: wakeup devices ADP1(S3) LID0(S3) ARPT(S3) GIGE(S3) UHC1(S3) UHC2(S3) UHC3(S3) UHC4(S3) UHC5(S3) EHC1(S3) EHC2(S3) EC__(S3)
acpitimer0 at acpi0: 3579545 Hz, 24 bits
acpihpet0 at acpi0: 14318179 Hz
acpimadt0 at acpi0 addr 0xfee00000: PC-AT compat
cpu0 at mainbus0: apid 0 (boot processor)
cpu0: Intel(R) Core(TM)2 Duo CPU T8300 @ 2.40GHz, 1197.25 MHz
cpu0: FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,DTES64,MWAIT,DS-CPL,VMX,EST,TM2,SSSE3,CX16,xTPR,PDCM,SSE4.1,NXE,LONG,LAHF,PERF,SENSOR
cpu0: 3MB 64b/line 8-way L2 cache
cpu0: smt 0, core 0, package 0
mtrr: Pentium Pro MTRR support, 8 var ranges, 88 fixed ranges
cpu0: apic clock running at 199MHz
cpu0: mwait min=64, max=64, C-substates=0.2.2.2.2.1.3, IBE
cpu1 at mainbus0: apid 1 (application processor)
cpu1: Intel(R) Core(TM)2 Duo CPU T8300 @ 2.40GHz, 1197.00 MHz
cpu1: FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,DTES64,MWAIT,DS-CPL,VMX,EST,TM2,SSSE3,CX16,xTPR,PDCM,SSE4.1,NXE,LONG,LAHF,PERF,SENSOR
cpu1: 3MB 64b/line 8-way L2 cache
cpu1: smt 0, core 1, package 0
ioapic0 at mainbus0: apid 1 pa 0xfec00000, version 20, 24 pins
acpimcfg0 at acpi0 addr 0xf0000000, bus 0-255
acpiec0 at acpi0
acpiprt0 at acpi0: bus 0 (PCI0)
acpiprt1 at acpi0: bus 1 (PEGP)
acpiprt2 at acpi0: bus 3 (RP03)
acpiprt3 at acpi0: bus 11 (RP05)
acpiprt4 at acpi0: bus 12 (RP06)
acpiprt5 at acpi0: bus 13 (PCIB)
acpicpu0 at acpi0: !C3(100@57 mwait.3@0x31), !C2(500@1 mwait@0x10), C1(1000@1 mwait), PSS
acpicpu1 at acpi0: !C3(100@57 mwait.3@0x31), !C2(500@1 mwait@0x10), C1(1000@1 mwait), PSS
acpisbs0 at acpi0: SBS0 model "ASMB012" serial 5179 type LION oem "Sony"
acpiac0 at acpi0: AC unit online
acpibtn0 at acpi0: LID0
"APP0002" at acpi0 not configured
acpibtn1 at acpi0: PWRB
acpibtn2 at acpi0: SLPB
"APP0001" at acpi0 not configured
"ACPI0008" at acpi0 not configured
"APP0003" at acpi0 not configured
"ACPI0001" at acpi0 not configured
acpivideo0 at acpi0: GFX0
cpu0: Enhanced SpeedStep 1197 MHz: speeds: 2400, 2200, 2000, 1800, 1600, 1400, 1200, 800 MHz
memory map conflict 0xf00f8000/0x1000
memory map conflict 0xfed1c000/0x4000
memory map conflict 0xfffa0000/0x30000
pci0 at mainbus0 bus 0
pchb0 at pci0 dev 0 function 0 "Intel GM965 Host" rev 0x03
ppb0 at pci0 dev 1 function 0 "Intel GM965 PCIE" rev 0x03: msi
pci1 at ppb0 bus 1
vga1 at pci1 dev 0 function 0 "NVIDIA GeForce 8600M GT" rev 0xa1
wsdisplay0 at vga1 mux 1: console (80x25, vt100 emulation)
wsdisplay0: screen 1-5 added (80x25, vt100 emulation)
uhci0 at pci0 dev 26 function 0 "Intel 82801H USB" rev 0x04: apic 1 int 20
uhci1 at pci0 dev 26 function 1 "Intel 82801H USB" rev 0x04: apic 1 int 16
ehci0 at pci0 dev 26 function 7 "Intel 82801H USB" rev 0x04: apic 1 int 21
usb0 at ehci0: USB revision 2.0
uhub0 at usb0 configuration 1 interface 0 "Intel EHCI root hub" rev 2.00/1.00 addr 1
azalia0 at pci0 dev 27 function 0 "Intel 82801H HD Audio" rev 0x04: msi
azalia0: codecs: Realtek ALC885
audio0 at azalia0
ppb1 at pci0 dev 28 function 0 "Intel 82801H PCIE" rev 0x04: msi
pci2 at ppb1 bus 2
ppb2 at pci0 dev 28 function 2 "Intel 82801H PCIE" rev 0x04: msi
pci3 at ppb2 bus 3
ppb3 at pci0 dev 28 function 4 "Intel 82801H PCIE" rev 0x04: msi
pci4 at ppb3 bus 11
"Broadcom BCM4321" rev 0x05 at pci4 dev 0 function 0 not configured
ppb4 at pci0 dev 28 function 5 "Intel 82801H PCIE" rev 0x04: msi
pci5 at ppb4 bus 12
mskc0 at pci5 dev 0 function 0 "Marvell Yukon 88E8058" rev 0x13, Yukon-2 EC Ultra rev. B0 (0x3): apic 1 int 17
msk0 at mskc0 port A: address 00:22:41:32:fe:f1
eephy0 at msk0 phy 0: 88E1149 Gigabit PHY, rev. 1
uhci2 at pci0 dev 29 function 0 "Intel 82801H USB" rev 0x04: apic 1 int 16
uhci3 at pci0 dev 29 function 1 "Intel 82801H USB" rev 0x04: apic 1 int 18
uhci4 at pci0 dev 29 function 2 "Intel 82801H USB" rev 0x04: apic 1 int 21
ehci1 at pci0 dev 29 function 7 "Intel 82801H USB" rev 0x04: apic 1 int 20
usb1 at ehci1: USB revision 2.0
uhub1 at usb1 configuration 1 interface 0 "Intel EHCI root hub" rev 2.00/1.00 addr 1
ppb5 at pci0 dev 30 function 0 "Intel 82801BAM Hub-to-PCI" rev 0xf4
pci6 at ppb5 bus 13
"TI TSB82AA2 FireWire" rev 0x02 at pci6 dev 3 function 0 not configured
pcib0 at pci0 dev 31 function 0 "Intel 82801HBM LPC" rev 0x04
pciide0 at pci0 dev 31 function 1 "Intel 82801HBM IDE" rev 0x04: DMA, channel 0 configured to native-PCI, channel 1 configured to native-PCI
pciide0: using apic 1 int 21 for native-PCI interrupt
atapiscsi0 at pciide0 channel 0 drive 0
scsibus1 at atapiscsi0: 2 targets
cd0 at scsibus1 targ 0 lun 0: <HL-DT-ST, DVDRW GSA-S10N, AP12> ATAPI 5/cdrom removable
cd0(pciide0:0:0): using PIO mode 4, Ultra-DMA mode 2
pciide0: channel 1 disabled (no drives)
pciide1 at pci0 dev 31 function 2 "Intel 82801HBM SATA" rev 0x04: DMA, channel 0 configured to native-PCI, channel 1 configured to native-PCI
pciide1: using apic 1 int 18 for native-PCI interrupt
wd0 at pciide1 channel 0 drive 0: <HITACHI HTS725050A9A364>
wd0: 16-sector PIO, LBA48, 476940MB, 976773168 sectors
wd0(pciide1:0:0): using PIO mode 4, Ultra-DMA mode 5
ichiic0 at pci0 dev 31 function 3 "Intel 82801H SMBus" rev 0x04: apic 1 int 20
iic0 at ichiic0
spdmem0 at iic0 addr 0x50: 1GB DDR2 SDRAM non-parity PC2-5300CL5 SO-DIMM
spdmem1 at iic0 addr 0x52: 1GB DDR2 SDRAM non-parity PC2-5300CL5 SO-DIMM
usb2 at uhci0: USB revision 1.0
uhub2 at usb2 configuration 1 interface 0 "Intel UHCI root hub" rev 1.00/1.00 addr 1
usb3 at uhci1: USB revision 1.0
uhub3 at usb3 configuration 1 interface 0 "Intel UHCI root hub" rev 1.00/1.00 addr 1
usb4 at uhci2: USB revision 1.0
uhub4 at usb4 configuration 1 interface 0 "Intel UHCI root hub" rev 1.00/1.00 addr 1
usb5 at uhci3: USB revision 1.0
uhub5 at usb5 configuration 1 interface 0 "Intel UHCI root hub" rev 1.00/1.00 addr 1
usb6 at uhci4: USB revision 1.0
uhub6 at usb6 configuration 1 interface 0 "Intel UHCI root hub" rev 1.00/1.00 addr 1
isa0 at pcib0
isadma0 at isa0
pcppi0 at isa0 port 0x61
spkr0 at pcppi0
asmc0 at isa0 port 0x300/32: rev 1.27f527, 261 keys
vmm0 at mainbus0: VMX
uvideo0 at uhub1 port 4 configuration 1 interface 0 "Apple Inc. Built-in iSight" rev 2.00/1.60 addr 2
video0 at uvideo0
ugen0 at uhub1 port 4 configuration 1 "Apple Inc. Built-in iSight" rev 2.00/1.60 addr 2
uhub7 at uhub2 port 1 configuration 1 interface 0 "Apple Inc. BRCM2046 Hub" rev 2.00/1.00 addr 2
ugen1 at uhub7 port 1 "Apple Inc. Bluetooth USB Host Controller" rev 2.00/1.80 addr 3
uhidev0 at uhub7 port 2 configuration 1 interface 0 "Apple Computer product 0x820a" rev 2.00/1.00 addr 4
uhidev0: iclass 3/1, 1 report id
ukbd0 at uhidev0 reportid 1: 8 variable keys, 6 key codes
wskbd0 at ukbd0: console keyboard, using wsdisplay0
uhidev1 at uhub7 port 3 configuration 1 interface 0 "Apple Computer product 0x820b" rev 2.00/1.00 addr 5
uhidev1: iclass 3/1, 2 report ids
ums0 at uhidev1 reportid 2: 3 buttons
wsmouse0 at ums0 mux 0
uhidev2 at uhub6 port 1 configuration 1 interface 0 "Apple Computer, Inc. IR Receiver" rev 2.00/0.16 addr 2
uhidev2: iclass 3/0, 38 report ids
uhid0 at uhidev2 reportid 36: input=4, output=0, feature=0
uhid1 at uhidev2 reportid 37: input=4, output=0, feature=0
uhid2 at uhidev2 reportid 38: input=4, output=0, feature=0
uhidev3 at uhub6 port 2 configuration 1 interface 0 "Apple, Inc. Apple Internal Keyboard / Trackpad" rev 2.00/0.70 addr 3
uhidev3: iclass 3/1, 9 report ids
ukbd1 at uhidev3 reportid 1: 8 variable keys, 6 key codes, country code 13
wskbd1 at ukbd1 mux 1
wskbd1: connecting to wsdisplay0
uhid3 at uhidev3 reportid 9: input=0, output=0, feature=3
uhidev4 at uhub6 port 2 configuration 1 interface 1 "Apple, Inc. Apple Internal Keyboard / Trackpad" rev 2.00/0.70 addr 3
uhidev4: iclass 3/0, 68 report ids
uhid4 at uhidev4 reportid 68: input=511, output=0, feature=0
ubcmtp0 at uhub6 port 2 configuration 1 interface 2 "Apple, Inc. Apple Internal Keyboard / Trackpad" rev 2.00/0.70 addr 3
wsmouse1 at ubcmtp0 mux 0
vscsi0 at root
scsibus2 at vscsi0: 256 targets
softraid0 at root
scsibus3 at softraid0: 256 targets
sd0 at scsibus3 targ 1 lun 0: <OPENBSD, SR CRYPTO, 006> SCSI2 0/direct fixed
sd0: 476936MB, 512 bytes/sector, 976766528 sectors
root on sd0a (7966d4a5430aa607.a) swap on sd0b dump on sd0b

usbdevs:
Controller /dev/usb0:
addr 1: high speed, self powered, config 1, EHCI root hub(0x0000), Intel(0x8086), rev 1.00
 port 1 powered
 port 2 powered
 port 3 powered
 port 4 powered
Controller /dev/usb1:
addr 1: high speed, self powered, config 1, EHCI root hub(0x0000), Intel(0x8086), rev 1.00
 port 1 powered
 port 2 powered
 port 3 powered
 port 4 addr 2: high speed, power 500 mA, config 1, Built-in iSight(0x8502), Apple Inc.(0x05ac), rev 1.60, iSerialNumber 8T87TD59K0003L00
 port 5 powered
 port 6 powered
Controller /dev/usb2:
addr 1: full speed, self powered, config 1, UHCI root hub(0x0000), Intel(0x8086), rev 1.00
 port 1 addr 2: full speed, self powered, config 1, BRCM2046 Hub(0x4500), Apple Inc.(0x0a5c), rev 1.00
  port 1 addr 3: full speed, self powered, config 1, Bluetooth USB Host Controller(0x820f), Apple Inc.(0x05ac), rev 1.80, iSerialNumber 00231237B682
  port 2 addr 4: full speed, self powered, config 1, product 0x820a(0x820a), Apple Computer(0x05ac), rev 1.00
  port 3 addr 5: full speed, self powered, config 1, product 0x820b(0x820b), Apple Computer(0x05ac), rev 1.00
 port 2 powered
Controller /dev/usb3:
addr 1: full speed, self powered, config 1, UHCI root hub(0x0000), Intel(0x8086), rev 1.00
 port 1 powered
 port 2 powered
Controller /dev/usb4:
addr 1: full speed, self powered, config 1, UHCI root hub(0x0000), Intel(0x8086), rev 1.00
 port 1 powered
 port 2 powered
Controller /dev/usb5:
addr 1: full speed, self powered, config 1, UHCI root hub(0x0000), Intel(0x8086), rev 1.00
 port 1 powered
 port 2 powered
Controller /dev/usb6:
addr 1: full speed, self powered, config 1, UHCI root hub(0x0000), Intel(0x8086), rev 1.00
 port 1 addr 2: low speed, power 100 mA, config 1, IR Receiver(0x8242), Apple Computer, Inc.(0x05ac), rev 0.16
 port 2 addr 3: full speed, power 40 mA, config 1, Apple Internal Keyboard / Trackpad(0x0231), Apple, Inc.(0x05ac), rev 0.70

pcidump:
Domain /dev/pci0:
 0:0:0: Intel GM965 Host
        0x0000: Vendor ID: 8086 Product ID: 2a00
        0x0004: Command: 0006 Status: 2090
        0x0008: Class: 06 Subclass: 00 Interface: 00 Revision: 03
        0x000c: BIST: 00 Header Type: 00 Latency Timer: 00 Cache Line Size: 00
        0x0010: BAR empty (00000000)
        0x0014: BAR empty (00000000)
        0x0018: BAR empty (00000000)
        0x001c: BAR empty (00000000)
        0x0020: BAR empty (00000000)
        0x0024: BAR empty (00000000)
        0x0028: Cardbus CIS: 00000000
        0x002c: Subsystem Vendor ID: 106b Product ID: 00a3
        0x0030: Expansion ROM Base Address: 00000000
        0x0038: 00000000
        0x003c: Interrupt Pin: 00 Line: 00 Min Gnt: 00 Max Lat: 00
        0x00e0: Capability 0x09: Vendor Specific
        0x0000: 2a008086 20900006 06000003 00000000
        0x0010: 00000000 00000000 00000000 00000000
        0x0020: 00000000 00000000 00000000 00a3106b
        0x0030: 00000000 000000e0 00000000 00000000
        0x0040: fed19001 00000000 fed14001 00000000
        0x0050: 00020000 00000003 00000000 00000000
        0x0060: f0000005 00000000 fed18001 00000000
        0x0070: 00000000 00000000 00000401 00000000
        0x0080: e0000000 00000000 00000000 00000000
        0x0090: 11111110 00333311 000003ff 00391a00
        0x00a0: 08000010 00000000 00000000 00000000
        0x00b0: 00008000 00000000 00000000 00000000
        0x00c0: 00000000 00000000 00000000 00000000
        0x00d0: 00000000 00000000 00000000 00000103
        0x00e0: 910a0009 30006428 00000004 00000000
        0x00f0: 00000000 00000000 00060f90 00000000
 0:1:0: Intel GM965 PCIE
        0x0000: Vendor ID: 8086 Product ID: 2a01
        0x0004: Command: 0007 Status: 0010
        0x0008: Class: 06 Subclass: 04 Interface: 00 Revision: 03
        0x000c: BIST: 00 Header Type: 01 Latency Timer: 00 Cache Line Size: 40
        0x0010: 00000000
        0x0014: 00000000
        0x0018: Primary Bus: 0 Secondary Bus: 1 Subordinate Bus: 1
                Secondary Latency Timer: 00
        0x001c: I/O Base: 70 I/O Limit: 70 Secondary Status: 2000
        0x0020: Memory Base: 9000 Memory Limit: 9300
        0x0024: Prefetch Memory Base: 8001 Prefetch Memory Limit: 8ff1
        0x0028: Prefetch Memory Base Upper 32 Bits: 00000000
        0x002c: Prefetch Memory Limit Upper 32 Bits: 00000000
        0x0030: I/O Base Upper 16 Bits: 0000 I/O Limit Upper 16 Bits: 0000
        0x0038: Expansion ROM Base Address: 00000000
        0x003c: Interrupt Pin: 01 Line: ff Bridge Control: 0008
        0x0088: Capability 0x0d: PCI-PCI
        0x0080: Capability 0x01: Power Management
                State: D0
        0x0090: Capability 0x05: Message Signalled Interrupts (MSI)
        0x00a0: Capability 0x10: PCI Express
                Link Speed: 2.5 / 2.5 GT/s Link Width: x16 / x16
        0x0000: 2a018086 00100007 06040003 00010040
        0x0010: 00000000 00000000 00010100 20007070
        0x0020: 93009000 8ff18001 00000000 00000000
        0x0030: 00000000 00000088 00000000 000801ff
        0x0040: 00000000 00000000 00000000 00000000
        0x0050: 00000000 00000000 00000000 00000000
        0x0060: 00000000 00000000 00000000 00000000
        0x0070: 00000000 00000000 00000000 00000000
        0x0080: c8039001 00000000 0000800d 00008086
        0x0090: 0001a005 fee00000 00000060 00000000
        0x00a0: 01410010 00008000 00000000 02012d01
        0x00b0: 11010043 000c25c0 004001e8 00000000
        0x00c0: 00000000 00000000 00000000 00000000
        0x00d0: 00000000 00000000 00000000 00000000
        0x00e0: 00000000 00000000 00000000 00000000
        0x00f0: 84010220 a000000c 00060f90 00000031
 0:26:0: Intel 82801H USB
        0x0000: Vendor ID: 8086 Product ID: 2834
        0x0004: Command: 0005 Status: 0280
        0x0008: Class: 0c Subclass: 03 Interface: 00 Revision: 04
        0x000c: BIST: 00 Header Type: 80 Latency Timer: 00 Cache Line Size: 00
        0x0010: BAR empty (00000000)
        0x0014: BAR empty (00000000)
        0x0018: BAR empty (00000000)
        0x001c: BAR empty (00000000)
        0x0020: BAR io addr: 0x000080c0/0x0020
        0x0024: BAR empty (00000000)
        0x0028: Cardbus CIS: 00000000
        0x002c: Subsystem Vendor ID: 0000 Product ID: 0000
        0x0030: Expansion ROM Base Address: 00000000
        0x0038: 00000000
        0x003c: Interrupt Pin: 01 Line: 0a Min Gnt: 00 Max Lat: 00
        0x0000: 28348086 02800005 0c030004 00800000
        0x0010: 00000000 00000000 00000000 00000000
        0x0020: 000080c1 00000000 00000000 00000000
        0x0030: 00000000 00000000 00000000 0000010a
        0x0040: 00000000 00000000 00000000 00000000
        0x0050: 00000000 00000000 00000000 00000000
        0x0060: 00000010 00000000 00000000 00000000
        0x0070: 00000000 00000000 00000000 00000000
        0x0080: 00000000 00000000 00000000 00000000
        0x0090: 00000000 00000000 00000000 00000000
        0x00a0: 00000000 00000000 00000000 00000000
        0x00b0: 00000000 00000000 00000000 00000000
        0x00c0: 00002000 00000000 00000000 00000000
        0x00d0: 00000000 00000000 00000000 00000000
        0x00e0: 00000000 00000000 00000000 00000000
        0x00f0: 00000000 00000000 00060f86 00000000
 0:26:1: Intel 82801H USB
        0x0000: Vendor ID: 8086 Product ID: 2835
        0x0004: Command: 0005 Status: 0280
        0x0008: Class: 0c Subclass: 03 Interface: 00 Revision: 04
        0x000c: BIST: 00 Header Type: 00 Latency Timer: 00 Cache Line Size: 00
        0x0010: BAR empty (00000000)
        0x0014: BAR empty (00000000)
        0x0018: BAR empty (00000000)
        0x001c: BAR empty (00000000)
        0x0020: BAR io addr: 0x000080a0/0x0020
        0x0024: BAR empty (00000000)
        0x0028: Cardbus CIS: 00000000
        0x002c: Subsystem Vendor ID: 106b Product ID: 00a3
        0x0030: Expansion ROM Base Address: 00000000
        0x0038: 00000000
        0x003c: Interrupt Pin: 02 Line: 0b Min Gnt: 00 Max Lat: 00
        0x0000: 28358086 02800005 0c030004 00000000
        0x0010: 00000000 00000000 00000000 00000000
        0x0020: 000080a1 00000000 00000000 00a3106b
        0x0030: 00000000 00000000 00000000 0000020b
        0x0040: 00000000 00000000 00000000 00000000
        0x0050: 00000000 00000000 00000000 00000000
        0x0060: 00000010 00000000 00000000 00000000
        0x0070: 00000000 00000000 00000000 00000000
        0x0080: 00000000 00000000 00000000 00000000
        0x0090: 00000000 00000000 00000000 00000000
        0x00a0: 00000000 00000000 00000000 00000000
        0x00b0: 00000000 00000000 00000000 00000000
        0x00c0: 00002000 00000000 00000000 00000000
        0x00d0: 00000000 00000000 00000000 00000000
        0x00e0: 00000000 00000000 00000000 00000000
        0x00f0: 00000000 00000000 00060f86 00000000
 0:26:7: Intel 82801H USB
        0x0000: Vendor ID: 8086 Product ID: 283a
        0x0004: Command: 0006 Status: 0290
        0x0008: Class: 0c Subclass: 03 Interface: 20 Revision: 04
        0x000c: BIST: 00 Header Type: 00 Latency Timer: 00 Cache Line Size: 00
        0x0010: BAR mem 32bit addr: 0x9b504c00/0x00000400
        0x0014: BAR empty (00000000)
        0x0018: BAR empty (00000000)
        0x001c: BAR empty (00000000)
        0x0020: BAR empty (00000000)
        0x0024: BAR empty (00000000)
        0x0028: Cardbus CIS: 00000000
        0x002c: Subsystem Vendor ID: 106b Product ID: 00a3
        0x0030: Expansion ROM Base Address: 00000000
        0x0038: 00000000
        0x003c: Interrupt Pin: 03 Line: 09 Min Gnt: 00 Max Lat: 00
        0x0050: Capability 0x01: Power Management
                State: D0
        0x0058: Capability 0x0a: Debug Port
        0x0000: 283a8086 02900006 0c032004 00000000
        0x0010: 9b504c00 00000000 00000000 00000000
        0x0020: 00000000 00000000 00000000 00a3106b
        0x0030: 00000000 00000050 00000000 00000309
        0x0040: 00000000 00000000 00000000 00000000
        0x0050: c9c25801 00000000 20a0000a 00000000
        0x0060: 01ff2020 00000000 00000001 c0080000
        0x0070: 03dd0000 00000000 00000000 00000000
        0x0080: 00000000 00000001 00000000 00000000
        0x0090: 00000000 00000000 00000000 00000000
        0x00a0: 00000000 00000000 00000000 00000000
        0x00b0: 00000000 00000000 00000000 00000000
        0x00c0: 00000000 00000000 00000000 00000000
        0x00d0: 00000000 00ffaa00 00000000 00000000
        0x00e0: 00000000 00000000 00000000 00000000
        0x00f0: 00000000 00408588 00060f86 2002170a
 0:27:0: Intel 82801H HD Audio
        0x0000: Vendor ID: 8086 Product ID: 284b
        0x0004: Command: 0006 Status: 0010
        0x0008: Class: 04 Subclass: 03 Interface: 00 Revision: 04
        0x000c: BIST: 00 Header Type: 00 Latency Timer: 00 Cache Line Size: 40
        0x0010: BAR mem 64bit addr: 0x000000009b500000/0x00004000
        0x0018: BAR empty (00000000)
        0x001c: BAR empty (00000000)
        0x0020: BAR empty (00000000)
        0x0024: BAR empty (00000000)
        0x0028: Cardbus CIS: 00000000
        0x002c: Subsystem Vendor ID: 106b Product ID: 00a3
        0x0030: Expansion ROM Base Address: 00000000
        0x0038: 00000000
        0x003c: Interrupt Pin: 01 Line: 0a Min Gnt: 00 Max Lat: 00
        0x0050: Capability 0x01: Power Management
                State: D0
        0x0060: Capability 0x05: Message Signalled Interrupts (MSI)
        0x0070: Capability 0x10: PCI Express
        0x0000: 284b8086 00100006 04030004 00000040
        0x0010: 9b500004 00000000 00000000 00000000
        0x0020: 00000000 00000000 00000000 00a3106b
        0x0030: 00000000 00000050 00000000 0000010a
        0x0040: 03000001 00000000 00000000 00008000
        0x0050: c8426001 00000000 00000000 00000000
        0x0060: 00817005 fee00000 00000000 000000b0
        0x0070: 00910010 00000000 00100000 00000000
        0x0080: 00000000 00000000 00000000 00000000
        0x0090: 00000000 00000000 00000000 00000000
        0x00a0: 00000000 00000000 00000000 00000000
        0x00b0: 00000000 00000000 00000000 00000000
        0x00c0: 01000000 00000000 00000000 00000000
        0x00d0: 00000000 00000000 00000000 00000000
        0x00e0: 00000000 00000000 00000000 00000000
        0x00f0: 00000000 00000000 00060f86 00000000
 0:28:0: Intel 82801H PCIE
        0x0000: Vendor ID: 8086 Product ID: 283f
        0x0004: Command: 0004 Status: 0010
        0x0008: Class: 06 Subclass: 04 Interface: 00 Revision: 04
        0x000c: BIST: 00 Header Type: 81 Latency Timer: 00 Cache Line Size: 40
        0x0010: 00000000
        0x0014: 00000000
        0x0018: Primary Bus: 0 Secondary Bus: 2 Subordinate Bus: 2
                Secondary Latency Timer: 00
        0x001c: I/O Base: f0 I/O Limit: 00 Secondary Status: 2000
        0x0020: Memory Base: fff0 Memory Limit: 0000
        0x0024: Prefetch Memory Base: fff1 Prefetch Memory Limit: 0001
        0x0028: Prefetch Memory Base Upper 32 Bits: 00000000
        0x002c: Prefetch Memory Limit Upper 32 Bits: 00000000
        0x0030: I/O Base Upper 16 Bits: 0000 I/O Limit Upper 16 Bits: 0000
        0x0038: Expansion ROM Base Address: 00000000
        0x003c: Interrupt Pin: 01 Line: ff Bridge Control: 0000
        0x0040: Capability 0x10: PCI Express
                Link Speed: 2.5 / 2.5 GT/s Link Width: x0 / x1
        0x0080: Capability 0x05: Message Signalled Interrupts (MSI)
        0x0090: Capability 0x0d: PCI-PCI
        0x00a0: Capability 0x01: Power Management
                State: D0
        0x0000: 283f8086 00100004 06040004 00810040
        0x0010: 00000000 00000000 00020200 200000f0
        0x0020: 0000fff0 0001fff1 00000000 00000000
        0x0030: 00000000 00000040 00000000 000001ff
        0x0040: 01418010 00008fc0 00100000 01114c11
        0x0050: 10010000 0000a0e0 00000028 00000000
        0x0060: 00000000 00000000 00000000 00000000
        0x0070: 00000000 00000000 00000000 00000000
        0x0080: 00019005 fee00000 00000064 00000000
        0x0090: 0000a00d 00000000 00000000 00000000
        0x00a0: c8020001 00000000 00000000 00000000
        0x00b0: 00000000 00000000 00000000 00000000
        0x00c0: 00000000 00000000 00000000 00000000
        0x00d0: 00000000 00000002 08110000 00000000
        0x00e0: 00c70f00 00080706 00000031 00000000
        0x00f0: 00000000 00000000 00060f86 00000000
 0:28:2: Intel 82801H PCIE
        0x0000: Vendor ID: 8086 Product ID: 2843
        0x0004: Command: 0004 Status: 0010
        0x0008: Class: 06 Subclass: 04 Interface: 00 Revision: 04
        0x000c: BIST: 00 Header Type: 81 Latency Timer: 00 Cache Line Size: 40
        0x0010: 00000000
        0x0014: 00000000
        0x0018: Primary Bus: 0 Secondary Bus: 3 Subordinate Bus: 10
                Secondary Latency Timer: 00
        0x001c: I/O Base: 60 I/O Limit: 60 Secondary Status: 2000
        0x0020: Memory Base: fff0 Memory Limit: 0000
        0x0024: Prefetch Memory Base: fff1 Prefetch Memory Limit: 0001
        0x0028: Prefetch Memory Base Upper 32 Bits: 00000000
        0x002c: Prefetch Memory Limit Upper 32 Bits: 00000000
        0x0030: I/O Base Upper 16 Bits: 0000 I/O Limit Upper 16 Bits: 0000
        0x0038: Expansion ROM Base Address: 00000000
        0x003c: Interrupt Pin: 03 Line: ff Bridge Control: 0000
        0x0040: Capability 0x10: PCI Express
                Link Speed: 2.5 / 2.5 GT/s Link Width: x0 / x1
        0x0080: Capability 0x05: Message Signalled Interrupts (MSI)
        0x0090: Capability 0x0d: PCI-PCI
        0x00a0: Capability 0x01: Power Management
                State: D0
        0x0000: 28438086 00100004 06040004 00810040
        0x0010: 00000000 00000000 000a0300 20006060
        0x0020: 0000fff0 0001fff1 00000000 00000000
        0x0030: 00000000 00000040 00000000 000003ff
        0x0040: 01418010 00008fc0 00100000 03114c11
        0x0050: 10010000 0010a0e0 00000029 00000000
        0x0060: 00000000 00000000 00000000 00000000
        0x0070: 00000000 00000000 00000000 00000000
        0x0080: 00019005 fee00000 00000065 00000000
        0x0090: 0000a00d 00000000 00000000 00000000
        0x00a0: c8020001 00000000 00000000 00000000
        0x00b0: 00000000 00000000 00000000 00000000
        0x00c0: 00000000 00000000 00000000 00000000
        0x00d0: 00000000 00000002 48110000 00000000
        0x00e0: 00c70f00 00080706 00000031 00000000
        0x00f0: 00000000 00000000 00060f86 00000000
 0:28:4: Intel 82801H PCIE
        0x0000: Vendor ID: 8086 Product ID: 2847
        0x0004: Command: 0007 Status: 0010
        0x0008: Class: 06 Subclass: 04 Interface: 00 Revision: 04
        0x000c: BIST: 00 Header Type: 81 Latency Timer: 00 Cache Line Size: 40
        0x0010: 00000000
        0x0014: 00000000
        0x0018: Primary Bus: 0 Secondary Bus: 11 Subordinate Bus: 11
                Secondary Latency Timer: 00
        0x001c: I/O Base: f0 I/O Limit: 00 Secondary Status: 2000
        0x0020: Memory Base: 9730 Memory Limit: 9730
        0x0024: Prefetch Memory Base: fff1 Prefetch Memory Limit: 0001
        0x0028: Prefetch Memory Base Upper 32 Bits: ffffffff
        0x002c: Prefetch Memory Limit Upper 32 Bits: 00000000
        0x0030: I/O Base Upper 16 Bits: 0000 I/O Limit Upper 16 Bits: 0000
        0x0038: Expansion ROM Base Address: 00000000
        0x003c: Interrupt Pin: 01 Line: ff Bridge Control: 0000
        0x0040: Capability 0x10: PCI Express
                Link Speed: 2.5 / 2.5 GT/s Link Width: x1 / x1
        0x0080: Capability 0x05: Message Signalled Interrupts (MSI)
        0x0090: Capability 0x0d: PCI-PCI
        0x00a0: Capability 0x01: Power Management
                State: D0
        0x0000: 28478086 00100007 06040004 00810040
        0x0010: 00000000 00000000 000b0b00 200000f0
        0x0020: 97309730 0001fff1 ffffffff 00000000
        0x0030: 00000000 00000040 00000000 000001ff
        0x0040: 01418010 00008fc0 00100000 05112c11
        0x0050: 30110043 0020a0e0 00400028 00000000
        0x0060: 00000000 00000000 00000000 00000000
        0x0070: 00000000 00000000 00000000 00000000
        0x0080: 00019005 fee00000 00000066 00000000
        0x0090: 0000a00d 00000000 00000000 00000000
        0x00a0: c8020001 00000000 00000000 00000000
        0x00b0: 00000000 00000000 00000000 00000000
        0x00c0: 00000000 00000000 00000000 00000000
        0x00d0: 00000000 00000002 08110000 00000000
        0x00e0: 00c70f00 00080706 00000033 00000000
        0x00f0: 00000000 00000000 00060f86 00000000
 0:28:5: Intel 82801H PCIE
        0x0000: Vendor ID: 8086 Product ID: 2849
        0x0004: Command: 0007 Status: 0010
        0x0008: Class: 06 Subclass: 04 Interface: 00 Revision: 04
        0x000c: BIST: 00 Header Type: 81 Latency Timer: 00 Cache Line Size: 40
        0x0010: 00000000
        0x0014: 00000000
        0x0018: Primary Bus: 0 Secondary Bus: 12 Subordinate Bus: 12
                Secondary Latency Timer: 00
        0x001c: I/O Base: 50 I/O Limit: 50 Secondary Status: 2000
        0x0020: Memory Base: 9720 Memory Limit: 9720
        0x0024: Prefetch Memory Base: fff1 Prefetch Memory Limit: 0001
        0x0028: Prefetch Memory Base Upper 32 Bits: ffffffff
        0x002c: Prefetch Memory Limit Upper 32 Bits: 00000000
        0x0030: I/O Base Upper 16 Bits: 0000 I/O Limit Upper 16 Bits: 0000
        0x0038: Expansion ROM Base Address: 00000000
        0x003c: Interrupt Pin: 02 Line: ff Bridge Control: 0000
        0x0040: Capability 0x10: PCI Express
                Link Speed: 2.5 / 2.5 GT/s Link Width: x1 / x1
        0x0080: Capability 0x05: Message Signalled Interrupts (MSI)
        0x0090: Capability 0x0d: PCI-PCI
        0x00a0: Capability 0x01: Power Management
                State: D0
        0x0000: 28498086 00100007 06040004 00810040
        0x0010: 00000000 00000000 000c0c00 20005050
        0x0020: 97209720 0001fff1 ffffffff 00000000
        0x0030: 00000000 00000040 00000000 000002ff
        0x0040: 01418010 00008fc0 00100000 06112c11
        0x0050: 30110042 0028a0e0 00400028 00000000
        0x0060: 00000000 00000000 00000000 00000000
        0x0070: 00000000 00000000 00000000 00000000
        0x0080: 00019005 fee00000 00000067 00000000
        0x0090: 0000a00d 00000000 00000000 00000000
        0x00a0: c8020001 00000000 00000000 00000000
        0x00b0: 00000000 00000000 00000000 00000000
        0x00c0: 00000000 00000000 00000000 00000000
        0x00d0: 00000000 00000002 08110000 00000000
        0x00e0: 00c70f00 00080706 00000033 00000000
        0x00f0: 00000000 00000000 00060f86 00000000
 0:29:0: Intel 82801H USB
        0x0000: Vendor ID: 8086 Product ID: 2830
        0x0004: Command: 0005 Status: 0280
        0x0008: Class: 0c Subclass: 03 Interface: 00 Revision: 04
        0x000c: BIST: 00 Header Type: 80 Latency Timer: 00 Cache Line Size: 00
        0x0010: BAR empty (00000000)
        0x0014: BAR empty (00000000)
        0x0018: BAR empty (00000000)
        0x001c: BAR empty (00000000)
        0x0020: BAR io addr: 0x00008080/0x0020
        0x0024: BAR empty (00000000)
        0x0028: Cardbus CIS: 00000000
        0x002c: Subsystem Vendor ID: 106b Product ID: 00a3
        0x0030: Expansion ROM Base Address: 00000000
        0x0038: 00000000
        0x003c: Interrupt Pin: 01 Line: 0b Min Gnt: 00 Max Lat: 00
        0x0000: 28308086 02800005 0c030004 00800000
        0x0010: 00000000 00000000 00000000 00000000
        0x0020: 00008081 00000000 00000000 00a3106b
        0x0030: 00000000 00000000 00000000 0000010b
        0x0040: 00000000 00000000 00000000 00000000
        0x0050: 00000000 00000000 00000000 00000000
        0x0060: 00000010 00000000 00000000 00000000
        0x0070: 00000000 00000000 00000000 00000000
        0x0080: 00000000 00000000 00000000 00000000
        0x0090: 00000000 00000000 00000000 00000000
        0x00a0: 00000000 00000000 00000000 00000000
        0x00b0: 00000000 00000000 00000000 00000000
        0x00c0: 00002000 00000000 00000000 00000000
        0x00d0: 00000000 00000000 00000000 00000000
        0x00e0: 00000000 00000000 00000000 00000000
        0x00f0: 00000000 00000000 00060f86 00000000
 0:29:1: Intel 82801H USB
        0x0000: Vendor ID: 8086 Product ID: 2831
        0x0004: Command: 0005 Status: 0280
        0x0008: Class: 0c Subclass: 03 Interface: 00 Revision: 04
        0x000c: BIST: 00 Header Type: 00 Latency Timer: 00 Cache Line Size: 00
        0x0010: BAR empty (00000000)
        0x0014: BAR empty (00000000)
        0x0018: BAR empty (00000000)
        0x001c: BAR empty (00000000)
        0x0020: BAR io addr: 0x00008060/0x0020
        0x0024: BAR empty (00000000)
        0x0028: Cardbus CIS: 00000000
        0x002c: Subsystem Vendor ID: 106b Product ID: 00a3
        0x0030: Expansion ROM Base Address: 00000000
        0x0038: 00000000
        0x003c: Interrupt Pin: 02 Line: 05 Min Gnt: 00 Max Lat: 00
        0x0000: 28318086 02800005 0c030004 00000000
        0x0010: 00000000 00000000 00000000 00000000
        0x0020: 00008061 00000000 00000000 00a3106b
        0x0030: 00000000 00000000 00000000 00000205
        0x0040: 00000000 00000000 00000000 00000000
        0x0050: 00000000 00000000 00000000 00000000
        0x0060: 00000010 00000000 00000000 00000000
        0x0070: 00000000 00000000 00000000 00000000
        0x0080: 00000000 00000000 00000000 00000000
        0x0090: 00000000 00000000 00000000 00000000
        0x00a0: 00000000 00000000 00000000 00000000
        0x00b0: 00000000 00000000 00000000 00000000
        0x00c0: 00002000 00000000 00000000 00000000
        0x00d0: 00000000 00000000 00000000 00000000
        0x00e0: 00000000 00000000 00000000 00000000
        0x00f0: 00000000 00000000 00060f86 00000000
 0:29:2: Intel 82801H USB
        0x0000: Vendor ID: 8086 Product ID: 2832
        0x0004: Command: 0005 Status: 0280
        0x0008: Class: 0c Subclass: 03 Interface: 00 Revision: 04
        0x000c: BIST: 00 Header Type: 00 Latency Timer: 00 Cache Line Size: 00
        0x0010: BAR empty (00000000)
        0x0014: BAR empty (00000000)
        0x0018: BAR empty (00000000)
        0x001c: BAR empty (00000000)
        0x0020: BAR io addr: 0x00008040/0x0020
        0x0024: BAR empty (00000000)
        0x0028: Cardbus CIS: 00000000
        0x002c: Subsystem Vendor ID: 106b Product ID: 00a3
        0x0030: Expansion ROM Base Address: 00000000
        0x0038: 00000000
        0x003c: Interrupt Pin: 03 Line: 09 Min Gnt: 00 Max Lat: 00
        0x0000: 28328086 02800005 0c030004 00000000
        0x0010: 00000000 00000000 00000000 00000000
        0x0020: 00008041 00000000 00000000 00a3106b
        0x0030: 00000000 00000000 00000000 00000309
        0x0040: 00000000 00000000 00000000 00000000
        0x0050: 00000000 00000000 00000000 00000000
        0x0060: 00000010 00000000 00000000 00000000
        0x0070: 00000000 00000000 00000000 00000000
        0x0080: 00000000 00000000 00000000 00000000
        0x0090: 00000000 00000000 00000000 00000000
        0x00a0: 00000000 00000000 00000000 00000000
        0x00b0: 00000000 00000000 00000000 00000000
        0x00c0: 00002000 00000000 00000000 00000000
        0x00d0: 00000000 00000000 00000000 00000000
        0x00e0: 00000000 00000000 00000000 00000000
        0x00f0: 00000000 00000000 00060f86 00000000
 0:29:7: Intel 82801H USB
        0x0000: Vendor ID: 8086 Product ID: 2836
        0x0004: Command: 0006 Status: 0290
        0x0008: Class: 0c Subclass: 03 Interface: 20 Revision: 04
        0x000c: BIST: 00 Header Type: 00 Latency Timer: 00 Cache Line Size: 00
        0x0010: BAR mem 32bit addr: 0x9b504800/0x00000400
        0x0014: BAR empty (00000000)
        0x0018: BAR empty (00000000)
        0x001c: BAR empty (00000000)
        0x0020: BAR empty (00000000)
        0x0024: BAR empty (00000000)
        0x0028: Cardbus CIS: 00000000
        0x002c: Subsystem Vendor ID: 106b Product ID: 00a3
        0x0030: Expansion ROM Base Address: 00000000
        0x0038: 00000000
        0x003c: Interrupt Pin: 04 Line: 0a Min Gnt: 00 Max Lat: 00
        0x0050: Capability 0x01: Power Management
                State: D0
        0x0058: Capability 0x0a: Debug Port
        0x0000: 28368086 02900006 0c032004 00000000
        0x0010: 9b504800 00000000 00000000 00000000
        0x0020: 00000000 00000000 00000000 00a3106b
        0x0030: 00000000 00000050 00000000 0000040a
        0x0040: 00000000 00000000 00000000 00000000
        0x0050: c9c25801 00000000 20a0000a 00000000
        0x0060: 01ff2020 00000000 00000001 c0080000
        0x0070: 3fdd0000 00000000 00000000 00000000
        0x0080: 00000000 00000001 00000000 00000000
        0x0090: 00000000 00000000 00000000 00000000
        0x00a0: 00000000 00000000 00000000 00000000
        0x00b0: 00000000 00000000 00000000 00000000
        0x00c0: 00000000 00000000 00000000 00000000
        0x00d0: 00000000 00ffaa00 00000000 00000000
        0x00e0: 00000000 00000000 00000000 00000000
        0x00f0: 00000000 00408588 00060f86 2002170a
 0:30:0: Intel 82801BAM Hub-to-PCI
        0x0000: Vendor ID: 8086 Product ID: 2448
        0x0004: Command: 0007 Status: 0010
        0x0008: Class: 06 Subclass: 04 Interface: 01 Revision: f4
        0x000c: BIST: 00 Header Type: 01 Latency Timer: 00 Cache Line Size: 00
        0x0010: 00000000
        0x0014: 00000000
        0x0018: Primary Bus: 0 Secondary Bus: 13 Subordinate Bus: 13
                Secondary Latency Timer: 20
        0x001c: I/O Base: f0 I/O Limit: 00 Secondary Status: 2280
        0x0020: Memory Base: 9710 Memory Limit: 9710
        0x0024: Prefetch Memory Base: fff1 Prefetch Memory Limit: 0001
        0x0028: Prefetch Memory Base Upper 32 Bits: ffffffff
        0x002c: Prefetch Memory Limit Upper 32 Bits: 00000000
        0x0030: I/O Base Upper 16 Bits: 0000 I/O Limit Upper 16 Bits: 0000
        0x0038: Expansion ROM Base Address: 00000000
        0x003c: Interrupt Pin: 00 Line: ff Bridge Control: 0000
        0x0050: Capability 0x0d: PCI-PCI
        0x0000: 24488086 00100007 060401f4 00010000
        0x0010: 00000000 00000000 200d0d00 228000f0
        0x0020: 97109710 0001fff1 ffffffff 00000000
        0x0030: 00000000 00000050 00000000 000000ff
        0x0040: 00000000 00000000 00000000 00001200
        0x0050: 0000000d 00000000 00000000 00000000
        0x0060: 00000000 00000000 00000000 00000000
        0x0070: 00000000 00000000 00000000 00000000
        0x0080: 00000000 00000000 00000000 00000000
        0x0090: 00000000 00000000 00000000 00000000
        0x00a0: 00000000 00000000 00000000 00000000
        0x00b0: 00000000 00000000 00000000 00000000
        0x00c0: 00000000 00000000 00000000 00000000
        0x00d0: 00000000 00000000 00000000 00000000
        0x00e0: 00000000 00000000 00000000 00000000
        0x00f0: 00000000 00000000 00060f86 00000000
 0:31:0: Intel 82801HBM LPC
        0x0000: Vendor ID: 8086 Product ID: 2815
        0x0004: Command: 0007 Status: 0210
        0x0008: Class: 06 Subclass: 01 Interface: 00 Revision: 04
        0x000c: BIST: 00 Header Type: 80 Latency Timer: 00 Cache Line Size: 00
        0x0010: BAR empty (00000000)
        0x0014: BAR empty (00000000)
        0x0018: BAR empty (00000000)
        0x001c: BAR empty (00000000)
        0x0020: BAR empty (00000000)
        0x0024: BAR empty (00000000)
        0x0028: Cardbus CIS: 00000000
        0x002c: Subsystem Vendor ID: 106b Product ID: 00a3
        0x0030: Expansion ROM Base Address: 00000000
        0x0038: 00000000
        0x003c: Interrupt Pin: 00 Line: 00 Min Gnt: 00 Max Lat: 00
        0x00e0: Capability 0x09: Vendor Specific
        0x0000: 28158086 02100007 06010004 00800000
        0x0010: 00000000 00000000 00000000 00000000
        0x0020: 00000000 00000000 00000000 00a3106b
        0x0030: 00000000 000000e0 00000000 00000000
        0x0040: 00000401 00000080 00000501 00000010
        0x0050: 00000000 00000000 00000000 00000000
        0x0060: 8005070b 000000d0 8080090a 00000000
        0x0070: 00000000 00000000 00000000 00000000
        0x0080: 38010010 000c0681 000c1641 00000000
        0x0090: 001c0301 00000000 00000000 00000000
        0x00a0: 00000aa4 00000001 000a1c01 00000300
        0x00b0: 00f00000 00000000 00028008 00000000
        0x00c0: 00000000 00000000 00000000 00000000
        0x00d0: 00000000 00004567 0000ff00 00000000
        0x00e0: 100c0009 c34c0220 00000064 00000000
        0x00f0: fed1c001 00000000 00060f86 00000000
 0:31:1: Intel 82801HBM IDE
        0x0000: Vendor ID: 8086 Product ID: 2850
        0x0004: Command: 0005 Status: 0280
        0x0008: Class: 01 Subclass: 01 Interface: 8f Revision: 04
        0x000c: BIST: 00 Header Type: 00 Latency Timer: 00 Cache Line Size: 00
        0x0010: BAR io addr: 0x00008108/0x0008
        0x0014: BAR io addr: 0x0000811c/0x0004
        0x0018: BAR io addr: 0x00008100/0x0008
        0x001c: BAR io addr: 0x00008118/0x0004
        0x0020: BAR io addr: 0x000080e0/0x0010
        0x0024: BAR empty (00000000)
        0x0028: Cardbus CIS: 00000000
        0x002c: Subsystem Vendor ID: 106b Product ID: 00a3
        0x0030: Expansion ROM Base Address: 00000000
        0x0038: 00000000
        0x003c: Interrupt Pin: 01 Line: 09 Min Gnt: 00 Max Lat: 00
        0x0000: 28508086 02800005 01018f04 00000000
        0x0010: 00008109 0000811d 00008101 00008119
        0x0020: 000080e1 00000000 00000000 00a3106b
        0x0030: 00000000 00000000 00000000 00000109
        0x0040: 0000a307 00000000 00020001 00000000
        0x0050: 00000000 00000030 00000000 00000000
        0x0060: 00000000 00000000 00000000 00000000
        0x0070: 00000000 00000000 00000000 00000000
        0x0080: 00000000 00000000 00000000 00000000
        0x0090: 00000000 00000000 00000000 00000000
        0x00a0: 00000000 00000000 00000000 00000000
        0x00b0: 00000000 00000000 00000000 00000000
        0x00c0: 00000000 00000000 00000000 00000000
        0x00d0: 00000000 00000000 00000000 00000000
        0x00e0: 00000000 00000000 00000000 00000000
        0x00f0: 00000000 00000000 00060f86 00000000
 0:31:2: Intel 82801HBM SATA
        0x0000: Vendor ID: 8086 Product ID: 2828
        0x0004: Command: 0007 Status: 02b0
        0x0008: Class: 01 Subclass: 01 Interface: 8f Revision: 04
        0x000c: BIST: 00 Header Type: 00 Latency Timer: 00 Cache Line Size: 00
        0x0010: BAR io addr: 0x000080f8/0x0008
        0x0014: BAR io addr: 0x00008114/0x0004
        0x0018: BAR io addr: 0x000080f0/0x0008
        0x001c: BAR io addr: 0x00008110/0x0004
        0x0020: BAR io addr: 0x00008020/0x0010
        0x0024: BAR io addr: 0x00004000/0x0010
        0x0028: Cardbus CIS: 00000000
        0x002c: Subsystem Vendor ID: 106b Product ID: 00a3
        0x0030: Expansion ROM Base Address: 00000000
        0x0038: 00000000
        0x003c: Interrupt Pin: 02 Line: 05 Min Gnt: 00 Max Lat: 00
        0x0070: Capability 0x01: Power Management
                State: D0
        0x0000: 28288086 02b00007 01018f04 00000000
        0x0010: 000080f9 00008115 000080f1 00008111
        0x0020: 00008021 00004001 00000000 00a3106b
        0x0030: 00000000 00000070 00000000 00000205
        0x0040: 8000a307 00000000 00010001 00000000
        0x0050: 00000000 00001010 00000000 00000000
        0x0060: 00000000 00000000 00000000 00000000
        0x0070: 40030001 00000008 00000000 00000000
        0x0080: 00007005 00000000 00000000 00000000
        0x0090: 81030000 78000180 00000000 0000000c
        0x00a0: 00000000 00000000 00000000 00000000
        0x00b0: 00000000 00000000 00000000 00000000
        0x00c0: 00000000 00000005 00000000 00000000
        0x00d0: 00000000 00000000 00000000 00000000
        0x00e0: 00000000 00000000 00000000 00000000
        0x00f0: 00000000 00000000 00060f86 00000000
 0:31:3: Intel 82801H SMBus
        0x0000: Vendor ID: 8086 Product ID: 283e
        0x0004: Command: 0003 Status: 0280
        0x0008: Class: 0c Subclass: 05 Interface: 00 Revision: 04
        0x000c: BIST: 00 Header Type: 00 Latency Timer: 00 Cache Line Size: 00
        0x0010: BAR mem 32bit addr: 0x9b505000/0x00000100
        0x0014: BAR empty (00000000)
        0x0018: BAR empty (00000000)
        0x001c: BAR empty (00000000)
        0x0020: BAR io addr: 0x0000efa0/0x0020
        0x0024: BAR empty (00000000)
        0x0028: Cardbus CIS: 00000000
        0x002c: Subsystem Vendor ID: 106b Product ID: 00a3
        0x0030: Expansion ROM Base Address: 00000000
        0x0038: 00000000
        0x003c: Interrupt Pin: 03 Line: 0a Min Gnt: 00 Max Lat: 00
        0x0000: 283e8086 02800003 0c050004 00000000
        0x0010: 9b505000 00000000 00000000 00000000
        0x0020: 0000efa1 00000000 00000000 00a3106b
        0x0030: 00000000 00000000 00000000 0000030a
        0x0040: 00000001 00000000 00000000 00000000
        0x0050: 00000000 00000000 00000000 00000000
        0x0060: 00040403 08080000 00000000 00000000
        0x0070: 00000000 00000000 00000000 00000000
        0x0080: 00000004 00000000 00000000 00000000
        0x0090: 00000000 00000000 00000000 00000000
        0x00a0: 00000000 00000000 00000000 00000000
        0x00b0: 00000000 00000000 00000000 00000000
        0x00c0: 00000000 00000000 00000000 00000000
        0x00d0: 00000000 00000000 00000000 00000000
        0x00e0: 00000000 00000000 00000000 00000000
        0x00f0: 00000000 00000000 00060f86 00000000
 1:0:0: NVIDIA GeForce 8600M GT
        0x0000: Vendor ID: 10de Product ID: 0407
        0x0004: Command: 0007 Status: 0010
        0x0008: Class: 03 Subclass: 00 Interface: 00 Revision: a1
        0x000c: BIST: 00 Header Type: 00 Latency Timer: 00 Cache Line Size: 40
        0x0010: BAR mem 32bit addr: 0x92000000/0x01000000
        0x0014: BAR mem prefetchable 64bit addr: 0x0000000080000000/0x10000000
        0x001c: BAR mem 64bit addr: 0x0000000090000000/0x02000000
        0x0024: BAR io addr: 0x00007000/0x0080
        0x0028: Cardbus CIS: 00000000
        0x002c: Subsystem Vendor ID: 106b Product ID: 00a3
        0x0030: Expansion ROM Base Address: 93000000
        0x0038: 00000000
        0x003c: Interrupt Pin: 01 Line: 0b Min Gnt: 00 Max Lat: 00
        0x0060: Capability 0x01: Power Management
                State: D0
        0x0068: Capability 0x05: Message Signalled Interrupts (MSI)
        0x0078: Capability 0x10: PCI Express
                Link Speed: 2.5 / 2.5 GT/s Link Width: x16 / x16
        0x0000: 040710de 00100007 030000a1 00000040
        0x0010: 92000000 8000000c 00000000 90000004
        0x0020: 00000000 00007001 00000000 00a3106b
        0x0030: 93000000 00000060 00000000 0000010b
        0x0040: 00a3106b 00000000 00000000 00000000
        0x0050: 00000001 00000001 0023d6ce 00000000
        0x0060: 00026801 00000000 00807805 00000000
        0x0070: 00000000 00000000 00010010 012c84e0
        0x0080: 00002810 00013d01 1101004b 00000000
        0x0090: 00000000 00000000 00000000 00000000
        0x00a0: 00000000 00000000 00000000 00000000
        0x00b0: 00000000 00000000 00000000 00000000
        0x00c0: 00000000 00000000 00000000 00000000
        0x00d0: 00000000 00000000 00000000 00000000
        0x00e0: 00000000 00000000 00000000 00000000
        0x00f0: 00000000 00000000 00000000 00000000
 11:0:0: Broadcom BCM4321
        0x0000: Vendor ID: 14e4 Product ID: 4328
        0x0004: Command: 0006 Status: 0010
        0x0008: Class: 02 Subclass: 80 Interface: 00 Revision: 05
        0x000c: BIST: 00 Header Type: 00 Latency Timer: 00 Cache Line Size: 40
        0x0010: BAR mem 64bit addr: 0x0000000097300000/0x00004000
        0x0018: BAR empty (00000000)
        0x001c: BAR empty (00000000)
        0x0020: BAR empty (00000000)
        0x0024: BAR empty (00000000)
        0x0028: Cardbus CIS: 00000000
        0x002c: Subsystem Vendor ID: 106b Product ID: 008c
        0x0030: Expansion ROM Base Address: 00000000
        0x0038: 00000000
        0x003c: Interrupt Pin: 01 Line: 07 Min Gnt: 00 Max Lat: 00
        0x0040: Capability 0x01: Power Management
                State: D0
        0x0058: Capability 0x09: Vendor Specific
        0x00e8: Capability 0x05: Message Signalled Interrupts (MSI)
        0x00d0: Capability 0x10: PCI Express
                Link Speed: 2.5 / 2.5 GT/s Link Width: x1 / x1
        0x0000: 432814e4 00100006 02800005 00000040
        0x0010: 97300004 00000000 00000000 00000000
        0x0020: 00000000 00000000 00000000 008c106b
        0x0030: 00000000 00000040 00000000 00000107
        0x0040: ce035801 00004008 00000000 00000000
        0x0050: 00000000 00000000 0078e809 00000008
        0x0060: 00000000 00000000 00000000 00000000
        0x0070: 00000000 00000000 00000000 00000000
        0x0080: 18001000 00000000 00000001 00000003
        0x0090: 00000000 00000100 00000000 00000000
        0x00a0: 00000000 00000000 00000000 00000000
        0x00b0: 00000000 00000000 00000000 00000000
        0x00c0: 00000000 00000000 00000000 00000000
        0x00d0: 00010010 05048fa0 00090000 00076c11
        0x00e0: 10110143 00000000 0080d005 00000000
        0x00f0: 00000000 00000000 00000000 00000000
 12:0:0: Marvell Yukon 88E8058
        0x0000: Vendor ID: 11ab Product ID: 436a
        0x0004: Command: 0007 Status: 0010
        0x0008: Class: 02 Subclass: 00 Interface: 00 Revision: 13
        0x000c: BIST: 00 Header Type: 00 Latency Timer: 00 Cache Line Size: 40
        0x0010: BAR mem 64bit addr: 0x0000000097200000/0x00004000
        0x0018: BAR io addr: 0x00005000/0x0100
        0x001c: BAR empty (00000000)
        0x0020: BAR empty (00000000)
        0x0024: BAR empty (00000000)
        0x0028: Cardbus CIS: 00000000
        0x002c: Subsystem Vendor ID: 11ab Product ID: 00ba
        0x0030: Expansion ROM Base Address: fffe0000
        0x0038: 00000000
        0x003c: Interrupt Pin: 01 Line: 07 Min Gnt: 00 Max Lat: 00
        0x0048: Capability 0x01: Power Management
                State: D0
        0x0050: Capability 0x03: Vital Product Data (VPD)
        0x005c: Capability 0x05: Message Signalled Interrupts (MSI)
        0x00e0: Capability 0x10: PCI Express
                Link Speed: 2.5 / 2.5 GT/s Link Width: x1 / x1
        0x0000: 436a11ab 00100007 02000013 00000040
        0x0010: 97200004 00000000 00005001 00000000
        0x0020: 00000000 00000000 00000000 00ba11ab
        0x0030: fffe0000 00000048 00000000 00000107
        0x0040: 01f00000 01a08000 fe035001 13002000
        0x0050: 80fc5c03 78000000 01000000 0080e005
        0x0060: 00000000 00000000 00000000 00000000
        0x0070: 00000c00 00000000 00000000 00000000
        0x0080: 00000000 00007000 00000000 00e8a882
        0x0090: 00000000 00000000 00000000 00000000
        0x00a0: 00000000 00000000 00000000 00000000
        0x00b0: 00000000 00000000 00000000 00000000
        0x00c0: 00000000 00000000 00000000 00000000
        0x00d0: 00000000 00000000 00000000 00000000
        0x00e0: 00110010 05048fc0 00194000 0007ac11
        0x00f0: 1011014b 00000000 00000000 00000000
 13:3:0: TI TSB82AA2 FireWire
        0x0000: Vendor ID: 104c Product ID: 8025
        0x0004: Command: 0016 Status: 0210
        0x0008: Class: 0c Subclass: 00 Interface: 10 Revision: 02
        0x000c: BIST: 00 Header Type: 00 Latency Timer: f8 Cache Line Size: 10
        0x0010: BAR mem 32bit addr: 0x97104000/0x00000800
        0x0014: BAR mem 32bit addr: 0x97100000/0x00004000
        0x0018: BAR empty (00000000)
        0x001c: BAR empty (00000000)
        0x0020: BAR empty (00000000)
        0x0024: BAR empty (00000000)
        0x0028: Cardbus CIS: 00000000
        0x002c: Subsystem Vendor ID: 0000 Product ID: 0000
        0x0030: Expansion ROM Base Address: 00000000
        0x0038: 00000000
        0x003c: Interrupt Pin: 01 Line: 00 Min Gnt: 02 Max Lat: 04
        0x0044: Capability 0x01: Power Management
                State: D0
        0x0000: 8025104c 02100016 0c001002 0000f810
        0x0010: 97104000 97100000 00000000 00000000
        0x0020: 00000000 00000000 00000000 00000000
        0x0030: 00000000 00000044 00000000 04020100
        0x0040: 00000000 7e020001 00000000 00000000
        0x0050: 00000000 00000000 00000000 00000000
        0x0060: 00000000 00000000 00000000 00000000
        0x0070: 00000000 00000000 00000000 00000000
        0x0080: 00000000 00000000 00000000 00000000
        0x0090: 00000000 00000000 00000000 00000000
        0x00a0: 00000000 00000000 00000000 00000000
        0x00b0: 00000000 00000000 00000000 00000000
        0x00c0: 00000000 00000000 00000000 00000000
        0x00d0: 00000000 00000000 00000000 00000000
        0x00e0: 00000000 00000000 00000000 00000000
        0x00f0: 00000210 00004000 00000000 00000000

acpidump:
begin-base64 644 APIC.4
QVBJQ2gAAAABjkFQUExFIEFwcGxlMDAAAQAAAExva2lfAAAAAADg/gEAAAAACAAAAQAAAAAIAQEB
AAAAAQwBAAAAwP4AAAAAAgoAAAIAAAAAAAIKAAkJAAAADQAEBgAFAAEEBgEFAAE=
====
begin-base64 644 ASF!.6
QVNGIaUAAAAgtkFQUExFIEFwcGxlMDAAAQAAAExva2lfAAAAAAAQAAX/AQAAABG+AAAAAAEALAAA
AAMMiQQBAQVvAGgIiBcAiQQEBAdvAGggiAMAiQUBARlvAGggiCIAAgAYAAQEAAAAiAADAYgAAgKI
AAEDiAAEAwAXACD4AAAAH/AAAAARvgAAAAABAACEABYAABBcaIjC0tygoqSmyAAAAAAA
====
begin-base64 644 DSDT.2
RFNEVI5JAAABREFQUExFIE1hY0Jvb2tQAQAEAElOVEwJEQYgW4BQUlQwAQqACgRbgQtQUlQwE1A4
MEggW4BTUFJUAQqyCgJbgQtTUFJUEVNTTVAIW4BTX0lPAQuABgoRW4FPCFNfSU8BUE1TMAhQTUUw
CFBNUzEIUE1TMghQTVMzCFBNRTEIUE1FMghQTUUzCFNNUzEIU01TMghTTUUxCFNNRTIIUlQxMAFS
VDExAQABUlQxMwEADFJUMzABUlQzMQFSVDMyAVJUMzMBUlQzNAFSVDM1AVJUMzYBUlQzNwEACERM
UEMBQ0szMwFDSzE0AVuASU9fVAELAEAKEFuBJ0lPX1QBVFJQSRAAEAAQABBUUlAwCFRSUEMIAAgA
CAAIAAgACAAIW4BJT19EAQsQCAoIW4ELSU9fRAFUUlBECFuAUE1JTwELAAQKgFuBGlBNSU8BAEAU
AAJTUFNUAQBNDAABR1BFQwFbgEdOVlMADJha7X8LAAFbgUMaR05WUxBPU1lTEFNNSUYIUFJNMAhQ
Uk0xCFNDSUYIUFJNMghQUk0zCExDS0YIUFJNNAhQUk01CFA4MEQgTElEUwhQV1JTCERCR1MITElO
WAgACEFDVFQIUFNWVAhUQzFWCFRDMlYIVFNQVghDUlRUCERUU0UIRFRTMQhEVFMyCERUU0YIQk5V
TQhCMFNDCEIxU0MIQjJTQwhCMFNTCEIxU1MIQjJTUwgAGEFQSUMITVBFTghQQ1AwCFBDUDEIUFBD
TQhQUE1GIAAITkFUUAhDTUFQCENNQlAITFBUUAhGRENQCENNQ1AIQ0lSUAgAGElHRFMIVExTVAhD
QURMCFBBREwIQ1NURRBOU1RFEFNTVEUQTkRJRAhESUQxIERJRDIgRElEMyBESUQ0IERJRDUgQkRT
UAhQVFkxCFBUWTIIUFNDTAhUVkYxCFRWRjIIABBHT1BCIEJMQ1MIQlJUTAhBTFNFCEFMQUYITExP
VwhMSElICAAIRU1BRQhFTUFQEEVNQUwQAAhNRUZFCABIBkdURjA4R1RGMjhJREVNCEdURjE4W4BS
Q1JCAAwAwNH+CwBAW4FIBVJDUkITAIAACACAABAAgAICSFBBUwIABUhQQUUBAEgJAAFQQVREAVNB
VEQBU01CRAFIREFEAQALUlAxRAFSUDJEAVJQM0QBUlA0RAFSUDVEAVJQNkQBW4BHUElPAQsABQo8
W4FGD0dQSU8BR1UwMAhHVTAxCEdVMDIIR1UwMwhHSU8wCEdJTzEIR0lPMghHSU8zCAAgAAJHUDJf
AQABR1A0XwFHUDVfAQACAAFHUDlfAQAHR1AxNwEABUdQMjMBAANHUDI3AQABR1AyOQEAAgBABEdC
MDAIR0IwMQhHQjAyCEdCMDMIAEAIAAJHUEkyAQABR1BJNAEAA0dJVjEIR0lWMghHSVYzCEdVMDQI
R1UwNQhHVTA2CEdVMDcIR0lPNAhHSU81CAAGR0Q1NAEAAUdJTzcIAAVHUDM3AUdQMzgBAAFHUDQw
AUdMMDUHAAZHUDU0AQABR0wwNwhbAU1VVFgAECBcX1BSX1uDC0NQVTAAEAQAAAZbgwtDUFUxARAE
AAAGCFxEU0VOCgEIXEVDT04KAAhcR1BJQwoACFxDVFlQCgAIXFZGTjAKABQYT1NEVwCgDJNPU1lT
CxAnpAoBoQSkCgAUSwxQSU5JAKBJC1sSX09TSWCgFV9PU0kNRGFyd2luAHALECdPU1lToUkJoBRf
T1NJDUxpbnV4AHAL6ANPU1lToUEIoBtfT1NJDVdpbmRvd3MgMjAwMQBwC9EHT1NZU6FCBqAfX09T
SQ1XaW5kb3dzIDIwMDEgU1AxAHAL0QdPU1lToT+gH19PU0kNV2luZG93cyAyMDAxIFNQMgBwC9IH
T1NZU6EdoBtfT1NJDVdpbmRvd3MgMjAwNgBwC9YHT1NZU6EJcAvQB09TWVMUDVxfUElDAXBoR1BJ
QxRCBERUR1AFoDGTaBETChDGt7WgGBMcRLDJ/mler5SboBmTaQGgDZNqAHARBAoBA2ykAaAGk2oB
pAFwEQQKAQBspAAIX1MwXxIIAwoACgAKAAhfUzNfEggDCgUKBQoACF9TNF8SCAMKBgoGCgAIX1M1
XxIIAwoHCgcKABRPBF9QVFMBcAoAUDgwRFA4WEgKAGhwaFwvBV9TQl9QQ0kwTFBDQkVDX19FQ1NT
e0dENTQKAEdENTR7R1A1NAoAR1A1NH1HUDVfCgFHUDVfFEYIX1dBSwFQOFhICgAKAHAKAFwvBV9T
Ql9QQ0kwTFBDQkVDX19FQ1NToBhPU0RXXC8EX1NCX1BDSTBTQlVTRU5BQnBcLwVfU0JfUENJMExQ
Q0JFQ19fTFNURUxJRFNwXC8FX1NCX1BDSTBMUENCRUNfX1JQV1JQV1JTUE5PVKQSBgIKAAoAEEpH
XF9HUEUUQRtfTDAxAKBNCJCTUlAzRAoAXC8EX1NCX1BDSTBSUDAzSFBTM1siCmSgQwVcLwRfU0Jf
UENJMFJQMDNQREMzcAoBXC8EX1NCX1BDSTBSUDAzUERDM3AKAVwvBF9TQl9QQ0kwUlAwM0hQUzOG
XC8DX1NCX1BDSTBSUDAzCgChF3AKAVwvBF9TQl9QQ0kwUlAwM0hQUzOgTQiQk1JQNUQKAFwvBF9T
Ql9QQ0kwUlAwNUhQUzVbIgpkoEMFXC8EX1NCX1BDSTBSUDA1UERDNXAKAVwvBF9TQl9QQ0kwUlAw
NVBEQzVwCgFcLwRfU0JfUENJMFJQMDVIUFM1hlwvA19TQl9QQ0kwUlAwNQoAoRdwCgFcLwRfU0Jf
UENJMFJQMDVIUFM1oE0IkJNSUDZECgBcLwRfU0JfUENJMFJQMDZIUFM2WyIKZKBDBVwvBF9TQl9Q
Q0kwUlAwNlBEQzZwCgFcLwRfU0JfUENJMFJQMDZQREM2cAoBXC8EX1NCX1BDSTBSUDA2SFBTNoZc
LwNfU0JfUENJMFJQMDYKAKEXcAoBXC8EX1NCX1BDSTBSUDA2SFBTNhQNX0wwMgBwCgBHUEVDFCVf
TDAzAIZcLwNfU0JfUENJMFVIQzEKAoZcLl9TQl9QV1JCCgIUJV9MMDQAhlwvA19TQl9QQ0kwVUhD
MgoChlwuX1NCX1BXUkIKAhQlX0wwQwCGXC8DX1NCX1BDSTBVSEMzCgKGXC5fU0JfUFdSQgoCFCVf
TDBFAIZcLwNfU0JfUENJMFVIQzQKAoZcLl9TQl9QV1JCCgIUJV9MMDUAhlwvA19TQl9QQ0kwVUhD
NQoChlwuX1NCX1BXUkIKAhQcX0wwNwBwCiBcLwRfU0JfUENJMFNCVVNIU1RTFEMQX0wwOQCgQwVc
LwRfU0JfUENJMFJQMDNQU1AzcAoBXC8EX1NCX1BDSTBSUDAzUFNQM3AKAVwvBF9TQl9QQ0kwUlAw
M1BNUzOGXC8DX1NCX1BDSTBSUDAzCgKgQwVcLwRfU0JfUENJMFJQMDVQU1A1cAoBXC8EX1NCX1BD
STBSUDA1UFNQNXAKAVwvBF9TQl9QQ0kwUlAwNVBNUzWGXC8DX1NCX1BDSTBSUDA1CgKgQwVcLwRf
U0JfUENJMFJQMDZQU1A2cAoBXC8EX1NCX1BDSTBSUDA2UFNQNnAKAVwvBF9TQl9QQ0kwUlAwNlBN
UzaGXC8DX1NCX1BDSTBSUDA2CgIUGF9MMEIAhlwvA19TQl9QQ0kwUENJQgoCFE0JX0wwRACgSgRc
LwRfU0JfUENJMEVIQzFQTUVTcAoBXC8EX1NCX1BDSTBFSEMxUE1FU4ZcLwNfU0JfUENJMEVIQzEK
AoZcLl9TQl9QV1JCCgKgSgRcLwRfU0JfUENJMEVIQzJQTUVTcAoBXC8EX1NCX1BDSTBFSEMyUE1F
U4ZcLwNfU0JfUENJMEVIQzIKAoZcLl9TQl9QV1JCCgIUHF9MMTEAhlwvBF9TQl9QQ0kwUENJQkZS
V1IKABRACFA4WEgKoBiTaAoAcH17UDgwRAwA////AGkAUDgwRKAck2gKAXB9e1A4MEQM/wD//wB5
aQoIAABQODBEoByTaAoCcH17UDgwRAz//wD/AHlpChAAAFA4MESgHJNoCgNwfXtQODBEDP///wAA
eWkKGAAAUDgwRHBQODBEUDgwSBRCCVBOT1QIoEoGTVBFTqAxe1BEQzAKCACGXC5fUFJfQ1BVMAqA
oBp7UERDMAoQAFsiCmSGXC5fUFJfQ1BVMAqBoDF7UERDMQoIAIZcLl9QUl9DUFUxCoCgGntQREMx
ChAAWyIKZIZcLl9QUl9DUFUxCoGhH4ZcLl9QUl9DUFUwCoBbIgpkhlwuX1BSX0NQVTAKgRQ5VFJB
UApwaVNNSUagEZNoCgFwCgBUUlAwpFNNSUagF5NoCgJwaURUU0ZwCgBUUlBEpERUU0akCgEURgRH
RVRQCaAPk3toCgkACgCkDP////+gDZN7aAoJAAoIpAuEA3p7aAsAAwAKCGB6e2gLADAACgxhpHcK
HnQKCXJgYQAAABQwR0RNQQ2gI2igB5BpbKQKFKAOkGpspHd0CgRrAAoPAKR3dAoEawAKHgCkDP//
//8UH0dFVFQJpHcKHnQKCXJ7emgKAgAKAwB7aAoDAAAAABRGBkdFVEYLCFRNUEYKAKANaH1UTVBG
CgFUTVBGoBF7agoCAH1UTVBGCgJUTVBGoA1pfVRNUEYKBFRNUEagEXtqCiAAfVRNUEYKCFRNUEag
EntqCwBAAH1UTVBGChBUTVBGpFRNUEYUPlNFVFALoAiUaArwpAoIoS6gKHtpCgIAoBCQkpRoCnh7
agoCAKQLASOgEJCSlGgKtHtqCgEApAsBIaQLARAUO1NETUEJoAmSlGgKFKQKAaAJkpRoCh6kCgKg
CZKUaAotpAoBoAmSlGgKPKQKAqAJkpRoClqkCgGkCgAUMFNFVFQLoCZ7aQoCAKAPkJKUaAp4e2oK
AgCkCgugD5CSlGgKtHtqCgEApAoJpAoEEIyvA1xfU0JfFApfSU5JAFBJTklbgkEIQURQMQhfSElE
DUFDUEkwMDAzAAhfUFJXEgYCChgKAxQLX1BTUgCkUFdSUxQMX1BDTACkXF9TQl8URgRfUFNXAaA+
T1NEV6AcaHAKAVwvBV9TQl9QQ0kwTFBDQkVDX19BQ1dLoRtwCgBcLwVfU0JfUENJMExQQ0JFQ19f
QUNXS1uCSAZMSUQwCF9ISUQMQdAMDQhfUFJXEgYCChgKAxQLX0xJRACkTElEUxQ/X1BTVwGgHGhw
CgFcLwVfU0JfUENJMExQQ0JFQ19fTFdBS6EbcAoAXC8FX1NCX1BDSTBMUENCRUNfX0xXQUtbgi1Q
TkxGCF9ISUQMBhAAAghfQ0lEDWJhY2tsaWdodAAIX1VJRAoKCF9TVEEKC1uCD1BXUkIIX0hJRAxB
0AwMW4IWU0xQQghfSElEDEHQDA4IX1NUQQoLW4KCmgNQQ0kwFB9fSU5JAKAYT1NEV1wvBF9TQl9Q
Q0kwU0JVU0VOQUIUCV9TM0QApAoDFAlfUzREAKQKAwhfSElEDEHQCggIX0NJRAxB0AoDW4JEDk1D
SEMIX0FEUgoAW4BIQlVTAgpACsBbgUoMSEJVUwNFUEVOAQALRVBCUhQAIE1IRU4BAA1NSEJSEgBA
ClBYRU4BUFhTWgIAF1BYQlIGACBESUVOAQALRElCUhQAIElQRU4BAAtJUEJSFABADgAEUE0wSAIA
AlBNMUwCAAJQTTFIAgACUE0yTAIAAlBNMkgCAAJQTTNMAgACUE0zSAIAAlBNNEwCAAJQTTRIAgAC
UE01TAIAAlBNNUgCAAJQTTZMAgACUE02SAIAAgAHSEVOQQEAQAVUVVVEEABABgAEVExVRAwIQlVG
MBFJHQvUAYgNAAIMAAAAAAD/AAAAAAGHFwABDAMAAAAAAAAAAPcMAAAAAAAA+AwAAEcB+Az4DAEI
hxcAAQwDAAAAAAANAAD//wAAAAAAAADzAACHFwAADAMAAAAAAAAKAP//CwAAAAAAAAACAIcXAAAM
AwAAAAAAAAwA/z8MAAAAAAAAQAAAhxcAAAwDAAAAAABADAD/fwwAAAAAAABAAACHFwAADAMAAAAA
AIAMAP+/DAAAAAAAAEAAAIcXAAAMAwAAAAAAwAwA//8MAAAAAAAAQAAAhxcAAAwDAAAAAAAADQD/
Pw0AAAAAAABAAACHFwAADAMAAAAAAEANAP9/DQAAAAAAAEAAAIcXAAAMAwAAAAAAgA0A/78NAAAA
AAAAQAAAhxcAAAwDAAAAAADADQD//w0AAAAAAABAAACHFwAADAMAAAAAAAAOAP8/DgAAAAAAAEAA
AIcXAAAMAwAAAAAAQA4A/38OAAAAAAAAQAAAhxcAAAwDAAAAAACADgD/vw4AAAAAAABAAACHFwAA
DAMAAAAAAMAOAP//DgAAAAAAAEAAAIcXAAAMAwAAAAAAAA8A//8PAAAAAAAAAAEAhxcAAAwDAAAA
AAAAAAD//7/+AAAAAAAAAAB5ABRPN19DUlMIoBxeLk1DSENQTTFMikJVRjAKfEMwTE5wAEMwTE6g
IJNeLk1DSENQTTFMCgGNQlVGMAtYA0MwUldwAEMwUlegHF4uTUNIQ1BNMUiKQlVGMAqWQzRMTnAA
QzRMTqAgk14uTUNIQ1BNMUgKAY1CVUYwCygEQzRSV3AAQzRSV6AcXi5NQ0hDUE0yTIpCVUYwCrBD
OExOcABDOExOoCCTXi5NQ0hDUE0yTAoBjUJVRjAL+ARDOFJXcABDOFJXoBxeLk1DSENQTTJIikJV
RjAKykNDTE5wAENDTE6gIJNeLk1DSENQTTJICgGNQlVGMAvIBUNDUldwAENDUlegHF4uTUNIQ1BN
M0yKQlVGMArkRDBMTnAARDBMTqAgk14uTUNIQ1BNM0wKAY1CVUYwC5gGRDBSV3AARDBSV6AcXi5N
Q0hDUE0zSIpCVUYwCv5ENExOcABENExOoCCTXi5NQ0hDUE0zSAoBjUJVRjALaAdENFJXcABENFJX
oB1eLk1DSENQTTRMikJVRjALGAFEOExOcABEOExOoCCTXi5NQ0hDUE00TAoBjUJVRjALOAhEOFJX
cABEOFJXoB1eLk1DSENQTTRIikJVRjALMgFEQ0xOcABEQ0xOoCCTXi5NQ0hDUE00SAoBjUJVRjAL
CAlEQ1JXcABEQ1JXoB1eLk1DSENQTTVMikJVRjALTAFFMExOcABFMExOoCCTXi5NQ0hDUE01TAoB
jUJVRjAL2AlFMFJXcABFMFJXoB1eLk1DSENQTTVIikJVRjALZgFFNExOcABFNExOoCCTXi5NQ0hD
UE01SAoBjUJVRjALqApFNFJXcABFNFJXoB1eLk1DSENQTTZMikJVRjALgAFFOExOcABFOExOoCCT
Xi5NQ0hDUE02TAoBjUJVRjALeAtFOFJXcABFOFJXoB1eLk1DSENQTTZIikJVRjALmgFFQ0xOcABF
Q0xOoCCTXi5NQ0hDUE02SAoBjUJVRjALSAxFQ1JXcABFQ1JXoB1eLk1DSENQTTBIikJVRjALtAFG
MExOcABGMExOoCCTXi5NQ0hDUE0wSAoBjUJVRjALGA1GMFJXcABGMFJXikJVRjALwgFNMU1OikJV
RjALxgFNMU1YikJVRjALzgFNMUxOeV4uTUNIQ1RMVUQKFE0xTU5ydE0xTVhNMU1OAAoBTTFMTqRC
VUYwFEoXX09TQwSKawoAQ0RXMaBLFZNoERMKEFtN2zP3HxxAlld0QcA912agRROSlWoKAwhTVVBQ
CgAIQ1RSTAoAcAoDYIprCgRDRFcyimsKCENEVzNwQ0RXMlNVUFBwQ0RXM0NUUkx7Q1RSTAodQ1RS
TKAYkpN7U1VQUAoWAAoWe0NUUkwKHkNUUkygRAqSe0NEVzEKAQCgDntDVFJMCgEAe2AKDmCgI3tD
VFJMCgQAe2AKDWBcLwRfU0JfUENJMExQQ0JHUE1ECgCgKXtDVFJMChAAcA1QQ0kwLl9PU0MgUENJ
LUUgY2FwIGJpdCBzZXQAWzFcLwRfU0JfUENJMFJQMDNTTVBDYFwvBF9TQl9QQ0kwUlAwNVNNUENg
XC8EX1NCX1BDSTBSUDA2U01QQ2CgEJKTaQF9Q0RXMQoIQ0RXMaAWkpNDRFczQ1RSTH1DRFcxChBD
RFcxcENUUkxDRFczoQx9Q0RXMQoCQ0RXMaEMfUNEVzEKBENEVzGkaxRCN19QUlQAoEURR1BJQ6QS
TRATEg0EDP//AQAKAAoAChASDQQM//8CAAoACgAKEBINBAz//wcACgAKAAoQEg0EDP//GgAKAAoA
ChQSDQQM//8aAAoBCgAKEBINBAz//xoACgIKAAoVEg0EDP//GwAKAAoAChQSDQQM//8cAAoACgAK
EBINBAz//xwACgEKAAoREg0EDP//HAAKAgoAChISDQQM//8cAAoDCgAKExINBAz//x0ACgAKAAoQ
Eg0EDP//HQAKAQoAChISDQQM//8dAAoCCgAKFRINBAz//x0ACgMKAAoUEg0EDP//HwAKAAoAChUS
DQQM//8fAAoBCgAKEhINBAz//x8ACgIKAAoUEg0EDP//HwAKAwoAChChRCWkEkAlExIeBAz//wEA
CgBcLwRfU0JfUENJMExQQ0JMTktBCgASHgQM//8CAAoAXC8EX1NCX1BDSTBMUENCTE5LQQoAEh4E
DP//BwAKAFwvBF9TQl9QQ0kwTFBDQkxOS0EKABIeBAz//xoACgBcLwRfU0JfUENJMExQQ0JMTktF
CgASHgQM//8aAAoBXC8EX1NCX1BDSTBMUENCTE5LQQoAEh4EDP//GgAKAlwvBF9TQl9QQ0kwTFBD
QkxOS0YKABIeBAz//xsACgBcLwRfU0JfUENJMExQQ0JMTktFCgASHgQM//8cAAoAXC8EX1NCX1BD
STBMUENCTE5LQQoAEh4EDP//HAAKAVwvBF9TQl9QQ0kwTFBDQkxOS0IKABIeBAz//xwACgJcLwRf
U0JfUENJMExQQ0JMTktDCgASHgQM//8cAAoDXC8EX1NCX1BDSTBMUENCTE5LRAoAEh4EDP//HQAK
AFwvBF9TQl9QQ0kwTFBDQkxOS0EKABIeBAz//x0ACgFcLwRfU0JfUENJMExQQ0JMTktDCgASHgQM
//8dAAoCXC8EX1NCX1BDSTBMUENCTE5LRgoAEh4EDP//HQAKA1wvBF9TQl9QQ0kwTFBDQkxOS0UK
ABIeBAz//x8ACgBcLwRfU0JfUENJMExQQ0JMTktGCgASHgQM//8fAAoBXC8EX1NCX1BDSTBMUENC
TE5LQwoAEh4EDP//HwAKAlwvBF9TQl9QQ0kwTFBDQkxOS0UKABIeBAz//x8ACgNcLwRfU0JfUENJ
MExQQ0JMTktBCgBbgkUWUERSQwhfSElEDEHQDAIIX1VJRAoBCEJVRjARSgUKVoYJAAEAAAAAAEAA
AIYJAAEAAAAAAEAAAIYJAAEAAAAAABAAAIYJAAEAAAAAABAAAIYJAAEAAAAAAAAAAIYJAAEAANL+
AAACAIYJAAEAUNT+ALAEAHkAFE0OX0NSUwiKQlVGMAoEUkJSMHlcLwRfU0JfUENJMExQQ0JSQ0JB
Cg5SQlIwikJVRjAKEE1CUjB5XC8EX1NCX1BDSTBNQ0hDTUhCUgoOTUJSMIpCVUYwChxEQlIweVwv
BF9TQl9QQ0kwTUNIQ0RJQlIKDERCUjCKQlVGMAooRUJSMHlcLwRfU0JfUENJME1DSENFUEJSCgxF
QlIwikJVRjAKNFhCUjB5XC8EX1NCX1BDSTBNQ0hDUFhCUgoaWEJSMIpCVUYwCjhYU1owegwAAAAQ
XC8EX1NCX1BDSTBNQ0hDUFhTWlhTWjCkQlVGMFuCSiVQRUdQCF9BRFIMAAABABRNC19QUlQAoDlH
UElDpBIyBBILBAv//woACgAKEBILBAv//woBCgAKERILBAv//woCCgAKEhILBAv//woDCgAKE6FL
B6QSRwcEEhwEC///CgBcLwRfU0JfUENJMExQQ0JMTktBCgASHAQL//8KAVwvBF9TQl9QQ0kwTFBD
QkxOS0IKABIcBAv//woCXC8EX1NCX1BDSTBMUENCTE5LQwoAEhwEC///CgNcLwRfU0JfUENJMExQ
Q0JMTktECgBbgkoYR0ZYMAhfQURSCgAUEF9ET1MBcHtoCgMARFNFThQZX0RPRACkEhEDDAAEAYAM
AAIBgAwAAwGAFEEFRFNTXwGgSQSTe2gMAAAAwAAMAAAAgKAVe05TVEUKAwB7C/3/TlNURU5TVEWg
EHtOU1RFCgEAcAoBR1AzN6EIcAoAR1AzN3BOU1RFQ1NURVuCJExDRF8UCl9BRFIIpAsABBQJX0RD
UwCkCh8UCV9ER1MApAoBW4JLBlZHQV8UCl9BRFIIpAsAAxQWX0RDUwCgDHtDU1RFCgEApAofpAod
FBZfREdTAKAMe05TVEUKAQCkCgGkCgAUK19EU1MBoBF7aAoBAH0KAU5TVEVOU1RFoQ17C/7/TlNU
RU5TVEVEU1NfaFuCSwZUVl9fFApfQURSCKQLAAIUFl9EQ1MAoAx7Q1NURQoCAKQKH6QKHRQWX0RH
UwCgDHtOU1RFCgIApAoBpAoAFCtfRFNTAaARe2gKAQB9CgJOU1RFTlNURaENewv9/05TVEVOU1RF
RFNTX2hbgg9IREVGCF9BRFIMAAAbAFuCRhpSUDAzCF9BRFIMAgAcAFuAUDNDUwIKQAsAAVuBRQRQ
M0NTQABACQANTEFTMwEAMkFCUDMBAAJQREMzAQACUERTMwEAAUxTQzMBACcAEFBTUDMBAE88AB5I
UFMzAVBNUzMBW4BQM0NFAgrYCgRbgQ1QM0NFAAAeTVBDRQJbgjxFWENECF9BRFIKAAhfU1VOCgMU
CV9STVYApAoBCF9FSkQNXF9TQi5QQ0kwLkVIQzIuSFVCMi5QUlQzABQrU01QQwGgJJNSUDNECgB7
aAoDTVBDRaATkntoCgEAcAFBQlAzcAFQREMzFE4LX1BSVACgOlxHUElDpBIyBBILBAv//woACgAK
EhILBAv//woBCgAKExILBAv//woCCgAKEBILBAv//woDCgAKEaFLB6QSRwcEEhwEC///CgBcLwRf
U0JfUENJMExQQ0JMTktDCgASHAQL//8KAVwvBF9TQl9QQ0kwTFBDQkxOS0QKABIcBAv//woCXC8E
X1NCX1BDSTBMUENCTE5LQQoAEhwEC///CgNcLwRfU0JfUENJMExQQ0JMTktCCgBbgk0aUlAwNQhf
QURSDAQAHABbgFA1Q1MCCkALAAFbgUoEUDVDU0BTQlNSAQBPCAANTEFTNQEAMkFCUDUBAAJQREM1
AQACUERTNQEAAUxTQzUBACcAEFBTUDUBAE88AB5IUFM1AVBNUzUBW4BQNUNFAgrYCgRbgQ1QNUNF
AAAeTVBDRQJbgj5BUlBUCF9BRFIKAAhfUFJXEgYCCgkKAwhfU1VOCgUIX0VKRA1cX1NCLlBDSTAu
RUhDMS5IVUIxLlBSVDIAFCtTTVBDAaAkk1JQNUQKAHtoCgNNUENFoBOSe2gKAQBwAUFCUDVwAVBE
QzUUTgtfUFJUAKA6XEdQSUOkEjIEEgsEC///CgAKAAoQEgsEC///CgEKAAoREgsEC///CgIKAAoS
EgsEC///CgMKAAoToUsHpBJHBwQSHAQL//8KAFwvBF9TQl9QQ0kwTFBDQkxOS0EKABIcBAv//woB
XC8EX1NCX1BDSTBMUENCTE5LQgoAEhwEC///CgJcLwRfU0JfUENJMExQQ0JMTktDCgASHAQL//8K
A1wvBF9TQl9QQ0kwTFBDQkxOS0QKAFuCSBtSUDA2CF9BRFIMBQAcAFuAUDZDUwIKQAsAAVuBRQRQ
NkNTQABACQANTEFTNgEAMkFCUDYBAAJQREM2AQACUERTNgEAAUxTQzYBACcAEFBTUDYBAE88AB5I
UFM2AVBNUzYBW4BQNkNFAgrYCgRbgQ1QNkNFAAAeTVBDRQJbgk4ER0lHRQhfQURSCgAIX1BSVxIG
AgoJCgMUNEVXT0wBoBCTaAoBfUdQOV8KAUdQOV+hDHtHUDlfCgBHUDlfoAqTaEdQOV+kCgChBKQK
ARQrU01QQwGgJJNSUDZECgB7aAoDTVBDRaATkntoCgEAcAFBQlA2cAFQREM2FE4LX1BSVACgOlxH
UElDpBIyBBILBAv//woACgAKERILBAv//woBCgAKEhILBAv//woCCgAKExILBAv//woDCgAKEKFL
B6QSRwcEEhwEC///CgBcLwRfU0JfUENJMExQQ0JMTktCCgASHAQL//8KAVwvBF9TQl9QQ0kwTFBD
QkxOS0MKABIcBAv//woCXC8EX1NCX1BDSTBMUENCTE5LRAoAEhwEC///CgNcLwRfU0JfUENJMExQ
Q0JMTktBCgBbgkcKVUhDMQhfQURSDAAAHQBbgFUxQ1MCCsQKBFuBC1UxQ1MDVTFFTgJbgkMESFVC
MQhfQURSCgBbggxQUlQxCF9BRFIKAVuCJlBSVDIIX0FEUgoCCF9FSkQNXF9TQi5QQ0kwLlJQMDUu
QVJQVAAIX1BSVxIGAgoDCgMUGV9QU1cBoAlocAoDVTFFTqEIcAoAVTFFThQJX1MzRACkCgMUCV9T
NEQApAoDW4JMCFVIQzIIX0FEUgwBAB0AW4BVMkNTAgrECgRbgQtVMkNTA1UyRU4CW4IoSFVCMghf
QURSCgBbggxQUlQxCF9BRFIKAVuCDFBSVDIIX0FEUgoCCF9QUlcSBgIKBAoDFBlfUFNXAaAJaHAK
A1UyRU6hCHAKAFUyRU4UCV9TM0QApAoDFAlfUzREAKQKA1uCTAhVSEMzCF9BRFIMAgAdAFuAVTJD
UwIKxAoEW4ELVTJDUwNVM0VOAluCKEhVQjMIX0FEUgoAW4IMUFJUMQhfQURSCgFbggxQUlQyCF9B
RFIKAghfUFJXEgYCCgwKAxQZX1BTVwGgCWhwCgNVM0VOoQhwCgBVM0VOFAlfUzNEAKQKAxQJX1M0
RACkCgNbgkwIVUhDNAhfQURSDAAAGgBbgFU0Q1MCCsQKBFuBC1U0Q1MDVTRFTgJbgihIVUI0CF9B
RFIKAFuCDFBSVDEIX0FEUgoBW4IMUFJUMghfQURSCgIIX1BSVxIGAgoOCgMUGV9QU1cBoAlocAoD
VTRFTqEIcAoAVTRFThQJX1MzRACkCgMUCV9TNEQApAoDW4JHClVIQzUIX0FEUgwBABoAW4BVNUNT
AgrECgRbgQtVNUNTA1U1RU4CW4JDBEhVQjUIX0FEUgoAW4ImUFJUMQhfQURSCgEIX0VKRA1cX1NC
LlBDSTAuUlAwMy5FWENEAFuCDFBSVDIIX0FEUgoCCF9QUlcSBgIKBQoDFBlfUFNXAaAJaHAKA1U1
RU6hCHAKAFU1RU4UCV9TM0QApAoDFAlfUzREAKQKA1uCQhNFSEMxCF9BRFIMBwAdAFuAVTdDUwIK
VAoEW4ENVTdDUwMAD1BNRVMBW4JLB0hVQjEIX0FEUgoAW4IMUFJUMQhfQURSCgFbgiZQUlQyCF9B
RFIKAghfRUpEDVxfU0IuUENJMC5SUDA1LkFSUFQAW4IMUFJUMwhfQURSCgNbggxQUlQ0CF9BRFIK
BFuCDFBSVDUIX0FEUgoFW4IMUFJUNghfQURSCgYIX1BSVxIGAgoNCgMUCV9TM0QApAoDFAlfUzRE
AKQKAxRKBl9EU00EcBJEBQcNQUFQTCxjdXJyZW50LWF2YWlsYWJsZQAL3AUNQUFQTCxjdXJyZW50
LWV4dHJhAAvoAw1BQVBMLGN1cnJlbnQtaW4tc2xlZXAAC9wFEQQKAQBgRFRHUGhpamtxYKRgW4JG
EUVIQzIIX0FEUgwHABoAW4BVRkNTAgpUCgRbgQ1VRkNTAwAPUE1FUwFbgk8FSFVCMghfQURSCgBb
ggxQUlQxCF9BRFIKAVuCDFBSVDIIX0FEUgoCW4ImUFJUMwhfQURSCgMIX0VKRA1cX1NCLlBDSTAu
UlAwMy5FWENEAFuCDFBSVDQIX0FEUgoECF9QUlcSBgIKDQoDFAlfUzNEAKQKAxQJX1M0RACkCgMU
SgZfRFNNBHASRAUHDUFBUEwsY3VycmVudC1hdmFpbGFibGUAC9wFDUFBUEwsY3VycmVudC1leHRy
YQAL6AMNQUFQTCxjdXJyZW50LWluLXNsZWVwAAvcBREECgEAYERUR1BoaWprcWCkYFuCSy9QQ0lC
CF9BRFIMAAAeAFuAU0JSVAIKPgoCW4EPU0JSVAIABlBSU1QBAAkURwpfUFMwCKBPCU9TRFdwDVBD
SUIgRDAgRW50cnkAWzFwXC8EX1NCX1BDSTBTQlVTU1JEQgrSCoNgoEwFk3tgCggACgBwCgFQUlNU
fWAKCGCgOpJcLwRfU0JfUENJMFNCVVNTV1JCCtIKg2BwDVBDSUI6IFNldHRpbmcgQ2xvY2sgRmFp
bGVkIQBbMVsiCgpwCgBQUlNUcA1QQ0lCIEQwIEV4aXQAWzEUSghfUFMzCKBCCE9TRFdwDVBDSUIg
RDMgRW50cnkAWzFwXC8EX1NCX1BDSTBTQlVTU1JEQgrSCoNge2AK92CgOpJcLwRfU0JfUENJMFNC
VVNTV1JCCtIKg2BwDVBDSUI6IFNldHRpbmcgQ2xvY2sgRmFpbGVkIQBbMXANUENJQiBEMyBFeGl0
AFsxW4IWRlJXUghfQURSDAAAAwAIX0dQRQoRFEMYX1BSVACgSwdHUElDpBJDBwgSDQQM//8DAAoA
CgAKExINBAz//wMACgEKAAoTEg0EDP//AwAKAgoAChMSDQQM//8DAAoDCgAKExINBAz//wQACgAK
AAoUEg0EDP//BAAKAQoAChQSDQQM//8EAAoCCgAKFBINBAz//wQACgMKAAoUoU8PpBJLDwgSHgQM
//8DAAoAXC8EX1NCX1BDSTBMUENCTE5LRAoAEh4EDP//AwAKAVwvBF9TQl9QQ0kwTFBDQkxOS0QK
ABIeBAz//wMACgJcLwRfU0JfUENJMExQQ0JMTktECgASHgQM//8DAAoDXC8EX1NCX1BDSTBMUENC
TE5LRAoAEh4EDP//BAAKAFwvBF9TQl9QQ0kwTFBDQkxOS0UKABIeBAz//wQACgFcLwRfU0JfUENJ
MExQQ0JMTktFCgASHgQM//8EAAoCXC8EX1NCX1BDSTBMUENCTE5LRQoAEh4EDP//BAAKA1wvBF9T
Ql9QQ0kwTFBDQkxOS0UKAFuChQwBTFBDQghfQURSDAAAHwBbgExQQzACCkAKwFuBSgVMUEMwAABA
EFBBUkMIUEJSQwhQQ1JDCFBEUkMIACBQRVJDCFBGUkMIUEdSQwhQSFJDCABACklPRDAISU9EMQgA
QA8AClhQTUUBAEUnUkFFTgEADVJDQkESFAxHUE1EAXBoWFBNRVuCRQpMTktBCF9ISUQMQdAMDwhf
VUlECgEUDV9ESVMIcAqAUEFSQwhfUFJTEQkKBiP61Bh5ABQ6X0NSUwgIUlRMQREJCgYjAAAYeQCL
UlRMQQoBSVJRMHAASVJRMHkKAXtQQVJDCg8ASVJRMKRSVExBFBxfU1JTCYtoCgFJUlEwgklSUTBg
dmBwYFBBUkMUGF9TVEEIoAx7UEFSQwqAAKQKCaEEpAoLW4JFCkxOS0IIX0hJRAxB0AwPCF9VSUQK
AhQNX0RJUwhwCoBQQlJDCF9QUlMRCQoGI/rYGHkAFDpfQ1JTCAhSVExCEQkKBiMAABh5AItSVExC
CgFJUlEwcABJUlEweQoBe1BCUkMKDwBJUlEwpFJUTEIUHF9TUlMJi2gKAUlSUTCCSVJRMGB2YHBg
UEJSQxQYX1NUQQigDHtQQlJDCoAApAoJoQSkCgtbgkUKTE5LQwhfSElEDEHQDA8IX1VJRAoDFA1f
RElTCHAKgFBDUkMIX1BSUxEJCgYj+tQYeQAUOl9DUlMICFJUTEMRCQoGIwAAGHkAi1JUTEMKAUlS
UTBwAElSUTB5CgF7UENSQwoPAElSUTCkUlRMQxQcX1NSUwmLaAoBSVJRMIJJUlEwYHZgcGBQQ1JD
FBhfU1RBCKAMe1BDUkMKgACkCgmhBKQKC1uCRQpMTktECF9ISUQMQdAMDwhfVUlECgQUDV9ESVMI
cAqAUERSQwhfUFJTEQkKBiP62Bh5ABQ6X0NSUwgIUlRMRBEJCgYjAAAYeQCLUlRMRAoBSVJRMHAA
SVJRMHkKAXtQRFJDCg8ASVJRMKRSVExEFBxfU1JTCYtoCgFJUlEwgklSUTBgdmBwYFBEUkMUGF9T
VEEIoAx7UERSQwqAAKQKCaEEpAoLW4JFCkxOS0UIX0hJRAxB0AwPCF9VSUQKBRQNX0RJUwhwCoBQ
RVJDCF9QUlMRCQoGI/rUGHkAFDpfQ1JTCAhSVExFEQkKBiMAABh5AItSVExFCgFJUlEwcABJUlEw
eQoBe1BFUkMKDwBJUlEwpFJUTEUUHF9TUlMJi2gKAUlSUTCCSVJRMGB2YHBgUEVSQxQYX1NUQQig
DHtQRVJDCoAApAoJoQSkCgtbgkUKTE5LRghfSElEDEHQDA8IX1VJRAoGFA1fRElTCHAKgFBGUkMI
X1BSUxEJCgYj+tgYeQAUOl9DUlMICFJUTEYRCQoGIwAAGHkAi1JUTEYKAUlSUTBwAElSUTB5CgF7
UEZSQwoPAElSUTCkUlRMRhQcX1NSUwmLaAoBSVJRMIJJUlEwYHZgcGBQRlJDFBhfU1RBCKAMe1BG
UkMKgACkCgmhBKQKC1uCRQpMTktHCF9ISUQMQdAMDwhfVUlECgcUDV9ESVMIcAqAUEdSQwhfUFJT
EQkKBiP61Bh5ABQ6X0NSUwgIUlRMRxEJCgYjAAAYeQCLUlRMRwoBSVJRMHAASVJRMHkKAXtQR1JD
Cg8ASVJRMKRSVExHFBxfU1JTCYtoCgFJUlEwgklSUTBgdmBwYFBHUkMUGF9TVEEIoAx7UEdSQwqA
AKQKCaEEpAoLW4JFCkxOS0gIX0hJRAxB0AwPCF9VSUQKCBQNX0RJUwhwCoBQSFJDCF9QUlMRCQoG
I/rYGHkAFDpfQ1JTCAhSVExIEQkKBiMAABh5AItSVExICgFJUlEwcABJUlEweQoBe1BIUkMKDwBJ
UlEwpFJUTEgUHF9TUlMJi2gKAUlSUTCCSVJRMGB2YHBgUEhSQxQYX1NUQQigDHtQSFJDCoAApAoJ
oQSkCgtbgk8KU01DXwhfSElEDAYQAAEIX0NJRA1zbWMtc2FudGFyb3NhAAhfU1RBCgsIX0NSUxEQ
Cg1HAQADAAMBICJAAHkAW4JNBEFMUzAIX0hJRA1BQ1BJMDAwOAAIX0NJRA1zbWMtYWxzABQKX0FM
SQCkCywBCF9BTFISGQMSBgIKRgoAEgcCCmQLLAESBwIKlgvoA1uCHVNNUzAIX0hJRAwGEAADCF9D
SUQNc21jLXNtcwBbgkY+RUNfXwhfSElEDEHQDAkIX0NSUxEVChJHAWIAYgAAAUcBZgBmAAABeQAI
X0dQRQoXCF9QUlcSBgIKGAoDCEVDT0sKAFuARUNPUgMKAAr/W4FBB0VDT1IRRUNWUwhMU1RFAVJQ
V1IBQ0RJTgEABUxXQUsBQUNXSwFDRFdLAQAFAEgGRUNTUwhQTElNCABAB1NQVFIIU1NUUwhTQURS
CFNDTUQIU0JGUkAQU0NOVAhTQUFECFNBRDAIU0FEMQhTTVVYCFuBFkVDT1IRAEASU0JEVxAAQBBT
QURXEFuCRRhTTUIwCF9ISUQNQUNQSTAwMDEACF9FQ18LECBbAVNNVFgAFBRfU1RBAKAIT1NEV6QK
D6EEpAoAW4IbU0JTMAhfSElEDUFDUEkwMDAyAAhfU0JTCgEUJ1NCUEMBcGhgohpgoBGTU1BUUgoA
pHtTU1RTCh8AWyIKAXZgpAoYFE8HU0JSVwNwAWCgQgeSWyNcLwZfU0JfUENJMExQQ0JFQ19fU01C
MFNNVFj//6Ayk1NQVFIKAHB5aAoBAFNBRFJwaVNDTURwCglTUFRScFNCUEML6ANgoAmSYHBTQkRX
alsnXC8GX1NCX1BDSTBMUENCRUNfX1NNQjBTTVRYpGAURghTQlJCA3ABYHARBAoBAGGgQgeSWyNc
LwZfU0JfUENJMExQQ0JFQ19fU01CMFNNVFj//6Ayk1NQVFIKAHB5aAoBAFNBRFJwaVNDTURwCgtT
UFRScFNCUEML6ANgoAmSYHBTQkZSalsnXC8GX1NCX1BDSTBMUENCRUNfX1NNQjBTTVRYpGAUTwlf
UTEwAKAfT1NEV4ZcLwVfU0JfUENJMExQQ0JFQ19fU01CMAqAoUcHoEQHe1NTVFMKQACgSQaSWyNc
LwZfU0JfUENJMExQQ0JFQ19fU01CMFNNVFj//3B6U0FBRAoBAGCgGJNgCgpcLwNfU0JfQkFUMEJO
T1RTQURXcAoAU1NUU1snXC8GX1NCX1BDSTBMUENCRUNfX1NNQjBTTVRYFBxfUTIwAHBMU1RFTElE
U4ZcLl9TQl9MSUQwCoAULV9RMjEAoAxSUFdScAoBUFdSU6EIcAoAUFdSU4ZcLl9TQl9BRFAxCoBQ
Tk9UFBNfUTVBAIZcLl9TQl9TTFBCCoAUCl9RODAAUE5PVBQyX1FDRACgF0NESU6GXC8DX1NCX1BD
STBQQVRBCoGhE4ZcLwNfU0JfUENJMFBBVEEKghRGBF9SRUcCcGlFQ09LoDGTaQoBcExTVEVMSURT
hlwuX1NCX0xJRDAKgHBSUFdSUFdSU4ZcLl9TQl9BRFAxCoBwCgBFQ1NTEEo4XF9TQl9bgkE4QkFU
MAhfSElEDEHQDAoIX1VJRAoACF9QQ0wSBwFcX1NCXwhCU1NXC///CFBCSUYSKQ0KAAz/////DP//
//8KAQz/////CvoKZAoKCgoNIAANIAANIAANIAAIUEJTVBITBAoADP////8M/////wz/////FEQE
X1NUQQCgCE9TRFekCgCgLlwvBV9TQl9QQ0kwTFBDQkVDX19FQ09LVUJTU6AMe0JTU1cKAQCkCh+h
BKQKD6EEpAoPFEMEX0JTVACgDXtCU1NXCgEAVUJTVKEocAoAiFBCU1QKAABwDP////+IUEJTVAoB
AHAM/////4hQQlNUCgIApFBCU1QUGV9CSUYAoA17QlNTVwoBAFVCSUakUEJJRhQ2Qk5PVAFwQlNT
V2BwaEJTU1eGXC5fU0JfQkFUMAqAoBZ7f2BoAAoBAIZcLl9TQl9CQVQwCoEUKlVCU1MAXC8GX1NC
X1BDSTBMUENCRUNfX1NNQjBTQlJXCgoKAXFCU1NXFEsRVUJJRgBcLwZfU0JfUENJMExQQ0JFQ19f
U01CMFNCUlcKCwoYcWB3YAoKiFBCSUYKAQBcLwZfU0JfUENJMExQQ0JFQ19fU01CMFNCUlcKCwoQ
cWB3YAoKiFBCSUYKAgBcLwZfU0JfUENJMExQQ0JFQ19fU01CMFNCUlcKCwoZcWBwYIhQQklGCgQA
XC8GX1NCX1BDSTBMUENCRUNfX1NNQjBTQlJCCgsKIXFgcGCIUEJJRgoJAHARBAoBAIhQQklGCgoA
XC8GX1NCX1BDSTBMUENCRUNfX1NNQjBTQlJCCgsKInFgcGCIUEJJRgoLAFwvBl9TQl9QQ0kwTFBD
QkVDX19TTUIwU0JSQgoLCiBxYHBgiFBCSUYKDAAUSw5VQlNUAFwvBl9TQl9QQ0kwTFBDQkVDX19T
TUIwU0JSVwoLCglxYnBiiFBCU1QKAwBcLwZfU0JfUENJMExQQ0JFQ19fU01CMFNCUlcKCwoKcWCg
EXtgCwCAAIBgYHt1YAv//2B3YGJgeGAL6AMAiFBCU1QKAQBcLwZfU0JfUENJMExQQ0JFQ19fU01C
MFNCUlcKCwoPcWB3YAoKiFBCU1QKAgBwCgBhoDJQV1JTXC8GX1NCX1BDSTBMUENCRUNfX1NNQjBT
QlJXCgsKFnFgoAuSe2AKQABwCgJhoQVwCgFhcGGIUEJTVAoAAFuCPURNQUMIX0hJRAxB0AIACF9D
UlMRKAolRwEAAAAAASBHAYEAgQABEUcBkwCTAAENRwHAAMAAASAqEAF5AFuCJkZXSEQIX0hJRAwl
1AgACF9DUlMREQoOhgkAAAAAAP8AAAABeQBbgkgLSFBFVAhfSElEDEHQAQMIX0NJRAxB0AwBCEJV
RjARFwoUIgEAIgABhgkAAAAA0P4ABAAAeQAUKF9TVEEAoBOSlU9TWVML0QegCEhQQUWkCg+hCqAI
SFBBRaQKC6QKABRHBV9DUlMIoEoESFBBRYpCVUYwCgpIUFQwoBKTSFBBUwoBcAwAEND+SFBUMKAS
k0hQQVMKAnAMACDQ/khQVDCgEpNIUEFTCgNwDAAw0P5IUFQwpEJVRjBbgkUKSVBJQwhfSElEC0HQ
CF9DUlMRQQkKjUcBIAAgAAECRwEkACQAAQJHASgAKAABAkcBLAAsAAECRwEwADAAAQJHATQANAAB
AkcBOAA4AAECRwE8ADwAAQJHAaAAoAABAkcBpACkAAECRwGoAKgAAQJHAawArAABAkcBsACwAAEC
RwG0ALQAAQJHAbgAuAABAkcBvAC8AAECRwHQBNAEAQIiBAB5AFuCJU1BVEgIX0hJRAxB0AwECF9D
UlMREAoNRwHwAPAAAQEiACB5AFuCQwpMRFJDCF9ISUQMQdAMAghfVUlECgIIX0NSUxFGCAqCRwEu
AC4AAQJHAU4ATgABAkcBYQBhAAEBRwFjAGMAAQFHAWUAZQABAUcBZwBnAAEBRwFwAHAAAQFHAYAA
gAABAUcBkgCSAAEBRwGyALIAAQJHAYAGgAYBIEcBAAgACAEQRwEQCBAIAQhHAQAEAAQBgEcBAAUA
BQFARwFAFkAWARB5AFuCIlJUQ18IX0hJRAxB0AsACF9DUlMRDQoKRwFwAHAAAQh5AFuCKlRJTVII
X0hJRAxB0AEACF9DUlMRFQoSRwFAAEAAAQRHAVAAUAAQBHkAW4JJe1BBVEEIX0FEUgwBAB8ACF9D
SUQNbWVkaWEtbm90aWZ5ABQUX1BTQwigCEdQNV+kCgOhBKQKABRHB19QUzAIoE8GR1A1X3ANUEFU
QSBEMCBFbnRyeQBbMXtHRDU0CgBHRDU0e0dQNTQKAEdQNTR7R1A0MAoAR1A0MHtHUDVfCgBHUDVf
WyIKFH1HUDU0CgFHUDU0e0dENTQKAUdENTRwDVBBVEEgRDAgRXhpdABbMRRGBV9QUzMIcA1QQVRB
IEQzIEVudHJ5AFsxe0dENTQKAEdENTR7R1A1NAoAR1A1NH1HUDVfCgFHUDVffUdQNDAKAUdQNDBw
DVBBVEEgRDMgRXhpdABbMVuAUEFDUwIKQArAW4FJBFBBQ1MDUFJJVBAAEFBTSVQEABxTWU5DBAAM
U0RUMAIAAlNEVDECAEoESUNSMARJQ1IxBElDUjIESUNSMwRJQ1I0BElDUjUEW4JKZVBSSUQIX0FE
UgoAFEYXX0dUTQAIUEJVRhEXChQAAAAAAAAAAAAAAAAAAAAAAAAAAIpQQlVGCgBQSU8wilBCVUYK
BERNQTCKUEJVRgoIUElPMYpQQlVGCgxETUExilBCVUYKEEZMQUdwR0VUUFBSSVRQSU8wcEdETUF7
U1lOQwoBAHtJQ1IzCgEAe0lDUjAKAQBTRFQwe0lDUjEKAQBETUEwoBSTRE1BMAz/////cFBJTzBE
TUEwoC57UFJJVAsAQACgFJN7UFJJVAqQAAqAcAuEA1BJTzGhDnBHRVRUUFNJVFBJTzGhC3AM////
/1BJTzFwR0RNQXtTWU5DCgIAe0lDUjMKAgB7SUNSMAoCAFNEVDF7SUNSMQoCAERNQTGgFJNETUEx
DP////9wUElPMURNQTFwR0VURntTWU5DCgEAe1NZTkMKAgBQUklURkxBR6Ase5NQSU8wDP////+T
RE1BMAz/////AHAKeFBJTzBwChRETUEwcAoDRkxBR6RQQlVGFEorX1NUTQOKaAoAUElPMIpoCgRE
TUEwimgKCFBJTzGKaAoMRE1BMYpoChBGTEFHoEcSk4dpCwACe1BSSVQL8MBQUklUe1NZTkMKAlNZ
TkNwCgBTRFQwe0lDUjAKAklDUjB7SUNSMQoCSUNSMXtJQ1IzCgJJQ1Ize0lDUjUKAklDUjWLaQpi
VzQ5MItpCmpXNTMwi2kKflc2MzCLaQqAVzY0MItpCrBXODgwi2kKulc5MzB9UFJJVAsEgFBSSVSg
HpB7RkxBRwoCAHtXNDkwCwAIAH1QUklUCgJQUklUfVBSSVRTRVRQUElPMFc1MzBXNjQwUFJJVKBA
BntGTEFHCgEAfVNZTkMKAVNZTkNwU0RNQURNQTBTRFQwoBOVRE1BMAoefUlDUjMKAUlDUjOgE5VE
TUEwCjx9SUNSMAoBSUNSMKAVe1c5MzALACAAfUlDUjEKAUlDUjGgQhaTh2oLAAJ7UFJJVAsPv1BS
SVRwCgBQU0lUe1NZTkMKAVNZTkNwCgBTRFQxe0lDUjAKAUlDUjB7SUNSMQoBSUNSMXtJQ1IzCgFJ
Q1Ize0lDUjUKAUlDUjWLagpiVzQ5MYtqCmpXNTMxi2oKflc2MzGLagqAVzY0MYtqCrBXODgxi2oK
ulc5MzF9UFJJVAtAgFBSSVSgHpB7RkxBRwoIAHtXNDkxCwAIAH1QUklUCiBQUklUoEwEe0ZMQUcK
EAB9UFJJVAsAQFBSSVSgE5RQSU8xCvB9UFJJVAqAUFJJVKEhfVBSSVQKEFBSSVRwU0VUVFBJTzFX
NTMxVzY0MVBTSVSgQAZ7RkxBRwoEAH1TWU5DCgJTWU5DcFNETUFETUExU0RUMaATlURNQTEKHn1J
Q1IzCgJJQ1IzoBOVRE1BMQo8fUlDUjAKAklDUjCgFXtXOTMxCwAgAH1JQ1IxCgJJQ1IxW4JOEFBf
RDAIX0FEUgoAFEAQX0dURgAIUElCMBERCg4DAAAAAKDvAwAAAACg74xQSUIwCgFQTUQwjFBJQjAK
CERNRDCgQAZ7UFJJVAoCAKATk3tQUklUCgkACghwCghQTUQwoUEEcAoKUE1EMHp7UFJJVAsAAwAK
CGB6e1BSSVQLADAACgxhcmBhYqAMkwoDYnAKC1BNRDCgDJMKBWJwCgxQTUQwoQhwCgFQTUQwoEcE
e1NZTkMKAQBwfVNEVDAKQABETUQwoC97SUNSMQoBAKAUe0lDUjAKAQByRE1EMAoCRE1EMKAQe0lD
UjMKAQBwCkVETUQwoRR9dHtQTUQwCgcACgIACiBETUQwpFBJQjBbgkkQUF9EMQhfQURSCgEUSw9f
R1RGAAhQSUIxEREKDgMAAAAAsO8DAAAAALDvjFBJQjEKAVBNRDGMUElCMQoIRE1EMaBLBXtQUklU
CiAAoBOTe1BSSVQKkAAKgHAKCFBNRDGhPHJ7UFNJVAoDAHp7UFNJVAoMAAoCAGCgDJMKBWBwCgxQ
TUQxoRegDJMKA2BwCgtQTUQxoQhwCgpQTUQxoQhwCgFQTUQxoEcEe1NZTkMKAgBwfVNEVDEKQABE
TUQxoC97SUNSMQoCAKAUe0lDUjAKAgByRE1EMQoCRE1EMaAQe0lDUjMKAgBwCkVETUQxoRR9dHtQ
TUQxCgcACgIACiBETUQxpFBJQjFbgkQIU0FUQQhfQURSDAIAHwBbgFNBQ1MCCkAKwFuBRwZTQUNT
A1BSSVQQU0VDVBBQU0lUBFNTSVQEABhTWU5DBAAMU0RUMAIAAlNEVDECAAJTRFQyAgACU0RUMwIA
QgRJQ1IwBElDUjEESUNSMgRJQ1IzBElDUjQESUNSNQQASBxNQVBWAluCTD5TQlVTCF9BRFIMAwAf
AFuAU01CUAIKQArAW4ENU01CUAMAAkkyQ0UBW4BTTUJFAgoECgJbgQtTTUJFAElPU0UBW4BTTUJJ
AQug7woQW4E6U01CSQFIU1RTCAAISENPTghIQ09NCFRYU0EIREFUMAhEQVQxCEhCRFIIUEVDUghS
WFNBCFNEQVQQFA1FTkFCAHAKAUlPU0UUSARTU1hCCqAIU1RSVKQKAHAKAEkyQ0VwCr9IU1RTcGhU
WFNBcGlIQ09NcApISENPTqATQ09NUH1IU1RTCv9IU1RTpAoBpAoAFEoEU1JYQgmgCVNUUlSkC///
cAoASTJDRXAKv0hTVFNwfWgKAQBUWFNBcApESENPTqAVQ09NUH1IU1RTCv9IU1RTpERBVDCkC///
FE4EU1dSQgugCFNUUlSkCgBwCgBJMkNFcAq/SFNUU3BoVFhTQXBpSENPTXBqREFUMHAKSEhDT06g
E0NPTVB9SFNUUwr/SFNUU6QKAaQKABRABVNSREIKoAlTVFJUpAv//3AKAEkyQ0VwCr9IU1RTcH1o
CgEAVFhTQXBpSENPTXAKSEhDT06gFUNPTVB9SFNUUwr/SFNUU6REQVQwpAv//xRAClNCTFcMoAhT
VFJUpAoAcGtJMkNFcAq/SFNUU3BoVFhTQXBpSENPTXCHakRBVDBwCgBhcIOIagoAAEhCRFJwClRI
Q09OokIElIdqYXALoA9gohKQkntIU1RTCoAAYHZgWyEKMqAKkmBLSUxMpAoAcAqASFNUU3VhoA+U
h2phcIOIamEASEJEUqATQ09NUH1IU1RTCv9IU1RTpAoBpAoAFEgNU0JMUgsIVEJVRhEECwABoAhT
VFJUpAoAcGpJMkNFcAq/SFNUU3B9aAoBAFRYU0FwaUhDT01wClRIQ09OcAugD2CiEpCSe0hTVFMK
gABgdmBbIQoyoAqSYEtJTEykCgBwREFUMIhUQlVGCgAAcAqASFNUU3AKAWGiRQSVYYOIVEJVRgoA
AHALoA9gohKQkntIU1RTCoAAYHZgWyEKMqAKkmBLSUxMpAoAcEhCRFKIVEJVRmEAcAqASFNUU3Vh
oBVDT01QfUhTVFMK/0hTVFOkVEJVRqQKABRHBVNUUlQIcArIYKIhYKAYe0hTVFMKQAB2YFsiCgGg
CJNgCgCkCgGhBXAKAGBwC6APYKIhYKAZe0hTVFMKAQB2YFshCjKgCZNgCgBLSUxMoQSkCgCkCgEU
MENPTVAIcAugD2CiIWCgDHtIU1RTCgIApAoBoRF2YFshCjKgCZNgCgBLSUxMpAoAFBxLSUxMCH1I
Q09OCgJIQ09OfUhTVFMK/0hTVFM=
====
begin-base64 644 ECDT.8
RUNEVFMAAAABOUFQUExFIEFwcGxlMDAAAQAAAExva2lfAAAAAQgAAGYAAAAAAAAAAQgAAGIAAAAA
AAAAAAAAABdcX1NCLlBDSTAuTFBDQi5FQwA=
====
begin-base64 644 FACP.1
RkFDUPQAAAADl0FQUExFIEFwcGxlMDAAwQAAAExva2lfAAAAAMDsfwAQ7n8AAgkAsgAAAPDx8oAA
BAAAAAAAAAQEAAAAAAAAIAQAAAgEAAAoBAAAAAAAAAQCAQQIABAAZQDpAwAAAAABAw0AMgEAAKWE
AAABCAAA+QwAAAAAAAAGAAAAAMDsfwAAAAAAEO5/AAAAAAEgAAAABAAAAAAAAAEAAAAAAAAAAAAA
AAEQAAAEBAAAAAAAAAEAAAAAAAAAAAAAAAEIAAAgBAAAAAAAAAEgAAAIBAAAAAAAAAFAAAAoBAAA
AAAAAAEAAAAAAAAAAAAAAA==
====
begin-base64 644 HPET.3
SFBFVDgAAAABzEFQUExFIEFwcGxlMDAAAQAAAExva2lfAAAAAaKGgAAAAAAAAND+AAAAAACAAAA=
====
begin-base64 644 MCFG.5
TUNGRzwAAAAB5EFQUExFIEFwcGxlMDAAAQAAAExva2lfAAAAAAAAAAAAAAAAAADwAAAAAAAAAP8A
AAAA
====
begin-base64 644 RSDT.0
UlNEVFQAAAABIEFQUExFIEFwcGxlMDAAwQAAACAgICATAAABAMDufwCw7n8AoO5/AJDufwCA7n8A
cO5/AGDufwBw7H8AYOx/AFDsfwAA7n8A8O1/
====
begin-base64 644 SBST.7
U0JTVDAAAAABhEFQUExFIEFwcGxlMDAAAQAAAExva2lfAAAAHgAAABQAAAAKAAAA
====
begin-base64 644 SSDT.10
U1NEVF8CAAABV0FQUExFAENwdTBUc3QAADAAAElOVEwJEQYgEEojXC5fUFJfQ1BVMAhfVFBDCgAU
TQZfUFRDAKA3e1BEQzAKBACkEiwCERQKEYIMAH8AAAAAAAAAAAAAAHkAERQKEYIMAH8AAAAAAAAA
AAAAAHkApBIsAhEUChGCDAABBAEAEAQAAAAAAAB5ABEUChGCDAABBAEAEAQAAAAAAAB5AAhUU1NJ
EkEHCBINBQpkC+gDCgAKAAoAEg0FClgLawMKAAoPCgASDQUKSwvuAgoACg4KABINBQo/C3ECCgAK
DQoAEg0FCjIL9AEKAAoMCgASDQUKJgt3AQoACgsKABIMBQoZCvoKAAoKCgASDAUKDQp9CgAKCQoA
CFRTU00SQQcIEg0FCmQL6AMKAAoACgASDQUKWAtrAwoACh4KABINBQpLC+4CCgAKHAoAEg0FCj8L
cQIKAAoaCgASDQUKMgv0AQoAChgKABINBQomC3cBCgAKFgoAEgwFChkK+goAChQKABIMBQoNCn0K
AAoSCgAIVFNTRgoAFEMIX1RTUwCgRwaQklRTU0ZbEl9QU1MAcF9QU1NgcIdgYXZhcIOIg4hgYQAK
AQBicAoAY6I1lWOHVFNTSXB4d2J0CghjAAAKCAAAZHBkiIOIVFNTSWMACgEAcGSIg4hUU1NNYwAK
AQB1Y3D/VFNTRqAOe1BEQzAKBACkVFNTTaRUU1NJFD9fVFNEAKAnkHtDRkdEDAAAAAEAkntQREMw
CgQApBIPARIMBQoFCgAKAAr9CgKkEg8BEgwFCgUKAAoACvwKAQ==
====
begin-base64 644 SSDT.11
U1NEVKYAAAAB5EFQUExFAENwdTFUc3QAADAAAElOVEwJEQYgEEEIXC5fUFJfQ1BVMQhfVFBDCgAU
Fl9QVEMApFwvA19QUl9DUFUwX1BUQxQWX1RTUwCkXC8DX1BSX0NQVTBfVFNTFD9fVFNEAKAnkHtD
RkdEDAAAAAEAkntQREMxCgQApBIPARIMBQoFCgAKAAr9CgKkEg8BEgwFCgUKAAoBCvwKAQ==
====
begin-base64 644 SSDT.12
U1NEVEQFAAABelNhdGFSZVNhdGFQcmkAABAAAElOVEwJEQYgEE9RXC8DX1NCX1BDSTBTQVRBW4JM
UFBSSUQIX0FEUgoAFEkUX0dUTQAIUEJVRhEXChQAAAAAAAAAAAAAAAAAAAAAAAAAAIpQQlVGCgBQ
SU8wilBCVUYKBERNQTCKUEJVRgoIUElPMYpQQlVGCgxETUExilBCVUYKEEZMQUdwR0VUUFBSSVRQ
SU8wcEdETUF7U1lOQwoBAHtJQ1IzCgEAe0lDUjAKAQBTRFQwe0lDUjEKAQBETUEwoBSTRE1BMAz/
////cFBJTzBETUEwoC57UFJJVAsAQACgFJN7UFJJVAqQAAqAcAuEA1BJTzGhDnBHRVRUUFNJVFBJ
TzGhC3AM/////1BJTzFwR0RNQXtTWU5DCgIAe0lDUjMKAgB7SUNSMAoCAFNEVDF7SUNSMQoCAERN
QTGgFJNETUExDP////9wUElPMURNQTFwR0VURntTWU5DCgEAe1NZTkMKAgBQUklURkxBR6RQQlVG
FEQqX1NUTQOKaAoAUElPMIpoCgRETUEwimgKCFBJTzGKaAoMRE1BMYpoChBGTEFHoEwRk4dpCwAC
e1BSSVQL8MBQUklUe1NZTkMKDlNZTkNwCgBTRFQwe0lDUjAKDklDUjB7SUNSMQoOSUNSMXtJQ1Iz
Cg5JQ1Ize0lDUjUKDklDUjWLaQpiVzQ5MItpCmpXNTMwi2kKflc2MzCLaQqAVzY0MItpCrBXODgw
i2kKulc5MzB9UFJJVAsEgFBSSVSgHpB7RkxBRwoCAHtXNDkwCwAIAH1QUklUCgJQUklUfVBSSVRT
RVRQUElPMFc1MzBXNjQwUFJJVKBFBXtGTEFHCgEAfVNZTkMKAVNZTkNwU0RNQURNQTBTRFQwoBOV
RE1BMAoefUlDUjMKAUlDUjOgE5VETUEwCjx9SUNSMAoBSUNSMH1JQ1IxCgFJQ1IxoEcVk4dqCwAC
e1BSSVQLD79QUklUcAoAUFNJVHtTWU5DCg1TWU5DcAoAU0RUMXtJQ1IwCg1JQ1Iwe0lDUjEKDUlD
UjF7SUNSMwoNSUNSM3tJQ1I1Cg1JQ1I1i2oKYlc0OTGLagpqVzUzMYtqCn5XNjMxi2oKgFc2NDGL
agqwVzg4MYtqCrpXOTMxfVBSSVQLQIBQUklUoB6Qe0ZMQUcKCAB7VzQ5MQsACAB9UFJJVAogUFJJ
VKBMBHtGTEFHChAAfVBSSVQLAEBQUklUoBOUUElPMQrwfVBSSVQKgFBSSVShIX1QUklUChBQUklU
cFNFVFRQSU8xVzUzMVc2NDFQU0lUoEUFe0ZMQUcKBAB9U1lOQwoCU1lOQ3BTRE1BRE1BMVNEVDGg
E5VETUExCh59SUNSMwoCSUNSM6ATlURNQTEKPH1JQ1IwCgJJQ1IwfUlDUjEKAklDUjFbgk4QUF9E
MAhfQURSCgAUQBBfR1RGAAhQSUIwEREKDgMAAAAAoO8DAAAAAKDvjFBJQjAKAVBNRDCMUElCMAoI
RE1EMKBABntQUklUCgIAoBOTe1BSSVQKCQAKCHAKCFBNRDChQQRwCgpQTUQwentQUklUCwADAAoI
YHp7UFJJVAsAMAAKDGFyYGFioAyTCgNicAoLUE1EMKAMkwoFYnAKDFBNRDChCHAKAVBNRDCgRwR7
U1lOQwoBAHB9U0RUMApAAERNRDCgL3tJQ1IxCgEAoBR7SUNSMAoBAHJETUQwCgJETUQwoBB7SUNS
MwoBAHAKRURNRDChFH10e1BNRDAKBwAKAgAKIERNRDCkUElCMA==
====
begin-base64 644 SSDT.13
U1NEVHcEAAABu1NhdGFSZVNhdGFTZWMAABAAAElOVEwJEQYgEEJFXC8DX1NCX1BDSTBTQVRBW4JP
Q1NFQ0QIX0FEUgoBFEYXX0dUTQAIU0JVRhEXChQAAAAAAAAAAAAAAAAAAAAAAAAAAIpTQlVGCgBQ
SU8wilNCVUYKBERNQTCKU0JVRgoIUElPMYpTQlVGCgxETUExilNCVUYKEEZMQUdwR0VUUFNFQ1RQ
SU8wcEdETUF7U1lOQwoEAHtJQ1IzCgQAe0lDUjAKBABTRFQye0lDUjEKBABETUEwoBSTRE1BMAz/
////cFBJTzBETUEwoC57U0VDVAsAQACgFJN7U0VDVAqQAAqAcAuEA1BJTzGhDnBHRVRUU1NJVFBJ
TzGhC3AM/////1BJTzFwR0RNQXtTWU5DCggAe0lDUjMKCAB7SUNSMAoIAFNEVDN7SUNSMQoIAERN
QTGgFJNETUExDP////9wUElPMURNQTFwR0VURntTWU5DCgQAe1NZTkMKCABTRUNURkxBR6Ase5NQ
SU8wDP////+TRE1BMAz/////AHAKeFBJTzBwChRETUEwcAoDRkxBR6RTQlVGFEorX1NUTQOKaAoA
UElPMIpoCgRETUEwimgKCFBJTzGKaAoMRE1BMYpoChBGTEFHoEcSk4dpCwACe1NFQ1QL8MBTRUNU
e1NZTkMKC1NZTkNwCgBTRFQye0lDUjAKC0lDUjB7SUNSMQoLSUNSMXtJQ1IzCgtJQ1Ize0lDUjUK
C0lDUjWLaQpiVzQ5MItpCmpXNTMwi2kKflc2MzCLaQqAVzY0MItpCrBXODgwi2kKulc5MzB9U0VD
VAsEgFNFQ1SgHpB7RkxBRwoCAHtXNDkwCwAIAH1TRUNUCgJTRUNUfVNFQ1RTRVRQUElPMFc1MzBX
NjQwU0VDVKBABntGTEFHCgEAfVNZTkMKBFNZTkNwU0RNQURNQTBTRFQyoBOVRE1BMAoefUlDUjMK
BElDUjOgE5VETUEwCjx9SUNSMAoESUNSMKAVe1c5MzALACAAfUlDUjEKBElDUjGgQhaTh2oLAAJ7
U0VDVAsPv1NFQ1RwCgBTU0lUe1NZTkMKB1NZTkNwCgBTRFQze0lDUjAKB0lDUjB7SUNSMQoHSUNS
MXtJQ1IzCgdJQ1Ize0lDUjUKB0lDUjWLagpiVzQ5MYtqCmpXNTMxi2oKflc2MzGLagqAVzY0MYtq
CrBXODgxi2oKulc5MzF9U0VDVAtAgFNFQ1SgHpB7RkxBRwoIAHtXNDkxCwAIAH1TRUNUCiBTRUNU
oEwEe0ZMQUcKEAB9U0VDVAsAQFNFQ1SgE5RQSU8xCvB9U0VDVAqAU0VDVKEhfVNFQ1QKEFNFQ1Rw
U0VUVFBJTzFXNTMxVzY0MVNTSVSgQAZ7RkxBRwoEAH1TWU5DCghTWU5DcFNETUFETUExU0RUM6AT
lURNQTEKHn1JQ1IzCghJQ1IzoBOVRE1BMQo8fUlDUjAKCElDUjCgFXtXOTMxCwAgAH1JQ1IxCghJ
Q1Ix
====
begin-base64 644 SSDT.9
U1NEVNwEAAABLEFQUExFAENwdVBtAAAAADAAAElOVEwJEQYgEEUIXAAIU1NEVBJDBQwNQ1BVMElT
VCAADJiq7H8MQAMAAA1DUFUxSVNUIAAMGJ/sfwzIAAAADUNQVTBDU1QgAAwYjOx/DK0CAAANQ1BV
MUNTVCAADBiP7H8MhQAAAAhDRkdEDPFpOx0IXFBEQzAMAAAAgAhcUERDMQwAAACACFxTRFRMCgAQ
SCFcLl9QUl9DUFUwCEhJMF8KAAhIQzBfCgAUSAZfUERDAYpoCgBSRVZTimgKBFNJWkVwh2hgcHRg
CggAYVsTaApAd2EKCABURU1QCFNUUzARBwoEAAAAAHNTVFMwVEVNUGJfT1NDERMKEBamd0AMKb5H
nr3YcFhxOVNSRVZTU0laRWIURBlfT1NDBIprCgBTVFMwimsKBENBUDCKaAoASUlEMIpoCgRJSUQx
imgKCElJRDKKaAoMSUlEMwhVSUQwERMKEBamd0AMKb5Hnr3YcFhxOVOKVUlEMAoARUlEMIpVSUQw
CgRFSUQxilVJRDAKCEVJRDKKVUlEMAoMRUlEM6A2kpCQk0lJRDBFSUQwk0lJRDFFSUQxkJNJSUQy
RUlEMpNJSUQzRUlEM3AKBohTVFMwCgAApGugE5KTaQoBcAoKiFNUUzAKAACka317UERDMAz///9/
AENBUDBQREMwoEwFe0NGR0QKAQCgQQWQkHtDRkdEDAAAAAEAk3tQREMwCgkACgmSe1NEVEwKAQB9
U0RUTAoBU0RUTFuASVNUMACDiFNTRFQKAQCDiFNTRFQKAgBbIElTVDBISTBfoEkFe0NGR0QK8ACg
TgSQkHtDRkdEDAAAAAEAe1BEQzAKGACSe1NEVEwKAgB9U0RUTAoCU0RUTFuAQ1NUMACDiFNTRFQK
BwCDiFNTRFQKCABbIENTVDBIQzBfpGsQSCFcLl9QUl9DUFUxCEhJMV8KAAhIQzFfCgAUSAZfUERD
AYpoCgBSRVZTimgKBFNJWkVwh2hgcHRgCggAYVsTaApAd2EKCABURU1QCFNUUzERBwoEAAAAAHNT
VFMxVEVNUGJfT1NDERMKEBamd0AMKb5Hnr3YcFhxOVNSRVZTU0laRWIURBlfT1NDBIprCgBTVFMx
imsKBENBUDGKaAoASUlEMIpoCgRJSUQximgKCElJRDKKaAoMSUlEMwhVSUQxERMKEBamd0AMKb5H
nr3YcFhxOVOKVUlEMQoARUlEMIpVSUQxCgRFSUQxilVJRDEKCEVJRDKKVUlEMQoMRUlEM6A2kpCQ
k0lJRDBFSUQwk0lJRDFFSUQxkJNJSUQyRUlEMpNJSUQzRUlEM3AKBohTVFMxCgAApGugE5KTaQoB
cAoKiFNUUzEKAACka317UERDMQz///9/AENBUDFQREMxoEwFe0NGR0QKAQCgQQWQkHtDRkdEDAAA
AAEAk3tQREMxCgkACgmSe1NEVEwKEAB9U0RUTAoQU0RUTFuASVNUMQCDiFNTRFQKBACDiFNTRFQK
BQBbIElTVDFISTFfoEkFe0NGR0QK8ACgTgSQkHtDRkdEDAAAAAEAe1BEQzEKGACSe1NEVEwKIAB9
U0RUTAogU0RUTFuAQ1NUMQCDiFNTRFQKCgCDiFNTRFQKCwBbIENTVDFIQzFfpGs=
====
begin-base64 644 headers
ClJTRCBQVFI6IENoZWNrc3VtPTQsIE9FTUlEPUFQUExFLCBSc2R0QWRkcmVzcz0weDdmZWVlMGZj
CgoKUlNEVDogTGVuZ3RoPTg0LCBSZXZpc2lvbj0xLCBDaGVja3N1bT0zMiwKCU9FTUlEPUFQUExF
LCBPRU0gVGFibGUgSUQ9QXBwbGUwMCwgT0VNIFJldmlzaW9uPTB4YzEsCglDcmVhdG9yIElEPSwg
Q3JlYXRvciBSZXZpc2lvbj0weDEwMDAwMTMKCgoJRW50cmllcz17IDB4N2ZlZWMwMDAsIDB4N2Zl
ZWIwMDAsIDB4N2ZlZWEwMDAsIDB4N2ZlZTkwMDAsIDB4N2ZlZTgwMDAsIDB4N2ZlZTcwMDAsIDB4
N2ZlZTYwMDAsIDB4N2ZlYzcwMDAsIDB4N2ZlYzYwMDAsIDB4N2ZlYzUwMDAsIDB4N2ZlZTAwMDAs
IDB4N2ZlZGYwMDAgfQoKCglEU0RUPTB4N2ZlZTEwMDAKCUlOVF9NT0RFTD1QSUMKCVNDSV9JTlQ9
OQoJU01JX0NNRD0weGIyLCBBQ1BJX0VOQUJMRT0weGYwLCBBQ1BJX0RJU0FCTEU9MHhmMSwgUzRC
SU9TX1JFUT0weGYyCglQTTFhX0VWVF9CTEs9MHg0MDAtMHg0MDMKCVBNMWFfQ05UX0JMSz0weDQw
NC0weDQwNQoJUE0yX0NOVF9CTEs9MHg0MjAtMHg0MjAKCVBNMl9UTVJfQkxLPTB4NDA4LTB4NDBi
CglQTTJfR1BFMF9CTEs9MHg0MjgtMHg0MmYKCVBfTFZMMl9MQVQ9MTAxbXMsIFBfTFZMM19MQVQ9
MTAwMW1zCglGTFVTSF9TSVpFPTAsIEZMVVNIX1NUUklERT0wCglEVVRZX09GRlNFVD0xLCBEVVRZ
X1dJRFRIPTMKCURBWV9BTFJNPTEzLCBNT05fQUxSTT0wLCBDRU5UVVJZPTUwCglGbGFncz17V0JJ
TlZELFBST0NfQzEsU0xQX0JVVFRPTixSVENfUzR9CgoKRFNEVDogTGVuZ3RoPTE4ODMwLCBSZXZp
c2lvbj0xLCBDaGVja3N1bT02OCwKCU9FTUlEPUFQUExFLCBPRU0gVGFibGUgSUQ9TWFjQm9va1As
IE9FTSBSZXZpc2lvbj0weDQwMDAxLAoJQ3JlYXRvciBJRD1JTlRMLCBDcmVhdG9yIFJldmlzaW9u
PTB4MjAwNjExMDkKCgpIUEVUOiBMZW5ndGg9NTYsIFJldmlzaW9uPTEsIENoZWNrc3VtPTIwNCwK
CU9FTUlEPUFQUExFLCBPRU0gVGFibGUgSUQ9QXBwbGUwMCwgT0VNIFJldmlzaW9uPTB4MSwKCUNy
ZWF0b3IgSUQ9TG9raSwgQ3JlYXRvciBSZXZpc2lvbj0weDVmCgoKQVBJQzogTGVuZ3RoPTEwNCwg
UmV2aXNpb249MSwgQ2hlY2tzdW09MTQyLAoJT0VNSUQ9QVBQTEUsIE9FTSBUYWJsZSBJRD1BcHBs
ZTAwLCBPRU0gUmV2aXNpb249MHgxLAoJQ3JlYXRvciBJRD1Mb2tpLCBDcmVhdG9yIFJldmlzaW9u
PTB4NWYKCgpNQ0ZHOiBMZW5ndGg9NjAsIFJldmlzaW9uPTEsIENoZWNrc3VtPTIyOCwKCU9FTUlE
PUFQUExFLCBPRU0gVGFibGUgSUQ9QXBwbGUwMCwgT0VNIFJldmlzaW9uPTB4MSwKCUNyZWF0b3Ig
SUQ9TG9raSwgQ3JlYXRvciBSZXZpc2lvbj0weDVmCgoKQVNGITogTGVuZ3RoPTE2NSwgUmV2aXNp
b249MzIsIENoZWNrc3VtPTE4MiwKCU9FTUlEPUFQUExFLCBPRU0gVGFibGUgSUQ9QXBwbGUwMCwg
T0VNIFJldmlzaW9uPTB4MSwKCUNyZWF0b3IgSUQ9TG9raSwgQ3JlYXRvciBSZXZpc2lvbj0weDVm
CgoKU0JTVDogTGVuZ3RoPTQ4LCBSZXZpc2lvbj0xLCBDaGVja3N1bT0xMzIsCglPRU1JRD1BUFBM
RSwgT0VNIFRhYmxlIElEPUFwcGxlMDAsIE9FTSBSZXZpc2lvbj0weDEsCglDcmVhdG9yIElEPUxv
a2ksIENyZWF0b3IgUmV2aXNpb249MHg1ZgoKCkVDRFQ6IExlbmd0aD04MywgUmV2aXNpb249MSwg
Q2hlY2tzdW09NTcsCglPRU1JRD1BUFBMRSwgT0VNIFRhYmxlIElEPUFwcGxlMDAsIE9FTSBSZXZp
c2lvbj0weDEsCglDcmVhdG9yIElEPUxva2ksIENyZWF0b3IgUmV2aXNpb249MHg1ZgoKClNTRFQ6
IExlbmd0aD0xMjQ0LCBSZXZpc2lvbj0xLCBDaGVja3N1bT00NCwKCU9FTUlEPUFQUExFLCBPRU0g
VGFibGUgSUQ9Q3B1UG0sIE9FTSBSZXZpc2lvbj0weDMwMDAsCglDcmVhdG9yIElEPUlOVEwsIENy
ZWF0b3IgUmV2aXNpb249MHgyMDA2MTEwOQoKClNTRFQ6IExlbmd0aD02MDcsIFJldmlzaW9uPTEs
IENoZWNrc3VtPTg3LAoJT0VNSUQ9QVBQTEUsIE9FTSBUYWJsZSBJRD1DcHUwVHN0LCBPRU0gUmV2
aXNpb249MHgzMDAwLAoJQ3JlYXRvciBJRD1JTlRMLCBDcmVhdG9yIFJldmlzaW9uPTB4MjAwNjEx
MDkKCgpTU0RUOiBMZW5ndGg9MTY2LCBSZXZpc2lvbj0xLCBDaGVja3N1bT0yMjgsCglPRU1JRD1B
UFBMRSwgT0VNIFRhYmxlIElEPUNwdTFUc3QsIE9FTSBSZXZpc2lvbj0weDMwMDAsCglDcmVhdG9y
IElEPUlOVEwsIENyZWF0b3IgUmV2aXNpb249MHgyMDA2MTEwOQoKClNTRFQ6IExlbmd0aD0xMzQ4
LCBSZXZpc2lvbj0xLCBDaGVja3N1bT0xMjIsCglPRU1JRD1TYXRhUmUsIE9FTSBUYWJsZSBJRD1T
YXRhUHJpLCBPRU0gUmV2aXNpb249MHgxMDAwLAoJQ3JlYXRvciBJRD1JTlRMLCBDcmVhdG9yIFJl
dmlzaW9uPTB4MjAwNjExMDkKCgpTU0RUOiBMZW5ndGg9MTE0MywgUmV2aXNpb249MSwgQ2hlY2tz
dW09MTg3LAoJT0VNSUQ9U2F0YVJlLCBPRU0gVGFibGUgSUQ9U2F0YVNlYywgT0VNIFJldmlzaW9u
PTB4MTAwMCwKCUNyZWF0b3IgSUQ9SU5UTCwgQ3JlYXRvciBSZXZpc2lvbj0weDIwMDYxMTA5Cgo=
====

Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: usbdi.c regression: mouse pointer freeze on two finger gesture

Mark Kettenis
Does apllying mpi@'s latest diff sent to tech@ on march 10 (Fix
multiple USB use-after-free) fix the issue?

Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: usbdi.c regression: mouse pointer freeze on two finger gesture

Theo Buehler
On Wed, Mar 15, 2017 at 12:18:32PM +0100, Mark Kettenis wrote:
> Does apllying mpi@'s latest diff sent to tech@ on march 10 (Fix
> multiple USB use-after-free) fix the issue?

Sorry, I missed that diff. But no, unfortunately it doesn't.

Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: usbdi.c regression: mouse pointer freeze on two finger gesture

Martin Pieuchot
In reply to this post by Theo Buehler
On 15/03/17(Wed) 11:55, Theo Buehler wrote:

> >Synopsis: two finger gesture leads to mouse pointer freeze
> >Category: kernel, amd64, usb
> >Environment:
> System      : OpenBSD 6.1
> Details     : OpenBSD 6.1-beta (GENERIC.MP) #20: Wed Mar 15 01:49:05 MDT 2017
> [hidden email]:/usr/src/sys/arch/amd64/compile/GENERIC.MP
>
> Architecture: OpenBSD.amd64
> Machine     : amd64
> >Description:
> Wenever I touch the touchpad of my MacBook pro with two fingers
> simultaneously, the mouse pointer freezes and remains unusable
> until I restart X. The output of xinput --test /dev/wsmouse1
> stops as soon as two fingers touch the pad.
>
> >How-To-Repeat:
> Start an X session, touch touchpad with two fingers simultaneously.
> >Fix:
> Reverting usbdi.c to r1.85 fixes the problem.

Does that mean r1.86 introduced the regression?  Do you know which
commit exactly it is ?

Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: usbdi.c regression: mouse pointer freeze on two finger gesture

Theo Buehler
On Thu, Mar 16, 2017 at 09:09:49AM +0100, Martin Pieuchot wrote:

> On 15/03/17(Wed) 11:55, Theo Buehler wrote:
> > >Synopsis: two finger gesture leads to mouse pointer freeze
> > >Category: kernel, amd64, usb
> > >Environment:
> > System      : OpenBSD 6.1
> > Details     : OpenBSD 6.1-beta (GENERIC.MP) #20: Wed Mar 15 01:49:05 MDT 2017
> > [hidden email]:/usr/src/sys/arch/amd64/compile/GENERIC.MP
> >
> > Architecture: OpenBSD.amd64
> > Machine     : amd64
> > >Description:
> > Wenever I touch the touchpad of my MacBook pro with two fingers
> > simultaneously, the mouse pointer freezes and remains unusable
> > until I restart X. The output of xinput --test /dev/wsmouse1
> > stops as soon as two fingers touch the pad.
> >
> > >How-To-Repeat:
> > Start an X session, touch touchpad with two fingers simultaneously.
> > >Fix:
> > Reverting usbdi.c to r1.85 fixes the problem.
>
> Does that mean r1.86 introduced the regression?  Do you know which
> commit exactly it is ?

Yes, r1.85 is good r1.86 is bad.

Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: usbdi.c regression: mouse pointer freeze on two finger gesture

Martin Pieuchot
On 16/03/17(Thu) 10:22, Theo Buehler wrote:

> On Thu, Mar 16, 2017 at 09:09:49AM +0100, Martin Pieuchot wrote:
> > On 15/03/17(Wed) 11:55, Theo Buehler wrote:
> > > >Synopsis: two finger gesture leads to mouse pointer freeze
> > > >Category: kernel, amd64, usb
> > > >Environment:
> > > System      : OpenBSD 6.1
> > > Details     : OpenBSD 6.1-beta (GENERIC.MP) #20: Wed Mar 15 01:49:05 MDT 2017
> > > [hidden email]:/usr/src/sys/arch/amd64/compile/GENERIC.MP
> > >
> > > Architecture: OpenBSD.amd64
> > > Machine     : amd64
> > > >Description:
> > > Wenever I touch the touchpad of my MacBook pro with two fingers
> > > simultaneously, the mouse pointer freezes and remains unusable
> > > until I restart X. The output of xinput --test /dev/wsmouse1
> > > stops as soon as two fingers touch the pad.
> > >
> > > >How-To-Repeat:
> > > Start an X session, touch touchpad with two fingers simultaneously.
> > > >Fix:
> > > Reverting usbdi.c to r1.85 fixes the problem.
> >
> > Does that mean r1.86 introduced the regression?  Do you know which
> > commit exactly it is ?
>
> Yes, r1.85 is good r1.86 is bad.

Does enabling UBCMTP_DEBUG gives you more info?  Which error do you get?

I'm guessing the driver is working *because* of a use after free.

Index: ubcmtp.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/ubcmtp.c,v
retrieving revision 1.12
diff -u -p -r1.12 ubcmtp.c
--- ubcmtp.c 30 Mar 2016 23:34:12 -0000 1.12
+++ ubcmtp.c 16 Mar 2017 09:59:06 -0000
@@ -889,6 +889,8 @@ ubcmtp_bt_intr(struct usbd_xfer *xfer, v
  return;
 
  if (status != USBD_NORMAL_COMPLETION) {
+ DPRINTF("%s: %s with status 0x%x\n", sc->sc_dev.dv_xname,
+    __func__, status);
  if (status == USBD_NOT_STARTED || status == USBD_CANCELLED)
  return;
  if (status == USBD_STALLED)

Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: usbdi.c regression: mouse pointer freeze on two finger gesture

Theo Buehler
On Thu, Mar 16, 2017 at 11:00:38AM +0100, Martin Pieuchot wrote:

> On 16/03/17(Thu) 10:22, Theo Buehler wrote:
> > On Thu, Mar 16, 2017 at 09:09:49AM +0100, Martin Pieuchot wrote:
> > > On 15/03/17(Wed) 11:55, Theo Buehler wrote:
> > > > >Synopsis: two finger gesture leads to mouse pointer freeze
> > > > >Category: kernel, amd64, usb
> > > > >Environment:
> > > > System      : OpenBSD 6.1
> > > > Details     : OpenBSD 6.1-beta (GENERIC.MP) #20: Wed Mar 15 01:49:05 MDT 2017
> > > > [hidden email]:/usr/src/sys/arch/amd64/compile/GENERIC.MP
> > > >
> > > > Architecture: OpenBSD.amd64
> > > > Machine     : amd64
> > > > >Description:
> > > > Wenever I touch the touchpad of my MacBook pro with two fingers
> > > > simultaneously, the mouse pointer freezes and remains unusable
> > > > until I restart X. The output of xinput --test /dev/wsmouse1
> > > > stops as soon as two fingers touch the pad.
> > > >
> > > > >How-To-Repeat:
> > > > Start an X session, touch touchpad with two fingers simultaneously.
> > > > >Fix:
> > > > Reverting usbdi.c to r1.85 fixes the problem.
> > >
> > > Does that mean r1.86 introduced the regression?  Do you know which
> > > commit exactly it is ?
> >
> > Yes, r1.85 is good r1.86 is bad.
>
> Does enabling UBCMTP_DEBUG gives you more info?  Which error do you get?
>
> I'm guessing the driver is working *because* of a use after free.

A two-finger tap gives this message, both with r1.85 and with r1.89:

/bsd: ubcmtp0: ubcmtp_tp_intr with status 0xd

That is to say, USBD_IOERROR.

The only real difference I can see is this:

With r1.89, I can generate this message only once: the mouse pointer
freezes permanently and all subsequent two finger taps don't generate
any message anymore. As you can see below, I still get interrupts from
pressing and releasing the button.

With r1.85, a two finger tap generates this message, the mouse pointer
freezes for 1-2 seconds, and neither finger movement nor tapping results
in any output, but button presses still do. After the freeze, things
work again as before.

Here's all I get with usbdi.c r1.89 and UBCMTP_DEBUG enabled:

Mar 16 12:27:08 miraculix /bsd: ubcmtp0: button iface at 0x84, max size 4
Mar 16 12:27:08 miraculix /bsd: ubcmtp0: trackpad data iface at 0x81, max size 474
Mar 16 12:27:08 miraculix /bsd: ubcmtp0: in ubcmtp_ioctl with cmd 0x40045720
Mar 16 12:27:08 miraculix /bsd: ubcmtp0: button iface at 0x84, max size 4
Mar 16 12:27:08 miraculix /bsd: ubcmtp0: trackpad data iface at 0x81, max size 474
Mar 16 12:27:08 miraculix /bsd: ubcmtp0: in ubcmtp_ioctl with cmd 0x40045720
Mar 16 12:27:08 miraculix /bsd: ubcmtp0: button iface at 0x84, max size 4
Mar 16 12:27:08 miraculix /bsd: ubcmtp0: trackpad data iface at 0x81, max size 474
Mar 16 12:27:08 miraculix /bsd: ubcmtp0: in ubcmtp_ioctl with cmd 0x41205725
Mar 16 12:27:08 miraculix /bsd: ubcmtp0: in ubcmtp_ioctl with cmd 0x40045720
Mar 16 12:27:08 miraculix /bsd: ubcmtp0: in ubcmtp_ioctl with cmd 0x40045720
Mar 16 12:27:08 miraculix /bsd: ubcmtp0: button iface at 0x84, max size 4
Mar 16 12:27:08 miraculix /bsd: ubcmtp0: trackpad data iface at 0x81, max size 474
Mar 16 12:27:08 miraculix /bsd: ubcmtp0: in ubcmtp_ioctl with cmd 0x80045726
Mar 16 12:27:08 miraculix /bsd: ubcmtp0: changing mode to native
Mar 16 12:27:08 miraculix /bsd: ubcmtp0: in ubcmtp_ioctl with cmd 0x80047410
Mar 16 12:27:08 miraculix /bsd: ubcmtp0: in ubcmtp_ioctl with cmd 0x40045720
Mar 16 12:27:45 miraculix /bsd: ubcmtp0: button interrupt (2, 1, 0, 0)
Mar 16 12:27:45 miraculix /bsd: ubcmtp0: button interrupt (2, 0, 0, 0)
Mar 16 12:27:51 miraculix /bsd: ubcmtp0: ubcmtp_tp_intr with status 0xd
Mar 16 12:28:21 miraculix /bsd: ubcmtp0: button interrupt (2, 1, 0, 0)
Mar 16 12:28:21 miraculix /bsd: ubcmtp0: button interrupt (2, 0, 0, 0)
Mar 16 12:28:24 miraculix /bsd: ubcmtp0: button interrupt (2, 1, 0, 0)
Mar 16 12:28:25 miraculix /bsd: ubcmtp0: button interrupt (2, 0, 0, 0)
Mar 16 12:28:27 miraculix /bsd: ubcmtp0: button interrupt (2, 1, 0, 0)
Mar 16 12:28:27 miraculix /bsd: ubcmtp0: button interrupt (2, 0, 0, 0)
Mar 16 12:28:43 miraculix /bsd: ubcmtp0: button interrupt (2, 1, 0, 0)
Mar 16 12:28:43 miraculix /bsd: ubcmtp0: button interrupt (2, 0, 0, 0)

and with usbdi.c r1.85 and UBCMTP_DEBUG enabled

Mar 16 12:17:56 miraculix /bsd: ubcmtp0: button iface at 0x84, max size 4
Mar 16 12:17:56 miraculix /bsd: ubcmtp0: trackpad data iface at 0x81, max size 474
Mar 16 12:17:56 miraculix /bsd: ubcmtp0: in ubcmtp_ioctl with cmd 0x40045720
Mar 16 12:17:56 miraculix /bsd: ubcmtp0: button iface at 0x84, max size 4
Mar 16 12:17:56 miraculix /bsd: ubcmtp0: trackpad data iface at 0x81, max size 474
Mar 16 12:17:56 miraculix /bsd: ubcmtp0: in ubcmtp_ioctl with cmd 0x40045720
Mar 16 12:17:56 miraculix /bsd: ubcmtp0: button iface at 0x84, max size 4
Mar 16 12:17:56 miraculix /bsd: ubcmtp0: trackpad data iface at 0x81, max size 474
Mar 16 12:17:56 miraculix /bsd: ubcmtp0: in ubcmtp_ioctl with cmd 0x41205725
Mar 16 12:17:56 miraculix /bsd: ubcmtp0: in ubcmtp_ioctl with cmd 0x40045720
Mar 16 12:17:56 miraculix /bsd: ubcmtp0: in ubcmtp_ioctl with cmd 0x40045720
Mar 16 12:17:56 miraculix /bsd: ubcmtp0: button iface at 0x84, max size 4
Mar 16 12:17:56 miraculix /bsd: ubcmtp0: trackpad data iface at 0x81, max size 474
Mar 16 12:17:56 miraculix /bsd: ubcmtp0: in ubcmtp_ioctl with cmd 0x80045726
Mar 16 12:17:56 miraculix /bsd: ubcmtp0: changing mode to native
Mar 16 12:17:56 miraculix /bsd: ubcmtp0: in ubcmtp_ioctl with cmd 0x80047410
Mar 16 12:17:56 miraculix /bsd: ubcmtp0: in ubcmtp_ioctl with cmd 0x40045720
Mar 16 12:18:21 miraculix /bsd: ubcmtp0: ubcmtp_tp_intr with status 0xd
Mar 16 12:18:24 miraculix /bsd: ubcmtp0: ubcmtp_tp_intr with status 0xd
Mar 16 12:18:25 miraculix /bsd: ubcmtp0: button interrupt (2, 1, 0, 0)
Mar 16 12:18:26 miraculix /bsd: ubcmtp0: button interrupt (2, 0, 0, 0)
Mar 16 12:18:27 miraculix /bsd: ubcmtp0: button interrupt (2, 1, 0, 0)
Mar 16 12:18:27 miraculix /bsd: ubcmtp0: button interrupt (2, 0, 0, 0)
Mar 16 12:18:31 miraculix /bsd: ubcmtp0: ubcmtp_tp_intr with status 0xd
Mar 16 12:18:53 miraculix last message repeated 3 times
Mar 16 12:18:54 miraculix /bsd: ubcmtp0: button interrupt (2, 1, 0, 0)
Mar 16 12:18:55 miraculix /bsd: ubcmtp0: button interrupt (2, 0, 0, 0)
Mar 16 12:18:59 miraculix /bsd: ubcmtp0: ubcmtp_tp_intr with status 0xd
Mar 16 12:19:02 miraculix /bsd: ubcmtp0: button interrupt (2, 1, 0, 0)
Mar 16 12:19:02 miraculix /bsd: ubcmtp0: button interrupt (2, 0, 0, 0)
Mar 16 12:19:04 miraculix /bsd: ubcmtp0: button interrupt (2, 1, 0, 0)
Mar 16 12:19:04 miraculix /bsd: ubcmtp0: button interrupt (2, 0, 0, 0)
Mar 16 12:19:06 miraculix /bsd: ubcmtp0: button interrupt (2, 1, 0, 0)
Mar 16 12:19:06 miraculix /bsd: ubcmtp0: button interrupt (2, 0, 0, 0)
Mar 16 12:19:08 miraculix /bsd: ubcmtp0: ubcmtp_tp_intr with status 0xd
Mar 16 12:19:14 miraculix /bsd: ubcmtp0: ubcmtp_tp_intr with status 0xd

Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: usbdi.c regression: mouse pointer freeze on two finger gesture

Theo Buehler
On Thu, Mar 16, 2017 at 12:42:12PM +0100, Theo Buehler wrote:

> On Thu, Mar 16, 2017 at 11:00:38AM +0100, Martin Pieuchot wrote:
> > On 16/03/17(Thu) 10:22, Theo Buehler wrote:
> > > On Thu, Mar 16, 2017 at 09:09:49AM +0100, Martin Pieuchot wrote:
> > > > On 15/03/17(Wed) 11:55, Theo Buehler wrote:
> > > > > >Synopsis: two finger gesture leads to mouse pointer freeze
> > > > > >Category: kernel, amd64, usb
> > > > > >Environment:
> > > > > System      : OpenBSD 6.1
> > > > > Details     : OpenBSD 6.1-beta (GENERIC.MP) #20: Wed Mar 15 01:49:05 MDT 2017
> > > > > [hidden email]:/usr/src/sys/arch/amd64/compile/GENERIC.MP
> > > > >
> > > > > Architecture: OpenBSD.amd64
> > > > > Machine     : amd64
> > > > > >Description:
> > > > > Wenever I touch the touchpad of my MacBook pro with two fingers
> > > > > simultaneously, the mouse pointer freezes and remains unusable
> > > > > until I restart X. The output of xinput --test /dev/wsmouse1
> > > > > stops as soon as two fingers touch the pad.
> > > > >
> > > > > >How-To-Repeat:
> > > > > Start an X session, touch touchpad with two fingers simultaneously.
> > > > > >Fix:
> > > > > Reverting usbdi.c to r1.85 fixes the problem.
> > > >
> > > > Does that mean r1.86 introduced the regression?  Do you know which
> > > > commit exactly it is ?
> > >
> > > Yes, r1.85 is good r1.86 is bad.
> >
> > Does enabling UBCMTP_DEBUG gives you more info?  Which error do you get?
> >
> > I'm guessing the driver is working *because* of a use after free.
>
> A two-finger tap gives this message, both with r1.85 and with r1.89:
>
> /bsd: ubcmtp0: ubcmtp_tp_intr with status 0xd
>
> That is to say, USBD_IOERROR.

I don't know if this helps at all or if it just confirms what you
already know: I inserted a db_stack_dump() conditionally on USBD_IOERROR
in ubcmtp_tp_intr() and set usbdebug = 6 (diff below).

With r1.89, I see the following two lines after a two finger tap:

Mar 17 06:18:20 miraculix /bsd: usb_freemem: large free
Mar 17 06:18:20 miraculix /bsd: usb_transfer_complete: repeat=0 new head=0x0

These aren't present with r1.85.

With usbdi.c r1.85, a two finger tap produces a variation of this:

Mar 17 06:09:57 miraculix /bsd: usb_transfer_complete: pipe=0xffff8000006eb200 xfer=0xffffff000587db58 status=0 actlen=54
Mar 17 06:09:57 miraculix /bsd: usb_transfer_complete: repeat=1 new head=0xffffff000587db58
Mar 17 06:09:57 miraculix /bsd: usb_transfer_complete: pipe=0xffff8000006eb200 xfer=0xffffff000587db58 status=0 actlen=54
Mar 17 06:09:57 miraculix /bsd: usb_transfer_complete: repeat=1 new head=0xffffff000587db58
Mar 17 06:09:58 miraculix /bsd: usb_transfer_complete: pipe=0xffff8000006eb200 xfer=0xffffff000587db58 status=13 actlen=474
Mar 17 06:09:58 miraculix /bsd: usb_transfer_complete: repeat=1 new head=0xffffff000587db58
Mar 17 06:09:58 miraculix /bsd: Starting stack trace...
Mar 17 06:09:58 miraculix /bsd: ubcmtp_tp_intr() at ubcmtp_tp_intr+0x1e2
Mar 17 06:09:58 miraculix /bsd: usb_transfer_complete() at usb_transfer_complete+0x141
Mar 17 06:09:58 miraculix /bsd: uhci_softintr() at uhci_softintr+0x3f
Mar 17 06:09:58 miraculix /bsd: softintr_dispatch() at softintr_dispatch+0x8b
Mar 17 06:09:58 miraculix /bsd: Xsoftnet() at Xsoftnet+0x1f
Mar 17 06:09:58 miraculix /bsd: --- interrupt ---
Mar 17 06:09:58 miraculix /bsd: end trace frame: 0x0, count: 252
Mar 17 06:09:58 miraculix /bsd: 0x8:
Mar 17 06:09:58 miraculix /bsd: End of stack trace.
Mar 17 06:09:58 miraculix /bsd: usb_transfer_complete: pipe=0xffff8000006eb200 xfer=0xffffff000587db58 status=0 actlen=18
Mar 17 06:09:58 miraculix /bsd: usb_transfer_complete: repeat=1 new head=0xffffff000587db58
Mar 17 06:09:58 miraculix /bsd: usb_transfer_complete: pipe=0xffff8000006eb200 xfer=0xffffff000587db58 status=0 actlen=82
Mar 17 06:09:58 miraculix /bsd: usb_transfer_complete: repeat=1 new head=0xffffff000587db58
Mar 17 06:10:08 miraculix /bsd: usb_transfer_complete: pipe=0xffff8000006eb200 xfer=0xffffff000587db58 status=0 actlen=438
Mar 17 06:10:08 miraculix /bsd: usb_transfer_complete: repeat=1 new head=0xffffff000587db58

and with usbdi.c r1.89:

Mar 17 06:18:19 miraculix /bsd: usb_transfer_complete: repeat=1 new head=0xffffff000587db58
Mar 17 06:18:20 miraculix /bsd: usb_transfer_complete: pipe=0xffff8000006db200 xfer=0xffffff000587db58 status=13 actlen=474
Mar 17 06:18:20 miraculix /bsd: usb_transfer_complete: repeat=1 new head=0xffffff000587db58
Mar 17 06:18:20 miraculix /bsd: Starting stack trace...
Mar 17 06:18:20 miraculix /bsd: ubcmtp_tp_intr() at ubcmtp_tp_intr+0x1e2
Mar 17 06:18:20 miraculix /bsd: usb_transfer_complete() at usb_transfer_complete+0x157
Mar 17 06:18:20 miraculix /bsd: uhci_softintr() at uhci_softintr+0x3f
Mar 17 06:18:20 miraculix /bsd: softintr_dispatch() at softintr_dispatch+0x8b
Mar 17 06:18:20 miraculix /bsd: Xsoftnet() at Xsoftnet+0x1f
Mar 17 06:18:20 miraculix /bsd: --- interrupt ---
Mar 17 06:18:20 miraculix /bsd: end trace frame: 0x0, count: 252
Mar 17 06:18:20 miraculix /bsd: 0x8:
Mar 17 06:18:20 miraculix /bsd: End of stack trace.
Mar 17 06:18:20 miraculix /bsd: usb_transfer_complete: pipe=0xffff8000006db200 xfer=0xffffff000587db58 status=0 actlen=18
Mar 17 06:18:20 miraculix /bsd: usb_freemem: large free
Mar 17 06:18:20 miraculix /bsd: usb_transfer_complete: repeat=0 new head=0x0
Mar 17 06:18:20 miraculix /bsd: usbd_start_next: pipe=0xffff8000006db200, xfer=0x0
Mar 17 06:18:59 miraculix /bsd: usb_transfer_complete: pipe=0xffff8000006db100 xfer=0xffffff000587da50 status=0 actlen=4
Mar 17 06:18:59 miraculix /bsd: usb_transfer_complete: repeat=1 new head=0xffffff000587da50

Index: ubcmtp.c
===================================================================
RCS file: /var/cvs/src/sys/dev/usb/ubcmtp.c,v
retrieving revision 1.13
diff -u -p -r1.13 ubcmtp.c
--- ubcmtp.c 15 Mar 2017 21:43:45 -0000 1.13
+++ ubcmtp.c 17 Mar 2017 03:24:51 -0000
@@ -61,6 +61,9 @@
 #define DPRINTF(x...)
 #endif
 
+#ifdef DDB
+#include <ddb/db_output.h>
+#endif
 /* magic to switch device from HID (default) mode into raw */
 #define UBCMTP_WELLSPRING_MODE_RAW 0x01
 #define UBCMTP_WELLSPRING_MODE_HID 0x08
@@ -804,6 +807,8 @@ ubcmtp_tp_intr(struct usbd_xfer *xfer, v
  DPRINTF("%s: %s with status 0x%x\n", sc->sc_dev.dv_xname,
     __func__, status);
 
+ if (status == USBD_IOERROR)
+ db_stack_dump();
  if (status == USBD_NOT_STARTED || status == USBD_CANCELLED)
  return;
  if (status == USBD_STALLED)
Index: usb.c
===================================================================
RCS file: /var/cvs/src/sys/dev/usb/usb.c,v
retrieving revision 1.111
diff -u -p -r1.111 usb.c
--- usb.c 18 May 2016 18:28:58 -0000 1.111
+++ usb.c 17 Mar 2017 04:52:48 -0000
@@ -67,7 +67,7 @@
 #ifdef USB_DEBUG
 #define DPRINTF(x) do { if (usbdebug) printf x; } while (0)
 #define DPRINTFN(n,x) do { if (usbdebug>(n)) printf x; } while (0)
-int usbdebug = 0;
+int usbdebug = 6;
 #if defined(UHCI_DEBUG) && NUHCI > 0
 extern int uhcidebug;
 #endif
Index: usb.h
===================================================================
RCS file: /var/cvs/src/sys/dev/usb/usb.h,v
retrieving revision 1.57
diff -u -p -r1.57 usb.h
--- usb.h 19 Jun 2016 22:13:07 -0000 1.57
+++ usb.h 17 Mar 2017 04:55:01 -0000
@@ -32,7 +32,7 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
-
+#define USB_DEBUG
 #ifndef _USB_H_
 #define _USB_H_
 

Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: usbdi.c regression: mouse pointer freeze on two finger gesture

Martin Pieuchot
In reply to this post by Theo Buehler
On 16/03/17(Thu) 12:42, Theo Buehler wrote:

> On Thu, Mar 16, 2017 at 11:00:38AM +0100, Martin Pieuchot wrote:
> > On 16/03/17(Thu) 10:22, Theo Buehler wrote:
> > > On Thu, Mar 16, 2017 at 09:09:49AM +0100, Martin Pieuchot wrote:
> > > > On 15/03/17(Wed) 11:55, Theo Buehler wrote:
> > > > > >Synopsis: two finger gesture leads to mouse pointer freeze
> > > > > >Category: kernel, amd64, usb
> > > > > >Environment:
> > > > > System      : OpenBSD 6.1
> > > > > Details     : OpenBSD 6.1-beta (GENERIC.MP) #20: Wed Mar 15 01:49:05 MDT 2017
> > > > > [hidden email]:/usr/src/sys/arch/amd64/compile/GENERIC.MP
> > > > >
> > > > > Architecture: OpenBSD.amd64
> > > > > Machine     : amd64
> > > > > >Description:
> > > > > Wenever I touch the touchpad of my MacBook pro with two fingers
> > > > > simultaneously, the mouse pointer freezes and remains unusable
> > > > > until I restart X. The output of xinput --test /dev/wsmouse1
> > > > > stops as soon as two fingers touch the pad.
> > > > >
> > > > > >How-To-Repeat:
> > > > > Start an X session, touch touchpad with two fingers simultaneously.
> > > > > >Fix:
> > > > > Reverting usbdi.c to r1.85 fixes the problem.
> > > >
> > > > Does that mean r1.86 introduced the regression?  Do you know which
> > > > commit exactly it is ?
> > >
> > > Yes, r1.85 is good r1.86 is bad.
> >
> > Does enabling UBCMTP_DEBUG gives you more info?  Which error do you get?
> >
> > I'm guessing the driver is working *because* of a use after free.
>
> A two-finger tap gives this message, both with r1.85 and with r1.89:
>
> /bsd: ubcmtp0: ubcmtp_tp_intr with status 0xd
>
> That is to say, USBD_IOERROR.

That confirms my hypotheses.  So basically this driver works because
of a use-after-free.

I'll revert the change as we're too close from the release.  We'll need
to fix that in the next cycle.

Loading...