>Synopsis: assertion failures in relayd after config reload >Category: system >Environment: System : OpenBSD 7.5 Details : OpenBSD 7.5 (GENERIC.MP) #82: Wed Mar 20 15:48:40 MDT 2024 dera...@amd64.openbsd.org:/usr/src/sys/arch/amd64/compile/GENERIC.MP
Architecture: OpenBSD.amd64 Machine : amd64 >Description: When running relayd on FreeBSD, one user reports that relayd occasionally exits with an internal error, typically "pfe: pfe_dispatch_hce: desynchronized" or "relay: relay_dispatch_pfe: invalid host id". The error occurs when relayd's configuration file is reloaded. I reproduced the problem on OpenBSD 7.5, see below for a simple reproducer. In particular, there appears to be a race condition involving three processes: the PFE, the HCE and the parent process. The race goes something like this: 1. The parent process receives SIGHUP, which causes IMSG_CTL_RESET messages to be sent to the PFE and HCE. 2. The HCE sends some IMSG_HOST_STATUS messages to the PFE, following a health check. These messages include a count of the number of checks since the last reset. The PFE keeps track of this count; if it receives a message with a different count from what it expects, it'll exit. 3. The PFE receives IMSG_CTL_RESET and purges all of its state. Then it reloads the configuration and repopulates it. 4. The PFE receives some of the IMSG_HOST_STATUS messages sent in step 2. The check counts contained in those messages are stale, causing errors. This occurs only rarely in production, but it's easy to reproduce by spamming relayd with poll and reload commands in parallel, see below. >How-To-Repeat: 1. Set up a web server, in this example it's at 127.0.0.1:80. 2. Configure relayd using the following configuration: --- table <test> { 127.0.0.1 } redirect "test" { listen on 127.0.0.1 tcp port 8080 forward to <test> port 80 mode roundrobin check http "/" host acs-areq code 200 session timeout 600 } --- 3. Start relayd. Let the following two loops run in parallel: while true; do kill -HUP $(pgrep relayd); sleep 0.01; done while true; do relayctl poll; sleep 0.01; done 4. Observe relayd exiting with an error. >Fix: I don't have a patch for this yet. I'm happy to work on it, especially given some suggestions as to what shape the solution should have. dmesg: OpenBSD 7.5 (GENERIC.MP) #82: Wed Mar 20 15:48:40 MDT 2024 dera...@amd64.openbsd.org:/usr/src/sys/arch/amd64/compile/GENERIC.MP real mem = 489816064 (467MB) avail mem = 454209536 (433MB) random: good seed from bootblocks mpath0 at root scsibus0 at mpath0: 256 targets mainbus0 at root bios0 at mainbus0: SMBIOS rev. 2.8 @ 0x1fbcf000 (11 entries) bios0: vendor BHYVE version "14.0" date 10/17/2021 bios0: FreeBSD BHYVE efi0 at bios0: UEFI 2.7 efi0: BHYVE rev 0x10000 acpi0 at bios0: ACPI 5.1 acpi0: sleep states S5 acpi0: tables DSDT FACP APIC HPET MCFG SPCR BGRT acpi0: wakeup devices acpitimer0 at acpi0: 3579545 Hz, 32 bits acpimadt0 at acpi0 addr 0xfee00000: PC-AT compat cpu0 at mainbus0: apid 0 (boot processor) cpu0: AMD Ryzen 9 7950X3D 16-Core Processor, 4197.26 MHz, 19-61-02 cpu0: FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,MMX,FXSR,SSE,SSE2,HTT,SSE3,PCLMUL,SSSE3,FMA3,CX16,SSE4.1,SSE4.2,MOVBE,POPCNT,AES,XSAVE,AVX,F16C,RDRAND,HV,NXE,MMXX,FFXSR,PAGE1GB,LONG,LAHF,CMPLEG,EAPICSP,AMCR8,ABM,SSE4A,MASSE,3DNOWP,SKINIT,TCE,TOPEXT,DBKP,ITSC,FSGSBASE,BMI1,AVX2,SMEP,BMI2,ERMS,AVX512F,AVX512DQ,RDSEED,SMAP,AVX512CD,SHA,AVX512BW,AVX512VL,XSAVEOPT cpu0: 0KB 64b/line 1-way D-cache, 0KB 64b/line 1-way L2 cache, 0KB 64b/line 1-way L3 cache cpu0: smt 0, core 0, package 0 mtrr: Pentium Pro MTRR support, 10 var ranges, 88 fixed ranges cpu0: apic clock running at 134MHz cpu1 at mainbus0: apid 1 (application processor) cpu1: AMD Ryzen 9 7950X3D 16-Core Processor, 4197.36 MHz, 19-61-02 cpu1: FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,MMX,FXSR,SSE,SSE2,HTT,SSE3,PCLMUL,SSSE3,FMA3,CX16,SSE4.1,SSE4.2,MOVBE,POPCNT,AES,XSAVE,AVX,F16C,RDRAND,HV,NXE,MMXX,FFXSR,PAGE1GB,LONG,LAHF,CMPLEG,EAPICSP,AMCR8,ABM,SSE4A,MASSE,3DNOWP,SKINIT,TCE,TOPEXT,DBKP,ITSC,FSGSBASE,BMI1,AVX2,SMEP,BMI2,ERMS,AVX512F,AVX512DQ,RDSEED,SMAP,AVX512CD,SHA,AVX512BW,AVX512VL,XSAVEOPT cpu1: 0KB 64b/line 1-way D-cache, 0KB 64b/line 1-way L2 cache, 0KB 64b/line 1-way L3 cache cpu1: smt 0, core 0, package 1 ioapic0 at mainbus0: apid 0 pa 0xfec00000, version 11, 32 pins acpihpet0 at acpi0: 16777216 Hz acpimcfg0 at acpi0 acpimcfg0: addr 0xe0000000, bus 0-255 acpiprt0 at acpi0: bus 0 (PC00) acpipci0 at acpi0 PC00 com0 at acpi0 COM1 addr 0x3f8/0x8 irq 4: ns16550a, 16 byte fifo com0: console com1 at acpi0 COM2 addr 0x2f8/0x8 irq 3: ns16550a, 16 byte fifo com2 at acpi0 COM3 addr 0x3e8/0x8 irq 4: ns16550a, 16 byte fifo com3 at acpi0 COM4 addr 0x2e8/0x8 irq 3: ns16550a, 16 byte fifo acpicmos0 at acpi0 "Bhyve_V_Gen_Counter_V1" at acpi0 not configured pvbus0 at mainbus0: bhyve pci0 at mainbus0 bus 0 pchb0 at pci0 dev 0 function 0 unknown vendor 0x1275 product 0x1275 rev 0x00 pcib0 at pci0 dev 1 function 0 "Intel 82371SB ISA" rev 0x00 virtio0 at pci0 dev 2 function 0 "Qumranet Virtio Network" rev 0x00 vio0 at virtio0: address 00:a0:98:6b:69:00 virtio0: msix per-VQ virtio1 at pci0 dev 3 function 0 "Qumranet Virtio Storage" rev 0x00 vioblk0 at virtio1 scsibus1 at vioblk0: 1 targets sd0 at scsibus1 targ 0 lun 0: <VirtIO, Block Device, > sd0: 51200MB, 512 bytes/sector, 104857600 sectors virtio1: msix per-VQ vga1 at pci0 dev 29 function 0 unknown vendor 0xfb5d product 0x40fb rev 0x00 wsdisplay at vga1 not configured isa0 at pcib0 isadma0 at isa0 pckbc0 at isa0 port 0x60/5 irq 1 irq 12 pckbd0 at pckbc0 (kbd slot) wskbd0 at pckbd0 mux 1 pms0 at pckbc0 (aux slot) wsmouse0 at pms0 mux 0 efifb0 at mainbus0: 1024x768, 32bpp wsdisplay0 at efifb0 mux 1 pckbd_enable: command error wsdisplay0: screen 0-5 added (std, vt100 emulation) vscsi0 at root scsibus2 at vscsi0: 256 targets softraid0 at root scsibus3 at softraid0: 256 targets root on sd0a (52b8e1532127cb36.a) swap on sd0b dump on sd0b usbdevs: usbdevs: no USB controllers found pcidump: Domain /dev/pci0: 0:0:0: unknown unknown 0x0000: Vendor ID: 1275, Product ID: 1275 0x0004: Command: 0007, Status: 0010 0x0008: Class: 06 Bridge, Subclass: 00 Host, Interface: 00, Revision: 00 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: 0000 Product ID: 0000 0x0030: Expansion ROM Base Address: 00000000 0x0038: 00000000 0x003c: Interrupt Pin: 00 Line: ff Min Gnt: 00 Max Lat: 00 0x0040: Capability 0x10: PCI Express Max Payload Size: 128 / 128 bytes Max Read Request Size: 128 bytes Link Speed: 2.5 / 2.5 GT/s Link Width: x1 / x1 0x0100: Enhanced Capability 0x00: Unknown 0x0000: 12751275 00100007 06000000 00000000 0x0010: 00000000 00000000 00000000 00000000 0x0020: 00000000 00000000 00000000 00000000 0x0030: 00000000 00000040 00000000 000000ff 0x0040: 00420010 00000000 00000000 00000411 0x0050: 00110000 00000000 00010000 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 00000000 00000000 0:1:0: Intel 82371SB ISA 0x0000: Vendor ID: 8086, Product ID: 7000 0x0004: Command: 0017, Status: 0000 0x0008: Class: 06 Bridge, Subclass: 01 ISA, Interface: 00, Revision: 00 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: 0000 Product ID: 0000 0x0030: Expansion ROM Base Address: 00000000 0x0038: 00000000 0x003c: Interrupt Pin: 00 Line: ff Min Gnt: 00 Max Lat: 00 0x0000: 70008086 00000017 06010000 00000000 0x0010: 00000000 00000000 00000000 00000000 0x0020: 00000000 00000000 00000000 00000000 0x0030: 00000000 00000000 00000000 000000ff 0x0040: 00000000 00000000 00000000 00000000 0x0050: 00000000 00000000 00000000 00000000 0x0060: 0a0a0b0b 00000000 05808080 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 00000000 00000000 0:2:0: Qumranet Virtio Network 0x0000: Vendor ID: 1af4, Product ID: 1000 0x0004: Command: 0017, Status: 0010 0x0008: Class: 02 Network, Subclass: 00 Ethernet, Interface: 00, Revision: 00 0x000c: BIST: 00, Header Type: 00, Latency Timer: 00, Cache Line Size: 00 0x0010: BAR io addr: 0x00002080/0x0040 0x0014: BAR mem 32bit addr: 0xc1002000/0x00002000 0x0018: BAR empty (00000000) 0x001c: BAR empty (00000000) 0x0020: BAR empty (00000000) 0x0024: BAR empty (00000000) 0x0028: Cardbus CIS: 00000000 0x002c: Subsystem Vendor ID: 1af4 Product ID: 0001 0x0030: Expansion ROM Base Address: 00000000 0x0038: 00000000 0x003c: Interrupt Pin: 01 Line: 0a Min Gnt: 00 Max Lat: 00 0x0040: Capability 0x11: Extended Message Signalled Interrupts (MSI-X) Enabled: yes; table size 3 (BAR 1:0) 0x004c: Capability 0x05: Message Signalled Interrupts (MSI) Enabled: no; 1 vectors (1 enabled) 0x0000: 10001af4 00100017 02000000 00000000 0x0010: 00002081 c1002000 00000000 00000000 0x0020: 00000000 00000000 00000000 00011af4 0x0030: 00000000 00000040 00000000 0000010a 0x0040: 80024c11 00000001 00001001 00800005 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: 00000000 00000000 00000000 00000000 0:3:0: Qumranet Virtio Storage 0x0000: Vendor ID: 1af4, Product ID: 1001 0x0004: Command: 0017, Status: 0010 0x0008: Class: 01 Mass Storage, Subclass: 00 SCSI, Interface: 00, Revision: 00 0x000c: BIST: 00, Header Type: 00, Latency Timer: 00, Cache Line Size: 00 0x0010: BAR io addr: 0x00002000/0x0080 0x0014: BAR mem 32bit addr: 0xc1000000/0x00002000 0x0018: BAR empty (00000000) 0x001c: BAR empty (00000000) 0x0020: BAR empty (00000000) 0x0024: BAR empty (00000000) 0x0028: Cardbus CIS: 00000000 0x002c: Subsystem Vendor ID: 1af4 Product ID: 0002 0x0030: Expansion ROM Base Address: 00000000 0x0038: 00000000 0x003c: Interrupt Pin: 01 Line: 0b Min Gnt: 00 Max Lat: 00 0x0040: Capability 0x11: Extended Message Signalled Interrupts (MSI-X) Enabled: yes; table size 2 (BAR 1:0) 0x004c: Capability 0x05: Message Signalled Interrupts (MSI) Enabled: no; 1 vectors (1 enabled) 0x0000: 10011af4 00100017 01000000 00000000 0x0010: 00002001 c1000000 00000000 00000000 0x0020: 00000000 00000000 00000000 00021af4 0x0030: 00000000 00000040 00000000 0000010b 0x0040: 80014c11 00000001 00001001 00800005 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: 00000000 00000000 00000000 00000000 0:29:0: unknown unknown 0x0000: Vendor ID: fb5d, Product ID: 40fb 0x0004: Command: 0017, Status: 0010 0x0008: Class: 03 Display, Subclass: 00 VGA, Interface: 00, Revision: 00 0x000c: BIST: 00, Header Type: 00, Latency Timer: 00, Cache Line Size: 00 0x0010: BAR mem 32bit addr: 0xc1004000/0x00000080 0x0014: BAR mem 32bit addr: 0xc0000000/0x01000000 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: 00 Line: ff Min Gnt: 00 Max Lat: 00 0x0040: Capability 0x05: Message Signalled Interrupts (MSI) Enabled: no; 4 vectors (1 enabled) 0x0000: 40fbfb5d 00100017 03000000 00000000 0x0010: c1004000 c0000000 00000000 00000000 0x0020: 00000000 00000000 00000000 00000000 0x0030: 00000000 00000040 00000000 000000ff 0x0040: 00840005 00000000 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: 00000000 00000000 00000000 00000000 acpidump: begin-base64 644 APIC.3 QVBJQ2IAAAABkkJIWVZFIEJWQVBJQyAAAQAAAEJBU0wEBSIgAADg/gEAAAAACAAAAQAAAAAIAQEB AAAAAQwAAAAAwP4AAAAAAgoAAAIAAAAFAAIKAAkJAAAADwAEBv8FAAE= ==== begin-base64 644 BGRT.7 QkdSVDgAAAABGElOVEVMIEVESzIgICAgAgAAACAgICATAAABAQABABjAzB4AAAAAnwEAAGMBAAA= ==== begin-base64 644 DSDT.2 RFNEVPkJAAACu0JIWVZFIEJWRFNEVCAgAQAAAElOVEwgECIgCF9TNV8SBQIKBQAIUElDTQAUDF9Q SUMBcGhQSUNNEEaPX1NCX1uCTo5QQzAwCF9ISUQMQdAKAxQIX0JCTgCkAAhfQ1JTEUYJCpKIDQAC DAAAAAAAAAAAAAEARwH4DPgMAQiIDQABDAMAAAAA9wwAAPgMiA0AAQwDAAAADf8fAAAAE4gNAAEM AwAAACDfIAAA4ACHFwAADAEAAAAAAAAAwP//H8EAAAAAAAAgAYorAAAMAQAAAAAAAAAAAAAAAAgA AAD///8fCAAAAAAAAAAAAAAAAAAAIAAAAAB5AAhQUFJUEigCEhIEDP//AgAALklTQV9MTktIABIS BAz//wMAAC5JU0FfTE5LQQAIQVBSVBIaAhILBAz//wIAAAAKFxILBAz//wMAAAAKEBQYX1BSVACg ClBJQ02kQVBSVKEGpFBQUlRbgkB9SVNBXwhfQURSDAAAAQBbgExQQ1ICAAsAAVuBM0xQQ1IAAEAw UElSQQhQSVJCCFBJUkMIUElSRAgAIFBJUkUIUElSRghQSVJHCFBJUkgIW4ItS0JEXwhfSElEDEHQ AwMIX0NSUxEYChVHAWAAYAABAUcBZABkAAEBIgIAeQBbgi1NT1VfCF9ISUQMQdAPEwhfQ1JTERgK FUcBYABgAAEBRwFkAGQAAQEiABB5ABQuUElSVgGgCHtoCoAApAB7aAoPYKAHlWAKA6QAoAeTYAoI pACgB5NgCg2kAKQBW4JKCkxOS0EIX0hJRAxB0AwPCF9VSUQBFBhfU1RBAKAMUElSVlBJUkGkCguh BKQKCQhfUFJTEQkKBiP43hh5AAhDQjAxEQkKBiMAABh5AItDQjAxAUNJUkEUKV9DUlMAe1BJUkEK j2CgDVBJUlZgeQFgQ0lSQaEHcABDSVJBpENCMDEUDV9ESVMAcAqAUElSQRQaX1NSUwGLaAFTSVJB glNJUkFgcHZgUElSQVuCSwpMTktCCF9ISUQMQdAMDwhfVUlECgIUGF9TVEEAoAxQSVJWUElSQqQK C6EEpAoJCF9QUlMRCQoGI/jeGHkACENCMDIRCQoGIwAAGHkAi0NCMDIBQ0lSQhQpX0NSUwB7UElS QgqPYKANUElSVmB5AWBDSVJCoQdwAENJUkKkQ0IwMhQNX0RJUwBwCoBQSVJCFBpfU1JTAYtoAVNJ UkKCU0lSQmBwdmBQSVJCW4JLCkxOS0MIX0hJRAxB0AwPCF9VSUQKAxQYX1NUQQCgDFBJUlZQSVJD pAoLoQSkCgkIX1BSUxEJCgYj+N4YeQAIQ0IwMxEJCgYjAAAYeQCLQ0IwMwFDSVJDFClfQ1JTAHtQ SVJDCo9goA1QSVJWYHkBYENJUkOhB3AAQ0lSQ6RDQjAzFA1fRElTAHAKgFBJUkMUGl9TUlMBi2gB U0lSQ4JTSVJDYHB2YFBJUkNbgksKTE5LRAhfSElEDEHQDA8IX1VJRAoEFBhfU1RBAKAMUElSVlBJ UkSkCguhBKQKCQhfUFJTEQkKBiP43hh5AAhDQjA0EQkKBiMAABh5AItDQjA0AUNJUkQUKV9DUlMA e1BJUkQKj2CgDVBJUlZgeQFgQ0lSRKEHcABDSVJEpENCMDQUDV9ESVMAcAqAUElSRBQaX1NSUwGL aAFTSVJEglNJUkRgcHZgUElSRFuCSwpMTktFCF9ISUQMQdAMDwhfVUlECgUUGF9TVEEAoAxQSVJW UElSRaQKC6EEpAoJCF9QUlMRCQoGI/jeGHkACENCMDURCQoGIwAAGHkAi0NCMDUBQ0lSRRQpX0NS UwB7UElSRQqPYKANUElSVmB5AWBDSVJFoQdwAENJUkWkQ0IwNRQNX0RJUwBwCoBQSVJFFBpfU1JT AYtoAVNJUkWCU0lSRWBwdmBQSVJFW4JLCkxOS0YIX0hJRAxB0AwPCF9VSUQKBhQYX1NUQQCgDFBJ UlZQSVJGpAoLoQSkCgkIX1BSUxEJCgYj+N4YeQAIQ0IwNhEJCgYjAAAYeQCLQ0IwNgFDSVJGFClf Q1JTAHtQSVJGCo9goA1QSVJWYHkBYENJUkahB3AAQ0lSRqRDQjA2FA1fRElTAHAKgFBJUkYUGl9T UlMBi2gBU0lSRoJTSVJGYHB2YFBJUkZbgksKTE5LRwhfSElEDEHQDA8IX1VJRAoHFBhfU1RBAKAM UElSVlBJUkekCguhBKQKCQhfUFJTEQkKBiP43hh5AAhDQjA3EQkKBiMAABh5AItDQjA3AUNJUkcU KV9DUlMAe1BJUkcKj2CgDVBJUlZgeQFgQ0lSR6EHcABDSVJHpENCMDcUDV9ESVMAcAqAUElSRxQa X1NSUwGLaAFTSVJHglNJUkdgcHZgUElSR1uCSwpMTktICF9ISUQMQdAMDwhfVUlECggUGF9TVEEA oAxQSVJWUElSSKQKC6EEpAoJCF9QUlMRCQoGI/jeGHkACENCMDgRCQoGIwAAGHkAi0NCMDgBQ0lS SBQpX0NSUwB7UElSSAqPYKANUElSVmB5AWBDSVJIoQdwAENJUkikQ0IwOBQNX0RJUwBwCoBQSVJI FBpfU1JTAYtoAVNJUkiCU0lSSGBwdmBQSVJIW4JIBVNJT18IX0hJRAxB0AwCCF9DUlMRQgQKPoYJ AAEAAADgAAAAEEcB0ATQBAECRwFhAGEAAQFHAQAEAAQBCEcBsgCyAAEBRwGEAIQAAQFHAXIAcgAB BnkAW4IrQ09NMQhfSElEDEHQBQEIX1VJRAEIX0NSUxEQCg1HAfgD+AMBCCIQAHkAW4IsQ09NMghf SElEDEHQBQEIX1VJRAoCCF9DUlMREAoNRwH4AvgCAQgiCAB5AFuCLENPTTMIX0hJRAxB0AUBCF9V SUQKAwhfQ1JTERAKDUcB6APoAwEIIhAAeQBbgixDT000CF9ISUQMQdAFAQhfVUlECgQIX0NSUxEQ Cg1HAegC6AIBCCIIAHkAW4IlUlRDXwhfSElEDEHQCwAIX0NSUxEQCg1HAXAAcAABAiIAAXkAW4Ir UElDXwhfSElEC0HQCF9DUlMRGAoVRwEgACAAAQJHAaAAoAABAiIEAHkAW4IlVElNUghfSElEDEHQ AQAIX0NSUxEQCg1HAUAAQAABBCIBAHkAEDguX1NCX1BDMDBbgixIUEVUCF9ISUQMQdABAwhfVUlE AAhfQ1JTEREKDoYJAAEAAND+AAQAAHkAEEwGX1NCX1uCRAZHRU5DCF9DSUQNVk1fR2VuX0NvdW50 ZXIAFB9fSElEAKQNQmh5dmVfVl9HZW5fQ291bnRlcl9WMQAIX1VJRAAIX0RETg1WTV9HZW5fQ291 bnRlcgAIQUREUhIIAgwAAAD/ABAZX0dQRRQTX0UwMACGXC5fU0JfR0VOQwqA ==== begin-base64 644 FACP.1 RkFDUBQBAAAFkkJIWVZFIEJWRkFDUCAAAQAAAEJBU0wEBSIgAOC/HwAwvx8AAAkAsgAAAKChAAAA BAAAAAAAAAQEAAAAAAAAAAAAAAgEAAAMBAAAAAAAAAQCAAQCAAAAAAAAAAAAAAAAAAAAMhQAACUV CAABCAAB+QwAAAAAAAAGAAABAAAAAAAAAAAAML8fAAAAAAEgAAIABAAAAAAAAAEAAAAAAAAAAAAA AAEQAAIEBAAAAAAAAAEAAAAAAAAAAAAAAAEIAAAAAAAAAAAAAAEgAAMIBAAAAAAAAAEQAAEMBAAA AAAAAAEAAAAAAAAAAAAAAAEIAAEAAAAAAAAAAAEIAAEAAAAAAAAAAAAAAAAAAAAA ==== begin-base64 644 HPET.4 SFBFVDgAAAABxEJIWVZFIEJWSFBFVCAAAQAAAEJBU0wEBSIgAQeGgAAAAAAAAND+AAAAAAAAAAE= ==== begin-base64 644 MCFG.5 TUNGRzwAAAAB5kJIWVZFIEJWTUNGRyAAAQAAAEJBU0wEBSIgAAAAAAAAAAAAAADgAAAAAAAAAP8A AAAA ==== begin-base64 644 SPCR.6 U1BDUlAAAAABZUJIWVZFIEJWU1BDUiAAAQAAAEJBU0wEBSIgAAAAAAEIAAD4AwAAAAAAAAEEAAAA AAcAAQMCAAAAAAAAAAAAAAAAAAAAAAA= ==== begin-base64 644 XSDT.0 WFNEVFQAAAAB3UJIWVZFIEJWRkFDUCAAAQAAACAgICATAAABAIC/HwAAAAAAcL8fAAAAAABgvx8A AAAAAFC/HwAAAAAAQL8fAAAAAAAAMh4AAAAA ==== begin-base64 644 headers ClJTRCBQVFI6IENoZWNrc3VtPTk1LCBPRU1JRD1CSFlWRSwgUmV2aXNpb249MiwgUnNkdEFkZHJl c3M9MHgxZmJmOTA3NAoJTGVuZ3RoPTM2LCBYc2R0QWRkcmVzcz0weDAwMDAwMDAwMWZiZjkwZTgs IEV4dGVuZGVkIENoZWNrc3VtPTEzNAoKClhTRFQ6IExlbmd0aD04NCwgUmV2aXNpb249MSwgQ2hl Y2tzdW09MjIxLAoJT0VNSUQ9QkhZVkUsIE9FTSBUYWJsZSBJRD1CVkZBQ1AsIE9FTSBSZXZpc2lv bj0weDEsCglDcmVhdG9yIElEPSwgQ3JlYXRvciBSZXZpc2lvbj0weDEwMDAwMTMKCgoJRW50cmll cz17IDB4MDAwMDAwMDAxZmJmODAwMCwgMHgwMDAwMDAwMDFmYmY3MDAwLCAweDAwMDAwMDAwMWZi ZjYwMDAsIDB4MDAwMDAwMDAxZmJmNTAwMCwgMHgwMDAwMDAwMDFmYmY0MDAwLCAweDAwMDAwMDAw MWUzMjAwMDAgfQoKCglEU0RUPTB4MWZiZjMwMDAKCUlOVF9NT0RFTD1QSUMKCVNDSV9JTlQ9OQoJ U01JX0NNRD0weGIyLCBBQ1BJX0VOQUJMRT0weGEwLCBBQ1BJX0RJU0FCTEU9MHhhMSwgUzRCSU9T X1JFUT0weDAKCVBNMWFfRVZUX0JMSz0weDQwMC0weDQwMwoJUE0xYV9DTlRfQkxLPTB4NDA0LTB4 NDA1CglQTTJfVE1SX0JMSz0weDQwOC0weDQwYgoJUE0yX0dQRTBfQkxLPTB4NDBjLTB4NDBkCglQ X0xWTDJfTEFUPTBtcywgUF9MVkwzX0xBVD0wbXMKCUZMVVNIX1NJWkU9MCwgRkxVU0hfU1RSSURF PTAKCURVVFlfT0ZGU0VUPTAsIERVVFlfV0lEVEg9MAoJREFZX0FMUk09MCwgTU9OX0FMUk09MCwg Q0VOVFVSWT01MAoJRmxhZ3M9e1dCSU5WRCxQUk9DX0MxLFNMUF9CVVRUT04sVE1SX1ZBTF9FWFR9 CgoKRFNEVDogTGVuZ3RoPTI1NTMsIFJldmlzaW9uPTIsIENoZWNrc3VtPTE4NywKCU9FTUlEPUJI WVZFLCBPRU0gVGFibGUgSUQ9QlZEU0RULCBPRU0gUmV2aXNpb249MHgxLAoJQ3JlYXRvciBJRD1J TlRMLCBDcmVhdG9yIFJldmlzaW9uPTB4MjAyMjEwMjAKCgpBUElDOiBMZW5ndGg9OTgsIFJldmlz aW9uPTEsIENoZWNrc3VtPTE0NiwKCU9FTUlEPUJIWVZFLCBPRU0gVGFibGUgSUQ9QlZBUElDLCBP RU0gUmV2aXNpb249MHgxLAoJQ3JlYXRvciBJRD1CQVNMLCBDcmVhdG9yIFJldmlzaW9uPTB4MjAy MjA1MDQKCgpIUEVUOiBMZW5ndGg9NTYsIFJldmlzaW9uPTEsIENoZWNrc3VtPTE5NiwKCU9FTUlE PUJIWVZFLCBPRU0gVGFibGUgSUQ9QlZIUEVULCBPRU0gUmV2aXNpb249MHgxLAoJQ3JlYXRvciBJ RD1CQVNMLCBDcmVhdG9yIFJldmlzaW9uPTB4MjAyMjA1MDQKCgpNQ0ZHOiBMZW5ndGg9NjAsIFJl dmlzaW9uPTEsIENoZWNrc3VtPTIzMCwKCU9FTUlEPUJIWVZFLCBPRU0gVGFibGUgSUQ9QlZNQ0ZH LCBPRU0gUmV2aXNpb249MHgxLAoJQ3JlYXRvciBJRD1CQVNMLCBDcmVhdG9yIFJldmlzaW9uPTB4 MjAyMjA1MDQKCgpTUENSOiBMZW5ndGg9ODAsIFJldmlzaW9uPTEsIENoZWNrc3VtPTEwMSwKCU9F TUlEPUJIWVZFLCBPRU0gVGFibGUgSUQ9QlZTUENSLCBPRU0gUmV2aXNpb249MHgxLAoJQ3JlYXRv ciBJRD1CQVNMLCBDcmVhdG9yIFJldmlzaW9uPTB4MjAyMjA1MDQKCgpCR1JUOiBMZW5ndGg9NTYs IFJldmlzaW9uPTEsIENoZWNrc3VtPTI0LAoJT0VNSUQ9SU5URUwsIE9FTSBUYWJsZSBJRD1FREsy LCBPRU0gUmV2aXNpb249MHgyLAoJQ3JlYXRvciBJRD0sIENyZWF0b3IgUmV2aXNpb249MHgxMDAw MDEzCgo= ====