From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56481) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dwdX2-0004lu-CB for qemu-devel@nongnu.org; Mon, 25 Sep 2017 20:15:49 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dwdWg-00004s-B9 for qemu-devel@nongnu.org; Mon, 25 Sep 2017 20:15:24 -0400 From: Alistair Francis Date: Mon, 25 Sep 2017 17:08:52 -0700 Message-ID: In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PATCH v1 3/8] hw: Replace fprintf(stderr, "*\n" with error_report() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: alistair.francis@xilinx.com, alistair23@gmail.com, armbru@redhat.com, Andrzej Zaborowski , Jan Kiszka , Stefan Hajnoczi , Paolo Bonzini , Thomas Huth , Gerd Hoffmann , "Michael S. Tsirkin" , Richard Henderson , Eduardo Habkost , Stefano Stabellini , Anthony Perard , John Snow , Christian Borntraeger , Cornelia Huck , Alexander Graf , Michael Walle , Paul Burton , Aurelien Jarno , Yongbok Kim , =?UTF-8?q?Herv=C3=A9=20Poussineau?= , Anthony Green , Jason Wang , Chris Wulff , Marek Vasut , Jia Liu , Stafford Horne , Marcel Apfelbaum , Magnus Damm , Fabien Chouteau , Mark Cave-Ayland , Artyom Tarasenko , qemu-arm@nongnu.org, qemu-block@nongnu.org, xen-devel@lists.xenproject.org, qemu-ppc@nongnu.org Replace a large number of the fprintf(stderr, "*\n" calls with error_report(). The functions were renamed with these commands and then compiler issues where manually fixed. find ./* -type f -exec sed -i \ 'N;N;N;N;N;N;N;N;N;N;N;N; {s|fprintf(stderr, "\(.*\)\\n"\(.*\));|error_= report("\1"\2);|Ig}' \ {} + find ./* -type f -exec sed -i \ 'N;N;N;N;N;N;N;N;N;N;N; {s|fprintf(stderr, "\(.*\)\\n"\(.*\));|error_re= port("\1"\2);|Ig}' \ {} + find ./* -type f -exec sed -i \ 'N;N;N;N;N;N;N;N;N; {s|fprintf(stderr, "\(.*\)\\n"\(.*\));|error_report= ("\1"\2);|Ig}' \ {} + find ./* -type f -exec sed -i \ 'N;N;N;N;N;N;N;N; {s|fprintf(stderr, "\(.*\)\\n"\(.*\));|error_report("= \1"\2);|Ig}' \ {} + find ./* -type f -exec sed -i \ 'N;N;N;N;N;N;N; {s|fprintf(stderr, "\(.*\)\\n"\(.*\));|error_report("\1= "\2);|Ig}' \ {} + find ./* -type f -exec sed -i \ 'N;N;N;N;N;N; {s|fprintf(stderr, "\(.*\)\\n"\(.*\));|error_report("\1"\= 2);|Ig}' \ {} + find ./* -type f -exec sed -i \ 'N;N;N;N;N; {s|fprintf(stderr, "\(.*\)\\n"\(.*\));|error_report("\1"\2)= ;|Ig}' \ {} + find ./* -type f -exec sed -i \ 'N;N;N;N; {s|fprintf(stderr, "\(.*\)\\n"\(.*\));|error_report("\1"\2);|= Ig}' \ {} + find ./* -type f -exec sed -i \ 'N;N;N; {s|fprintf(stderr, "\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig= }' \ {} + find ./* -type f -exec sed -i \ 'N;N; {s|fprintf(stderr, "\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}'= \ {} + find ./* -type f -exec sed -i \ 'N; {s|fprintf(stderr, "\(.*\)\\n"\(.*\));|error_report("\1"\2);|Ig}' \ {} + Some lines where then manually tweaked to pass checkpatch. Signed-off-by: Alistair Francis Cc: Andrzej Zaborowski Cc: Jan Kiszka Cc: Stefan Hajnoczi Cc: Paolo Bonzini Cc: Thomas Huth Cc: Gerd Hoffmann Cc: "Michael S. Tsirkin" Cc: Richard Henderson Cc: Eduardo Habkost Cc: Stefano Stabellini Cc: Anthony Perard Cc: John Snow Cc: Christian Borntraeger Cc: Cornelia Huck Cc: Alexander Graf Cc: Michael Walle Cc: Paul Burton Cc: Aurelien Jarno Cc: Yongbok Kim Cc: "Herv=C3=A9 Poussineau" Cc: Anthony Green Cc: Jason Wang Cc: Chris Wulff Cc: Marek Vasut Cc: Jia Liu Cc: Stafford Horne Cc: Marcel Apfelbaum Cc: Magnus Damm Cc: Fabien Chouteau Cc: Mark Cave-Ayland Cc: Artyom Tarasenko Cc: qemu-arm@nongnu.org Cc: qemu-block@nongnu.org Cc: xen-devel@lists.xenproject.org Cc: qemu-ppc@nongnu.org --- hw/arm/armv7m.c | 2 +- hw/arm/boot.c | 34 +++++++++---------- hw/arm/gumstix.c | 13 ++++---- hw/arm/mainstone.c | 7 ++-- hw/arm/musicpal.c | 2 +- hw/arm/omap1.c | 5 +-- hw/arm/omap2.c | 21 ++++++------ hw/arm/omap_sx1.c | 6 ++-- hw/arm/palm.c | 10 +++--- hw/arm/pxa2xx.c | 7 ++-- hw/arm/stellaris.c | 3 +- hw/arm/tosa.c | 17 +++++----- hw/arm/versatilepb.c | 2 +- hw/arm/vexpress.c | 8 ++--- hw/arm/z2.c | 6 ++-- hw/block/dataplane/virtio-blk.c | 6 ++-- hw/block/onenand.c | 8 ++--- hw/block/tc58128.c | 44 ++++++++++++------------- hw/bt/core.c | 15 +++++---- hw/bt/hci-csr.c | 17 +++++----- hw/bt/hci.c | 30 ++++++++--------- hw/bt/hid.c | 2 +- hw/bt/l2cap.c | 47 ++++++++++++++------------- hw/bt/sdp.c | 7 ++-- hw/char/exynos4210_uart.c | 6 ++-- hw/char/mcf_uart.c | 5 +-- hw/char/sh_serial.c | 9 +++--- hw/core/loader.c | 31 +++++++++--------- hw/core/ptimer.c | 7 ++-- hw/cris/axis_dev88.c | 3 +- hw/cris/boot.c | 5 +-- hw/display/blizzard.c | 20 ++++++------ hw/display/omap_dss.c | 14 ++++---- hw/display/pl110.c | 2 +- hw/display/pxa2xx_lcd.c | 2 +- hw/display/qxl-render.c | 7 ++-- hw/display/qxl.c | 10 +++--- hw/display/tc6393xb.c | 36 ++++++++++++--------- hw/display/virtio-gpu-3d.c | 4 +-- hw/display/vmware_vga.c | 22 ++++++------- hw/dma/omap_dma.c | 26 ++++++++------- hw/dma/soc_dma.c | 37 ++++++++++----------- hw/gpio/omap_gpio.c | 2 +- hw/i2c/omap_i2c.c | 10 +++--- hw/i386/kvm/apic.c | 9 +++--- hw/i386/kvm/clock.c | 7 ++-- hw/i386/kvm/i8254.c | 7 ++-- hw/i386/kvm/i8259.c | 5 +-- hw/i386/kvm/ioapic.c | 5 +-- hw/i386/multiboot.c | 21 ++++++------ hw/i386/pc.c | 18 +++++------ hw/i386/pc_piix.c | 2 +- hw/i386/pc_sysfw.c | 5 +-- hw/i386/xen/xen-hvm.c | 32 +++++++++--------- hw/i386/xen/xen-mapcache.c | 12 +++---- hw/i386/xen/xen_apic.c | 2 +- hw/ide/ahci.c | 6 ++-- hw/ide/core.c | 2 +- hw/input/lm832x.c | 6 ++-- hw/input/pckbd.c | 3 +- hw/input/pxa2xx_keypad.c | 2 +- hw/input/tsc2005.c | 17 +++++----- hw/input/tsc210x.c | 72 ++++++++++++++++++++-----------------= ---- hw/input/virtio-input-hid.c | 14 ++++---- hw/input/virtio-input.c | 5 +-- hw/intc/arm_gic_kvm.c | 12 +++---- hw/intc/omap_intc.c | 4 +-- hw/intc/openpic.c | 7 ++-- hw/intc/openpic_kvm.c | 8 ++--- hw/intc/s390_flic_kvm.c | 4 +-- hw/ipmi/ipmi.c | 1 + hw/ipmi/ipmi_bmc_extern.c | 5 +-- hw/isa/isa-bus.c | 7 ++-- hw/lm32/lm32_boards.c | 5 +-- hw/lm32/milkymist.c | 5 +-- hw/m68k/an5206.c | 4 +-- hw/m68k/mcf5206.c | 3 +- hw/m68k/mcf5208.c | 7 ++-- hw/microblaze/boot.c | 2 +- hw/mips/boston.c | 4 +-- hw/mips/mips_fulong2e.c | 4 +-- hw/mips/mips_jazz.c | 4 +-- hw/mips/mips_malta.c | 4 +-- hw/mips/mips_mipssim.c | 4 +-- hw/mips/mips_r4k.c | 6 ++-- hw/misc/a9scu.c | 3 +- hw/misc/omap_gpmc.c | 11 ++++--- hw/misc/omap_l4.c | 5 +-- hw/misc/omap_sdrc.c | 3 +- hw/misc/vmport.c | 2 +- hw/moxie/moxiesim.c | 7 ++-- hw/net/fsl_etsec/etsec.c | 2 +- hw/net/pcnet.c | 2 +- hw/net/smc91c111.c | 5 +-- hw/net/vhost_net.c | 16 ++++----- hw/nios2/boot.c | 2 +- hw/nvram/eeprom93xx.c | 5 +-- hw/nvram/fw_cfg.c | 4 +-- hw/openrisc/openrisc_sim.c | 3 +- hw/pci-host/bonito.c | 6 ++-- hw/pci/pci.c | 10 +++--- hw/ppc/e500.c | 20 ++++++------ hw/ppc/mac_newworld.c | 2 +- hw/ppc/mac_oldworld.c | 2 +- hw/ppc/mpc8544_guts.c | 5 +-- hw/ppc/ppc405_boards.c | 8 ++--- hw/ppc/ppc440_bamboo.c | 19 +++++------ hw/ppc/ppc4xx_pci.c | 3 +- hw/ppc/prep.c | 4 +-- hw/ppc/virtex_ml507.c | 4 +-- hw/s390x/virtio-ccw.c | 2 +- hw/scsi/lsi53c895a.c | 4 +-- hw/scsi/spapr_vscsi.c | 49 ++++++++++++++-------------- hw/scsi/virtio-scsi-dataplane.c | 6 ++-- hw/sd/pl181.c | 5 +-- hw/sd/sd.c | 14 ++++---- hw/sh4/r2d.c | 9 +++--- hw/sh4/sh7750.c | 64 ++++++++++++++++++------------------ hw/sparc/leon3.c | 9 +++--- hw/sparc/sun4m.c | 8 ++--- hw/sparc64/niagara.c | 2 +- hw/sparc64/sun4u.c | 9 +++--- hw/ssi/omap_spi.c | 5 +-- hw/timer/omap_gptimer.c | 11 ++++--- hw/timer/twl92230.c | 2 +- hw/timer/xilinx_timer.c | 8 ++--- hw/usb/core.c | 15 +++++---- hw/usb/desc.c | 4 +-- hw/usb/dev-audio.c | 29 +++++++++-------- hw/usb/dev-bluetooth.c | 4 +-- hw/usb/dev-mtp.c | 9 +++--- hw/usb/dev-network.c | 20 ++++++------ hw/usb/hcd-ehci.c | 32 +++++++++--------- hw/usb/hcd-musb.c | 4 +-- hw/usb/hcd-xhci.c | 3 +- hw/usb/host-legacy.c | 2 +- hw/watchdog/watchdog.c | 9 +++--- hw/watchdog/wdt_i6300esb.c | 8 +++-- hw/xen/xen-common.c | 10 +++--- hw/xen/xen_pt.c | 4 +-- hw/xenpv/xen_domainbuild.c | 24 +++++++------- hw/xenpv/xen_machine_pv.c | 8 ++--- 142 files changed, 769 insertions(+), 705 deletions(-) diff --git a/hw/arm/armv7m.c b/hw/arm/armv7m.c index bb2dfc942b..56770a7048 100644 --- a/hw/arm/armv7m.c +++ b/hw/arm/armv7m.c @@ -278,7 +278,7 @@ void armv7m_load_kernel(ARMCPU *cpu, const char *kernel= _filename, int mem_size) #endif =20 if (!kernel_filename && !qtest_enabled()) { - fprintf(stderr, "Guest image must be specified (using -kernel)\n")= ; + error_report("Guest image must be specified (using -kernel)"); exit(1); } =20 diff --git a/hw/arm/boot.c b/hw/arm/boot.c index c2720c8046..5b2d17f08a 100644 --- a/hw/arm/boot.c +++ b/hw/arm/boot.c @@ -8,6 +8,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "qapi/error.h" #include #include "hw/hw.h" @@ -418,13 +419,13 @@ static int load_dtb(hwaddr addr, const struct arm_boo= t_info *binfo, char *filename; filename =3D qemu_find_file(QEMU_FILE_TYPE_BIOS, binfo->dtb_filena= me); if (!filename) { - fprintf(stderr, "Couldn't open dtb file %s\n", binfo->dtb_file= name); + error_report("Couldn't open dtb file %s", binfo->dtb_filename)= ; goto fail; } =20 fdt =3D load_device_tree(filename, &size); if (!fdt) { - fprintf(stderr, "Couldn't open dtb file %s\n", filename); + error_report("Couldn't open dtb file %s", filename); g_free(filename); goto fail; } @@ -432,7 +433,7 @@ static int load_dtb(hwaddr addr, const struct arm_boot_= info *binfo, } else { fdt =3D binfo->get_dtb(binfo, &size); if (!fdt) { - fprintf(stderr, "Board was unable to create a dtb blob\n"); + error_report("Board was unable to create a dtb blob"); goto fail; } } @@ -451,7 +452,7 @@ static int load_dtb(hwaddr addr, const struct arm_boot_= info *binfo, scells =3D qemu_fdt_getprop_cell(fdt, "/", "#size-cells", NULL, &error_fatal); if (acells =3D=3D 0 || scells =3D=3D 0) { - fprintf(stderr, "dtb file invalid (#address-cells or #size-cells 0= )\n"); + error_report("dtb file invalid (#address-cells or #size-cells 0)")= ; goto fail; } =20 @@ -459,8 +460,7 @@ static int load_dtb(hwaddr addr, const struct arm_boot_= info *binfo, /* This is user error so deserves a friendlier error message * than the failure of setprop_sized_cells would provide */ - fprintf(stderr, "qemu: dtb file not compatible with " - "RAM size > 4GB\n"); + error_report("qemu: dtb file not compatible with RAM size > 4GB"); goto fail; } =20 @@ -480,7 +480,7 @@ static int load_dtb(hwaddr addr, const struct arm_boot_= info *binfo, acells, mem_base, scells, mem_len); if (rc < 0) { - fprintf(stderr, "couldn't set %s/reg for node %d\n", noden= ame, + error_report("couldn't set %s/reg for node %d", nodename, i); goto fail; } @@ -505,7 +505,7 @@ static int load_dtb(hwaddr addr, const struct arm_boot_= info *binfo, acells, binfo->loader_start, scells, binfo->ram_size); if (rc < 0) { - fprintf(stderr, "couldn't set /memory/reg\n"); + error_report("couldn't set /memory/reg"); goto fail; } } @@ -519,7 +519,7 @@ static int load_dtb(hwaddr addr, const struct arm_boot_= info *binfo, rc =3D qemu_fdt_setprop_string(fdt, "/chosen", "bootargs", binfo->kernel_cmdline); if (rc < 0) { - fprintf(stderr, "couldn't set /chosen/bootargs\n"); + error_report("couldn't set /chosen/bootargs"); goto fail; } } @@ -528,14 +528,14 @@ static int load_dtb(hwaddr addr, const struct arm_boo= t_info *binfo, rc =3D qemu_fdt_setprop_cell(fdt, "/chosen", "linux,initrd-start", binfo->initrd_start); if (rc < 0) { - fprintf(stderr, "couldn't set /chosen/linux,initrd-start\n"); + error_report("couldn't set /chosen/linux,initrd-start"); goto fail; } =20 rc =3D qemu_fdt_setprop_cell(fdt, "/chosen", "linux,initrd-end", binfo->initrd_start + binfo->initrd_siz= e); if (rc < 0) { - fprintf(stderr, "couldn't set /chosen/linux,initrd-end\n"); + error_report("couldn't set /chosen/linux,initrd-end"); goto fail; } } @@ -690,7 +690,7 @@ static void load_image_to_fw_cfg(FWCfgState *fw_cfg, ui= nt16_t size_key, gsize length; =20 if (!g_file_get_contents(image_name, &contents, &length, NULL)) { - fprintf(stderr, "failed to load \"%s\"\n", image_name); + error_report("failed to load \"%s\"", image_name); exit(1); } size =3D length; @@ -956,7 +956,7 @@ static void arm_load_kernel_notify(Notifier *notifier, = void *data) is_linux =3D 1; } if (kernel_size < 0) { - fprintf(stderr, "qemu: could not load kernel '%s'\n", + error_report("qemu: could not load kernel '%s'", info->kernel_filename); exit(1); } @@ -976,7 +976,7 @@ static void arm_load_kernel_notify(Notifier *notifier, = void *data) info->initrd_start); } if (initrd_size < 0) { - fprintf(stderr, "qemu: could not load initrd '%s'\n", + error_report("qemu: could not load initrd '%s'", info->initrd_filename); exit(1); } @@ -1021,9 +1021,9 @@ static void arm_load_kernel_notify(Notifier *notifier= , void *data) } else { fixupcontext[FIXUP_ARGPTR] =3D info->loader_start + KERNEL_ARG= S_ADDR; if (info->ram_size >=3D (1ULL << 32)) { - fprintf(stderr, "qemu: RAM size must be less than 4GB to b= oot" - " Linux kernel using ATAGS (try passing a device t= ree" - " using -dtb)\n"); + error_report("qemu: RAM size must be less than 4GB to boot= " + " Linux kernel using ATAGS (try passing a devi= ce tree" + " using -dtb)"); exit(1); } } diff --git a/hw/arm/gumstix.c b/hw/arm/gumstix.c index bba9e9f57a..8bd34956b7 100644 --- a/hw/arm/gumstix.c +++ b/hw/arm/gumstix.c @@ -35,6 +35,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "hw/hw.h" #include "hw/arm/pxa.h" #include "net/net.h" @@ -62,8 +63,8 @@ static void connex_init(MachineState *machine) =20 dinfo =3D drive_get(IF_PFLASH, 0, 0); if (!dinfo && !qtest_enabled()) { - fprintf(stderr, "A flash image must be given with the " - "'pflash' parameter\n"); + error_report("A flash image must be given with the " + "'pflash' parameter"); exit(1); } =20 @@ -76,7 +77,7 @@ static void connex_init(MachineState *machine) dinfo ? blk_by_legacy_dinfo(dinfo) : NULL, sector_len, connex_rom / sector_len, 2, 0, 0, 0, 0, be)) { - fprintf(stderr, "qemu: Error registering flash memory.\n"); + error_report("qemu: Error registering flash memory."); exit(1); } =20 @@ -99,8 +100,8 @@ static void verdex_init(MachineState *machine) =20 dinfo =3D drive_get(IF_PFLASH, 0, 0); if (!dinfo && !qtest_enabled()) { - fprintf(stderr, "A flash image must be given with the " - "'pflash' parameter\n"); + error_report("A flash image must be given with the " + "'pflash' parameter"); exit(1); } =20 @@ -113,7 +114,7 @@ static void verdex_init(MachineState *machine) dinfo ? blk_by_legacy_dinfo(dinfo) : NULL, sector_len, verdex_rom / sector_len, 2, 0, 0, 0, 0, be)) { - fprintf(stderr, "qemu: Error registering flash memory.\n"); + error_report("qemu: Error registering flash memory."); exit(1); } =20 diff --git a/hw/arm/mainstone.c b/hw/arm/mainstone.c index d07972a966..5c454c7109 100644 --- a/hw/arm/mainstone.c +++ b/hw/arm/mainstone.c @@ -12,6 +12,7 @@ * GNU GPL, version 2 or (at your option) any later version. */ #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "qapi/error.h" #include "hw/hw.h" #include "hw/arm/pxa.h" @@ -143,8 +144,8 @@ static void mainstone_common_init(MemoryRegion *address= _space_mem, if (qtest_enabled()) { break; } - fprintf(stderr, "Two flash images must be given with the " - "'pflash' parameter\n"); + error_report("Two flash images must be given with the " + "'pflash' parameter"); exit(1); } =20 @@ -154,7 +155,7 @@ static void mainstone_common_init(MemoryRegion *address= _space_mem, blk_by_legacy_dinfo(dinfo), sector_len, MAINSTONE_FLASH / sector_le= n, 4, 0, 0, 0, 0, be)) { - fprintf(stderr, "qemu: Error registering flash memory.\n"); + error_report("qemu: Error registering flash memory."); exit(1); } } diff --git a/hw/arm/musicpal.c b/hw/arm/musicpal.c index b648770882..06127a873d 100644 --- a/hw/arm/musicpal.c +++ b/hw/arm/musicpal.c @@ -1626,7 +1626,7 @@ static void musicpal_init(MachineState *machine) flash_size =3D blk_getlength(blk); if (flash_size !=3D 8*1024*1024 && flash_size !=3D 16*1024*1024 && flash_size !=3D 32*1024*1024) { - fprintf(stderr, "Invalid flash image size\n"); + error_report("Invalid flash image size"); exit(1); } =20 diff --git a/hw/arm/omap1.c b/hw/arm/omap1.c index 1388200191..821ee69441 100644 --- a/hw/arm/omap1.c +++ b/hw/arm/omap1.c @@ -18,6 +18,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "qapi/error.h" #include "qemu-common.h" #include "cpu.h" @@ -2313,7 +2314,7 @@ void omap_uwire_attach(struct omap_uwire_s *s, uWireSlave *slave, int chipselect) { if (chipselect < 0 || chipselect > 3) { - fprintf(stderr, "%s: Bad chipselect %i\n", __func__, chipselect); + error_report("%s: Bad chipselect %i", __func__, chipselect); exit(-1); } =20 @@ -3989,7 +3990,7 @@ struct omap_mpu_state_s *omap310_mpu_init(MemoryRegio= n *system_memory, =20 dinfo =3D drive_get(IF_SD, 0, 0); if (!dinfo) { - fprintf(stderr, "qemu: missing SecureDigital device\n"); + error_report("qemu: missing SecureDigital device"); exit(1); } s->mmc =3D omap_mmc_init(0xfffb7800, system_memory, diff --git a/hw/arm/omap2.c b/hw/arm/omap2.c index b53878b8b9..cbbb3ec05f 100644 --- a/hw/arm/omap2.c +++ b/hw/arm/omap2.c @@ -19,6 +19,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "qapi/error.h" #include "qemu-common.h" #include "cpu.h" @@ -1311,7 +1312,7 @@ static void omap_prcm_apll_update(struct omap_prcm_s = *s) /* TODO: update clocks */ =20 if (mode[0] =3D=3D 1 || mode[0] =3D=3D 2 || mode[1] =3D=3D 1 || mode[1= ] =3D=3D 2) - fprintf(stderr, "%s: bad EN_54M_PLL or bad EN_96M_PLL\n", + error_report("%s: bad EN_54M_PLL or bad EN_96M_PLL", __func__); } =20 @@ -1331,7 +1332,7 @@ static void omap_prcm_dpll_update(struct omap_prcm_s = *s) s->dpll_lock =3D 0; switch (mode) { case 0: - fprintf(stderr, "%s: bad EN_DPLL\n", __func__); + error_report("%s: bad EN_DPLL", __func__); break; case 1: /* Low-power bypass mode (Default) */ case 2: /* Fast-relock bypass mode */ @@ -1358,7 +1359,7 @@ static void omap_prcm_dpll_update(struct omap_prcm_s = *s) omap_clk_reparent(core, dpll_x2); break; case 3: - fprintf(stderr, "%s: bad CORE_CLK_SRC\n", __func__); + error_report("%s: bad CORE_CLK_SRC", __func__); break; } } @@ -1627,8 +1628,8 @@ static void omap_prcm_write(void *opaque, hwaddr addr= , =20 case 0x500: /* CM_CLKEN_PLL */ if (value & 0xffffff30) - fprintf(stderr, "%s: write 0s in CM_CLKEN_PLL for " - "future compatibility\n", __func__); + error_report("%s: write 0s in CM_CLKEN_PLL for " + "future compatibility", __func__); if ((s->clken[9] ^ value) & 0xcc) { s->clken[9] &=3D ~0xcc; s->clken[9] |=3D value & 0xcc; @@ -1646,8 +1647,8 @@ static void omap_prcm_write(void *opaque, hwaddr addr= , break; case 0x540: /* CM_CLKSEL1_PLL */ if (value & 0xfc4000d7) - fprintf(stderr, "%s: write 0s in CM_CLKSEL1_PLL for " - "future compatibility\n", __func__); + error_report("%s: write 0s in CM_CLKSEL1_PLL for " + "future compatibility", __func__); if ((s->clksel[5] ^ value) & 0x003fff00) { s->clksel[5] =3D value & 0x03bfff28; omap_prcm_dpll_update(s); @@ -1658,8 +1659,8 @@ static void omap_prcm_write(void *opaque, hwaddr addr= , break; case 0x544: /* CM_CLKSEL2_PLL */ if (value & ~3) - fprintf(stderr, "%s: write 0s in CM_CLKSEL2_PLL[31:2] for " - "future compatibility\n", __func__); + error_report("%s: write 0s in CM_CLKSEL2_PLL[31:2] for " + "future compatibility", __func__); if (s->clksel[6] !=3D (value & 3)) { s->clksel[6] =3D value & 3; omap_prcm_dpll_update(s); @@ -2486,7 +2487,7 @@ struct omap_mpu_state_s *omap2420_mpu_init(MemoryRegi= on *sysmem, =20 dinfo =3D drive_get(IF_SD, 0, 0); if (!dinfo) { - fprintf(stderr, "qemu: missing SecureDigital device\n"); + error_report("qemu: missing SecureDigital device"); exit(1); } s->mmc =3D omap2_mmc_init(omap_l4tao(s->l4, 9), diff --git a/hw/arm/omap_sx1.c b/hw/arm/omap_sx1.c index 9a14270795..6eb56ae744 100644 --- a/hw/arm/omap_sx1.c +++ b/hw/arm/omap_sx1.c @@ -158,7 +158,7 @@ static void sx1_init(MachineState *machine, const int v= ersion) blk_by_legacy_dinfo(dinfo), sector_size, flash_size / sector_size, 4, 0, 0, 0, 0, be)) { - fprintf(stderr, "qemu: Error registering flash memory %d.\n", + error_report("qemu: Error registering flash memory %d.", fl_idx); } fl_idx++; @@ -182,7 +182,7 @@ static void sx1_init(MachineState *machine, const int v= ersion) blk_by_legacy_dinfo(dinfo), sector_size, flash1_size / sector_size, 4, 0, 0, 0, 0, be)) { - fprintf(stderr, "qemu: Error registering flash memory %d.\n", + error_report("qemu: Error registering flash memory %d.", fl_idx); } fl_idx++; @@ -194,7 +194,7 @@ static void sx1_init(MachineState *machine, const int v= ersion) } =20 if (!machine->kernel_filename && !fl_idx && !qtest_enabled()) { - fprintf(stderr, "Kernel or Flash image must be specified\n"); + error_report("Kernel or Flash image must be specified"); exit(1); } =20 diff --git a/hw/arm/palm.c b/hw/arm/palm.c index 285f43709d..7f3637041a 100644 --- a/hw/arm/palm.c +++ b/hw/arm/palm.c @@ -233,8 +233,8 @@ static void palmte_init(MachineState *machine) if (nb_option_roms) { rom_size =3D get_image_size(option_rom[0].name); if (rom_size > flash_size) { - fprintf(stderr, "%s: ROM image too big (%x > %x)\n", - __func__, rom_size, flash_size); + error_report("%s: ROM image too big (%x > %x)", + __func__, rom_size, flash_size); rom_size =3D 0; } if (rom_size > 0) { @@ -243,13 +243,13 @@ static void palmte_init(MachineState *machine) rom_loaded =3D 1; } if (rom_size < 0) { - fprintf(stderr, "%s: error loading '%s'\n", - __func__, option_rom[0].name); + error_report("%s: error loading '%s'", + __func__, option_rom[0].name); } } =20 if (!rom_loaded && !kernel_filename && !qtest_enabled()) { - fprintf(stderr, "Kernel or ROM image must be specified\n"); + fprintf(stderr, "Kernel or ROM image must be specified"); exit(1); } =20 diff --git a/hw/arm/pxa2xx.c b/hw/arm/pxa2xx.c index 078006f390..c46b65d5d2 100644 --- a/hw/arm/pxa2xx.c +++ b/hw/arm/pxa2xx.c @@ -8,6 +8,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "qapi/error.h" #include "qemu-common.h" #include "cpu.h" @@ -2060,7 +2061,7 @@ PXA2xxState *pxa270_init(MemoryRegion *address_space, s =3D g_new0(PXA2xxState, 1); =20 if (strncmp(cpu_type, "pxa27", 5)) { - fprintf(stderr, "Machine requires a PXA27x processor.\n"); + error_report("Machine requires a PXA27x processor."); exit(1); } =20 @@ -2093,7 +2094,7 @@ PXA2xxState *pxa270_init(MemoryRegion *address_space, =20 dinfo =3D drive_get(IF_SD, 0, 0); if (!dinfo) { - fprintf(stderr, "qemu: missing SecureDigital device\n"); + error_report("qemu: missing SecureDigital device"); exit(1); } s->mmc =3D pxa2xx_mmci_init(address_space, 0x41100000, @@ -2218,7 +2219,7 @@ PXA2xxState *pxa255_init(MemoryRegion *address_space,= unsigned int sdram_size) =20 dinfo =3D drive_get(IF_SD, 0, 0); if (!dinfo) { - fprintf(stderr, "qemu: missing SecureDigital device\n"); + error_report("qemu: missing SecureDigital device"); exit(1); } s->mmc =3D pxa2xx_mmci_init(address_space, 0x41100000, diff --git a/hw/arm/stellaris.c b/hw/arm/stellaris.c index de7c0fc4a6..f6f295b363 100644 --- a/hw/arm/stellaris.c +++ b/hw/arm/stellaris.c @@ -8,6 +8,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "qapi/error.h" #include "hw/sysbus.h" #include "hw/ssi/ssi.h" @@ -559,7 +560,7 @@ static void ssys_write(void *opaque, hwaddr offset, case 0x040: /* SRCR0 */ case 0x044: /* SRCR1 */ case 0x048: /* SRCR2 */ - fprintf(stderr, "Peripheral reset not implemented\n"); + error_report("Peripheral reset not implemented"); break; case 0x054: /* IMC */ s->int_mask =3D value & 0x7f; diff --git a/hw/arm/tosa.c b/hw/arm/tosa.c index a55b1a369c..a069c95f1c 100644 --- a/hw/arm/tosa.c +++ b/hw/arm/tosa.c @@ -12,6 +12,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "qapi/error.h" #include "hw/hw.h" #include "hw/arm/pxa.h" @@ -70,19 +71,19 @@ static void tosa_out_switch(void *opaque, int line, int= level) { switch (line) { case 0: - fprintf(stderr, "blue LED %s.\n", level ? "on" : "off"); + error_report("blue LED %s.", level ? "on" : "off"); break; case 1: - fprintf(stderr, "green LED %s.\n", level ? "on" : "off"); + error_report("green LED %s.", level ? "on" : "off"); break; case 2: - fprintf(stderr, "amber LED %s.\n", level ? "on" : "off"); + error_report("amber LED %s.", level ? "on" : "off"); break; case 3: - fprintf(stderr, "wlan LED %s.\n", level ? "on" : "off"); + fprintf(stderr, "wlan LED %s.", level ? "on" : "off"); break; default: - fprintf(stderr, "Uhandled out event: %d =3D %d\n", line, level= ); + fprintf(stderr, "Uhandled out event: %d =3D %d", line, level); break; } } @@ -133,7 +134,7 @@ static void tosa_gpio_setup(PXA2xxState *cpu, =20 static uint32_t tosa_ssp_tansfer(SSISlave *dev, uint32_t value) { - fprintf(stderr, "TG: %d %02x\n", value >> 5, value & 0x1f); + error_report("TG: %d %02x", value >> 5, value & 0x1f); return 0; } =20 @@ -159,13 +160,13 @@ static int tosa_dac_send(I2CSlave *i2c, uint8_t data) s->buf[s->len] =3D data; if (s->len ++ > 2) { #ifdef VERBOSE - fprintf(stderr, "%s: message too long (%i bytes)\n", __func__, s->= len); + error_report("%s: message too long (%i bytes)", __func__, s->len); #endif return 1; } =20 if (s->len =3D=3D 2) { - fprintf(stderr, "dac: channel %d value 0x%02x\n", + error_report("dac: channel %d value 0x%02x", s->buf[0], s->buf[1]); } =20 diff --git a/hw/arm/versatilepb.c b/hw/arm/versatilepb.c index 418792cd02..f0ae069172 100644 --- a/hw/arm/versatilepb.c +++ b/hw/arm/versatilepb.c @@ -364,7 +364,7 @@ static void versatile_init(MachineState *machine, int b= oard_id) VERSATILE_FLASH_SECT_SIZE, VERSATILE_FLASH_SIZE / VERSATILE_FLASH_SECT_SIZE= , 4, 0x0089, 0x0018, 0x0000, 0x0, 0)) { - fprintf(stderr, "qemu: Error registering flash memory.\n"); + error_report("qemu: Error registering flash memory."); } =20 versatile_binfo.ram_size =3D machine->ram_size; diff --git a/hw/arm/vexpress.c b/hw/arm/vexpress.c index efb5a29475..508629dfe9 100644 --- a/hw/arm/vexpress.c +++ b/hw/arm/vexpress.c @@ -266,7 +266,7 @@ static void a9_daughterboard_init(const VexpressMachine= State *vms, =20 if (ram_size > 0x40000000) { /* 1GB is the maximum the address space permits */ - fprintf(stderr, "vexpress-a9: cannot model more than 1GB RAM\n"); + error_report("vexpress-a9: cannot model more than 1GB RAM"); exit(1); } =20 @@ -355,7 +355,7 @@ static void a15_daughterboard_init(const VexpressMachin= eState *vms, */ uint64_t rsz =3D ram_size; if (rsz > (30ULL * 1024 * 1024 * 1024)) { - fprintf(stderr, "vexpress-a15: cannot model more than 30GB RAM= \n"); + error_report("vexpress-a15: cannot model more than 30GB RAM"); exit(1); } } @@ -640,7 +640,7 @@ static void vexpress_common_init(MachineState *machine) pflash0 =3D ve_pflash_cfi01_register(map[VE_NORFLASH0], "vexpress.flas= h0", dinfo); if (!pflash0) { - fprintf(stderr, "vexpress: error registering flash 0.\n"); + error_report("vexpress: error registering flash 0."); exit(1); } =20 @@ -655,7 +655,7 @@ static void vexpress_common_init(MachineState *machine) dinfo =3D drive_get_next(IF_PFLASH); if (!ve_pflash_cfi01_register(map[VE_NORFLASH1], "vexpress.flash1", dinfo)) { - fprintf(stderr, "vexpress: error registering flash 1.\n"); + error_report("vexpress: error registering flash 1."); exit(1); } =20 diff --git a/hw/arm/z2.c b/hw/arm/z2.c index 60561c7b7c..5048439799 100644 --- a/hw/arm/z2.c +++ b/hw/arm/z2.c @@ -319,8 +319,8 @@ static void z2_init(MachineState *machine) #endif dinfo =3D drive_get(IF_PFLASH, 0, 0); if (!dinfo && !qtest_enabled()) { - fprintf(stderr, "Flash image must be given with the " - "'pflash' parameter\n"); + error_report("Flash image must be given with the " + "'pflash' parameter"); exit(1); } =20 @@ -329,7 +329,7 @@ static void z2_init(MachineState *machine) dinfo ? blk_by_legacy_dinfo(dinfo) : NULL, sector_len, Z2_FLASH_SIZE / sector_len, 4, 0, 0, 0, 0, be)) { - fprintf(stderr, "qemu: Error registering flash memory.\n"); + error_report("qemu: Error registering flash memory."); exit(1); } =20 diff --git a/hw/block/dataplane/virtio-blk.c b/hw/block/dataplane/virtio-bl= k.c index 5556f0e64e..69dfd49191 100644 --- a/hw/block/dataplane/virtio-blk.c +++ b/hw/block/dataplane/virtio-blk.c @@ -178,8 +178,8 @@ int virtio_blk_data_plane_start(VirtIODevice *vdev) /* Set up guest notifier (irq) */ r =3D k->set_guest_notifiers(qbus->parent, nvqs, true); if (r !=3D 0) { - fprintf(stderr, "virtio-blk failed to set guest notifier (%d), " - "ensure -enable-kvm is set\n", r); + error_report("virtio-blk failed to set guest notifier (%d), " + "ensure -enable-kvm is set", r); goto fail_guest_notifiers; } =20 @@ -187,7 +187,7 @@ int virtio_blk_data_plane_start(VirtIODevice *vdev) for (i =3D 0; i < nvqs; i++) { r =3D virtio_bus_set_host_notifier(VIRTIO_BUS(qbus), i, true); if (r !=3D 0) { - fprintf(stderr, "virtio-blk failed to set host notifier (%d)\n= ", r); + error_report("virtio-blk failed to set host notifier (%d)", r)= ; while (i--) { virtio_bus_set_host_notifier(VIRTIO_BUS(qbus), i, false); } diff --git a/hw/block/onenand.c b/hw/block/onenand.c index 224daf7ccf..8bcd67688b 100644 --- a/hw/block/onenand.c +++ b/hw/block/onenand.c @@ -598,7 +598,7 @@ static void onenand_command(OneNANDState *s) default: s->status |=3D ONEN_ERR_CMD; s->intstatus |=3D ONEN_INT; - fprintf(stderr, "%s: unknown OneNAND command %x\n", + error_report("%s: unknown OneNAND command %x", __func__, s->command); } =20 @@ -665,7 +665,7 @@ static uint64_t onenand_read(void *opaque, hwaddr addr, return 0x0000; } =20 - fprintf(stderr, "%s: unknown OneNAND register %x\n", + error_report("%s: unknown OneNAND register %x", __func__, offset); return 0; } @@ -710,7 +710,7 @@ static void onenand_write(void *opaque, hwaddr addr, break; =20 default: - fprintf(stderr, "%s: unknown OneNAND boot command %"PRIx64"\n"= , + error_report("%s: unknown OneNAND boot command %"PRIx64"", __func__, value); } break; @@ -761,7 +761,7 @@ static void onenand_write(void *opaque, hwaddr addr, break; =20 default: - fprintf(stderr, "%s: unknown OneNAND register %x\n", + error_report("%s: unknown OneNAND register %x", __func__, offset); } } diff --git a/hw/block/tc58128.c b/hw/block/tc58128.c index 1d9f7ee000..d274c9aafe 100644 --- a/hw/block/tc58128.c +++ b/hw/block/tc58128.c @@ -50,8 +50,8 @@ static void init_dev(tc58128_dev * dev, const char *filen= ame) dev->flash_contents[1] =3D (blocks >> 8) & 0xff; dev->flash_contents[2] =3D (blocks >> 16) & 0xff; dev->flash_contents[3] =3D (blocks >> 24) & 0xff; - fprintf(stderr, "loaded %d bytes for %s into flash\n", ret, - filename); + error_report("loaded %d bytes for %s into flash", ret, + filename); } } } @@ -60,26 +60,26 @@ static void handle_command(tc58128_dev * dev, uint8_t c= ommand) { switch (command) { case 0xff: - fprintf(stderr, "reset flash device\n"); - dev->state =3D WAIT; - break; + error_report("reset flash device"); + dev->state =3D WAIT; + break; case 0x00: - fprintf(stderr, "read mode 1\n"); - dev->state =3D READ1; - dev->address_cycle =3D 0; - break; + error_report("read mode 1"); + dev->state =3D READ1; + dev->address_cycle =3D 0; + break; case 0x01: - fprintf(stderr, "read mode 2\n"); - dev->state =3D READ2; - dev->address_cycle =3D 0; - break; + error_report("read mode 2"); + dev->state =3D READ2; + dev->address_cycle =3D 0; + break; case 0x50: - fprintf(stderr, "read mode 3\n"); - dev->state =3D READ3; - dev->address_cycle =3D 0; - break; + error_report("read mode 3"); + dev->state =3D READ3; + dev->address_cycle =3D 0; + break; default: - fprintf(stderr, "unknown flash command 0x%02x\n", command); + error_report("unknown flash command 0x%02x", command); abort(); } } @@ -103,8 +103,8 @@ static void handle_address(tc58128_dev * dev, uint8_t d= ata) break; case 2: dev->address +=3D data * 528; - fprintf(stderr, "address pointer in flash: 0x%08x\n", - dev->address); + error_report("address pointer in flash: 0x%08x", + dev->address); break; default: /* Invalid data */ @@ -119,10 +119,6 @@ static void handle_address(tc58128_dev * dev, uint8_t = data) =20 static uint8_t handle_read(tc58128_dev * dev) { -#if 0 - if (dev->address % 0x100000 =3D=3D 0) - fprintf(stderr, "reading flash at address 0x%08x\n", dev->address); -#endif return dev->flash_contents[dev->address++]; } =20 diff --git a/hw/bt/core.c b/hw/bt/core.c index c1806b71a3..a6e9bf2a3e 100644 --- a/hw/bt/core.c +++ b/hw/bt/core.c @@ -18,6 +18,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "qemu-common.h" #include "sysemu/bt.h" #include "hw/bt.h" @@ -31,24 +32,24 @@ static void bt_dummy_lmp_mode_change(struct bt_link_s *= link) static void bt_dummy_lmp_connection_complete(struct bt_link_s *link) { if (link->slave->reject_reason) - fprintf(stderr, "%s: stray LMP_not_accepted received, fixme\n", - __func__); + error_report("%s: stray LMP_not_accepted received, fixme", + __func__); else - fprintf(stderr, "%s: stray LMP_accepted received, fixme\n", - __func__); + error_report("%s: stray LMP_accepted received, fixme", + __func__); exit(-1); } =20 static void bt_dummy_lmp_disconnect_master(struct bt_link_s *link) { - fprintf(stderr, "%s: stray LMP_detach received, fixme\n", __func__); + fprintf(stderr, "%s: stray LMP_detach received, fixme", __func__); exit(-1); } =20 static void bt_dummy_lmp_acl_resp(struct bt_link_s *link, const uint8_t *data, int start, int len) { - fprintf(stderr, "%s: stray ACL response PDU, fixme\n", __func__); + error_report("%s: stray ACL response PDU, fixme", __func__); exit(-1); } =20 @@ -113,7 +114,7 @@ void bt_device_done(struct bt_device_s *dev) while (*p && *p !=3D dev) p =3D &(*p)->next; if (*p !=3D dev) { - fprintf(stderr, "%s: bad bt device \"%s\"\n", __func__, + error_report("%s: bad bt device \"%s\"", __func__, dev->lmp_name ?: "(null)"); exit(-1); } diff --git a/hw/bt/hci-csr.c b/hw/bt/hci-csr.c index ac067b81f6..6a171a54b7 100644 --- a/hw/bt/hci-csr.c +++ b/hw/bt/hci-csr.c @@ -19,6 +19,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "qemu-common.h" #include "chardev/char-serial.h" #include "qemu/timer.h" @@ -111,14 +112,14 @@ static uint8_t *csrhci_out_packet(struct csrhci_s *s,= int len) =20 if (off < FIFO_LEN) { if (off + len > FIFO_LEN && (s->out_size =3D off + len) > FIFO_LEN= * 2) { - fprintf(stderr, "%s: can't alloc %i bytes\n", __func__, len); + error_report("%s: can't alloc %i bytes", __func__, len); exit(-1); } return s->outfifo + off; } =20 if (s->out_len > s->out_size) { - fprintf(stderr, "%s: can't alloc %i bytes\n", __func__, len); + error_report("%s: can't alloc %i bytes", __func__, len); exit(-1); } =20 @@ -168,8 +169,8 @@ static void csrhci_in_packet_vendor(struct csrhci_s *s,= int ocf, s->bd_addr.b[5] =3D data[offset + 2]; =20 s->hci->bdaddr_set(s->hci, s->bd_addr.b); - fprintf(stderr, "%s: bd_address loaded from firmware: " - "%02x:%02x:%02x:%02x:%02x:%02x\n", __func__, + error_report("%s: bd_address loaded from firmware: " + "%02x:%02x:%02x:%02x:%02x:%02x", __func__, s->bd_addr.b[0], s->bd_addr.b[1], s->bd_addr.b= [2], s->bd_addr.b[3], s->bd_addr.b[4], s->bd_addr.b= [5]); } @@ -181,7 +182,7 @@ static void csrhci_in_packet_vendor(struct csrhci_s *s,= int ocf, break; =20 default: - fprintf(stderr, "%s: got a bad CMD packet\n", __func__); + error_report("%s: got a bad CMD packet", __func__); return; } =20 @@ -226,7 +227,7 @@ static void csrhci_in_packet(struct csrhci_s *s, uint8_= t *pkt) case H4_NEG_PKT: if (s->in_hdr !=3D sizeof(csrhci_neg_packet) || memcmp(pkt - 1, csrhci_neg_packet, s->in_hdr)) { - fprintf(stderr, "%s: got a bad NEG packet\n", __func__); + error_report("%s: got a bad NEG packet", __func__); return; } pkt +=3D 2; @@ -241,7 +242,7 @@ static void csrhci_in_packet(struct csrhci_s *s, uint8_= t *pkt) =20 case H4_ALIVE_PKT: if (s->in_hdr !=3D 4 || pkt[1] !=3D 0x55 || pkt[2] !=3D 0x00) { - fprintf(stderr, "%s: got a bad ALIVE packet\n", __func__); + error_report("%s: got a bad ALIVE packet", __func__); return; } =20 @@ -254,7 +255,7 @@ static void csrhci_in_packet(struct csrhci_s *s, uint8_= t *pkt) default: bad_pkt: /* TODO: error out */ - fprintf(stderr, "%s: got a bad packet\n", __func__); + error_report("%s: got a bad packet", __func__); break; } =20 diff --git a/hw/bt/hci.c b/hw/bt/hci.c index df05f07887..ac9394daf0 100644 --- a/hw/bt/hci.c +++ b/hw/bt/hci.c @@ -19,6 +19,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "qapi/error.h" #include "qemu-common.h" #include "qemu/timer.h" @@ -457,7 +458,7 @@ static inline uint8_t *bt_hci_event_start(struct bt_hci= _s *hci, int mask_byte; =20 if (len > 255) { - fprintf(stderr, "%s: HCI event params too long (%ib)\n", + error_report("%s: HCI event params too long (%ib)", __func__, len); exit(-1); } @@ -589,7 +590,7 @@ static void bt_hci_inquiry_result(struct bt_hci_s *hci, bt_hci_inquiry_result_with_rssi(hci, slave); return; default: - fprintf(stderr, "%s: bad inquiry mode %02x\n", __func__, + error_report("%s: bad inquiry mode %02x", __func__, hci->lm.inquiry_mode); exit(-1); } @@ -1971,7 +1972,7 @@ static void bt_submit_hci(struct HCIInfo *info, break; =20 short_hci: - fprintf(stderr, "%s: HCI packet too short (%iB)\n", + error_report("%s: HCI packet too short (%iB)", __func__, length); bt_hci_event_status(hci, HCI_INVALID_PARAMETERS); break; @@ -1991,7 +1992,7 @@ static inline void bt_hci_lmp_acl_data(struct bt_hci_= s *hci, uint16_t handle, /* TODO: avoid memcpy'ing */ =20 if (len + HCI_ACL_HDR_SIZE > sizeof(hci->acl_buf)) { - fprintf(stderr, "%s: can't take ACL packets %i bytes long\n", + error_report("%s: can't take ACL packets %i bytes long", __func__, len); return; } @@ -2029,7 +2030,7 @@ static void bt_submit_acl(struct HCIInfo *info, struct bt_link_s *link; =20 if (length < HCI_ACL_HDR_SIZE) { - fprintf(stderr, "%s: ACL packet too short (%iB)\n", + error_report("%s: ACL packet too short (%iB)", __func__, length); return; } @@ -2041,15 +2042,15 @@ static void bt_submit_acl(struct HCIInfo *info, length -=3D HCI_ACL_HDR_SIZE; =20 if (bt_hci_handle_bad(hci, handle)) { - fprintf(stderr, "%s: invalid ACL handle %03x\n", - __func__, handle); + error_report("%s: invalid ACL handle %03x", + __func__, handle); /* TODO: signal an error */ return; } handle &=3D ~HCI_HANDLE_OFFSET; =20 if (datalen > length) { - fprintf(stderr, "%s: ACL packet too short (%iB < %iB)\n", + fprintf(stderr, "%s: ACL packet too short (%iB < %iB)", __func__, length, datalen); return; } @@ -2060,7 +2061,7 @@ static void bt_submit_acl(struct HCIInfo *info, if (!hci->asb_handle) hci->asb_handle =3D handle; else if (handle !=3D hci->asb_handle) { - fprintf(stderr, "%s: Bad handle %03x in Active Slave Broadcast= \n", + error_report("%s: Bad handle %03x in Active Slave Broadcast", __func__, handle); /* TODO: signal an error */ return; @@ -2073,7 +2074,7 @@ static void bt_submit_acl(struct HCIInfo *info, if (!hci->psb_handle) hci->psb_handle =3D handle; else if (handle !=3D hci->psb_handle) { - fprintf(stderr, "%s: Bad handle %03x in Parked Slave Broadcast= \n", + error_report("%s: Bad handle %03x in Parked Slave Broadcast", __func__, handle); /* TODO: signal an error */ return; @@ -2105,14 +2106,13 @@ static void bt_submit_sco(struct HCIInfo *info, length -=3D 3; =20 if (bt_hci_handle_bad(hci, handle)) { - fprintf(stderr, "%s: invalid SCO handle %03x\n", - __func__, handle); + error_report("%s: invalid SCO handle %03x", __func__, handle); return; } =20 if (datalen > length) { - fprintf(stderr, "%s: SCO packet too short (%iB < %iB)\n", - __func__, length, datalen); + error_report("%s: SCO packet too short (%iB < %iB)", + __func__, length, datalen); return; } =20 @@ -2223,7 +2223,7 @@ struct HCIInfo *hci_init(const char *str) return bt_new_hci(vlan); } =20 - fprintf(stderr, "qemu: Unknown bluetooth HCI `%s'.\n", str); + error_report("qemu: Unknown bluetooth HCI `%s'.", str); =20 return 0; } diff --git a/hw/bt/hid.c b/hw/bt/hid.c index 09d17322e4..056291f9b5 100644 --- a/hw/bt/hid.c +++ b/hw/bt/hid.c @@ -419,7 +419,7 @@ static void bt_hid_interrupt_sdu(void *opaque, const ui= nt8_t *data, int len) =20 return; bad: - fprintf(stderr, "%s: bad transaction on Interrupt channel.\n", + error_report("%s: bad transaction on Interrupt channel.", __func__); } =20 diff --git a/hw/bt/l2cap.c b/hw/bt/l2cap.c index 3e53dd082d..9cf27f0df6 100644 --- a/hw/bt/l2cap.c +++ b/hw/bt/l2cap.c @@ -18,6 +18,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "qemu-common.h" #include "qemu/timer.h" #include "qemu/bswap.h" @@ -467,8 +468,8 @@ static void l2cap_channel_close(struct l2cap_instance_s= *l2cap, =20 if (likely(ch)) { if (ch->remote_cid !=3D source_cid) { - fprintf(stderr, "%s: Ignoring a Disconnection Request with the= " - "invalid SCID %04x.\n", __func__, source_cid); + error_report("%s: Ignoring a Disconnection Request with the " + "invalid SCID %04x.", __func__, source_cid); return; } =20 @@ -790,7 +791,7 @@ static void l2cap_command(struct l2cap_instance_s *l2ca= p, int code, int id, #if 0 /* TODO: do the IDs really have to be in sequence? */ if (!id || (id !=3D l2cap->last_id && id !=3D l2cap->next_id)) { - fprintf(stderr, "%s: out of sequence command packet ignored.\n", + error_report("%s: out of sequence command packet ignored.", __func__); return; } @@ -813,9 +814,9 @@ static void l2cap_command(struct l2cap_instance_s *l2ca= p, int code, int id, } =20 /* We never issue commands other than Command Reject currently. *= / - fprintf(stderr, "%s: stray Command Reject (%02x, %04x) " - "packet, ignoring.\n", __func__, id, - le16_to_cpu(((l2cap_cmd_rej *) params)->reason)); + error_report("%s: stray Command Reject (%02x, %04x) " + "packet, ignoring.", __func__, id, + le16_to_cpu(((l2cap_cmd_rej *) params)->reason)); break; =20 case L2CAP_CONN_REQ: @@ -836,8 +837,8 @@ static void l2cap_command(struct l2cap_instance_s *l2ca= p, int code, int id, } =20 /* We never issue Connection Requests currently. TODO */ - fprintf(stderr, "%s: unexpected Connection Response (%02x) " - "packet, ignoring.\n", __func__, id); + error_report("%s: unexpected Connection Response (%02x) " + "packet, ignoring.", __func__, id); break; =20 case L2CAP_CONF_REQ: @@ -865,8 +866,8 @@ static void l2cap_command(struct l2cap_instance_s *l2ca= p, int code, int id, le16_to_cpu(((l2cap_conf_rsp *) params)->scid), ((l2cap_conf_rsp *) params)->data, len - L2CAP_CONF_RSP_SIZE(0))) - fprintf(stderr, "%s: unexpected Configure Response (%02x) " - "packet, ignoring.\n", __func__, id); + error_report("%s: unexpected Configure Response (%02x) " + "packet, ignoring.", __func__, id); break; =20 case L2CAP_DISCONN_REQ: @@ -887,8 +888,8 @@ static void l2cap_command(struct l2cap_instance_s *l2ca= p, int code, int id, } =20 /* We never issue Disconnection Requests currently. TODO */ - fprintf(stderr, "%s: unexpected Disconnection Response (%02x) " - "packet, ignoring.\n", __func__, id); + error_report("%s: unexpected Disconnection Response (%02x) " + "packet, ignoring.", __func__, id); break; =20 case L2CAP_ECHO_REQ: @@ -897,8 +898,8 @@ static void l2cap_command(struct l2cap_instance_s *l2ca= p, int code, int id, =20 case L2CAP_ECHO_RSP: /* We never issue Echo Requests currently. TODO */ - fprintf(stderr, "%s: unexpected Echo Response (%02x) " - "packet, ignoring.\n", __func__, id); + error_report("%s: unexpected Echo Response (%02x) " + "packet, ignoring.", __func__, id); break; =20 case L2CAP_INFO_REQ: @@ -917,8 +918,8 @@ static void l2cap_command(struct l2cap_instance_s *l2ca= p, int code, int id, } =20 /* We never issue Information Requests currently. TODO */ - fprintf(stderr, "%s: unexpected Information Response (%02x) " - "packet, ignoring.\n", __func__, id); + error_report("%s: unexpected Information Response (%02x) " + "packet, ignoring.", __func__, id); break; =20 default: @@ -1066,8 +1067,8 @@ static void l2cap_frame_in(struct l2cap_instance_s *l= 2cap, uint16_t len =3D le16_to_cpu(frame->len); =20 if (unlikely(cid >=3D L2CAP_CID_MAX || !l2cap->cid[cid])) { - fprintf(stderr, "%s: frame addressed to a non-existent L2CAP " - "channel %04x received.\n", __func__, cid); + error_report("%s: frame addressed to a non-existent L2CAP " + "channel %04x received.", __func__, cid); return; } =20 @@ -1128,9 +1129,9 @@ static uint8_t *l2cap_bframe_out(struct bt_l2cap_conn= _params_s *parm, int len) struct l2cap_chan_s *chan =3D (struct l2cap_chan_s *) parm; =20 if (len > chan->params.remote_mtu) { - fprintf(stderr, "%s: B-Frame for CID %04x longer than %i octets.\n= ", - __func__, - chan->remote_cid, chan->params.remote_mtu); + error_report("%s: B-Frame for CID %04x longer than %i octets.", + __func__, + chan->remote_cid, chan->params.remote_mtu); exit(-1); } =20 @@ -1353,8 +1354,8 @@ void bt_l2cap_psm_register(struct bt_l2cap_device_s *= dev, int psm, int min_mtu, struct bt_l2cap_psm_s *new_psm =3D l2cap_psm(dev, psm); =20 if (new_psm) { - fprintf(stderr, "%s: PSM %04x already registered for device `%s'.\= n", - __func__, psm, dev->device.lmp_name); + error_report("%s: PSM %04x already registered for device `%s'.", + __func__, psm, dev->device.lmp_name); exit(-1); } =20 diff --git a/hw/bt/sdp.c b/hw/bt/sdp.c index 7c0d38b504..f4aba9d74f 100644 --- a/hw/bt/sdp.c +++ b/hw/bt/sdp.c @@ -18,6 +18,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "qemu-common.h" #include "qemu/host-utils.h" #include "hw/bt.h" @@ -506,7 +507,7 @@ static void bt_l2cap_sdp_sdu_in(void *opaque, const uin= t8_t *data, int len) int rsp_len =3D 0; =20 if (len < 5) { - fprintf(stderr, "%s: short SDP PDU (%iB).\n", __func__, len); + error_report("%s: short SDP PDU (%iB).", __func__, len); return; } =20 @@ -517,7 +518,7 @@ static void bt_l2cap_sdp_sdu_in(void *opaque, const uin= t8_t *data, int len) len -=3D 5; =20 if (len !=3D plen) { - fprintf(stderr, "%s: wrong SDP PDU length (%iB !=3D %iB).\n", + error_report("%s: wrong SDP PDU length (%iB !=3D %iB).", __func__, plen, len); err =3D SDP_INVALID_PDU_SIZE; goto respond; @@ -544,7 +545,7 @@ static void bt_l2cap_sdp_sdu_in(void *opaque, const uin= t8_t *data, int len) case SDP_SVC_SEARCH_RSP: case SDP_SVC_SEARCH_ATTR_RSP: default: - fprintf(stderr, "%s: unexpected SDP PDU ID %02x.\n", + error_report("%s: unexpected SDP PDU ID %02x.", __func__, pdu_id); err =3D SDP_INVALID_SYNTAX; break; diff --git a/hw/char/exynos4210_uart.c b/hw/char/exynos4210_uart.c index 3957e78abf..a388f01a23 100644 --- a/hw/char/exynos4210_uart.c +++ b/hw/char/exynos4210_uart.c @@ -296,7 +296,7 @@ static void exynos4210_uart_update_irq(Exynos4210UartSt= ate *s) qemu_irq_raise(s->irq); =20 #if DEBUG_IRQ - fprintf(stderr, "UART%d: IRQ has been raised: %08x\n", + error_report("UART%d: IRQ has been raised: %08x", s->channel, s->reg[I_(UINTP)]); #endif =20 @@ -388,7 +388,7 @@ static void exynos4210_uart_write(void *opaque, hwaddr = offset, * qemu_chr_fe_write and background I/O callbacks */ qemu_chr_fe_write_all(&s->chr, &ch, 1); #if DEBUG_Tx_DATA - fprintf(stderr, "%c", ch); + error_report("%c", ch); #endif s->reg[I_(UTRSTAT)] |=3D UTRSTAT_TRANSMITTER_EMPTY | UTRSTAT_Tx_BUFFER_EMPTY; @@ -400,7 +400,7 @@ static void exynos4210_uart_write(void *opaque, hwaddr = offset, case UINTP: s->reg[I_(UINTP)] &=3D ~val; s->reg[I_(UINTSP)] &=3D ~val; - PRINT_DEBUG("UART%d: UINTP [%04x] have been cleared: %08x\n", + PRINT_DEBUG("UART%d: UINTP [%04x] have been cleared: %08x", s->channel, offset, s->reg[I_(UINTP)]); exynos4210_uart_update_irq(s); break; diff --git a/hw/char/mcf_uart.c b/hw/char/mcf_uart.c index 56fa402b58..14cb051be9 100644 --- a/hw/char/mcf_uart.c +++ b/hw/char/mcf_uart.c @@ -6,6 +6,7 @@ * This code is licensed under the GPL */ #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "hw/hw.h" #include "hw/sysbus.h" #include "hw/m68k/mcf.h" @@ -174,7 +175,7 @@ static void mcf_do_command(mcf_uart_state *s, uint8_t c= md) mcf_uart_do_tx(s); break; case 3: /* Reserved. */ - fprintf(stderr, "mcf_uart: Bad TX command\n"); + error_report("mcf_uart: Bad TX command"); break; } =20 @@ -189,7 +190,7 @@ static void mcf_do_command(mcf_uart_state *s, uint8_t c= md) s->rx_enabled =3D 0; break; case 3: /* Reserved. */ - fprintf(stderr, "mcf_uart: Bad RX command\n"); + error_report("mcf_uart: Bad RX command"); break; } } diff --git a/hw/char/sh_serial.c b/hw/char/sh_serial.c index 835b5378a0..7bb3f3c70b 100644 --- a/hw/char/sh_serial.c +++ b/hw/char/sh_serial.c @@ -25,6 +25,7 @@ * THE SOFTWARE. */ #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "hw/hw.h" #include "hw/sh4/sh.h" #include "chardev/char-fe.h" @@ -190,8 +191,8 @@ static void sh_serial_write(void *opaque, hwaddr offs, } } =20 - fprintf(stderr, "sh_serial: unsupported write to 0x%02" - HWADDR_PRIx "\n", offs); + error_report("sh_serial: unsupported write to 0x%02" + HWADDR_PRIx "", offs); abort(); } =20 @@ -290,8 +291,8 @@ static uint64_t sh_serial_read(void *opaque, hwaddr off= s, #endif =20 if (ret & ~((1 << 16) - 1)) { - fprintf(stderr, "sh_serial: unsupported read from 0x%02" - HWADDR_PRIx "\n", offs); + error_report("sh_serial: unsupported read from 0x%02" + HWADDR_PRIx "", offs); abort(); } =20 diff --git a/hw/core/loader.c b/hw/core/loader.c index 4593061445..95bdcbbe36 100644 --- a/hw/core/loader.c +++ b/hw/core/loader.c @@ -43,6 +43,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "qapi/error.h" #include "hw/hw.h" #include "disas/disas.h" @@ -82,7 +83,7 @@ int load_image(const char *filename, uint8_t *addr) return -1; size =3D lseek(fd, 0, SEEK_END); if (size =3D=3D -1) { - fprintf(stderr, "file %-20s: get size error: %s\n", + error_report("file %-20s: get size error: %s", filename, strerror(errno)); close(fd); return -1; @@ -623,7 +624,7 @@ static int load_uboot_image(const char *filename, hwadd= r *ep, hwaddr *loadaddr, goto out; =20 if (hdr->ih_type !=3D image_type) { - fprintf(stderr, "Wrong image type %d, expected %d\n", hdr->ih_type= , + error_report("Wrong image type %d, expected %d", hdr->ih_type, image_type); goto out; } @@ -670,14 +671,14 @@ static int load_uboot_image(const char *filename, hwa= ddr *ep, hwaddr *loadaddr, address =3D *loadaddr; break; default: - fprintf(stderr, "Unsupported u-boot image type %d\n", hdr->ih_type= ); + error_report("Unsupported u-boot image type %d", hdr->ih_type); goto out; } =20 data =3D g_malloc(hdr->ih_size); =20 if (read(fd, data, hdr->ih_size) !=3D hdr->ih_size) { - fprintf(stderr, "Error reading file\n"); + error_report("Error reading file"); goto out; } =20 @@ -693,7 +694,7 @@ static int load_uboot_image(const char *filename, hwadd= r *ep, hwaddr *loadaddr, bytes =3D gunzip(data, max_bytes, compressed_data, hdr->ih_size); g_free(compressed_data); if (bytes < 0) { - fprintf(stderr, "Unable to decompress gzipped image!\n"); + error_report("Unable to decompress gzipped image!"); goto out; } hdr->ih_size =3D bytes; @@ -763,7 +764,7 @@ int load_image_gzipped_buffer(const char *filename, uin= t64_t max_sz, data =3D g_malloc(max_sz); bytes =3D gunzip(data, max_sz, compressed_data, len); if (bytes < 0) { - fprintf(stderr, "%s: unable to decompress gzipped kernel file\n", + error_report("%s: unable to decompress gzipped kernel file", filename); goto out; } @@ -893,8 +894,8 @@ int rom_add_file(const char *file, const char *fw_dir, char devpath[100]; =20 if (as && mr) { - fprintf(stderr, "Specifying an Address Space and Memory Region is = " \ - "not valid when loading a rom\n"); + error_report("Specifying an Address Space and Memory Region is " \ + "not valid when loading a rom"); /* We haven't allocated anything so we don't need any cleanup */ return -1; } @@ -909,7 +910,7 @@ int rom_add_file(const char *file, const char *fw_dir, =20 fd =3D open(rom->path, O_RDONLY | O_BINARY); if (fd =3D=3D -1) { - fprintf(stderr, "Could not open option rom '%s': %s\n", + error_report("Could not open option rom '%s': %s", rom->path, strerror(errno)); goto err; } @@ -921,7 +922,7 @@ int rom_add_file(const char *file, const char *fw_dir, rom->addr =3D addr; rom->romsize =3D lseek(fd, 0, SEEK_END); if (rom->romsize =3D=3D -1) { - fprintf(stderr, "rom: file %-20s: get size error: %s\n", + error_report("rom: file %-20s: get size error: %s", rom->name, strerror(errno)); goto err; } @@ -931,7 +932,7 @@ int rom_add_file(const char *file, const char *fw_dir, lseek(fd, 0, SEEK_SET); rc =3D read(fd, rom->data, rom->datasize); if (rc !=3D rom->datasize) { - fprintf(stderr, "rom: file %-20s: read error: rc=3D%d (expected %z= d)\n", + error_report("rom: file %-20s: read error: rc=3D%d (expected %zd)"= , rom->name, rc, rom->datasize); goto err; } @@ -1105,10 +1106,10 @@ int rom_check_and_register_reset(void) continue; } if ((addr > rom->addr) && (as =3D=3D rom->as)) { - fprintf(stderr, "rom: requested regions overlap " - "(rom %s. free=3D0x" TARGET_FMT_plx - ", addr=3D0x" TARGET_FMT_plx ")\n", - rom->name, addr, rom->addr); + error_report("rom: requested regions overlap " + "(rom %s. free=3D0x" TARGET_FMT_plx + ", addr=3D0x" TARGET_FMT_plx ")", + rom->name, addr, rom->addr); return -1; } addr =3D rom->addr; diff --git a/hw/core/ptimer.c b/hw/core/ptimer.c index 7221c68a98..514e177de2 100644 --- a/hw/core/ptimer.c +++ b/hw/core/ptimer.c @@ -6,6 +6,7 @@ * This code is licensed under the GNU LGPL. */ #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "hw/hw.h" #include "qemu/timer.h" #include "hw/ptimer.h" @@ -56,7 +57,7 @@ static void ptimer_reload(ptimer_state *s, int delta_adju= st) =20 if (s->period =3D=3D 0) { if (!qtest_enabled()) { - fprintf(stderr, "Timer with period zero, disabling\n"); + error_report("Timer with period zero, disabling"); } timer_del(s->timer); s->enabled =3D 0; @@ -89,7 +90,7 @@ static void ptimer_reload(ptimer_state *s, int delta_adju= st) =20 if (delta =3D=3D 0) { if (!qtest_enabled()) { - fprintf(stderr, "Timer with delta zero, disabling\n"); + error_report("Timer with delta zero, disabling"); } timer_del(s->timer); s->enabled =3D 0; @@ -263,7 +264,7 @@ void ptimer_run(ptimer_state *s, int oneshot) =20 if (was_disabled && s->period =3D=3D 0) { if (!qtest_enabled()) { - fprintf(stderr, "Timer with period zero, disabling\n"); + error_report("Timer with period zero, disabling"); } return; } diff --git a/hw/cris/axis_dev88.c b/hw/cris/axis_dev88.c index 5eb552bce2..d121836b69 100644 --- a/hw/cris/axis_dev88.c +++ b/hw/cris/axis_dev88.c @@ -23,6 +23,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "qapi/error.h" #include "qemu-common.h" #include "cpu.h" @@ -349,7 +350,7 @@ void axisdev88_init(MachineState *machine) li.cmdline =3D kernel_cmdline; cris_load_image(cpu, &li); } else if (!qtest_enabled()) { - fprintf(stderr, "Kernel image must be specified\n"); + error_report("Kernel image must be specified"); exit(1); } } diff --git a/hw/cris/boot.c b/hw/cris/boot.c index f896ed7f86..f199a13a82 100644 --- a/hw/cris/boot.c +++ b/hw/cris/boot.c @@ -23,6 +23,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "qemu-common.h" #include "cpu.h" #include "hw/hw.h" @@ -86,14 +87,14 @@ void cris_load_image(CRISCPU *cpu, struct cris_load_inf= o *li) } =20 if (image_size < 0) { - fprintf(stderr, "qemu: could not load kernel '%s'\n", + error_report("qemu: could not load kernel '%s'", li->image_filename); exit(1); } =20 if (li->cmdline && (kcmdline_len =3D strlen(li->cmdline))) { if (kcmdline_len > 256) { - fprintf(stderr, "Too long CRIS kernel cmdline (max 256)\n"); + error_report("Too long CRIS kernel cmdline (max 256)"); exit(1); } pstrcpy_targphys("cmdline", 0x40000000, 256, li->cmdline); diff --git a/hw/display/blizzard.c b/hw/display/blizzard.c index 291abe6fca..0d12e078c4 100644 --- a/hw/display/blizzard.c +++ b/hw/display/blizzard.c @@ -474,7 +474,7 @@ static uint16_t blizzard_reg_read(void *opaque, uint8_t= reg) return s->gpio_pdown; =20 default: - fprintf(stderr, "%s: unknown register %02x\n", __func__, reg); + error_report("%s: unknown register %02x", __func__, reg); return 0; } } @@ -501,7 +501,7 @@ static void blizzard_reg_write(void *opaque, uint8_t re= g, uint16_t value) case 0x0c: /* PLL Mode Control 0 */ s->pll_mode =3D value & 0x77; if ((value & 3) =3D=3D 0 || (value & 3) =3D=3D 3) - fprintf(stderr, "%s: wrong PLL Control bits (%i)\n", + error_report("%s: wrong PLL Control bits (%i)", __func__, value & 3); break; =20 @@ -541,7 +541,7 @@ static void blizzard_reg_write(void *opaque, uint8_t re= g, uint16_t value) case 0x28: /* LCD Panel Configuration */ s->lcd_config =3D value & 0xff; if (value & (1 << 7)) - fprintf(stderr, "%s: data swap not supported!\n", __func__); + error_report("%s: data swap not supported!", __func__); break; =20 case 0x2a: /* LCD Horizontal Display Width */ @@ -585,7 +585,7 @@ static void blizzard_reg_write(void *opaque, uint8_t re= g, uint16_t value) case 0x40: /* High-speed Serial Interface Tx Configuration Port 1 */ s->hssi_config[1] =3D value; if (((value >> 4) & 3) =3D=3D 3) - fprintf(stderr, "%s: Illegal active-data-links value\n", + error_report("%s: Illegal active-data-links value", __func__); break; case 0x42: /* High-speed Serial Interface Tx Mode */ @@ -641,7 +641,7 @@ static void blizzard_reg_write(void *opaque, uint8_t re= g, uint16_t value) s->enable =3D value & 1; s->blank =3D (value >> 1) & 1; if (value & (1 << 4)) - fprintf(stderr, "%s: Macrovision enable attempt!\n", __func__)= ; + error_report("%s: Macrovision enable attempt!", __func__); break; =20 case 0x6a: /* Special Effects */ @@ -717,7 +717,7 @@ static void blizzard_reg_write(void *opaque, uint8_t re= g, uint16_t value) s->iformat =3D value & 0xf; s->bpp =3D blizzard_iformat_bpp[s->iformat]; if (!s->bpp) - fprintf(stderr, "%s: Illegal or unsupported input format %x\n"= , + error_report("%s: Illegal or unsupported input format %x", __func__, s->iformat); break; case 0x8e: /* Data Source Select */ @@ -729,7 +729,7 @@ static void blizzard_reg_write(void *opaque, uint8_t re= g, uint16_t value) s->iy[1] !=3D s->oy[1])) || !((s->ix[1] - s->ix[0]) & (s->iy[1] - s->iy[0]) & (s->ox[1] - s->ox[0]) & (s->oy[1] - s->oy[0]) & = 1)) - fprintf(stderr, "%s: Illegal input/output window positions\n", + error_report("%s: Illegal input/output window positions", __func__); =20 blizzard_transfer_setup(s); @@ -783,8 +783,8 @@ static void blizzard_reg_write(void *opaque, uint8_t re= g, uint16_t value) case 0xe6: /* Power-save */ s->pm =3D value & 0x83; if (value & s->mode & 1) - fprintf(stderr, "%s: The display must be disabled before enter= ing " - "Standby Mode\n", __func__); + error_report("%s: The display must be disabled before entering= " + "Standby Mode", __func__); break; case 0xe8: /* Non-display Period Control / Status */ s->status =3D value & 0x1b; @@ -815,7 +815,7 @@ static void blizzard_reg_write(void *opaque, uint8_t re= g, uint16_t value) break; =20 default: - fprintf(stderr, "%s: unknown register %02x\n", __func__, reg); + error_report("%s: unknown register %02x", __func__, reg); break; } } diff --git a/hw/display/omap_dss.c b/hw/display/omap_dss.c index 601f178fdd..52d6e753d3 100644 --- a/hw/display/omap_dss.c +++ b/hw/display/omap_dss.c @@ -406,10 +406,10 @@ static void omap_disc_write(void *opaque, hwaddr addr= , s->lcd.enable =3D (value >> 0) & 1; if (value & (1 << 12)) /* OVERLAY_OPTIMIZATION */ if (!((s->dispc.l[1].attr | s->dispc.l[2].attr) & 1)) { - fprintf(stderr, "%s: Overlay Optimization when no overlay = " - "region effectively exists leads to " - "unpredictable behaviour!\n", __func__); - } + error_report("%s: Overlay Optimization when no overlay " + "region effectively exists leads to " + "unpredictable behaviour!", __func__); + } if (value & (1 << 6)) { /* GODIGITAL */ /* XXX: Shadowed fields are: * s->dispc.config @@ -525,8 +525,8 @@ static void omap_disc_write(void *opaque, hwaddr addr, case 0x0a0: /* DISPC_GFX_ATTRIBUTES */ s->dispc.l[0].attr =3D value & 0x7ff; if (value & (3 << 9)) - fprintf(stderr, "%s: Big-endian pixel format not supported\n", - __func__); + error_report("%s: Big-endian pixel format not supported", + __func__); s->dispc.l[0].enable =3D value & 1; s->dispc.l[0].bpp =3D (value >> 1) & 0xf; s->dispc.invalidate =3D 1; @@ -617,7 +617,7 @@ static void omap_rfbi_transfer_start(struct omap_dss_s = *s) if (s->rfbi.control & (1 << 1)) { /* BYPASS */ /* TODO: in non-Bypass mode we probably need to just assert the * DRQ and wait for DMA to write the pixels. */ - fprintf(stderr, "%s: Bypass mode unimplemented\n", __func__); + error_report("%s: Bypass mode unimplemented", __func__); return; } =20 diff --git a/hw/display/pl110.c b/hw/display/pl110.c index 8c7dcc6f0a..b8b7903d36 100644 --- a/hw/display/pl110.c +++ b/hw/display/pl110.c @@ -174,7 +174,7 @@ static void pl110_update_display(void *opaque) dest_width =3D 4; break; default: - fprintf(stderr, "pl110: Bad color depth\n"); + error_report("pl110: Bad color depth"); exit(1); } if (s->cr & PL110_CR_BGR) diff --git a/hw/display/pxa2xx_lcd.c b/hw/display/pxa2xx_lcd.c index b83f80753a..ae3a365849 100644 --- a/hw/display/pxa2xx_lcd.c +++ b/hw/display/pxa2xx_lcd.c @@ -1050,7 +1050,7 @@ PXA2xxLCDState *pxa2xx_lcdc_init(MemoryRegion *sysmem= , s->dest_width =3D 4; break; default: - fprintf(stderr, "%s: Bad color depth\n", __func__); + error_report("%s: Bad color depth", __func__); exit(1); } =20 diff --git a/hw/display/qxl-render.c b/hw/display/qxl-render.c index e7ac4f8789..0cd07028a4 100644 --- a/hw/display/qxl-render.c +++ b/hw/display/qxl-render.c @@ -78,7 +78,7 @@ void qxl_render_resize(PCIQXLDevice *qxl) qxl->guest_primary.bits_pp =3D 32; break; default: - fprintf(stderr, "%s: unhandled format: %x\n", __func__, + error_report("%s: unhandled format: %x", __func__, qxl->guest_primary.surface.format); qxl->guest_primary.bytes_pp =3D 4; qxl->guest_primary.bits_pp =3D 32; @@ -247,7 +247,7 @@ static QEMUCursor *qxl_cursor(PCIQXLDevice *qxl, QXLCur= sor *cursor, } break; default: - fprintf(stderr, "%s: not implemented: type %d\n", + error_report("%s: not implemented: type %d", __func__, cursor->header.type); goto fail; } @@ -275,9 +275,8 @@ int qxl_render_cursor(PCIQXLDevice *qxl, QXLCommandExt = *ext) } =20 if (qxl->debug > 1 && cmd->type !=3D QXL_CURSOR_MOVE) { - fprintf(stderr, "%s", __func__); + error_report("%s", __func__); qxl_log_cmd_cursor(qxl, cmd, ext->group_id); - fprintf(stderr, "\n"); } switch (cmd->type) { case QXL_CURSOR_SET: diff --git a/hw/display/qxl.c b/hw/display/qxl.c index ae3677fd1e..0163a18bbb 100644 --- a/hw/display/qxl.c +++ b/hw/display/qxl.c @@ -875,7 +875,7 @@ static void interface_notify_update(QXLInstance *sin, u= int32_t update_id) * Probably was at some earlier version that is prior to git start (20= 09), * and is still guest trigerrable. */ - fprintf(stderr, "%s: deprecated\n", __func__); + error_report("%s: deprecated", __func__); } =20 /* called from spice server thread context only */ @@ -905,7 +905,7 @@ static void interface_async_complete_io(PCIQXLDevice *q= xl, QXLCookie *cookie) =20 trace_qxl_interface_async_complete_io(qxl->id, current_async, cookie); if (!cookie) { - fprintf(stderr, "qxl: %s: error, cookie is NULL\n", __func__); + error_report("qxl: %s: error, cookie is NULL", __func__); return; } if (cookie && current_async !=3D cookie->io) { @@ -930,7 +930,7 @@ static void interface_async_complete_io(PCIQXLDevice *q= xl, QXLCookie *cookie) qxl_spice_destroy_surface_wait_complete(qxl, cookie->u.surface_id)= ; break; default: - fprintf(stderr, "qxl: %s: unexpected current_async %d\n", __func__= , + error_report("qxl: %s: unexpected current_async %d", __func__, current_async); } qxl_send_events(qxl, QXL_INTERRUPT_IO_CMD); @@ -998,7 +998,7 @@ static void interface_async_complete(QXLInstance *sin, = uint64_t cookie_token) case QXL_COOKIE_TYPE_POST_LOAD_MONITORS_CONFIG: break; default: - fprintf(stderr, "qxl: %s: unexpected cookie type %d\n", + error_report("qxl: %s: unexpected cookie type %d", __func__, cookie->type); g_free(cookie); } @@ -1875,7 +1875,7 @@ static void qxl_send_events(PCIQXLDevice *d, uint32_t= events) trace_qxl_send_events(d->id, events); if (!qemu_spice_display_is_running(&d->ssd)) { /* spice-server tracks guest running state and should not do this = */ - fprintf(stderr, "%s: spice-server bug: guest stopped, ignoring\n", + error_report("%s: spice-server bug: guest stopped, ignoring", __func__); trace_qxl_send_events_vm_stopped(d->id, events); return; diff --git a/hw/display/tc6393xb.c b/hw/display/tc6393xb.c index 79f161740a..8b708a858b 100644 --- a/hw/display/tc6393xb.c +++ b/hw/display/tc6393xb.c @@ -159,7 +159,7 @@ void tc6393xb_gpio_out_set(TC6393xbState *s, int line, qemu_irq handler) { if (line >=3D TC6393XB_GPIOS) { - fprintf(stderr, "TC6393xb: no GPIO pin %d\n", line); + error_report("TC6393xb: no GPIO pin %d", line); return; } =20 @@ -190,7 +190,7 @@ static void tc6393xb_l3v(void *opaque, int line, int le= vel) { TC6393xbState *s =3D opaque; s->blank =3D !level; - fprintf(stderr, "L3V: %d\n", level); + error_report("L3V: %d", level); } =20 static void tc6393xb_sub_irq(void *opaque, int line, int level) { @@ -257,7 +257,7 @@ static uint32_t tc6393xb_scr_readb(TC6393xbState *s, hw= addr addr) SCR_REG_B(CONFIG); SCR_REG_B(DEBUG); } - fprintf(stderr, "tc6393xb_scr: unhandled read at %08x\n", (uint32_t) a= ddr); + error_report("tc6393xb_scr: unhandled read at %08x", (uint32_t) addr); return 0; } #undef SCR_REG_B @@ -318,8 +318,8 @@ static void tc6393xb_scr_writeb(TC6393xbState *s, hwadd= r addr, uint32_t value) SCR_REG_B(CONFIG); SCR_REG_B(DEBUG); } - fprintf(stderr, "tc6393xb_scr: unhandled write at %08x: %02x\n", - (uint32_t) addr, value & 0xff); + error_report("tc6393xb_scr: unhandled write at %08x: %02x", + (uint32_t) addr, value & 0xff); } #undef SCR_REG_B #undef SCR_REG_W @@ -341,7 +341,7 @@ static uint32_t tc6393xb_nand_cfg_readb(TC6393xbState *= s, hwaddr addr) { case NAND_CFG_BASE + 3: return s->nand_phys >> (addr - NAND_CFG_BASE); } - fprintf(stderr, "tc6393xb_nand_cfg: unhandled read at %08x\n", (uint32= _t) addr); + error_report("tc6393xb_nand_cfg: unhandled read at %08x", (uint32_t) a= ddr); return 0; } static void tc6393xb_nand_cfg_writeb(TC6393xbState *s, hwaddr addr, uint32= _t value) { @@ -357,7 +357,7 @@ static void tc6393xb_nand_cfg_writeb(TC6393xbState *s, = hwaddr addr, uint32_t val s->nand_phys |=3D (value & 0xff) << ((addr - NAND_CFG_BASE) * = 8); return; } - fprintf(stderr, "tc6393xb_nand_cfg: unhandled write at %08x: %02x\n", + error_report("tc6393xb_nand_cfg: unhandled write at %08x: %02x", (uint32_t) addr, value & 0xff); } =20 @@ -377,12 +377,14 @@ static uint32_t tc6393xb_nand_readb(TC6393xbState *s,= hwaddr addr) { case NAND_IMR: return s->nand.imr; } - fprintf(stderr, "tc6393xb_nand: unhandled read at %08x\n", (uint32_t) = addr); + error_report("tc6393xb_nand: unhandled read at %08x", (uint32_t) addr)= ; return 0; } -static void tc6393xb_nand_writeb(TC6393xbState *s, hwaddr addr, uint32_t v= alue) { -// fprintf(stderr, "tc6393xb_nand: write at %08x: %02x\n", -// (uint32_t) addr, value & 0xff); +static void tc6393xb_nand_writeb(TC6393xbState *s, hwaddr addr, uint32_t v= alue) +{ + /* error_report("tc6393xb_nand: write at %08x: %02x", + * (uint32_t) addr, value & 0xff); + */ switch (addr) { case NAND_DATA + 0: case NAND_DATA + 1: @@ -420,7 +422,7 @@ static void tc6393xb_nand_writeb(TC6393xbState *s, hwad= dr addr, uint32_t value) tc6393xb_nand_irq(s); return; } - fprintf(stderr, "tc6393xb_nand: unhandled write at %08x: %02x\n", + error_report("tc6393xb_nand: unhandled write at %08x: %02x", (uint32_t) addr, value & 0xff); } =20 @@ -522,13 +524,15 @@ static uint64_t tc6393xb_readb(void *opaque, hwaddr a= ddr, }; =20 if ((addr &~0xff) =3D=3D s->nand_phys && s->nand_enable) { -// return tc6393xb_nand_readb(s, addr & 0xff); + /* return tc6393xb_nand_readb(s, addr & 0xff); */ uint8_t d =3D tc6393xb_nand_readb(s, addr & 0xff); -// fprintf(stderr, "tc6393xb_nand: read at %08x: %02hhx\n", (uint32= _t) addr, d); + /* error_report("tc6393xb_nand: read at %08x: %02hhx", + * (uint32_t) addr, d); + */ return d; } =20 -// fprintf(stderr, "tc6393xb: unhandled read at %08x\n", (uint32_t) add= r); + /* error_report("tc6393xb: unhandled read at %08x", (uint32_t) addr); = */ return 0; } =20 @@ -548,7 +552,7 @@ static void tc6393xb_writeb(void *opaque, hwaddr addr, if ((addr &~0xff) =3D=3D s->nand_phys && s->nand_enable) tc6393xb_nand_writeb(s, addr & 0xff, value); else - fprintf(stderr, "tc6393xb: unhandled write at %08x: %02x\n", + error_report("tc6393xb: unhandled write at %08x: %02x", (uint32_t) addr, (int)value & 0xff); } =20 diff --git a/hw/display/virtio-gpu-3d.c b/hw/display/virtio-gpu-3d.c index 8c106a662d..88bc1c84a6 100644 --- a/hw/display/virtio-gpu-3d.c +++ b/hw/display/virtio-gpu-3d.c @@ -473,7 +473,7 @@ void virtio_gpu_virgl_process_cmd(VirtIOGPU *g, return; } if (cmd->error) { - fprintf(stderr, "%s: ctrl 0x%x, error 0x%x\n", __func__, + error_report("%s: ctrl 0x%x, error 0x%x", __func__, cmd->cmd_hdr.type, cmd->error); virtio_gpu_ctrl_response_nodata(g, cmd, cmd->error); return; @@ -556,7 +556,7 @@ static void virtio_gpu_print_stats(void *opaque) VirtIOGPU *g =3D opaque; =20 if (g->stats.requests) { - fprintf(stderr, "stats: vq req %4d, %3d -- 3D %4d (%5d)\n", + error_report("stats: vq req %4d, %3d -- 3D %4d (%5d)", g->stats.requests, g->stats.max_inflight, g->stats.req_3d, diff --git a/hw/display/vmware_vga.c b/hw/display/vmware_vga.c index 4a64b41259..44d425e1f6 100644 --- a/hw/display/vmware_vga.c +++ b/hw/display/vmware_vga.c @@ -293,45 +293,45 @@ static inline bool vmsvga_verify_rect(DisplaySurface = *surface, int x, int y, int w, int h) { if (x < 0) { - fprintf(stderr, "%s: x was < 0 (%d)\n", name, x); + error_report("%s: x was < 0 (%d)", name, x); return false; } if (x > SVGA_MAX_WIDTH) { - fprintf(stderr, "%s: x was > %d (%d)\n", name, SVGA_MAX_WIDTH, x); + error_report("%s: x was > %d (%d)", name, SVGA_MAX_WIDTH, x); return false; } if (w < 0) { - fprintf(stderr, "%s: w was < 0 (%d)\n", name, w); + error_report("%s: w was < 0 (%d)", name, w); return false; } if (w > SVGA_MAX_WIDTH) { - fprintf(stderr, "%s: w was > %d (%d)\n", name, SVGA_MAX_WIDTH, w); + error_report("%s: w was > %d (%d)", name, SVGA_MAX_WIDTH, w); return false; } if (x + w > surface_width(surface)) { - fprintf(stderr, "%s: width was > %d (x: %d, w: %d)\n", + error_report("%s: width was > %d (x: %d, w: %d)", name, surface_width(surface), x, w); return false; } =20 if (y < 0) { - fprintf(stderr, "%s: y was < 0 (%d)\n", name, y); + error_report("%s: y was < 0 (%d)", name, y); return false; } if (y > SVGA_MAX_HEIGHT) { - fprintf(stderr, "%s: y was > %d (%d)\n", name, SVGA_MAX_HEIGHT, y)= ; + error_report("%s: y was > %d (%d)", name, SVGA_MAX_HEIGHT, y); return false; } if (h < 0) { - fprintf(stderr, "%s: h was < 0 (%d)\n", name, h); + error_report("%s: h was < 0 (%d)", name, h); return false; } if (h > SVGA_MAX_HEIGHT) { - fprintf(stderr, "%s: h was > %d (%d)\n", name, SVGA_MAX_HEIGHT, h)= ; + error_report("%s: h was > %d (%d)", name, SVGA_MAX_HEIGHT, h); return false; } if (y + h > surface_height(surface)) { - fprintf(stderr, "%s: update height > %d (y: %d, h: %d)\n", + error_report("%s: update height > %d (y: %d, h: %d)", name, surface_height(surface), y, h); return false; } @@ -529,7 +529,7 @@ static inline void vmsvga_cursor_define(struct vmsvga_s= tate_s *s, #endif break; default: - fprintf(stderr, "%s: unhandled bpp %d, using fallback cursor\n", + error_report("%s: unhandled bpp %d, using fallback cursor", __func__, c->bpp); cursor_put(qc); qc =3D cursor_builtin_left_ptr(); diff --git a/hw/dma/omap_dma.c b/hw/dma/omap_dma.c index abd18c67ea..5d7fe06d98 100644 --- a/hw/dma/omap_dma.c +++ b/hw/dma/omap_dma.c @@ -18,6 +18,7 @@ * with this program; if not, see . */ #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "qemu-common.h" #include "qemu/timer.h" #include "hw/arm/omap.h" @@ -1898,13 +1899,13 @@ static void omap_dma4_write(void *opaque, hwaddr ad= dr, omap_dma_reset(s->dma); s->ocp =3D value & 0x3321; if (((s->ocp >> 12) & 3) =3D=3D 3) /* MIDLEMODE */ - fprintf(stderr, "%s: invalid DMA power mode\n", __func__); + error_report("%s: invalid DMA power mode", __func__); return; =20 case 0x78: /* DMA4_GCR */ s->gcr =3D value & 0x00ff00ff; if ((value & 0xff) =3D=3D 0x00) /* MAX_CHANNEL_FIFO_DEPTH */ - fprintf(stderr, "%s: wrong FIFO depth in GCR\n", __func__); + error_report("%s: wrong FIFO depth in GCR", __func__); return; =20 case 0x80 ... 0xfff: @@ -1934,8 +1935,8 @@ static void omap_dma4_write(void *opaque, hwaddr addr= , ch->buf_disable =3D (value >> 25) & 1; ch->src_sync =3D (value >> 24) & 1; /* XXX For CamDMA must be 1 */ if (ch->buf_disable && !ch->src_sync) - fprintf(stderr, "%s: Buffering disable is not allowed in " - "destination synchronised mode\n", __func__); + error_report("%s: Buffering disable is not allowed in " + "destination synchronised mode", __func__); ch->prefetch =3D (value >> 23) & 1; ch->bs =3D (value >> 18) & 1; ch->transparent_copy =3D (value >> 17) & 1; @@ -1946,8 +1947,8 @@ static void omap_dma4_write(void *opaque, hwaddr addr= , ch->priority =3D (value & 0x0040) >> 6; ch->fs =3D (value & 0x0020) >> 5; if (ch->fs && ch->bs && ch->mode[0] && ch->mode[1]) - fprintf(stderr, "%s: For a packet transfer at least one port " - "must be constant-addressed\n", __func__); + error_report("%s: For a packet transfer at least one port " + "must be constant-addressed", __func__); ch->sync =3D (value & 0x001f) | ((value >> 14) & 0x0060); /* XXX must be 0x01 for CamDMA */ =20 @@ -1977,8 +1978,8 @@ static void omap_dma4_write(void *opaque, hwaddr addr= , ch->endian[1] =3D(value >> 19) & 1; ch->endian_lock[1] =3D(value >> 18) & 1; if (ch->endian[0] !=3D ch->endian[1]) - fprintf(stderr, "%s: DMA endianness conversion enable attempt\= n", - __func__); + error_report("%s: DMA endianness conversion enable attempt", + __func__); ch->write_mode =3D (value >> 16) & 3; ch->burst[1] =3D (value & 0xc000) >> 14; ch->pack[1] =3D (value & 0x2000) >> 13; @@ -1986,12 +1987,13 @@ static void omap_dma4_write(void *opaque, hwaddr ad= dr, ch->burst[0] =3D (value & 0x0180) >> 7; ch->pack[0] =3D (value & 0x0040) >> 6; ch->translate[0] =3D (value & 0x003c) >> 2; - if (ch->translate[0] | ch->translate[1]) - fprintf(stderr, "%s: bad MReqAddressTranslate sideband signal\= n", - __func__); + if (ch->translate[0] | ch->translate[1]) { + error_report("%s: bad MReqAddressTranslate sideband signal", + __func__); + } ch->data_type =3D 1 << (value & 3); if ((value & 3) =3D=3D 3) { - printf("%s: bad data_type for DMA channel\n", __func__); + error_report("%s: bad data_type for DMA channel", __func__); ch->data_type >>=3D 1; } break; diff --git a/hw/dma/soc_dma.c b/hw/dma/soc_dma.c index 9bb499bf9c..7339a3ec95 100644 --- a/hw/dma/soc_dma.c +++ b/hw/dma/soc_dma.c @@ -18,6 +18,7 @@ * with this program; if not, see . */ #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "qemu-common.h" #include "qemu/timer.h" #include "hw/arm/soc_dma.h" @@ -270,11 +271,11 @@ void soc_dma_port_add_fifo(struct soc_dma_s *soc, hwa= ddr virt_base, if (entry->type =3D=3D soc_dma_port_mem) { if (entry->addr <=3D virt_base && entry->addr + entry->u.mem.size > virt_base) { - fprintf(stderr, "%s: FIFO at %"PRIx64 - " collides with RAM region at %"PRIx64 - "-%"PRIx64 "\n", __func__, - virt_base, entry->addr, - (entry->addr + entry->u.mem.size)); + error_report("%s: FIFO at %"PRIx64 + " collides with RAM region at %"PRIx64 + "-%"PRIx64 "", __func__, + virt_base, entry->addr, + (entry->addr + entry->u.mem.size)); exit(-1); } =20 @@ -284,9 +285,9 @@ void soc_dma_port_add_fifo(struct soc_dma_s *soc, hwadd= r virt_base, while (entry < dma->memmap + dma->memmap_size && entry->addr <=3D virt_base) { if (entry->addr =3D=3D virt_base && entry->u.fifo.out =3D= =3D out) { - fprintf(stderr, "%s: FIFO at %"PRIx64 - " collides FIFO at %"PRIx64 "\n", - __func__, virt_base, entry->addr); + error_report("%s: FIFO at %"PRIx64 + " collides FIFO at %"PRIx64 "", + __func__, virt_base, entry->addr); exit(-1); } =20 @@ -321,11 +322,11 @@ void soc_dma_port_add_mem(struct soc_dma_s *soc, uint= 8_t *phys_base, if ((entry->addr >=3D virt_base && entry->addr < virt_base + s= ize) || (entry->addr <=3D virt_base && entry->addr + entry->u.mem.size > virt_base))= { - fprintf(stderr, "%s: RAM at %"PRIx64 "-%"PRIx64 - " collides with RAM region at %"PRIx64 - "-%"PRIx64 "\n", __func__, - virt_base, virt_base + size, - entry->addr, entry->addr + entry->u.mem.si= ze); + error_report("%s: RAM at %"PRIx64 "-%"PRIx64 + " collides with RAM region at %"PRIx64 + "-%"PRIx64 "", __func__, + virt_base, virt_base + size, + entry->addr, entry->addr + entry->u.mem.size)= ; exit(-1); } =20 @@ -334,11 +335,11 @@ void soc_dma_port_add_mem(struct soc_dma_s *soc, uint= 8_t *phys_base, } else { if (entry->addr >=3D virt_base && entry->addr < virt_base + size) { - fprintf(stderr, "%s: RAM at %"PRIx64 "-%"PRIx64 - " collides with FIFO at %"PRIx64 - "\n", __func__, - virt_base, virt_base + size, - entry->addr); + error_report("%s: RAM at %"PRIx64 "-%"PRIx64 + " collides with FIFO at %"PRIx64 + "", __func__, + virt_base, virt_base + size, + entry->addr); exit(-1); } =20 diff --git a/hw/gpio/omap_gpio.c b/hw/gpio/omap_gpio.c index 08472193b5..57aa2e54f5 100644 --- a/hw/gpio/omap_gpio.c +++ b/hw/gpio/omap_gpio.c @@ -399,7 +399,7 @@ static void omap2_gpio_module_write(void *opaque, hwadd= r addr, =20 case 0x10: /* GPIO_SYSCONFIG */ if (((value >> 3) & 3) =3D=3D 3) - fprintf(stderr, "%s: bad IDLEMODE value\n", __func__); + error_report("%s: bad IDLEMODE value", __func__); if (value & 2) omap2_gpio_module_reset(s); s->config[0] =3D value & 0x1d; diff --git a/hw/i2c/omap_i2c.c b/hw/i2c/omap_i2c.c index 26e3e5ebf6..c89664f342 100644 --- a/hw/i2c/omap_i2c.c +++ b/hw/i2c/omap_i2c.c @@ -340,13 +340,13 @@ static void omap_i2c_write(void *opaque, hwaddr addr, break; } if ((value & (1 << 15)) && !(value & (1 << 10))) { /* MST */ - fprintf(stderr, "%s: I^2C slave mode not supported\n", - __func__); + error_report("%s: I^2C slave mode not supported", + __func__); break; } if ((value & (1 << 15)) && value & (1 << 8)) { /* XA */ - fprintf(stderr, "%s: 10-bit addressing mode not supported\n", - __func__); + error_report("%s: 10-bit addressing mode not supported", + __func__); break; } if ((value & (1 << 15)) && value & (1 << 0)) { /* STT */ @@ -393,7 +393,7 @@ static void omap_i2c_write(void *opaque, hwaddr addr, omap_i2c_interrupts_update(s); } if (value & (1 << 15)) /* ST_EN */ - fprintf(stderr, "%s: System Test not supported\n", __func__); + error_report("%s: System Test not supported", __func__); break; =20 default: diff --git a/hw/i386/kvm/apic.c b/hw/i386/kvm/apic.c index 1df6d26816..e90a1b9b3b 100644 --- a/hw/i386/kvm/apic.c +++ b/hw/i386/kvm/apic.c @@ -10,6 +10,7 @@ * See the COPYING file in the top-level directory. */ #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "qemu-common.h" #include "cpu.h" #include "hw/i386/apic_internal.h" @@ -128,7 +129,7 @@ static void kvm_apic_vapic_base_update(APICCommonState = *s) =20 ret =3D kvm_vcpu_ioctl(CPU(s->cpu), KVM_SET_VAPIC_ADDR, &vapid_addr); if (ret < 0) { - fprintf(stderr, "KVM: setting VAPIC address failed (%s)\n", + error_report("KVM: setting VAPIC address failed (%s)", strerror(-ret)); abort(); } @@ -145,7 +146,7 @@ static void kvm_apic_put(CPUState *cs, run_on_cpu_data = data) =20 ret =3D kvm_vcpu_ioctl(CPU(s->cpu), KVM_SET_LAPIC, &kapic); if (ret < 0) { - fprintf(stderr, "KVM_SET_LAPIC failed: %s\n", strerror(ret)); + error_report("KVM_SET_LAPIC failed: %s", strerror(ret)); abort(); } } @@ -167,7 +168,7 @@ static void do_inject_external_nmi(CPUState *cpu, run_o= n_cpu_data data) if (!(lvt & APIC_LVT_MASKED) && ((lvt >> 8) & 7) =3D=3D APIC_DM_NMI) { ret =3D kvm_vcpu_ioctl(cpu, KVM_NMI); if (ret < 0) { - fprintf(stderr, "KVM: injection failed, NMI lost (%s)\n", + error_report("KVM: injection failed, NMI lost (%s)", strerror(-ret)); } } @@ -184,7 +185,7 @@ static void kvm_send_msi(MSIMessage *msg) =20 ret =3D kvm_irqchip_send_msi(kvm_state, *msg); if (ret < 0) { - fprintf(stderr, "KVM: injection failed, MSI lost (%s)\n", + error_report("KVM: injection failed, MSI lost (%s)", strerror(-ret)); } } diff --git a/hw/i386/kvm/clock.c b/hw/i386/kvm/clock.c index 363d1b5743..e05c1587ce 100644 --- a/hw/i386/kvm/clock.c +++ b/hw/i386/kvm/clock.c @@ -14,6 +14,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "qemu-common.h" #include "cpu.h" #include "qemu/host-utils.h" @@ -99,7 +100,7 @@ static void kvm_update_clock(KVMClockState *s) =20 ret =3D kvm_vm_ioctl(kvm_state, KVM_GET_CLOCK, &data); if (ret < 0) { - fprintf(stderr, "KVM_GET_CLOCK failed: %s\n", strerror(ret)); + error_report("KVM_GET_CLOCK failed: %s", strerror(ret)); abort(); } s->clock =3D data.clock; @@ -174,7 +175,7 @@ static void kvmclock_vm_state_change(void *opaque, int = running, data.clock =3D s->clock; ret =3D kvm_vm_ioctl(kvm_state, KVM_SET_CLOCK, &data); if (ret < 0) { - fprintf(stderr, "KVM_SET_CLOCK failed: %s\n", strerror(ret)); + error_report("KVM_SET_CLOCK failed: %s", strerror(ret)); abort(); } =20 @@ -185,7 +186,7 @@ static void kvmclock_vm_state_change(void *opaque, int = running, ret =3D kvm_vcpu_ioctl(cpu, KVM_KVMCLOCK_CTRL, 0); if (ret) { if (ret !=3D -EINVAL) { - fprintf(stderr, "%s: %s\n", __func__, strerror(-ret)); + error_report("%s: %s", __func__, strerror(-ret)); } return; } diff --git a/hw/i386/kvm/i8254.c b/hw/i386/kvm/i8254.c index 521a58498a..27f24b1090 100644 --- a/hw/i386/kvm/i8254.c +++ b/hw/i386/kvm/i8254.c @@ -24,6 +24,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/error-report.h" #include #include "qapi/error.h" #include "qemu/timer.h" @@ -101,7 +102,7 @@ static void kvm_pit_get(PITCommonState *pit) if (kvm_has_pit_state2()) { ret =3D kvm_vm_ioctl(kvm_state, KVM_GET_PIT2, &kpit); if (ret < 0) { - fprintf(stderr, "KVM_GET_PIT2 failed: %s\n", strerror(ret)); + error_report("KVM_GET_PIT2 failed: %s", strerror(ret)); abort(); } pit->channels[0].irq_disabled =3D kpit.flags & KVM_PIT_FLAGS_HPET_= LEGACY; @@ -112,7 +113,7 @@ static void kvm_pit_get(PITCommonState *pit) */ ret =3D kvm_vm_ioctl(kvm_state, KVM_GET_PIT, &kpit); if (ret < 0) { - fprintf(stderr, "KVM_GET_PIT failed: %s\n", strerror(ret)); + error_report("KVM_GET_PIT failed: %s", strerror(ret)); abort(); } } @@ -175,7 +176,7 @@ static void kvm_pit_put(PITCommonState *pit) kvm_has_pit_state2() ? KVM_SET_PIT2 : KVM_SET_PIT, &kpit); if (ret < 0) { - fprintf(stderr, "%s failed: %s\n", + error_report("%s failed: %s", kvm_has_pit_state2() ? "KVM_SET_PIT2" : "KVM_SET_PIT", strerror(ret)); abort(); diff --git a/hw/i386/kvm/i8259.c b/hw/i386/kvm/i8259.c index 11d1b726b6..770a934552 100644 --- a/hw/i386/kvm/i8259.c +++ b/hw/i386/kvm/i8259.c @@ -10,6 +10,7 @@ * See the COPYING file in the top-level directory. */ #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "hw/isa/i8259_internal.h" #include "hw/i386/apic_internal.h" #include "sysemu/kvm.h" @@ -39,7 +40,7 @@ static void kvm_pic_get(PICCommonState *s) chip.chip_id =3D s->master ? KVM_IRQCHIP_PIC_MASTER : KVM_IRQCHIP_PIC_= SLAVE; ret =3D kvm_vm_ioctl(kvm_state, KVM_GET_IRQCHIP, &chip); if (ret < 0) { - fprintf(stderr, "KVM_GET_IRQCHIP failed: %s\n", strerror(ret)); + error_report("KVM_GET_IRQCHIP failed: %s", strerror(ret)); abort(); } =20 @@ -92,7 +93,7 @@ static void kvm_pic_put(PICCommonState *s) =20 ret =3D kvm_vm_ioctl(kvm_state, KVM_SET_IRQCHIP, &chip); if (ret < 0) { - fprintf(stderr, "KVM_SET_IRQCHIP failed: %s\n", strerror(ret)); + error_report("KVM_SET_IRQCHIP failed: %s", strerror(ret)); abort(); } } diff --git a/hw/i386/kvm/ioapic.c b/hw/i386/kvm/ioapic.c index 98ca480792..a31bcd2658 100644 --- a/hw/i386/kvm/ioapic.c +++ b/hw/i386/kvm/ioapic.c @@ -11,6 +11,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "monitor/monitor.h" #include "hw/i386/pc.h" #include "hw/i386/ioapic_internal.h" @@ -74,7 +75,7 @@ static void kvm_ioapic_get(IOAPICCommonState *s) chip.chip_id =3D KVM_IRQCHIP_IOAPIC; ret =3D kvm_vm_ioctl(kvm_state, KVM_GET_IRQCHIP, &chip); if (ret < 0) { - fprintf(stderr, "KVM_GET_IRQCHIP failed: %s\n", strerror(ret)); + error_report("KVM_GET_IRQCHIP failed: %s", strerror(ret)); abort(); } =20 @@ -107,7 +108,7 @@ static void kvm_ioapic_put(IOAPICCommonState *s) =20 ret =3D kvm_vm_ioctl(kvm_state, KVM_SET_IRQCHIP, &chip); if (ret < 0) { - fprintf(stderr, "KVM_GET_IRQCHIP failed: %s\n", strerror(ret)); + error_report("KVM_GET_IRQCHIP failed: %s", strerror(ret)); abort(); } } diff --git a/hw/i386/multiboot.c b/hw/i386/multiboot.c index c7b70c91d5..d297a88f9d 100644 --- a/hw/i386/multiboot.c +++ b/hw/i386/multiboot.c @@ -23,6 +23,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "qemu-common.h" #include "cpu.h" #include "hw/hw.h" @@ -184,7 +185,7 @@ int load_multiboot(FWCfgState *fw_cfg, memset(&mbs, 0, sizeof(mbs)); =20 if (flags & 0x00000004) { /* MULTIBOOT_HEADER_HAS_VBE */ - fprintf(stderr, "qemu: multiboot knows VBE. we don't.\n"); + error_report("qemu: multiboot knows VBE. we don't."); } if (!(flags & 0x00010000)) { /* MULTIBOOT_HEADER_HAS_ADDR */ uint64_t elf_entry; @@ -193,7 +194,7 @@ int load_multiboot(FWCfgState *fw_cfg, fclose(f); =20 if (((struct elf64_hdr*)header)->e_machine =3D=3D EM_X86_64) { - fprintf(stderr, "Cannot load x86-64 image, give a 32bit one.\n= "); + error_report("Cannot load x86-64 image, give a 32bit one."); exit(1); } =20 @@ -201,7 +202,7 @@ int load_multiboot(FWCfgState *fw_cfg, &elf_low, &elf_high, 0, I386_ELF_MACHINE, 0, 0); if (kernel_size < 0) { - fprintf(stderr, "Error while loading elf kernel\n"); + error_report("Error while loading elf kernel"); exit(1); } mh_load_addr =3D elf_low; @@ -210,7 +211,7 @@ int load_multiboot(FWCfgState *fw_cfg, =20 mbs.mb_buf =3D g_malloc(mb_kernel_size); if (rom_copy(mbs.mb_buf, mh_load_addr, mb_kernel_size) !=3D mb_ker= nel_size) { - fprintf(stderr, "Error while fetching elf kernel from rom\n"); + error_report("Error while fetching elf kernel from rom"); exit(1); } =20 @@ -224,7 +225,7 @@ int load_multiboot(FWCfgState *fw_cfg, =20 mh_load_addr =3D ldl_p(header+i+16); if (mh_header_addr < mh_load_addr) { - fprintf(stderr, "invalid mh_load_addr address\n"); + error_report("invalid mh_load_addr address"); exit(1); } =20 @@ -234,19 +235,19 @@ int load_multiboot(FWCfgState *fw_cfg, =20 if (mh_load_end_addr) { if (mh_bss_end_addr < mh_load_addr) { - fprintf(stderr, "invalid mh_bss_end_addr address\n"); + error_report("invalid mh_bss_end_addr address"); exit(1); } mb_kernel_size =3D mh_bss_end_addr - mh_load_addr; =20 if (mh_load_end_addr < mh_load_addr) { - fprintf(stderr, "invalid mh_load_end_addr address\n"); + error_report("invalid mh_load_end_addr address"); exit(1); } mb_load_size =3D mh_load_end_addr - mh_load_addr; } else { if (kernel_file_size < mb_kernel_text_offset) { - fprintf(stderr, "invalid kernel_file_size\n"); + error_report("invalid kernel_file_size"); exit(1); } mb_kernel_size =3D kernel_file_size - mb_kernel_text_offset; @@ -269,7 +270,7 @@ int load_multiboot(FWCfgState *fw_cfg, mbs.mb_buf =3D g_malloc(mb_kernel_size); fseek(f, mb_kernel_text_offset, SEEK_SET); if (fread(mbs.mb_buf, 1, mb_load_size, f) !=3D mb_load_size) { - fprintf(stderr, "fread() failed\n"); + error_report("fread() failed"); exit(1); } memset(mbs.mb_buf + mb_load_size, 0, mb_kernel_size - mb_load_size= ); @@ -326,7 +327,7 @@ int load_multiboot(FWCfgState *fw_cfg, mb_debug("multiboot loading module: %s\n", tmpbuf); mb_mod_length =3D get_image_size(tmpbuf); if (mb_mod_length < 0) { - fprintf(stderr, "Failed to open file '%s'\n", tmpbuf); + error_report("Failed to open file '%s'", tmpbuf); exit(1); } =20 diff --git a/hw/i386/pc.c b/hw/i386/pc.c index 05985d4927..ca25424c09 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -856,14 +856,14 @@ static void load_linux(PCMachineState *pcms, if (!f || !(kernel_size =3D get_file_size(f)) || fread(header, 1, MIN(ARRAY_SIZE(header), kernel_size), f) !=3D MIN(ARRAY_SIZE(header), kernel_size)) { - fprintf(stderr, "qemu: could not load kernel '%s': %s\n", + error_report("qemu: could not load kernel '%s': %s", kernel_filename, strerror(errno)); exit(1); } =20 /* kernel protocol version */ #if 0 - fprintf(stderr, "header magic: %#x\n", ldl_p(header+0x202)); + error_report("header magic: %#x", ldl_p(header + 0x202)); #endif if (ldl_p(header+0x202) =3D=3D 0x53726448) { protocol =3D lduw_p(header+0x206); @@ -960,13 +960,13 @@ static void load_linux(PCMachineState *pcms, /* load initrd */ if (initrd_filename) { if (protocol < 0x200) { - fprintf(stderr, "qemu: linux kernel too old to load a ram disk= \n"); + error_report("qemu: linux kernel too old to load a ram disk"); exit(1); } =20 initrd_size =3D get_image_size(initrd_filename); if (initrd_size < 0) { - fprintf(stderr, "qemu: error reading initrd %s: %s\n", + error_report("qemu: error reading initrd %s: %s", initrd_filename, strerror(errno)); exit(1); } @@ -991,7 +991,7 @@ static void load_linux(PCMachineState *pcms, } setup_size =3D (setup_size+1)*512; if (setup_size > kernel_size) { - fprintf(stderr, "qemu: invalid kernel header\n"); + error_report("qemu: invalid kernel header"); exit(1); } kernel_size -=3D setup_size; @@ -1000,11 +1000,11 @@ static void load_linux(PCMachineState *pcms, kernel =3D g_malloc(kernel_size); fseek(f, 0, SEEK_SET); if (fread(setup, 1, setup_size, f) !=3D setup_size) { - fprintf(stderr, "fread() failed\n"); + error_report("fread() failed"); exit(1); } if (fread(kernel, 1, kernel_size, f) !=3D kernel_size) { - fprintf(stderr, "fread() failed\n"); + error_report("fread() failed"); exit(1); } fclose(f); @@ -1012,13 +1012,13 @@ static void load_linux(PCMachineState *pcms, /* append dtb to kernel */ if (dtb_filename) { if (protocol < 0x209) { - fprintf(stderr, "qemu: Linux kernel too old to load a dtb\n"); + error_report("qemu: Linux kernel too old to load a dtb"); exit(1); } =20 dtb_size =3D get_image_size(dtb_filename); if (dtb_size <=3D 0) { - fprintf(stderr, "qemu: error reading dtb %s: %s\n", + error_report("qemu: error reading dtb %s: %s", dtb_filename, strerror(errno)); exit(1); } diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c index 9ff79b1fd9..1796db1e36 100644 --- a/hw/i386/pc_piix.c +++ b/hw/i386/pc_piix.c @@ -1090,7 +1090,7 @@ void igd_passthrough_isa_bridge_create(PCIBus *bus, u= int16_t gpu_dev_id) * Note that vendor id is always PCI_VENDOR_ID_INTEL. */ if (!bridge_dev) { - fprintf(stderr, "set igd-passthrough-isa-bridge failed!\n"); + error_report("set igd-passthrough-isa-bridge failed!"); return; } pci_config_set_device_id(bridge_dev->config, pch_dev_id); diff --git a/hw/i386/pc_sysfw.c b/hw/i386/pc_sysfw.c index 6b183747fc..b6c10a509f 100644 --- a/hw/i386/pc_sysfw.c +++ b/hw/i386/pc_sysfw.c @@ -201,7 +201,7 @@ static void old_pc_system_rom_init(MemoryRegion *rom_me= mory, bool isapc_ram_fw) ret =3D rom_add_file_fixed(bios_name, (uint32_t)(-bios_size), -1); if (ret !=3D 0) { bios_error: - fprintf(stderr, "qemu: could not load PC BIOS '%s'\n", bios_name); + error_report("qemu: could not load PC BIOS '%s'", bios_name); exit(1); } g_free(filename); @@ -243,7 +243,8 @@ void pc_system_firmware_init(MemoryRegion *rom_memory, = bool isapc_ram_fw) if (kvm_enabled() && !kvm_readonly_mem_enabled()) { /* Older KVM cannot execute from device memory. So, flash memory * cannot be used unless the readonly memory kvm capability is pre= sent. */ - fprintf(stderr, "qemu: pflash with kvm requires KVM readonly memor= y support\n"); + error_report("qemu: pflash with kvm requires KVM readonly memory" + " support"); exit(1); } =20 diff --git a/hw/i386/xen/xen-hvm.c b/hw/i386/xen/xen-hvm.c index d9ccd5d0d6..f8e3e0507b 100644 --- a/hw/i386/xen/xen-hvm.c +++ b/hw/i386/xen/xen-hvm.c @@ -246,9 +246,10 @@ void xen_ram_alloc(ram_addr_t ram_addr, ram_addr_t siz= e, MemoryRegion *mr, =20 if (runstate_check(RUN_STATE_INMIGRATE)) { /* RAM already populated in Xen */ - fprintf(stderr, "%s: do not alloc "RAM_ADDR_FMT - " bytes of ram at "RAM_ADDR_FMT" when runstate is INMIGRAT= E\n", - __func__, size, ram_addr);=20 + error_report("%s: do not alloc "RAM_ADDR_FMT + " bytes of ram at "RAM_ADDR_FMT" when runstate is " + " INMIGRATE", + __func__, size, ram_addr); return; } =20 @@ -444,8 +445,9 @@ static int xen_remove_from_physmap(XenIOState *state, =20 rc =3D xen_xc_domain_add_to_physmap(xen_xc, xen_domid, XENMAPSPACE= _gmfn, idx, gpfn); if (rc) { - fprintf(stderr, "add_to_physmap MFN %"PRI_xen_pfn" to PFN %" - PRI_xen_pfn" failed: %d (errno: %d)\n", idx, gpfn, rc,= errno); + error_report("add_to_physmap MFN %"PRI_xen_pfn" to PFN %" + PRI_xen_pfn" failed: %d (errno: %d)", idx, + gpfn, rc, errno); return -rc; } } @@ -1090,11 +1092,11 @@ static void cpu_handle_ioreq(void *opaque) req->data =3D copy.data; =20 if (req->state !=3D STATE_IOREQ_INPROCESS) { - fprintf(stderr, "Badness in I/O request ... not in service?!: = " - "%x, ptr: %x, port: %"PRIx64", " - "data: %"PRIx64", count: %u, size: %u, type: %u\n", - req->state, req->data_is_ptr, req->addr, - req->data, req->count, req->size, req->type); + error_report("Badness in I/O request ... not in service?!: " + "%x, ptr: %x, port: %"PRIx64", " + "data: %"PRIx64", count: %u, size: %u, type: %u", + req->state, req->data_is_ptr, req->addr, + req->data, req->count, req->size, req->type); destroy_hvm_domain(false); return; } @@ -1397,16 +1399,16 @@ void destroy_hvm_domain(bool reboot) =20 xc_handle =3D xc_interface_open(0, 0, 0); if (xc_handle =3D=3D NULL) { - fprintf(stderr, "Cannot acquire xenctrl handle\n"); + error_report("Cannot acquire xenctrl handle"); } else { sts =3D xc_domain_shutdown(xc_handle, xen_domid, reboot ? SHUTDOWN_reboot : SHUTDOWN_power= off); if (sts !=3D 0) { - fprintf(stderr, "xc_domain_shutdown failed to issue %s, " - "sts %d, %s\n", reboot ? "reboot" : "poweroff", + error_report("xc_domain_shutdown failed to issue %s, " + "sts %d, %s", reboot ? "reboot" : "poweroff", sts, strerror(errno)); } else { - fprintf(stderr, "Issued domain %d %s\n", xen_domid, + error_report("Issued domain %d %s", xen_domid, reboot ? "reboot" : "poweroff"); } xc_interface_close(xc_handle); @@ -1425,7 +1427,7 @@ void xen_shutdown_fatal_error(const char *fmt, ...) va_start(ap, fmt); vfprintf(stderr, fmt, ap); va_end(ap); - fprintf(stderr, "Will destroy the domain.\n"); + error_report("Will destroy the domain."); /* destroy the domain */ qemu_system_shutdown_request(SHUTDOWN_CAUSE_HOST_ERROR); } diff --git a/hw/i386/xen/xen-mapcache.c b/hw/i386/xen/xen-mapcache.c index baab93b614..4062af0900 100644 --- a/hw/i386/xen/xen-mapcache.c +++ b/hw/i386/xen/xen-mapcache.c @@ -377,7 +377,7 @@ ram_addr_t xen_ram_addr_from_mapcache(void *ptr) } } if (!found) { - fprintf(stderr, "%s, could not find %p\n", __func__, ptr); + error_report("%s, could not find %p", __func__, ptr); QTAILQ_FOREACH(reventry, &mapcache->locked_entries, next) { DPRINTF(" "TARGET_FMT_plx" -> %p is present\n", reventry->pa= ddr_index, reventry->vaddr_req); @@ -477,9 +477,9 @@ void xen_invalidate_map_cache(void) if (!reventry->dma) { continue; } - fprintf(stderr, "Locked DMA mapping while invalidating mapcache!" - " "TARGET_FMT_plx" -> %p is present\n", - reventry->paddr_index, reventry->vaddr_req); + error_report("Locked DMA mapping while invalidating mapcache!" + " "TARGET_FMT_plx" -> %p is present", + reventry->paddr_index, reventry->vaddr_req); } =20 for (i =3D 0; i < mapcache->nr_buckets; i++) { @@ -545,8 +545,8 @@ static uint8_t *xen_replace_cache_entry_unlocked(hwaddr= old_phys_addr, address_index =3D new_phys_addr >> MCACHE_BUCKET_SHIFT; address_offset =3D new_phys_addr & (MCACHE_BUCKET_SIZE - 1); =20 - fprintf(stderr, "Replacing a dummy mapcache entry for "TARGET_FMT_plx = \ - " with "TARGET_FMT_plx"\n", old_phys_addr, new_phys_addr); + error_report("Replacing a dummy mapcache entry for "TARGET_FMT_plx \ + " with "TARGET_FMT_plx"", old_phys_addr, new_phys_addr); =20 xen_remap_bucket(entry, entry->vaddr_base, cache_size, address_index, false); diff --git a/hw/i386/xen/xen_apic.c b/hw/i386/xen/xen_apic.c index 55769eba7e..9e19ef94a2 100644 --- a/hw/i386/xen/xen_apic.c +++ b/hw/i386/xen/xen_apic.c @@ -24,7 +24,7 @@ static void xen_apic_mem_write(void *opaque, hwaddr addr, uint64_t data, unsigned size) { if (size !=3D sizeof(uint32_t)) { - fprintf(stderr, "Xen: APIC write data size =3D %d, invalid\n", siz= e); + error_report("Xen: APIC write data size =3D %d, invalid", size); return; } =20 diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c index c25e293d88..2ed015285a 100644 --- a/hw/ide/ahci.c +++ b/hw/ide/ahci.c @@ -410,8 +410,8 @@ static void ahci_mem_write(void *opaque, hwaddr addr, =20 /* Only aligned reads are allowed on AHCI */ if (addr & 3) { - fprintf(stderr, "ahci: Mis-aligned write to addr 0x" - TARGET_FMT_plx "\n", addr); + error_report("ahci: Mis-aligned write to addr 0x" + TARGET_FMT_plx "", addr); return; } =20 @@ -1053,7 +1053,7 @@ static void process_ncq_command(AHCIState *s, int por= t, uint8_t *cmd_fis, g_assert(is_ncq(ncq_fis->command)); if (ncq_tfs->used) { /* error - already in use */ - fprintf(stderr, "%s: tag %d already used\n", __func__, tag); + error_report("%s: tag %d already used", __func__, tag); return; } =20 diff --git a/hw/ide/core.c b/hw/ide/core.c index d63eb4a72e..d46936193a 100644 --- a/hw/ide/core.c +++ b/hw/ide/core.c @@ -2762,7 +2762,7 @@ static void ide_drive_pio_pre_save(void *opaque) =20 idx =3D transfer_end_table_idx(s->end_transfer_func); if (idx =3D=3D -1) { - fprintf(stderr, "%s: invalid end_transfer_func for DRQ_STAT\n", + error_report("%s: invalid end_transfer_func for DRQ_STAT", __func__); s->end_transfer_fn_idx =3D 2; } else { diff --git a/hw/input/lm832x.c b/hw/input/lm832x.c index d39953126b..caeeda47f2 100644 --- a/hw/input/lm832x.c +++ b/hw/input/lm832x.c @@ -239,7 +239,7 @@ static uint8_t lm_kbd_read(LM823KbdState *s, int reg, i= nt byte) =20 default: lm_kbd_error(s, ERR_CMDUNK); - fprintf(stderr, "%s: unknown command %02x\n", __func__, reg); + error_report("%s: unknown command %02x", __func__, reg); return 0x00; } =20 @@ -330,7 +330,7 @@ static void lm_kbd_write(LM823KbdState *s, int reg, int= byte, uint8_t value) s->reg =3D LM832x_GENERAL_ERROR; if ((value & 3) && (value & 3) !=3D 3) { lm_kbd_error(s, ERR_BADPAR); - fprintf(stderr, "%s: invalid clock setting in RCPWM\n", + error_report("%s: invalid clock setting in RCPWM", __func__); } /* TODO: Validate that the command is only issued once */ @@ -378,7 +378,7 @@ static void lm_kbd_write(LM823KbdState *s, int reg, int= byte, uint8_t value) break; default: lm_kbd_error(s, ERR_CMDUNK); - fprintf(stderr, "%s: unknown command %02x\n", __func__, reg); + error_report("%s: unknown command %02x", __func__, reg); break; } } diff --git a/hw/input/pckbd.c b/hw/input/pckbd.c index c479f827b6..ff4f03e4c3 100644 --- a/hw/input/pckbd.c +++ b/hw/input/pckbd.c @@ -22,6 +22,7 @@ * THE SOFTWARE. */ #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "hw/hw.h" #include "hw/isa/isa.h" #include "hw/i386/pc.h" @@ -307,7 +308,7 @@ static void kbd_write_command(void *opaque, hwaddr addr= , /* ignore that */ break; default: - fprintf(stderr, "qemu: unsupported keyboard cmd=3D0x%02x\n", (int)= val); + error_report("qemu: unsupported keyboard cmd=3D0x%02x", (int)val); break; } } diff --git a/hw/input/pxa2xx_keypad.c b/hw/input/pxa2xx_keypad.c index 93db9ed25b..0a594c30fc 100644 --- a/hw/input/pxa2xx_keypad.c +++ b/hw/input/pxa2xx_keypad.c @@ -326,7 +326,7 @@ void pxa27x_register_keypad(PXA2xxKeyPadState *kp, const struct keymap *map, int size) { if(!map || size < 0x80) { - fprintf(stderr, "%s - No PXA keypad map defined\n", __func__); + error_report("%s - No PXA keypad map defined", __func__); exit(-1); } =20 diff --git a/hw/input/tsc2005.c b/hw/input/tsc2005.c index 7990954b6c..f5057e8eeb 100644 --- a/hw/input/tsc2005.c +++ b/hw/input/tsc2005.c @@ -200,17 +200,17 @@ static void tsc2005_write(TSC2005State *s, int reg, u= int16_t data) s->host_mode =3D (data >> 15) !=3D 0; if (s->enabled !=3D !(data & 0x4000)) { s->enabled =3D !(data & 0x4000); - fprintf(stderr, "%s: touchscreen sense %sabled\n", - __func__, s->enabled ? "en" : "dis"); + error_report("%s: touchscreen sense %sabled", + __func__, s->enabled ? "en" : "dis"); if (s->busy && !s->enabled) timer_del(s->timer); s->busy =3D s->busy && s->enabled; } s->nextprecision =3D (data >> 13) & 1; s->timing[0] =3D data & 0x1fff; - if ((s->timing[0] >> 11) =3D=3D 3) - fprintf(stderr, "%s: illegal conversion clock setting\n", - __func__); + if ((s->timing[0] >> 11) =3D=3D 3) { + error_report("%s: illegal conversion clock setting", __func__)= ; + } break; case 0xd: /* CFR1 */ s->timing[1] =3D data & 0xf07; @@ -221,8 +221,7 @@ static void tsc2005_write(TSC2005State *s, int reg, uin= t16_t data) break; =20 default: - fprintf(stderr, "%s: write into read-only register %x\n", - __func__, reg); + error_report("%s: write into read-only register %x", __func__, reg= ); } } =20 @@ -337,8 +336,8 @@ static uint8_t tsc2005_txrx_word(void *opaque, uint8_t = value) s->nextprecision =3D (value >> 2) & 1; if (s->enabled !=3D !(value & 1)) { s->enabled =3D !(value & 1); - fprintf(stderr, "%s: touchscreen sense %sabled\n", - __func__, s->enabled ? "en" : "dis"); + error_report("%s: touchscreen sense %sabled", + __func__, s->enabled ? "en" : "dis"); if (s->busy && !s->enabled) timer_del(s->timer); s->busy =3D s->busy && s->enabled; diff --git a/hw/input/tsc210x.c b/hw/input/tsc210x.c index d4b19c1825..c685221842 100644 --- a/hw/input/tsc210x.c +++ b/hw/input/tsc210x.c @@ -396,8 +396,8 @@ static uint16_t tsc2102_data_register_read(TSC210xState= *s, int reg) =20 default: #ifdef TSC_VERBOSE - fprintf(stderr, "tsc2102_data_register_read: " - "no such register: 0x%02x\n", reg); + error_report("tsc2102_data_register_read: " + "no such register: 0x%02x", reg); #endif return 0xffff; } @@ -447,8 +447,8 @@ static uint16_t tsc2102_control_register_read( default: bad_reg: #ifdef TSC_VERBOSE - fprintf(stderr, "tsc2102_control_register_read: " - "no such register: 0x%02x\n", reg); + error_report("tsc2102_control_register_read: " + "no such register: 0x%02x", reg); #endif return 0xffff; } @@ -528,8 +528,8 @@ static uint16_t tsc2102_audio_register_read(TSC210xStat= e *s, int reg) =20 default: #ifdef TSC_VERBOSE - fprintf(stderr, "tsc2102_audio_register_read: " - "no such register: 0x%02x\n", reg); + error_report("tsc2102_audio_register_read: " + "no such register: 0x%02x", reg); #endif return 0xffff; } @@ -553,8 +553,8 @@ static void tsc2102_data_register_write( =20 default: #ifdef TSC_VERBOSE - fprintf(stderr, "tsc2102_data_register_write: " - "no such register: 0x%02x\n", reg); + error_report("tsc2102_data_register_write: " + "no such register: 0x%02x", reg); #endif } } @@ -606,8 +606,8 @@ static void tsc2102_control_register_write( tsc210x_reset(s); #ifdef TSC_VERBOSE } else { - fprintf(stderr, "tsc2102_control_register_write: " - "wrong value written into RESET\n"); + error_report("tsc2102_control_register_write: " + "wrong value written into RESET"); #endif } return; @@ -616,8 +616,8 @@ static void tsc2102_control_register_write( s->timing =3D value & 0x3f; #ifdef TSC_VERBOSE if (value & ~0x3f) - fprintf(stderr, "tsc2102_control_register_write: " - "wrong value written into CONFIG\n"); + error_report("tsc2102_control_register_write: " + "wrong value written into CONFIG"); #endif return; =20 @@ -637,8 +637,8 @@ static void tsc2102_control_register_write( default: bad_reg: #ifdef TSC_VERBOSE - fprintf(stderr, "tsc2102_control_register_write: " - "no such register: 0x%02x\n", reg); + error_report("tsc2102_control_register_write: " + "no such register: 0x%02x", reg); #endif } } @@ -651,8 +651,8 @@ static void tsc2102_audio_register_write( s->audio_ctrl1 =3D value & 0x0f3f; #ifdef TSC_VERBOSE if ((value & ~0x0f3f) || ((value & 7) !=3D ((value >> 3) & 7))) - fprintf(stderr, "tsc2102_audio_register_write: " - "wrong value written into Audio 1\n"); + error_report("tsc2102_audio_register_write: " + "wrong value written into Audio 1"); #endif tsc2102_audio_rate_update(s); tsc2102_audio_output_update(s); @@ -661,8 +661,8 @@ static void tsc2102_audio_register_write( case 0x01: #ifdef TSC_VERBOSE if (value !=3D 0xff00) - fprintf(stderr, "tsc2102_audio_register_write: " - "wrong value written into reg 0x01\n"); + error_report("tsc2102_audio_register_write: " + "wrong value written into reg 0x01"); #endif return; =20 @@ -674,8 +674,8 @@ static void tsc2102_audio_register_write( case 0x03: #ifdef TSC_VERBOSE if (value !=3D 0x8b00) - fprintf(stderr, "tsc2102_audio_register_write: " - "wrong value written into reg 0x03\n"); + error_report("tsc2102_audio_register_write: " + "wrong value written into reg 0x03"); #endif return; =20 @@ -683,8 +683,8 @@ static void tsc2102_audio_register_write( s->audio_ctrl2 =3D value & 0xf7f2; #ifdef TSC_VERBOSE if (value & ~0xf7fd) - fprintf(stderr, "tsc2102_audio_register_write: " - "wrong value written into Audio 2\n"); + error_report("tsc2102_audio_register_write: " + "wrong value written into Audio 2"); #endif return; =20 @@ -695,8 +695,8 @@ static void tsc2102_audio_register_write( s->dac_power =3D value & 0x9543; #ifdef TSC_VERBOSE if ((value & ~0x9543) !=3D 0x2aa0) - fprintf(stderr, "tsc2102_audio_register_write: " - "wrong value written into Power\n"); + error_report("tsc2102_audio_register_write: " + "wrong value written into Power"); #endif tsc2102_audio_rate_update(s); tsc2102_audio_output_update(s); @@ -707,8 +707,8 @@ static void tsc2102_audio_register_write( s->audio_ctrl3 |=3D value & 0xf800; #ifdef TSC_VERBOSE if (value & ~0xf8c7) - fprintf(stderr, "tsc2102_audio_register_write: " - "wrong value written into Audio 3\n"); + error_report("tsc2102_audio_register_write: " + "wrong value written into Audio 3"); #endif tsc2102_audio_output_update(s); return; @@ -740,8 +740,8 @@ static void tsc2102_audio_register_write( s->pll[0] =3D value & 0xfffc; #ifdef TSC_VERBOSE if (value & ~0xfffc) - fprintf(stderr, "tsc2102_audio_register_write: " - "wrong value written into PLL 1\n"); + error_report("tsc2102_audio_register_write: " + "wrong value written into PLL 1"); #endif return; =20 @@ -749,8 +749,8 @@ static void tsc2102_audio_register_write( s->pll[1] =3D value & 0xfffc; #ifdef TSC_VERBOSE if (value & ~0xfffc) - fprintf(stderr, "tsc2102_audio_register_write: " - "wrong value written into PLL 2\n"); + error_report("tsc2102_audio_register_write: " + "wrong value written into PLL 2"); #endif return; =20 @@ -758,15 +758,15 @@ static void tsc2102_audio_register_write( s->softstep =3D !(value & 0x4000); #ifdef TSC_VERBOSE if (value & ~0x4000) - fprintf(stderr, "tsc2102_audio_register_write: " - "wrong value written into Audio 4\n"); + error_report("tsc2102_audio_register_write: " + "wrong value written into Audio 4"); #endif return; =20 default: #ifdef TSC_VERBOSE - fprintf(stderr, "tsc2102_audio_register_write: " - "no such register: 0x%02x\n", reg); + error_report("tsc2102_audio_register_write: " + "no such register: 0x%02x", reg); #endif } } @@ -847,7 +847,7 @@ static uint16_t tsc210x_read(TSC210xState *s) uint16_t ret =3D 0x0000; =20 if (!s->command) - fprintf(stderr, "tsc210x_read: SPI underrun!\n"); + error_report("tsc210x_read: SPI underrun!"); =20 switch (s->page) { case TSC_DATA_REGISTERS_PAGE: @@ -886,7 +886,7 @@ static void tsc210x_write(TSC210xState *s, uint16_t val= ue) s->state =3D true; } else { if (s->command) - fprintf(stderr, "tsc210x_write: SPI overrun!\n"); + error_report("tsc210x_write: SPI overrun!"); else switch (s->page) { case TSC_DATA_REGISTERS_PAGE: diff --git a/hw/input/virtio-input-hid.c b/hw/input/virtio-input-hid.c index 4d3afc1b14..bf1ed7b18e 100644 --- a/hw/input/virtio-input-hid.c +++ b/hw/input/virtio-input-hid.c @@ -208,8 +208,8 @@ static void virtio_input_handle_event(DeviceState *dev,= QemuConsole *src, virtio_input_send(vinput, &event); } else { if (key->down) { - fprintf(stderr, "%s: unmapped key: %d [%s]\n", __func__, - qcode, QKeyCode_str(qcode)); + error_report("%s: unmapped key: %d [%s]", __func__, + qcode, QKeyCode_str(qcode)); } } break; @@ -222,9 +222,9 @@ static void virtio_input_handle_event(DeviceState *dev,= QemuConsole *src, virtio_input_send(vinput, &event); } else { if (btn->down) { - fprintf(stderr, "%s: unmapped button: %d [%s]\n", __func__= , - btn->button, - InputButton_str(btn->button)); + error_report("%s: unmapped button: %d [%s]", __func__, + btn->button, + InputButton_str(btn->button)); } } break; @@ -310,8 +310,8 @@ static void virtio_input_hid_handle_status(VirtIOInput = *vinput, kbd_put_ledstate(vhid->ledstate); break; default: - fprintf(stderr, "%s: unknown type %d\n", __func__, - le16_to_cpu(event->type)); + error_report("%s: unknown type %d", __func__, + le16_to_cpu(event->type)); break; } } diff --git a/hw/input/virtio-input.c b/hw/input/virtio-input.c index 0e42f0d02c..fb5fa0a280 100644 --- a/hw/input/virtio-input.c +++ b/hw/input/virtio-input.c @@ -5,6 +5,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "qapi/error.h" #include "qemu/iov.h" #include "trace.h" @@ -121,8 +122,8 @@ void virtio_input_add_config(VirtIOInput *vinput, =20 if (virtio_input_find_config(vinput, config->select, config->subsel)) = { /* should not happen */ - fprintf(stderr, "%s: duplicate config: %d/%d\n", - __func__, config->select, config->subsel); + error_report("%s: duplicate config: %d/%d", + __func__, config->select, config->subsel); abort(); } =20 diff --git a/hw/intc/arm_gic_kvm.c b/hw/intc/arm_gic_kvm.c index ae095d08a3..a5478d3e20 100644 --- a/hw/intc/arm_gic_kvm.c +++ b/hw/intc/arm_gic_kvm.c @@ -316,12 +316,12 @@ static void kvm_arm_gic_put(GICState *s) num_cpu =3D ((reg & 0xe0) >> 5) + 1; =20 if (num_irq < s->num_irq) { - fprintf(stderr, "Restoring %u IRQs, but kernel supports max %d= \n", - s->num_irq, num_irq); + error_report("Restoring %u IRQs, but kernel supports max %d", + s->num_irq, num_irq); abort(); } else if (num_cpu !=3D s->num_cpu) { - fprintf(stderr, "Restoring %u CPU interfaces, kernel only has = %d\n", - s->num_cpu, num_cpu); + error_report("Restoring %u CPU interfaces, kernel only has %d"= , + s->num_cpu, num_cpu); /* Did we not create the VCPUs in the kernel yet? */ abort(); } @@ -411,8 +411,8 @@ static void kvm_arm_gic_get(GICState *s) s->num_cpu =3D ((reg & 0xe0) >> 5) + 1; =20 if (s->num_irq > GIC_MAXIRQ) { - fprintf(stderr, "Too many IRQs reported from the kernel: %d\n"= , - s->num_irq); + error_report("Too many IRQs reported from the kernel: %d", + s->num_irq); abort(); } =20 diff --git a/hw/intc/omap_intc.c b/hw/intc/omap_intc.c index 6844c1aa83..7fc239715a 100644 --- a/hw/intc/omap_intc.c +++ b/hw/intc/omap_intc.c @@ -539,8 +539,8 @@ static void omap2_inth_write(void *opaque, hwaddr addr, /* TODO: Make a bitmap (or sizeof(char)map) of access privileges * for every register, see Chapter 3 and 4 for privileged mode. *= / if (value & 1) - fprintf(stderr, "%s: protection mode enable attempt\n", - __func__); + error_report("%s: protection mode enable attempt", + __func__); return; =20 case 0x50: /* INTC_IDLE */ diff --git a/hw/intc/openpic.c b/hw/intc/openpic.c index 9dd285b923..dfaefbf575 100644 --- a/hw/intc/openpic.c +++ b/hw/intc/openpic.c @@ -34,6 +34,7 @@ * */ #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "hw/hw.h" #include "hw/ppc/mac.h" #include "hw/pci/pci.h" @@ -162,7 +163,7 @@ static int inttgt_to_output(int inttgt) } } =20 - fprintf(stderr, "%s: unsupported inttgt %d\n", __func__, inttgt); + error_report("%s: unsupported inttgt %d", __func__, inttgt); return OPENPIC_OUTPUT_INT; } =20 @@ -534,7 +535,7 @@ static void openpic_set_irq(void *opaque, int n_IRQ, in= t level) IRQSource *src; =20 if (n_IRQ >=3D OPENPIC_MAX_IRQ) { - fprintf(stderr, "%s: IRQ %d out of range\n", __func__, n_IRQ); + error_report("%s: IRQ %d out of range", __func__, n_IRQ); abort(); } =20 @@ -1208,7 +1209,7 @@ static uint32_t openpic_iack(OpenPICState *opp, IRQDe= st *dst, int cpu) src =3D &opp->src[irq]; if (!(src->ivpr & IVPR_ACTIVITY_MASK) || !(IVPR_PRIORITY(src->ivpr) > dst->ctpr)) { - fprintf(stderr, "%s: bad raised IRQ %d ctpr %d ivpr 0x%08x\n", + error_report("%s: bad raised IRQ %d ctpr %d ivpr 0x%08x", __func__, irq, dst->ctpr, src->ivpr); openpic_update_irq(opp, irq); retval =3D opp->spve; diff --git a/hw/intc/openpic_kvm.c b/hw/intc/openpic_kvm.c index fa83420254..60c784ae86 100644 --- a/hw/intc/openpic_kvm.c +++ b/hw/intc/openpic_kvm.c @@ -150,8 +150,8 @@ static void kvm_openpic_region_add(MemoryListener *list= ener, =20 ret =3D ioctl(opp->fd, KVM_SET_DEVICE_ATTR, &attr); if (ret < 0) { - fprintf(stderr, "%s: %s %" PRIx64 "\n", __func__, - strerror(errno), reg_base); + error_report("%s: %s %" PRIx64 "", __func__, + strerror(errno), reg_base); } } =20 @@ -184,8 +184,8 @@ static void kvm_openpic_region_del(MemoryListener *list= ener, =20 ret =3D ioctl(opp->fd, KVM_SET_DEVICE_ATTR, &attr); if (ret < 0) { - fprintf(stderr, "%s: %s %" PRIx64 "\n", __func__, - strerror(errno), reg_base); + error_report("%s: %s %" PRIx64 "", __func__, + strerror(errno), reg_base); } } =20 diff --git a/hw/intc/s390_flic_kvm.c b/hw/intc/s390_flic_kvm.c index 7ead17ac3e..3774b1a2f0 100644 --- a/hw/intc/s390_flic_kvm.c +++ b/hw/intc/s390_flic_kvm.c @@ -83,7 +83,7 @@ static void flic_enable_pfault(KVMS390FLICState *flic) rc =3D ioctl(flic->fd, KVM_SET_DEVICE_ATTR, &attr); =20 if (rc) { - fprintf(stderr, "flic: couldn't enable pfault\n"); + error_report("flic: couldn't enable pfault"); } } =20 @@ -97,7 +97,7 @@ static void flic_disable_wait_pfault(KVMS390FLICState *fl= ic) rc =3D ioctl(flic->fd, KVM_SET_DEVICE_ATTR, &attr); =20 if (rc) { - fprintf(stderr, "flic: couldn't disable pfault\n"); + error_report("flic: couldn't disable pfault"); } } =20 diff --git a/hw/ipmi/ipmi.c b/hw/ipmi/ipmi.c index b27babd504..81c62920de 100644 --- a/hw/ipmi/ipmi.c +++ b/hw/ipmi/ipmi.c @@ -23,6 +23,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "hw/hw.h" #include "hw/ipmi/ipmi.h" #include "sysemu/sysemu.h" diff --git a/hw/ipmi/ipmi_bmc_extern.c b/hw/ipmi/ipmi_bmc_extern.c index abab3bba4f..8c0535d3dd 100644 --- a/hw/ipmi/ipmi_bmc_extern.c +++ b/hw/ipmi/ipmi_bmc_extern.c @@ -28,6 +28,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "qapi/error.h" #include "qemu/timer.h" #include "chardev/char-fe.h" @@ -194,8 +195,8 @@ static void ipmi_bmc_extern_handle_command(IPMIBmc *b, =20 if (ibe->outlen) { /* We already have a command queued. Shouldn't ever happen. */ - fprintf(stderr, "IPMI KCS: Got command when not finished with the" - " previous command\n"); + error_report("IPMI KCS: Got command when not finished with the" + " previous command"); abort(); } =20 diff --git a/hw/isa/isa-bus.c b/hw/isa/isa-bus.c index 348e0eab9d..0f2e426d02 100644 --- a/hw/isa/isa-bus.c +++ b/hw/isa/isa-bus.c @@ -17,6 +17,7 @@ * License along with this library; if not, see . */ #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "qapi/error.h" #include "hw/hw.h" #include "monitor/monitor.h" @@ -186,15 +187,15 @@ ISADevice *isa_vga_init(ISABus *bus) case VGA_CIRRUS: return isa_create_simple(bus, "isa-cirrus-vga"); case VGA_QXL: - fprintf(stderr, "%s: qxl: no PCI bus\n", __func__); + error_report("%s: qxl: no PCI bus", __func__); return NULL; case VGA_STD: return isa_create_simple(bus, "isa-vga"); case VGA_VMWARE: - fprintf(stderr, "%s: vmware_vga: no PCI bus\n", __func__); + error_report("%s: vmware_vga: no PCI bus", __func__); return NULL; case VGA_VIRTIO: - fprintf(stderr, "%s: virtio-vga: no PCI bus\n", __func__); + error_report("%s: virtio-vga: no PCI bus", __func__); return NULL; case VGA_NONE: default: diff --git a/hw/lm32/lm32_boards.c b/hw/lm32/lm32_boards.c index b0bb3ef58a..d739acf476 100644 --- a/hw/lm32/lm32_boards.c +++ b/hw/lm32/lm32_boards.c @@ -18,6 +18,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "qemu-common.h" #include "cpu.h" #include "hw/sysbus.h" @@ -152,7 +153,7 @@ static void lm32_evr_init(MachineState *machine) } =20 if (kernel_size < 0) { - fprintf(stderr, "qemu: could not load kernel '%s'\n", + error_report("qemu: could not load kernel '%s'", kernel_filename); exit(1); } @@ -250,7 +251,7 @@ static void lm32_uclinux_init(MachineState *machine) } =20 if (kernel_size < 0) { - fprintf(stderr, "qemu: could not load kernel '%s'\n", + error_report("qemu: could not load kernel '%s'", kernel_filename); exit(1); } diff --git a/hw/lm32/milkymist.c b/hw/lm32/milkymist.c index 4db4d2d533..caa6cf4e0f 100644 --- a/hw/lm32/milkymist.c +++ b/hw/lm32/milkymist.c @@ -18,6 +18,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "qemu-common.h" #include "cpu.h" #include "hw/sysbus.h" @@ -149,7 +150,7 @@ milkymist_init(MachineState *machine) =20 /* if no kernel is given no valid bios rom is a fatal error */ if (!kernel_filename && !dinfo && !bios_filename && !qtest_enabled()) = { - fprintf(stderr, "qemu: could not load Milkymist One bios '%s'\n", + error_report("qemu: could not load Milkymist One bios '%s'", bios_name); exit(1); } @@ -188,7 +189,7 @@ milkymist_init(MachineState *machine) } =20 if (kernel_size < 0) { - fprintf(stderr, "qemu: could not load kernel '%s'\n", + error_report("qemu: could not load kernel '%s'", kernel_filename); exit(1); } diff --git a/hw/m68k/an5206.c b/hw/m68k/an5206.c index 9002c460e5..bdab620a02 100644 --- a/hw/m68k/an5206.c +++ b/hw/m68k/an5206.c @@ -66,7 +66,7 @@ static void an5206_init(MachineState *machine) if (qtest_enabled()) { return; } - fprintf(stderr, "Kernel image must be specified\n"); + error_report("Kernel image must be specified"); exit(1); } =20 @@ -83,7 +83,7 @@ static void an5206_init(MachineState *machine) entry =3D KERNEL_LOAD_ADDR; } if (kernel_size < 0) { - fprintf(stderr, "qemu: could not load kernel '%s'\n", kernel_filen= ame); + error_report("qemu: could not load kernel '%s'", kernel_filename); exit(1); } =20 diff --git a/hw/m68k/mcf5206.c b/hw/m68k/mcf5206.c index b81901fdfd..fbf3f0f074 100644 --- a/hw/m68k/mcf5206.c +++ b/hw/m68k/mcf5206.c @@ -6,6 +6,7 @@ * This code is licensed under the GPL */ #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "qemu-common.h" #include "cpu.h" #include "hw/hw.h" @@ -220,7 +221,7 @@ static void m5206_mbar_update(m5206_mbar_state *s) break; default: /* Unknown vector. */ - fprintf(stderr, "Unhandled vector for IRQ %d\n", irq); + error_report("Unhandled vector for IRQ %d", irq); vector =3D 0xf; break; } diff --git a/hw/m68k/mcf5208.c b/hw/m68k/mcf5208.c index b9dde75106..2fb5037b72 100644 --- a/hw/m68k/mcf5208.c +++ b/hw/m68k/mcf5208.c @@ -6,6 +6,7 @@ * This code is licensed under the GPL */ #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "qapi/error.h" #include "qemu-common.h" #include "cpu.h" @@ -257,7 +258,7 @@ static void mcf5208evb_init(MachineState *machine) mcf5208_sys_init(address_space_mem, pic); =20 if (nb_nics > 1) { - fprintf(stderr, "Too many NICs\n"); + error_report("Too many NICs"); exit(1); } if (nd_table[0].used) { @@ -292,7 +293,7 @@ static void mcf5208evb_init(MachineState *machine) if (qtest_enabled()) { return; } - fprintf(stderr, "Kernel image must be specified\n"); + error_report("Kernel image must be specified"); exit(1); } =20 @@ -309,7 +310,7 @@ static void mcf5208evb_init(MachineState *machine) entry =3D 0x40000000; } if (kernel_size < 0) { - fprintf(stderr, "qemu: could not load kernel '%s'\n", kernel_filen= ame); + error_report("qemu: could not load kernel '%s'", kernel_filename); exit(1); } =20 diff --git a/hw/microblaze/boot.c b/hw/microblaze/boot.c index 457a08a2fe..31466050de 100644 --- a/hw/microblaze/boot.c +++ b/hw/microblaze/boot.c @@ -86,7 +86,7 @@ static int microblaze_load_dtb(hwaddr addr, r =3D qemu_fdt_setprop_string(fdt, "/chosen", "bootargs", kernel_cmdline); if (r < 0) { - fprintf(stderr, "couldn't set /chosen/bootargs\n"); + error_report("couldn't set /chosen/bootargs"); } } =20 diff --git a/hw/mips/boston.c b/hw/mips/boston.c index 776ee283e1..ee82968ea7 100644 --- a/hw/mips/boston.c +++ b/hw/mips/boston.c @@ -353,7 +353,7 @@ static const void *boston_fdt_filter(void *opaque, cons= t void *fdt_orig, =20 err =3D fdt_open_into(fdt_orig, fdt, fdt_sz); if (err) { - fprintf(stderr, "unable to open FDT\n"); + error_report("unable to open FDT"); return NULL; } =20 @@ -361,7 +361,7 @@ static const void *boston_fdt_filter(void *opaque, cons= t void *fdt_orig, ? machine->kernel_cmdline : " "; err =3D qemu_fdt_setprop_string(fdt, "/chosen", "bootargs", cmdline); if (err < 0) { - fprintf(stderr, "couldn't set /chosen/bootargs\n"); + error_report("couldn't set /chosen/bootargs"); return NULL; } =20 diff --git a/hw/mips/mips_fulong2e.c b/hw/mips/mips_fulong2e.c index 75318680e1..34710a466c 100644 --- a/hw/mips/mips_fulong2e.c +++ b/hw/mips/mips_fulong2e.c @@ -143,7 +143,7 @@ static int64_t load_kernel (CPUMIPSState *env) initrd_offset, ram_size - initrd_offs= et); } if (initrd_size =3D=3D (target_ulong) -1) { - fprintf(stderr, "qemu: could not load initial ram disk '%s'\n"= , + error_report("qemu: could not load initial ram disk '%s'", loaderparams.initrd_filename); exit(1); } @@ -342,7 +342,7 @@ static void mips_fulong2e_init(MachineState *machine) =20 isa_bus =3D vt82c686b_init(pci_bus, PCI_DEVFN(FULONG2E_VIA_SLOT, 0)); if (!isa_bus) { - fprintf(stderr, "vt82c686b_init error\n"); + error_report("vt82c686b_init error"); exit(1); } =20 diff --git a/hw/mips/mips_jazz.c b/hw/mips/mips_jazz.c index 7e6626dc88..6c91a940be 100644 --- a/hw/mips/mips_jazz.c +++ b/hw/mips/mips_jazz.c @@ -271,10 +271,10 @@ static void mips_jazz_init(MachineState *machine, sysbus_connect_irq(sysbus, 0, qdev_get_gpio_in(rc4030, 4)); break; } else if (is_help_option(nd->model)) { - fprintf(stderr, "qemu: Supported NICs: dp83932\n"); + error_report("qemu: Supported NICs: dp83932"); exit(1); } else { - fprintf(stderr, "qemu: Unsupported NIC: %s\n", nd->model); + error_report("qemu: Unsupported NIC: %s", nd->model); exit(1); } } diff --git a/hw/mips/mips_malta.c b/hw/mips/mips_malta.c index 2adb9bcf89..d457adfa69 100644 --- a/hw/mips/mips_malta.c +++ b/hw/mips/mips_malta.c @@ -856,8 +856,8 @@ static int64_t load_kernel (void) ram_size - initrd_offset); } if (initrd_size =3D=3D (target_ulong) -1) { - fprintf(stderr, "qemu: could not load initial ram disk '%s'\n"= , - loaderparams.initrd_filename); + error_report("qemu: could not load initial ram disk '%s'", + loaderparams.initrd_filename); exit(1); } } diff --git a/hw/mips/mips_mipssim.c b/hw/mips/mips_mipssim.c index a092072e2a..a3d9406610 100644 --- a/hw/mips/mips_mipssim.c +++ b/hw/mips/mips_mipssim.c @@ -101,8 +101,8 @@ static int64_t load_kernel(void) initrd_offset, loaderparams.ram_size - initrd_offset); } if (initrd_size =3D=3D (target_ulong) -1) { - fprintf(stderr, "qemu: could not load initial ram disk '%s'\n"= , - loaderparams.initrd_filename); + error_report("qemu: could not load initial ram disk '%s'", + loaderparams.initrd_filename); exit(1); } } diff --git a/hw/mips/mips_r4k.c b/hw/mips/mips_r4k.c index 1272d4ef9d..e54ce918a7 100644 --- a/hw/mips/mips_r4k.c +++ b/hw/mips/mips_r4k.c @@ -121,8 +121,8 @@ static int64_t load_kernel(void) ram_size - initrd_offset); } if (initrd_size =3D=3D (target_ulong) -1) { - fprintf(stderr, "qemu: could not load initial ram disk '%s'\n"= , - loaderparams.initrd_filename); + error_report("qemu: could not load initial ram disk '%s'", + loaderparams.initrd_filename); exit(1); } } @@ -246,7 +246,7 @@ void mips_r4k_init(MachineState *machine) blk_by_legacy_dinfo(dinfo), sector_len, mips_rom / sector_len, 4, 0, 0, 0, 0, be)) { - fprintf(stderr, "qemu: Error registering flash memory.\n"); + error_report("qemu: Error registering flash memory."); } } else if (!qtest_enabled()) { /* not fatal */ diff --git a/hw/misc/a9scu.c b/hw/misc/a9scu.c index 3e8ad8cd73..21b8e49b6c 100644 --- a/hw/misc/a9scu.c +++ b/hw/misc/a9scu.c @@ -9,6 +9,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "hw/misc/a9scu.h" =20 static uint64_t a9_scu_read(void *opaque, hwaddr offset, @@ -59,7 +60,7 @@ static void a9_scu_write(void *opaque, hwaddr offset, mask =3D 0xffffffff; break; default: - fprintf(stderr, "Invalid size %u in write to a9 scu register %x\n"= , + error_report("Invalid size %u in write to a9 scu register %x", size, (unsigned)offset); return; } diff --git a/hw/misc/omap_gpmc.c b/hw/misc/omap_gpmc.c index 84f9e4c612..e3b30e90ea 100644 --- a/hw/misc/omap_gpmc.c +++ b/hw/misc/omap_gpmc.c @@ -19,6 +19,7 @@ * with this program; if not, see . */ #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "hw/hw.h" #include "hw/block/flash.h" #include "hw/arm/omap.h" @@ -408,7 +409,7 @@ static void omap_gpmc_cs_map(struct omap_gpmc_s *s, int= cs) /* TODO: check for overlapping regions and report access errors */ if (mask !=3D 0x8 && mask !=3D 0xc && mask !=3D 0xe && mask !=3D 0xf && !(s->accept_256 && !mask)) { - fprintf(stderr, "%s: invalid chip-select mask address (0x%x)\n", + error_report("%s: invalid chip-select mask address (0x%x)", __func__, mask); } =20 @@ -642,7 +643,7 @@ static void omap_gpmc_write(void *opaque, hwaddr addr, =20 case 0x010: /* GPMC_SYSCONFIG */ if ((value >> 3) =3D=3D 0x3) - fprintf(stderr, "%s: bad SDRAM idle mode %"PRIi64"\n", + error_report("%s: bad SDRAM idle mode %"PRIi64"", __func__, value >> 3); if (value & 2) omap_gpmc_reset(s); @@ -806,7 +807,7 @@ static void omap_gpmc_write(void *opaque, hwaddr addr, break; case 0x230: /* GPMC_TESTMODE_CTRL */ if (value & 7) - fprintf(stderr, "%s: test mode enable attempt\n", __func__); + error_report("%s: test mode enable attempt", __func__); break; =20 default: @@ -864,7 +865,7 @@ void omap_gpmc_attach(struct omap_gpmc_s *s, int cs, Me= moryRegion *iomem) assert(iomem); =20 if (cs < 0 || cs >=3D 8) { - fprintf(stderr, "%s: bad chip-select %i\n", __func__, cs); + error_report("%s: bad chip-select %i", __func__, cs); exit(-1); } f =3D &s->cs_file[cs]; @@ -881,7 +882,7 @@ void omap_gpmc_attach_nand(struct omap_gpmc_s *s, int c= s, DeviceState *nand) assert(nand); =20 if (cs < 0 || cs >=3D 8) { - fprintf(stderr, "%s: bad chip-select %i\n", __func__, cs); + error_report("%s: bad chip-select %i", __func__, cs); exit(-1); } f =3D &s->cs_file[cs]; diff --git a/hw/misc/omap_l4.c b/hw/misc/omap_l4.c index 96fc057b4e..47d9c10aeb 100644 --- a/hw/misc/omap_l4.c +++ b/hw/misc/omap_l4.c @@ -18,6 +18,7 @@ * with this program; if not, see . */ #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "hw/hw.h" #include "hw/arm/omap.h" =20 @@ -126,7 +127,7 @@ struct omap_target_agent_s *omap_l4ta_get(struct omap_l= 4_s *bus, break; } if (!ta) { - fprintf(stderr, "%s: bad target agent (%i)\n", __func__, cs); + error_report("%s: bad target agent (%i)", __func__, cs); exit(-1); } =20 @@ -151,7 +152,7 @@ hwaddr omap_l4_attach(struct omap_target_agent_s *ta, hwaddr base; =20 if (region < 0 || region >=3D ta->regions) { - fprintf(stderr, "%s: bad io region (%i)\n", __func__, region); + error_report("%s: bad io region (%i)", __func__, region); exit(-1); } =20 diff --git a/hw/misc/omap_sdrc.c b/hw/misc/omap_sdrc.c index 7b38c5568c..3dcabc1e00 100644 --- a/hw/misc/omap_sdrc.c +++ b/hw/misc/omap_sdrc.c @@ -18,6 +18,7 @@ * with this program; if not, see . */ #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "hw/hw.h" #include "hw/arm/omap.h" =20 @@ -108,7 +109,7 @@ static void omap_sdrc_write(void *opaque, hwaddr addr, =20 case 0x10: /* SDRC_SYSCONFIG */ if ((value >> 3) !=3D 0x2) - fprintf(stderr, "%s: bad SDRAM idle mode %i\n", + error_report("%s: bad SDRAM idle mode %i", __func__, (unsigned)value >> 3); if (value & 2) omap_sdrc_reset(s); diff --git a/hw/misc/vmport.c b/hw/misc/vmport.c index 165500223f..55369bd180 100644 --- a/hw/misc/vmport.c +++ b/hw/misc/vmport.c @@ -80,7 +80,7 @@ static uint64_t vmport_ioport_read(void *opaque, hwaddr a= ddr, if (!s->func[command]) { #ifdef VMPORT_DEBUG - fprintf(stderr, "vmport: unknown command %x\n", command); + error_report("vmport: unknown command %x", command); #endif return eax; } diff --git a/hw/moxie/moxiesim.c b/hw/moxie/moxiesim.c index 5ea8dd3a93..5916f86c68 100644 --- a/hw/moxie/moxiesim.c +++ b/hw/moxie/moxiesim.c @@ -25,6 +25,7 @@ * THE SOFTWARE. */ #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "qapi/error.h" #include "qemu-common.h" #include "cpu.h" @@ -61,7 +62,7 @@ static void load_kernel(MoxieCPU *cpu, LoaderParams *load= er_params) 0, 0); =20 if (kernel_size <=3D 0) { - fprintf(stderr, "qemu: could not load kernel '%s'\n", + error_report("qemu: could not load kernel '%s'", loader_params->kernel_filename); exit(1); } @@ -85,8 +86,8 @@ static void load_kernel(MoxieCPU *cpu, LoaderParams *load= er_params) ram_size); } if (initrd_size =3D=3D (target_ulong)-1) { - fprintf(stderr, "qemu: could not load initial ram disk '%s'\n"= , - loader_params->initrd_filename); + error_report("qemu: could not load initial ram disk '%s'", + loader_params->initrd_filename); exit(1); } } diff --git a/hw/net/fsl_etsec/etsec.c b/hw/net/fsl_etsec/etsec.c index 9da1932970..965effa314 100644 --- a/hw/net/fsl_etsec/etsec.c +++ b/hw/net/fsl_etsec/etsec.c @@ -347,7 +347,7 @@ static ssize_t etsec_receive(NetClientState *nc, eTSEC *etsec =3D qemu_get_nic_opaque(nc); =20 #if defined(HEX_DUMP) - fprintf(stderr, "%s receive size:%zd\n", nc->name, size); + error_report("%s receive size:%zd", nc->name, size); qemu_hexdump((void *)buf, stderr, "", size); #endif /* Flush is unnecessary as are already in receiving path */ diff --git a/hw/net/pcnet.c b/hw/net/pcnet.c index 654455355f..5f2b5fe046 100644 --- a/hw/net/pcnet.c +++ b/hw/net/pcnet.c @@ -1070,7 +1070,7 @@ ssize_t pcnet_receive(NetClientState *nc, const uint8= _t *buf, size_t size_) if (!s->looptest) { if (size > 4092) { #ifdef PCNET_DEBUG_RMD - fprintf(stderr, "pcnet: truncates rx packet.\n"); + error_report("pcnet: truncates rx packet."); #endif size =3D 4092; } diff --git a/hw/net/smc91c111.c b/hw/net/smc91c111.c index 3b16dcf5a1..ae40fd6e6e 100644 --- a/hw/net/smc91c111.c +++ b/hw/net/smc91c111.c @@ -8,6 +8,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "hw/sysbus.h" #include "net/net.h" #include "hw/devices.h" @@ -362,9 +363,9 @@ static void smc91c111_writeb(void *opaque, hwaddr offse= t, return; case 12: /* Control */ if (value & 1) - fprintf(stderr, "smc91c111:EEPROM store not implemented\n"= ); + error_report("smc91c111:EEPROM store not implemented"); if (value & 2) - fprintf(stderr, "smc91c111:EEPROM reload not implemented\n= "); + error_report("smc91c111:EEPROM reload not implemented"); value &=3D ~3; SET_LOW(ctr, value); return; diff --git a/hw/net/vhost_net.c b/hw/net/vhost_net.c index e037db63a3..37d0cce560 100644 --- a/hw/net/vhost_net.c +++ b/hw/net/vhost_net.c @@ -135,7 +135,7 @@ static int vhost_net_get_fd(NetClientState *backend) case NET_CLIENT_DRIVER_TAP: return tap_get_fd(backend); default: - fprintf(stderr, "vhost-net requires tap backend\n"); + error_report("vhost-net requires tap backend"); return -EBADFD; } } @@ -148,7 +148,7 @@ struct vhost_net *vhost_net_init(VhostNetOptions *optio= ns) uint64_t features =3D 0; =20 if (!options->net_backend) { - fprintf(stderr, "vhost-net requires net backend to be setup\n"); + error_report("vhost-net requires net backend to be setup"); goto fail; } net->nc =3D options->net_backend; @@ -186,8 +186,8 @@ struct vhost_net *vhost_net_init(VhostNetOptions *optio= ns) net->dev.features &=3D ~(1ULL << VIRTIO_NET_F_MRG_RXBUF); } if (~net->dev.features & net->dev.backend_features) { - fprintf(stderr, "vhost lacks feature mask %" PRIu64 - " for backend\n", + error_report("vhost lacks feature mask %" PRIu64 + " for backend", (uint64_t)(~net->dev.features & net->dev.backend_featur= es)); goto fail; } @@ -197,8 +197,8 @@ struct vhost_net *vhost_net_init(VhostNetOptions *optio= ns) if (net->nc->info->type =3D=3D NET_CLIENT_DRIVER_VHOST_USER) { features =3D vhost_user_get_acked_features(net->nc); if (~net->dev.features & features) { - fprintf(stderr, "vhost lacks feature mask %" PRIu64 - " for backend\n", + error_report("vhost lacks feature mask %" PRIu64 + " for backend", (uint64_t)(~net->dev.features & features)); goto fail; } @@ -349,7 +349,7 @@ err_start: } e =3D k->set_guest_notifiers(qbus->parent, total_queues * 2, false); if (e < 0) { - fprintf(stderr, "vhost guest notifier cleanup failed: %d\n", e); + error_report("vhost guest notifier cleanup failed: %d", e); fflush(stderr); } err: @@ -370,7 +370,7 @@ void vhost_net_stop(VirtIODevice *dev, NetClientState *= ncs, =20 r =3D k->set_guest_notifiers(qbus->parent, total_queues * 2, false); if (r < 0) { - fprintf(stderr, "vhost guest notifier cleanup failed: %d\n", r); + error_report("vhost guest notifier cleanup failed: %d", r); fflush(stderr); } assert(r >=3D 0); diff --git a/hw/nios2/boot.c b/hw/nios2/boot.c index 2b31f5b844..c896e8007b 100644 --- a/hw/nios2/boot.c +++ b/hw/nios2/boot.c @@ -96,7 +96,7 @@ static int nios2_load_dtb(struct nios2_boot_info bi, cons= t uint32_t ramsize, r =3D qemu_fdt_setprop_string(fdt, "/chosen", "bootargs", kernel_cmdline); if (r < 0) { - fprintf(stderr, "couldn't set /chosen/bootargs\n"); + error_report("couldn't set /chosen/bootargs"); } } =20 diff --git a/hw/nvram/eeprom93xx.c b/hw/nvram/eeprom93xx.c index 2fd0e3c29f..5cad031eba 100644 --- a/hw/nvram/eeprom93xx.c +++ b/hw/nvram/eeprom93xx.c @@ -36,6 +36,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "hw/hw.h" #include "hw/nvram/eeprom93xx.h" =20 @@ -105,8 +106,8 @@ static int get_uint16_from_uint8(QEMUFile *f, void *pv,= size_t size, static int put_unused(QEMUFile *f, void *pv, size_t size, VMStateField *fi= eld, QJSON *vmdesc) { - fprintf(stderr, "uint16_from_uint8 is used only for backwards compatib= ility.\n"); - fprintf(stderr, "Never should be used to write a new state.\n"); + error_report("uint16_from_uint8 is used only for backwards compatibili= ty."); + error_report("Never should be used to write a new state."); exit(0); =20 return 0; diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c index e3bd626b8c..cf9a816c0e 100644 --- a/hw/nvram/fw_cfg.c +++ b/hw/nvram/fw_cfg.c @@ -515,8 +515,8 @@ static int get_uint32_as_uint16(QEMUFile *f, void *pv, = size_t size, static int put_unused(QEMUFile *f, void *pv, size_t size, VMStateField *fi= eld, QJSON *vmdesc) { - fprintf(stderr, "uint32_as_uint16 is only used for backward compatibil= ity.\n"); - fprintf(stderr, "This functions shouldn't be called.\n"); + error_report("uint32_as_uint16 is only used for backward compatibility= ."); + error_report("This functions shouldn't be called."); =20 return 0; } diff --git a/hw/openrisc/openrisc_sim.c b/hw/openrisc/openrisc_sim.c index 86bf2849c4..44a6d115dd 100644 --- a/hw/openrisc/openrisc_sim.c +++ b/hw/openrisc/openrisc_sim.c @@ -19,6 +19,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "qapi/error.h" #include "qemu-common.h" #include "cpu.h" @@ -87,7 +88,7 @@ static void cpu_openrisc_load_kernel(ram_addr_t ram_size, } =20 if (kernel_size < 0) { - fprintf(stderr, "QEMU: couldn't load the kernel '%s'\n", + error_report("QEMU: couldn't load the kernel '%s'", kernel_filename); exit(1); } diff --git a/hw/pci-host/bonito.c b/hw/pci-host/bonito.c index 1767d2af61..48fef86c05 100644 --- a/hw/pci-host/bonito.c +++ b/hw/pci-host/bonito.c @@ -38,7 +38,7 @@ */ =20 #include "qemu/osdep.h" - +#include "qemu/error-report.h" #include "hw/hw.h" #include "hw/pci/pci.h" #include "hw/i386/pc.h" @@ -449,8 +449,8 @@ static uint32_t bonito_sbridge_pciaddr(void *opaque, hw= addr addr) regno =3D (cfgaddr & BONITO_PCICONF_REG_MASK) >> BONITO_PCICONF_REG_OF= FSET; =20 if (idsel =3D=3D 0) { - fprintf(stderr, "error in bonito pci config address " TARGET_FMT_p= lx - ",pcimap_cfg=3D%x\n", addr, s->regs[BONITO_PCIMAP_CFG]); + error_report("error in bonito pci config address " TARGET_FMT_plx + ",pcimap_cfg=3D%x", addr, s->regs[BONITO_PCIMAP_CFG]); exit(1); } pciaddr =3D PCI_ADDR(pci_bus_num(phb->bus), devno, funno, regno); diff --git a/hw/pci/pci.c b/hw/pci/pci.c index 1e6fb88eba..1c8395d319 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -515,7 +515,7 @@ static int get_pci_irq_state(QEMUFile *f, void *pv, siz= e_t size, for (i =3D 0; i < PCI_NUM_PINS; ++i) { irq_state[i] =3D qemu_get_be32(f); if (irq_state[i] !=3D 0x1 && irq_state[i] !=3D 0) { - fprintf(stderr, "irq state %d: must be 0 or 1.\n", + error_report("irq state %d: must be 0 or 1.", irq_state[i]); return -EINVAL; } @@ -678,7 +678,7 @@ static PCIBus *pci_get_bus_devfn(int *devfnp, PCIBus *r= oot, unsigned slot; =20 if (!root) { - fprintf(stderr, "No primary PCI bus\n"); + error_report("No primary PCI bus"); return NULL; } =20 @@ -694,7 +694,7 @@ static PCIBus *pci_get_bus_devfn(int *devfnp, PCIBus *r= oot, } =20 if (dom !=3D 0) { - fprintf(stderr, "No support for non-zero PCI domains\n"); + error_report("No support for non-zero PCI domains"); return NULL; } =20 @@ -1118,8 +1118,8 @@ void pci_register_bar(PCIDevice *pci_dev, int region_= num, assert(region_num >=3D 0); assert(region_num < PCI_NUM_REGIONS); if (size & (size-1)) { - fprintf(stderr, "ERROR: PCI region size must be pow2 " - "type=3D0x%x, size=3D0x%"FMT_PCIBUS"\n", type, size); + error_report("ERROR: PCI region size must be pow2 " + "type=3D0x%x, size=3D0x%"FMT_PCIBUS"", type, size); exit(1); } =20 diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c index db0e49ab8f..8a5350161f 100644 --- a/hw/ppc/e500.c +++ b/hw/ppc/e500.c @@ -333,13 +333,13 @@ static int ppce500_load_device_tree(MachineState *mac= hine, ret =3D qemu_fdt_setprop_cell(fdt, "/chosen", "linux,initrd-start"= , initrd_base); if (ret < 0) { - fprintf(stderr, "couldn't set /chosen/linux,initrd-start\n"); + error_report("couldn't set /chosen/linux,initrd-start"); } =20 ret =3D qemu_fdt_setprop_cell(fdt, "/chosen", "linux,initrd-end", (initrd_base + initrd_size)); if (ret < 0) { - fprintf(stderr, "couldn't set /chosen/linux,initrd-end\n"); + error_report("couldn't set /chosen/linux,initrd-end"); } =20 } @@ -353,7 +353,7 @@ static int ppce500_load_device_tree(MachineState *machi= ne, ret =3D qemu_fdt_setprop_string(fdt, "/chosen", "bootargs", machine->kernel_cmdline); if (ret < 0) - fprintf(stderr, "couldn't set /chosen/bootargs\n"); + error_report("couldn't set /chosen/bootargs"); =20 if (kvm_enabled()) { /* Read out host's frequencies */ @@ -720,7 +720,7 @@ static DeviceState *ppce500_init_mpic_kvm(PPCE500Params= *params, =20 CPU_FOREACH(cs) { if (kvm_openpic_connect_vcpu(dev, cs)) { - fprintf(stderr, "%s: failed to connect vcpu to irqchip\n", + error_report("%s: failed to connect vcpu to irqchip", __func__); abort(); } @@ -821,7 +821,7 @@ void ppce500_init(MachineState *machine, PPCE500Params = *params) cs =3D CPU(cpu); =20 if (env->mmu_model !=3D POWERPC_MMU_BOOKE206) { - fprintf(stderr, "MMU model %i not supported by this machine.\n= ", + error_report("MMU model %i not supported by this machine.", env->mmu_model); exit(1); } @@ -967,7 +967,7 @@ void ppce500_init(MachineState *machine, PPCE500Params = *params) cur_base, ram_size - cur_base); if (kernel_size < 0) { - fprintf(stderr, "qemu: could not load kernel '%s'\n", + error_report("qemu: could not load kernel '%s'", machine->kernel_filename); exit(1); } @@ -982,8 +982,8 @@ void ppce500_init(MachineState *machine, PPCE500Params = *params) ram_size - initrd_base); =20 if (initrd_size < 0) { - fprintf(stderr, "qemu: could not load initial ram disk '%s'\n"= , - machine->initrd_filename); + error_report("qemu: could not load initial ram disk '%s'", + machine->initrd_filename); exit(1); } =20 @@ -1024,7 +1024,7 @@ void ppce500_init(MachineState *machine, PPCE500Param= s *params) kernel_size =3D load_uimage(filename, &bios_entry, &loadaddr, NULL= , NULL, NULL); if (kernel_size < 0) { - fprintf(stderr, "qemu: could not load firmware '%s'\n", filena= me); + error_report("qemu: could not load firmware '%s'", filename); exit(1); } } @@ -1037,7 +1037,7 @@ void ppce500_init(MachineState *machine, PPCE500Param= s *params) initrd_base, initrd_size, kernel_base, kernel_size); if (dt_size < 0) { - fprintf(stderr, "couldn't load device tree\n"); + error_report("couldn't load device tree"); exit(1); } assert(dt_size < DTB_MAX_SIZE); diff --git a/hw/ppc/mac_newworld.c b/hw/ppc/mac_newworld.c index 33b46cb50b..c0edf22352 100644 --- a/hw/ppc/mac_newworld.c +++ b/hw/ppc/mac_newworld.c @@ -283,7 +283,7 @@ static void ppc_core99_init(MachineState *machine) } } if (ppc_boot_device =3D=3D '\0') { - fprintf(stderr, "No valid boot device for Mac99 machine\n"); + error_report("No valid boot device for Mac99 machine"); exit(1); } } diff --git a/hw/ppc/mac_oldworld.c b/hw/ppc/mac_oldworld.c index 193b9047d9..02f03650af 100644 --- a/hw/ppc/mac_oldworld.c +++ b/hw/ppc/mac_oldworld.c @@ -226,7 +226,7 @@ static void ppc_heathrow_init(MachineState *machine) #endif } if (ppc_boot_device =3D=3D '\0') { - fprintf(stderr, "No valid boot device for G3 Beige machine\n")= ; + error_report("No valid boot device for G3 Beige machine"); exit(1); } } diff --git a/hw/ppc/mpc8544_guts.c b/hw/ppc/mpc8544_guts.c index ce1254b5d4..3a2c49e3fd 100644 --- a/hw/ppc/mpc8544_guts.c +++ b/hw/ppc/mpc8544_guts.c @@ -18,6 +18,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "qemu-common.h" #include "cpu.h" #include "hw/hw.h" @@ -83,7 +84,7 @@ static uint64_t mpc8544_guts_read(void *opaque, hwaddr ad= dr, value =3D env->spr[SPR_E500_SVR]; break; default: - fprintf(stderr, "guts: Unknown register read: %x\n", (int)addr); + error_report("guts: Unknown register read: %x", (int)addr); break; } =20 @@ -102,7 +103,7 @@ static void mpc8544_guts_write(void *opaque, hwaddr add= r, } break; default: - fprintf(stderr, "guts: Unknown register write: %x =3D %x\n", + error_report("guts: Unknown register write: %x =3D %x", (int)addr, (unsigned)value); break; } diff --git a/hw/ppc/ppc405_boards.c b/hw/ppc/ppc405_boards.c index e92db2c66a..0a31a1c116 100644 --- a/hw/ppc/ppc405_boards.c +++ b/hw/ppc/ppc405_boards.c @@ -324,7 +324,7 @@ static void ref405ep_init(MachineState *machine) kernel_size =3D load_image_targphys(kernel_filename, kernel_base, ram_size - kernel_base); if (kernel_size < 0) { - fprintf(stderr, "qemu: could not load kernel '%s'\n", + error_report("qemu: could not load kernel '%s'", kernel_filename); exit(1); } @@ -336,8 +336,8 @@ static void ref405ep_init(MachineState *machine) initrd_size =3D load_image_targphys(initrd_filename, initrd_ba= se, ram_size - initrd_base); if (initrd_size < 0) { - fprintf(stderr, "qemu: could not load initial ram disk '%s= '\n", - initrd_filename); + error_report("qemu: could not load initial ram disk '%s'", + initrd_filename); exit(1); } } else { @@ -607,7 +607,7 @@ static void taihu_405ep_init(MachineState *machine) kernel_size =3D load_image_targphys(kernel_filename, kernel_base, ram_size - kernel_base); if (kernel_size < 0) { - fprintf(stderr, "qemu: could not load kernel '%s'\n", + error_report("qemu: could not load kernel '%s'", kernel_filename); exit(1); } diff --git a/hw/ppc/ppc440_bamboo.c b/hw/ppc/ppc440_bamboo.c index f92d47f28d..77b74dfe9e 100644 --- a/hw/ppc/ppc440_bamboo.c +++ b/hw/ppc/ppc440_bamboo.c @@ -12,6 +12,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "qemu-common.h" #include "net/net.h" #include "hw/hw.h" @@ -80,22 +81,22 @@ static int bamboo_load_device_tree(hwaddr addr, ret =3D qemu_fdt_setprop(fdt, "/memory", "reg", mem_reg_property, sizeof(mem_reg_property)); if (ret < 0) - fprintf(stderr, "couldn't set /memory/reg\n"); + error_report("couldn't set /memory/reg"); =20 ret =3D qemu_fdt_setprop_cell(fdt, "/chosen", "linux,initrd-start", initrd_base); if (ret < 0) - fprintf(stderr, "couldn't set /chosen/linux,initrd-start\n"); + error_report("couldn't set /chosen/linux,initrd-start"); =20 ret =3D qemu_fdt_setprop_cell(fdt, "/chosen", "linux,initrd-end", (initrd_base + initrd_size)); if (ret < 0) - fprintf(stderr, "couldn't set /chosen/linux,initrd-end\n"); + error_report("couldn't set /chosen/linux,initrd-end"); =20 ret =3D qemu_fdt_setprop_string(fdt, "/chosen", "bootargs", kernel_cmdline); if (ret < 0) - fprintf(stderr, "couldn't set /chosen/bootargs\n"); + error_report("couldn't set /chosen/bootargs"); =20 /* Copy data from the host device tree into the guest. Since the guest= can * directly access the timebase without host involvement, we must expo= se @@ -190,7 +191,7 @@ static void bamboo_init(MachineState *machine) env =3D &cpu->env; =20 if (env->mmu_model !=3D POWERPC_MMU_BOOKE) { - fprintf(stderr, "MMU model %i not supported by this machine.\n", + error_report("MMU model %i not supported by this machine.", env->mmu_model); exit(1); } @@ -224,7 +225,7 @@ static void bamboo_init(MachineState *machine) NULL); pcibus =3D (PCIBus *)qdev_get_child_bus(dev, "pci.0"); if (!pcibus) { - fprintf(stderr, "couldn't create PCI controller!\n"); + error_report("couldn't create PCI controller!"); exit(1); } =20 @@ -265,7 +266,7 @@ static void bamboo_init(MachineState *machine) } /* XXX try again as binary */ if (success < 0) { - fprintf(stderr, "qemu: could not load kernel '%s'\n", + error_report("qemu: could not load kernel '%s'", kernel_filename); exit(1); } @@ -277,7 +278,7 @@ static void bamboo_init(MachineState *machine) ram_size - RAMDISK_ADDR); =20 if (initrd_size < 0) { - fprintf(stderr, "qemu: could not load ram disk '%s' at %x\n", + error_report("qemu: could not load ram disk '%s' at %x", initrd_filename, RAMDISK_ADDR); exit(1); } @@ -287,7 +288,7 @@ static void bamboo_init(MachineState *machine) if (kernel_filename) { if (bamboo_load_device_tree(FDT_ADDR, ram_size, RAMDISK_ADDR, initrd_size, kernel_cmdline) < 0) { - fprintf(stderr, "couldn't load device tree\n"); + error_report("couldn't load device tree"); exit(1); } } diff --git a/hw/ppc/ppc4xx_pci.c b/hw/ppc/ppc4xx_pci.c index 6953f8b9ac..0b91d22253 100644 --- a/hw/ppc/ppc4xx_pci.c +++ b/hw/ppc/ppc4xx_pci.c @@ -20,6 +20,7 @@ * 4xx SoCs, such as the 440EP. */ =20 #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "hw/hw.h" #include "hw/ppc/ppc.h" #include "hw/ppc/ppc4xx.h" @@ -254,7 +255,7 @@ static void ppc4xx_pci_set_irq(void *opaque, int irq_nu= m, int level) =20 trace_ppc4xx_pci_set_irq(irq_num); if (irq_num < 0) { - fprintf(stderr, "%s: PCI irq %d\n", __func__, irq_num); + error_report("%s: PCI irq %d", __func__, irq_num); return; } qemu_set_irq(pci_irqs[irq_num], level); diff --git a/hw/ppc/prep.c b/hw/ppc/prep.c index 94138a4e8c..7551d53fa5 100644 --- a/hw/ppc/prep.c +++ b/hw/ppc/prep.c @@ -576,7 +576,7 @@ static void ppc_prep_init(MachineState *machine) } } if (ppc_boot_device =3D=3D '\0') { - fprintf(stderr, "No valid boot device for Mac99 machine\n"); + error_report("No valid boot device for Mac99 machine"); exit(1); } } @@ -597,7 +597,7 @@ static void ppc_prep_init(MachineState *machine) qdev_init_nofail(dev); pci_bus =3D (PCIBus *)qdev_get_child_bus(dev, "pci.0"); if (pci_bus =3D=3D NULL) { - fprintf(stderr, "Couldn't create PCI host controller.\n"); + error_report("Couldn't create PCI host controller."); exit(1); } sysctrl->contiguous_map_irq =3D qdev_get_gpio_in(dev, 0); diff --git a/hw/ppc/virtex_ml507.c b/hw/ppc/virtex_ml507.c index ed9b406fd3..7641737f81 100644 --- a/hw/ppc/virtex_ml507.c +++ b/hw/ppc/virtex_ml507.c @@ -187,7 +187,7 @@ static int xilinx_load_device_tree(hwaddr addr, =20 r =3D qemu_fdt_setprop_string(fdt, "/chosen", "bootargs", kernel_cmdli= ne); if (r < 0) - fprintf(stderr, "couldn't set /chosen/bootargs\n"); + error_report("couldn't set /chosen/bootargs"); cpu_physical_memory_write(addr, fdt, fdt_size); return fdt_size; } @@ -219,7 +219,7 @@ static void virtex_init(MachineState *machine) env =3D &cpu->env; =20 if (env->mmu_model !=3D POWERPC_MMU_BOOKE) { - fprintf(stderr, "MMU model %i not supported by this machine.\n", + error_report("MMU model %i not supported by this machine.", env->mmu_model); exit(1); } diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c index ff1bb1534c..d3c46bc01f 100644 --- a/hw/s390x/virtio-ccw.c +++ b/hw/s390x/virtio-ccw.c @@ -466,7 +466,7 @@ static int virtio_ccw_cb(SubchDev *sch, CCW1 ccw) * passes us zeroes for those we don't support. */ if (features.features) { - fprintf(stderr, "Guest bug: features[%i]=3D%x (expecte= d 0)\n", + error_report("Guest bug: features[%i]=3D%x (expected 0= )", features.index, features.features); /* XXX: do a unit check here? */ } diff --git a/hw/scsi/lsi53c895a.c b/hw/scsi/lsi53c895a.c index 3e56ab267c..3e2b24e67d 100644 --- a/hw/scsi/lsi53c895a.c +++ b/hw/scsi/lsi53c895a.c @@ -14,7 +14,7 @@ */ =20 #include "qemu/osdep.h" - +#include "qemu/error-report.h" #include "hw/hw.h" #include "hw/pci/pci.h" #include "hw/scsi/scsi.h" @@ -1501,7 +1501,7 @@ again: This is apparently sufficient to beat the drivers into submissi= on. */ if (!(s->sien0 & LSI_SIST0_UDC)) - fprintf(stderr, "inf. loop with UDC masked\n"); + error_report("inf. loop with UDC masked"); lsi_script_scsi_interrupt(s, LSI_SIST0_UDC, 0); lsi_disconnect(s); } else if (s->istat1 & LSI_ISTAT1_SRUN && !s->waiting) { diff --git a/hw/scsi/spapr_vscsi.c b/hw/scsi/spapr_vscsi.c index 360db53ac8..8c4eabcf3d 100644 --- a/hw/scsi/spapr_vscsi.c +++ b/hw/scsi/spapr_vscsi.c @@ -32,6 +32,7 @@ * - Maybe do autosense (PAPR seems to mandate it, linux doesn't care) */ #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "qemu-common.h" #include "cpu.h" #include "hw/hw.h" @@ -179,7 +180,7 @@ static int vscsi_send_iu(VSCSIState *s, vscsi_req *req, rc =3D spapr_vio_dma_write(&s->vdev, req->crq.s.IU_data_ptr, &req->iu, length); if (rc) { - fprintf(stderr, "vscsi_send_iu: DMA write failure !\n"); + error_report("vscsi_send_iu: DMA write failure !"); } =20 req->crq.s.valid =3D 0x80; @@ -197,7 +198,7 @@ static int vscsi_send_iu(VSCSIState *s, vscsi_req *req, =20 rc1 =3D spapr_vio_send_crq(&s->vdev, req->crq.raw); if (rc1) { - fprintf(stderr, "vscsi_send_iu: Error sending response\n"); + error_report("vscsi_send_iu: Error sending response"); return rc1; } =20 @@ -330,7 +331,7 @@ static int vscsi_fetch_desc(VSCSIState *s, struct vscsi= _req *req, break; } default: - fprintf(stderr, "VSCSI: Unknown format %x\n", req->dma_fmt); + error_report("VSCSI: Unknown format %x", req->dma_fmt); return -1; } =20 @@ -518,7 +519,7 @@ static void vscsi_transfer_data(SCSIRequest *sreq, uint= 32_t len) =20 trace_spapr_vscsi_transfer_data(sreq->tag, len, req); if (req =3D=3D NULL) { - fprintf(stderr, "VSCSI: Can't find request for tag 0x%x\n", sreq->= tag); + error_report("VSCSI: Can't find request for tag 0x%x", sreq->tag); return; } =20 @@ -527,7 +528,7 @@ static void vscsi_transfer_data(SCSIRequest *sreq, uint= 32_t len) rc =3D vscsi_srp_transfer_data(s, req, req->writing, buf, len); } if (rc < 0) { - fprintf(stderr, "VSCSI: RDMA error rc=3D%d!\n", rc); + error_report("VSCSI: RDMA error rc=3D%d!", rc); req->dma_error =3D true; scsi_req_cancel(req->sreq); return; @@ -547,7 +548,7 @@ static void vscsi_command_complete(SCSIRequest *sreq, u= int32_t status, size_t re =20 trace_spapr_vscsi_command_complete(sreq->tag, status, req); if (req =3D=3D NULL) { - fprintf(stderr, "VSCSI: Can't find request for tag 0x%x\n", sreq->= tag); + error_report("VSCSI: Can't find request for tag 0x%x", sreq->tag); return; } =20 @@ -639,7 +640,7 @@ static void *vscsi_load_request(QEMUFile *f, SCSIReques= t *sreq) memset(req, 0, sizeof(*req)); rc =3D vmstate_load_state(f, &vmstate_spapr_vscsi_req, req, 1); if (rc) { - fprintf(stderr, "VSCSI: failed loading request tag#%u\n", sreq->ta= g); + error_report("VSCSI: failed loading request tag#%u", sreq->tag); return NULL; } assert(req->active); @@ -827,7 +828,7 @@ static int vscsi_process_tsk_mgmt(VSCSIState *s, vscsi_= req *req) uint64_t tag =3D iu->srp.rsp.tag; uint8_t sol_not =3D iu->srp.cmd.sol_not; =20 - fprintf(stderr, "vscsi_process_tsk_mgmt %02x\n", + error_report("vscsi_process_tsk_mgmt %02x", iu->srp.tsk_mgmt.tsk_mgmt_func); =20 d =3D vscsi_device_find(&s->bus, be64_to_cpu(req->iu.srp.tsk_mgmt.lun)= , &lun); @@ -932,10 +933,10 @@ static int vscsi_handle_srp_req(VSCSIState *s, vscsi_= req *req) case SRP_CRED_RSP: case SRP_AER_REQ: case SRP_AER_RSP: - fprintf(stderr, "VSCSI: Unsupported opcode %02x\n", opcode); + error_report("VSCSI: Unsupported opcode %02x", opcode); break; default: - fprintf(stderr, "VSCSI: Unknown type %02x\n", opcode); + error_report("VSCSI: Unknown type %02x", opcode); } =20 return done; @@ -953,7 +954,7 @@ static int vscsi_send_adapter_info(VSCSIState *s, vscsi= _req *req) rc =3D spapr_vio_dma_read(&s->vdev, be64_to_cpu(sinfo->buffer), &info, be16_to_cpu(sinfo->common.length)); if (rc) { - fprintf(stderr, "vscsi_send_adapter_info: DMA read failure !\n"); + error_report("vscsi_send_adapter_info: DMA read failure !"); } #endif memset(&info, 0, sizeof(info)); @@ -967,7 +968,7 @@ static int vscsi_send_adapter_info(VSCSIState *s, vscsi= _req *req) rc =3D spapr_vio_dma_write(&s->vdev, be64_to_cpu(sinfo->buffer), &info, be16_to_cpu(sinfo->common.length)); if (rc) { - fprintf(stderr, "vscsi_send_adapter_info: DMA write failure !\n"); + error_report("vscsi_send_adapter_info: DMA write failure !"); } =20 sinfo->common.status =3D rc ? cpu_to_be32(1) : 0; @@ -987,7 +988,7 @@ static int vscsi_send_capabilities(VSCSIState *s, vscsi= _req *req) req_len =3D len =3D be16_to_cpu(vcap->common.length); buffer =3D be64_to_cpu(vcap->buffer); if (len > sizeof(cap)) { - fprintf(stderr, "vscsi_send_capabilities: capabilities size mismat= ch !\n"); + error_report("vscsi_send_capabilities: capabilities size mismatch = !"); =20 /* * Just read and populate the structure that is known. @@ -997,7 +998,7 @@ static int vscsi_send_capabilities(VSCSIState *s, vscsi= _req *req) } rc =3D spapr_vio_dma_read(&s->vdev, buffer, &cap, len); if (rc) { - fprintf(stderr, "vscsi_send_capabilities: DMA read failure !\n"); + error_report("vscsi_send_capabilities: DMA read failure !"); } =20 /* @@ -1013,7 +1014,7 @@ static int vscsi_send_capabilities(VSCSIState *s, vsc= si_req *req) =20 rc =3D spapr_vio_dma_write(&s->vdev, buffer, &cap, len); if (rc) { - fprintf(stderr, "vscsi_send_capabilities: DMA write failure !\n"); + error_report("vscsi_send_capabilities: DMA write failure !"); } if (req_len > len) { /* @@ -1034,11 +1035,11 @@ static int vscsi_handle_mad_req(VSCSIState *s, vscs= i_req *req) =20 switch (be32_to_cpu(mad->empty_iu.common.type)) { case VIOSRP_EMPTY_IU_TYPE: - fprintf(stderr, "Unsupported EMPTY MAD IU\n"); + error_report("Unsupported EMPTY MAD IU"); retlen =3D sizeof(mad->empty_iu); break; case VIOSRP_ERROR_LOG_TYPE: - fprintf(stderr, "Unsupported ERROR LOG MAD IU\n"); + error_report("Unsupported ERROR LOG MAD IU"); retlen =3D sizeof(mad->error_log); break; case VIOSRP_ADAPTER_INFO_TYPE: @@ -1053,7 +1054,7 @@ static int vscsi_handle_mad_req(VSCSIState *s, vscsi_= req *req) request_handled =3D true; break; default: - fprintf(stderr, "VSCSI: Unknown MAD type %02x\n", + error_report("VSCSI: Unknown MAD type %02x", be32_to_cpu(mad->empty_iu.common.type)); /* * PAPR+ says that "The length field is set to the length @@ -1078,7 +1079,7 @@ static void vscsi_got_payload(VSCSIState *s, vscsi_cr= q *crq) =20 req =3D vscsi_get_req(s); if (req =3D=3D NULL) { - fprintf(stderr, "VSCSI: Failed to get a request !\n"); + error_report("VSCSI: Failed to get a request !"); return; } =20 @@ -1088,7 +1089,7 @@ static void vscsi_got_payload(VSCSIState *s, vscsi_cr= q *crq) * of the structure. */ if (crq->s.IU_length > sizeof(union viosrp_iu)) { - fprintf(stderr, "VSCSI: SRP IU too long (%d bytes) !\n", + error_report("VSCSI: SRP IU too long (%d bytes) !", crq->s.IU_length); vscsi_put_req(req); return; @@ -1097,7 +1098,7 @@ static void vscsi_got_payload(VSCSIState *s, vscsi_cr= q *crq) /* XXX Handle failure differently ? */ if (spapr_vio_dma_read(&s->vdev, crq->s.IU_data_ptr, &req->iu, crq->s.IU_length)) { - fprintf(stderr, "vscsi_got_payload: DMA read failure !\n"); + error_report("vscsi_got_payload: DMA read failure !"); vscsi_put_req(req); return; } @@ -1158,16 +1159,16 @@ static int vscsi_do_crq(struct VIOsPAPRDevice *dev,= uint8_t *crq_data) case VIOSRP_AIX_FORMAT: case VIOSRP_LINUX_FORMAT: case VIOSRP_INLINE_FORMAT: - fprintf(stderr, "vscsi_do_srq: Unsupported payload format %02x= \n", + error_report("vscsi_do_srq: Unsupported payload format %02x", crq.s.format); break; default: - fprintf(stderr, "vscsi_do_srq: Unknown payload format %02x\n", + error_report("vscsi_do_srq: Unknown payload format %02x", crq.s.format); } break; default: - fprintf(stderr, "vscsi_do_crq: unknown CRQ %02x %02x ...\n", + error_report("vscsi_do_crq: unknown CRQ %02x %02x ...", crq.raw[0], crq.raw[1]); }; =20 diff --git a/hw/scsi/virtio-scsi-dataplane.c b/hw/scsi/virtio-scsi-dataplan= e.c index add4b3f4a4..e047361310 100644 --- a/hw/scsi/virtio-scsi-dataplane.c +++ b/hw/scsi/virtio-scsi-dataplane.c @@ -97,7 +97,7 @@ static int virtio_scsi_vring_init(VirtIOSCSI *s, VirtQueu= e *vq, int n, /* Set up virtqueue notify */ rc =3D virtio_bus_set_host_notifier(VIRTIO_BUS(qbus), n, true); if (rc !=3D 0) { - fprintf(stderr, "virtio-scsi: Failed to set host notifier (%d)\n", + error_report("virtio-scsi: Failed to set host notifier (%d)", rc); s->dataplane_fenced =3D true; return rc; @@ -141,8 +141,8 @@ int virtio_scsi_dataplane_start(VirtIODevice *vdev) /* Set up guest notifier (irq) */ rc =3D k->set_guest_notifiers(qbus->parent, vs->conf.num_queues + 2, t= rue); if (rc !=3D 0) { - fprintf(stderr, "virtio-scsi: Failed to set guest notifiers (%d), = " - "ensure -enable-kvm is set\n", rc); + error_report("virtio-scsi: Failed to set guest notifiers (%d), " + "ensure -enable-kvm is set", rc); goto fail_guest_notifiers; } =20 diff --git a/hw/sd/pl181.c b/hw/sd/pl181.c index 55c8098ecd..2b878a0c5e 100644 --- a/hw/sd/pl181.c +++ b/hw/sd/pl181.c @@ -8,6 +8,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "sysemu/block-backend.h" #include "sysemu/blockdev.h" #include "hw/sysbus.h" @@ -146,7 +147,7 @@ static void pl181_fifo_push(PL181State *s, uint32_t val= ue) int n; =20 if (s->fifo_len =3D=3D PL181_FIFO_LEN) { - fprintf(stderr, "pl181: FIFO overflow\n"); + error_report("pl181: FIFO overflow"); return; } n =3D (s->fifo_pos + s->fifo_len) & (PL181_FIFO_LEN - 1); @@ -160,7 +161,7 @@ static uint32_t pl181_fifo_pop(PL181State *s) uint32_t value; =20 if (s->fifo_len =3D=3D 0) { - fprintf(stderr, "pl181: FIFO underflow\n"); + error_report("pl181: FIFO underflow"); return 0; } value =3D s->fifo[s->fifo_pos]; diff --git a/hw/sd/sd.c b/hw/sd/sd.c index ba47bff4db..e467d74fc8 100644 --- a/hw/sd/sd.c +++ b/hw/sd/sd.c @@ -700,7 +700,7 @@ static void sd_lock_command(SDState *sd) sd->card_status &=3D ~CARD_IS_LOCKED; sd->pwd_len =3D 0; /* Erasing the entire card here! */ - fprintf(stderr, "SD: Card force-erased by CMD42\n"); + error_report("SD: Card force-erased by CMD42"); return; } =20 @@ -1282,7 +1282,7 @@ static sd_rsp_type_t sd_normal_command(SDState *sd, return sd_r1; =20 case 56: /* CMD56: GEN_CMD */ - fprintf(stderr, "SD: GEN_CMD 0x%08x\n", req.arg); + error_report("SD: GEN_CMD 0x%08x", req.arg); =20 switch (sd->state) { case sd_transfer_state: @@ -1565,10 +1565,10 @@ send_response: int i; DPRINTF("Response:"); for (i =3D 0; i < rsplen; i++) - fprintf(stderr, " %02x", response[i]); - fprintf(stderr, " state %d\n", sd->state); + error_report(" %02x", response[i]); + error_report(" state %d", sd->state); } else { - DPRINTF("No response %d\n", sd->state); + DPRINTF("No response %d", sd->state); } #endif =20 @@ -1580,14 +1580,14 @@ static void sd_blk_read(SDState *sd, uint64_t addr,= uint32_t len) DPRINTF("sd_blk_read: addr =3D 0x%08llx, len =3D %d\n", (unsigned long long) addr, len); if (!sd->blk || blk_pread(sd->blk, addr, sd->data, len) < 0) { - fprintf(stderr, "sd_blk_read: read error on host side\n"); + error_report("sd_blk_read: read error on host side"); } } =20 static void sd_blk_write(SDState *sd, uint64_t addr, uint32_t len) { if (!sd->blk || blk_pwrite(sd->blk, addr, sd->data, len, 0) < 0) { - fprintf(stderr, "sd_blk_write: write error on host side\n"); + error_report("sd_blk_write: write error on host side"); } } =20 diff --git a/hw/sh4/r2d.c b/hw/sh4/r2d.c index 16b9ed2db2..a010f559e2 100644 --- a/hw/sh4/r2d.c +++ b/hw/sh4/r2d.c @@ -24,6 +24,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "qapi/error.h" #include "qemu-common.h" #include "cpu.h" @@ -319,8 +320,8 @@ static void r2d_init(MachineState *machine) SDRAM_BASE + LINUX_LOAD_OFFSET, INITRD_LOAD_OFFSET - LINUX_LOAD_= OFFSET); if (kernel_size < 0) { - fprintf(stderr, "qemu: could not load kernel '%s'\n", kernel_fil= ename); - exit(1); + error_report("qemu: could not load kernel '%s'", kernel_filena= me); + exit(1); } =20 /* initialization which should be done by firmware */ @@ -339,8 +340,8 @@ static void r2d_init(MachineState *machine) SDRAM_SIZE - INITRD_LOAD_OFFSET)= ; =20 if (initrd_size < 0) { - fprintf(stderr, "qemu: could not load initrd '%s'\n", initrd_fil= ename); - exit(1); + error_report("qemu: could not load initrd '%s'", initrd_filena= me); + exit(1); } =20 /* initialization which should be done by firmware */ diff --git a/hw/sh4/sh7750.c b/hw/sh4/sh7750.c index 166e4bd947..64ffc4c1d2 100644 --- a/hw/sh4/sh7750.c +++ b/hw/sh4/sh7750.c @@ -23,6 +23,7 @@ * THE SOFTWARE. */ #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "hw/hw.h" #include "hw/sh4/sh.h" #include "sysemu/sysemu.h" @@ -147,9 +148,9 @@ static void porta_changed(SH7750State * s, uint16_t pre= v) int i, r =3D 0; =20 #if 0 - fprintf(stderr, "porta changed from 0x%04x to 0x%04x\n", + error_report("porta changed from 0x%04x to 0x%04x", prev, porta_lines(s)); - fprintf(stderr, "pdtra=3D0x%04x, pctra=3D0x%08x\n", s->pdtra, s->pctra= ); + error_report("pdtra=3D0x%04x, pctra=3D0x%08x", s->pdtra, s->pctra); #endif currenta =3D porta_lines(s); if (currenta =3D=3D prev) @@ -200,13 +201,13 @@ static void portb_changed(SH7750State * s, uint16_t p= rev) =20 static void error_access(const char *kind, hwaddr addr) { - fprintf(stderr, "%s to %s (0x" TARGET_FMT_plx ") not supported\n", + error_report("%s to %s (0x" TARGET_FMT_plx ") not supported", kind, regname(addr), addr); } =20 static void ignore_access(const char *kind, hwaddr addr) { - fprintf(stderr, "%s to %s (0x" TARGET_FMT_plx ") ignored\n", + error_report("%s to %s (0x" TARGET_FMT_plx ") ignored", kind, regname(addr), addr); } =20 @@ -326,47 +327,48 @@ static void sh7750_mem_writew(void *opaque, hwaddr ad= dr, uint16_t temp; =20 switch (addr) { - /* SDRAM controller */ + /* SDRAM controller */ case SH7750_BCR2_A7: s->bcr2 =3D mem_value; return; case SH7750_BCR3_A7: - if(!has_bcr3_and_bcr4(s)) - error_access("word write", addr); - s->bcr3 =3D mem_value; - return; + if (!has_bcr3_and_bcr4(s)) { + error_access("word write", addr); + } + s->bcr3 =3D mem_value; + return; case SH7750_PCR_A7: - s->pcr =3D mem_value; - return; + s->pcr =3D mem_value; + return; case SH7750_RTCNT_A7: case SH7750_RTCOR_A7: case SH7750_RTCSR_A7: - ignore_access("word write", addr); - return; - /* IO ports */ + ignore_access("word write", addr); + return; + /* IO ports */ case SH7750_PDTRA_A7: - temp =3D porta_lines(s); - s->pdtra =3D mem_value; - porta_changed(s, temp); - return; + temp =3D porta_lines(s); + s->pdtra =3D mem_value; + porta_changed(s, temp); + return; case SH7750_PDTRB_A7: - temp =3D portb_lines(s); - s->pdtrb =3D mem_value; - portb_changed(s, temp); - return; + temp =3D portb_lines(s); + s->pdtrb =3D mem_value; + portb_changed(s, temp); + return; case SH7750_RFCR_A7: - fprintf(stderr, "Write access to refresh count register\n"); - s->rfcr =3D mem_value; - return; + error_report("Write access to refresh count register"); + s->rfcr =3D mem_value; + return; case SH7750_GPIOIC_A7: - s->gpioic =3D mem_value; - if (mem_value !=3D 0) { - fprintf(stderr, "I/O interrupts not implemented\n"); + s->gpioic =3D mem_value; + if (mem_value !=3D 0) { + error_report("I/O interrupts not implemented"); abort(); - } - return; + } + return; default: - error_access("word write", addr); + error_access("word write", addr); abort(); } } diff --git a/hw/sparc/leon3.c b/hw/sparc/leon3.c index ec2816bf94..d434edec92 100644 --- a/hw/sparc/leon3.c +++ b/hw/sparc/leon3.c @@ -22,6 +22,7 @@ * THE SOFTWARE. */ #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "qapi/error.h" #include "qemu-common.h" #include "cpu.h" @@ -172,7 +173,7 @@ static void leon3_generic_hw_init(MachineState *machine= ) } =20 if (bios_size > prom_size) { - fprintf(stderr, "qemu: could not load prom '%s': file too big\n", + error_report("qemu: could not load prom '%s': file too big", filename); exit(1); } @@ -180,11 +181,11 @@ static void leon3_generic_hw_init(MachineState *machi= ne) if (bios_size > 0) { ret =3D load_image_targphys(filename, 0x00000000, bios_size); if (ret < 0 || ret > prom_size) { - fprintf(stderr, "qemu: could not load prom '%s'\n", filename); + error_report("qemu: could not load prom '%s'", filename); exit(1); } } else if (kernel_filename =3D=3D NULL && !qtest_enabled()) { - fprintf(stderr, "Can't read bios image %s\n", filename); + error_report("Can't read bios image %s", filename); exit(1); } g_free(filename); @@ -197,7 +198,7 @@ static void leon3_generic_hw_init(MachineState *machine= ) kernel_size =3D load_elf(kernel_filename, NULL, NULL, &entry, NULL= , NULL, 1 /* big endian */, EM_SPARC, 0, 0); if (kernel_size < 0) { - fprintf(stderr, "qemu: could not load kernel '%s'\n", + error_report("qemu: could not load kernel '%s'", kernel_filename); exit(1); } diff --git a/hw/sparc/sun4m.c b/hw/sparc/sun4m.c index e1bdd4828d..7a2812aaa4 100644 --- a/hw/sparc/sun4m.c +++ b/hw/sparc/sun4m.c @@ -261,7 +261,7 @@ static unsigned long sun4m_load_kernel(const char *kern= el_filename, KERNEL_LOAD_ADDR, RAM_size - KERNEL_LOAD_ADDR)= ; if (kernel_size < 0) { - fprintf(stderr, "qemu: could not load kernel '%s'\n", + error_report("qemu: could not load kernel '%s'", kernel_filename); exit(1); } @@ -273,8 +273,8 @@ static unsigned long sun4m_load_kernel(const char *kern= el_filename, INITRD_LOAD_ADDR, RAM_size - INITRD_LOAD_ADDR)= ; if (initrd_size < 0) { - fprintf(stderr, "qemu: could not load initial ram disk '%s= '\n", - initrd_filename); + error_report("qemu: could not load initial ram disk '%s'", + initrd_filename); exit(1); } } @@ -688,7 +688,7 @@ static void prom_init(hwaddr addr, const char *bios_nam= e) ret =3D -1; } if (ret < 0 || ret > PROM_SIZE_MAX) { - fprintf(stderr, "qemu: could not load prom '%s'\n", bios_name); + error_report("qemu: could not load prom '%s'", bios_name); exit(1); } } diff --git a/hw/sparc64/niagara.c b/hw/sparc64/niagara.c index 9a8d6109d4..60799220f3 100644 --- a/hw/sparc64/niagara.c +++ b/hw/sparc64/niagara.c @@ -153,7 +153,7 @@ static void niagara_init(MachineState *machine) dinfo->is_default =3D 1; rom_add_file_fixed(blk_bs(blk)->filename, NIAGARA_VDISK_BASE, = -1); } else { - fprintf(stderr, "qemu: could not load ram disk '%s'\n", + error_report("qemu: could not load ram disk '%s'", blk_bs(blk)->filename); exit(1); } diff --git a/hw/sparc64/sun4u.c b/hw/sparc64/sun4u.c index c3280aaf38..070d9b94f9 100644 --- a/hw/sparc64/sun4u.c +++ b/hw/sparc64/sun4u.c @@ -22,6 +22,7 @@ * THE SOFTWARE. */ #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "qapi/error.h" #include "qemu-common.h" #include "cpu.h" @@ -165,7 +166,7 @@ static uint64_t sun4u_load_kernel(const char *kernel_fi= lename, RAM_size - KERNEL_LOAD_ADDR)= ; } if (kernel_size < 0) { - fprintf(stderr, "qemu: could not load kernel '%s'\n", + error_report("qemu: could not load kernel '%s'", kernel_filename); exit(1); } @@ -178,8 +179,8 @@ static uint64_t sun4u_load_kernel(const char *kernel_fi= lename, *initrd_addr, RAM_size - *initrd_addr); if ((int)*initrd_size < 0) { - fprintf(stderr, "qemu: could not load initial ram disk '%s= '\n", - initrd_filename); + error_report("qemu: could not load initial ram disk '%s'", + initrd_filename); exit(1); } } @@ -322,7 +323,7 @@ static void prom_init(hwaddr addr, const char *bios_nam= e) ret =3D -1; } if (ret < 0 || ret > PROM_SIZE_MAX) { - fprintf(stderr, "qemu: could not load prom '%s'\n", bios_name); + error_report("qemu: could not load prom '%s'", bios_name); exit(1); } } diff --git a/hw/ssi/omap_spi.c b/hw/ssi/omap_spi.c index 34163e5646..98242d1e8b 100644 --- a/hw/ssi/omap_spi.c +++ b/hw/ssi/omap_spi.c @@ -20,6 +20,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "hw/hw.h" #include "hw/arm/omap.h" =20 @@ -295,9 +296,9 @@ static void omap_mcspi_write(void *opaque, hwaddr addr, if ((value ^ s->ch[ch].config) & (3 << 14)) /* DMAR | DMAW */ omap_mcspi_dmarequest_update(s->ch + ch); if (((value >> 12) & 3) =3D=3D 3) /* TRM */ - fprintf(stderr, "%s: invalid TRM value (3)\n", __func__); + error_report("%s: invalid TRM value (3)", __func__); if (((value >> 7) & 0x1f) < 3) /* WL */ - fprintf(stderr, "%s: invalid WL value (%" PRIx64 ")\n", + error_report("%s: invalid WL value (%" PRIx64 ")", __func__, (value >> 7) & 0x1f); s->ch[ch].config =3D value & 0x7fffff; break; diff --git a/hw/timer/omap_gptimer.c b/hw/timer/omap_gptimer.c index ae2dc99832..0f064241d3 100644 --- a/hw/timer/omap_gptimer.c +++ b/hw/timer/omap_gptimer.c @@ -18,6 +18,7 @@ * with this program; if not, see . */ #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "hw/hw.h" #include "qemu/timer.h" #include "hw/arm/omap.h" @@ -356,7 +357,7 @@ static void omap_gp_timer_write(void *opaque, hwaddr ad= dr, case 0x10: /* TIOCP_CFG */ s->config =3D value & 0x33d; if (((value >> 3) & 3) =3D=3D 3) /* IDLEMODE */ - fprintf(stderr, "%s: illegal IDLEMODE value in TIOCP_CFG\n", + error_report("%s: illegal IDLEMODE value in TIOCP_CFG", __func__); if (value & 2) /* SOFTRESET */ omap_gp_timer_reset(s); @@ -394,11 +395,11 @@ static void omap_gp_timer_write(void *opaque, hwaddr = addr, s->ar =3D (value >> 1) & 1; s->st =3D (value >> 0) & 1; if (s->inout && s->trigger !=3D gpt_trigger_none) - fprintf(stderr, "%s: GP timer pin must be an output " - "for this trigger mode\n", __func__); + error_report("%s: GP timer pin must be an output " + "for this trigger mode", __func__); if (!s->inout && s->capture !=3D gpt_capture_none) - fprintf(stderr, "%s: GP timer pin must be an input " - "for this capture mode\n", __func__); + error_report("%s: GP timer pin must be an input " + "for this capture mode", __func__); if (s->trigger =3D=3D gpt_trigger_none) omap_gp_timer_out(s, s->scpwm); /* TODO: make sure this doesn't overflow 32-bits */ diff --git a/hw/timer/twl92230.c b/hw/timer/twl92230.c index 87e334af24..3ade0ba929 100644 --- a/hw/timer/twl92230.c +++ b/hw/timer/twl92230.c @@ -614,7 +614,7 @@ static void menelaus_write(void *opaque, uint8_t addr, = uint8_t value) break; rtc_badness: default: - fprintf(stderr, "%s: bad RTC_UPDATE value %02x\n", + error_report("%s: bad RTC_UPDATE value %02x", __func__, value); s->status |=3D 1 << 10; /* RTCERR */ menelaus_update(s); diff --git a/hw/timer/xilinx_timer.c b/hw/timer/xilinx_timer.c index 59439c05be..a80bba846b 100644 --- a/hw/timer/xilinx_timer.c +++ b/hw/timer/xilinx_timer.c @@ -127,7 +127,7 @@ timer_read(void *opaque, hwaddr addr, unsigned int size= ) break; =20 } - D(fprintf(stderr, "%s timer=3D%d %x=3D%x\n", __func__, timer, addr * 4= , r)); + D(error_report("%s timer=3D%d %x=3D%x", __func__, timer, addr * 4, r))= ; return r; } =20 @@ -135,7 +135,7 @@ static void timer_enable(struct xlx_timer *xt) { uint64_t count; =20 - D(fprintf(stderr, "%s timer=3D%d down=3D%d\n", __func__, + D(error_report("%s timer=3D%d down=3D%d", __func__, xt->nr, xt->regs[R_TCSR] & TCSR_UDT)); =20 ptimer_stop(xt->ptimer); @@ -160,7 +160,7 @@ timer_write(void *opaque, hwaddr addr, addr >>=3D 2; timer =3D timer_from_addr(addr); xt =3D &t->timers[timer]; - D(fprintf(stderr, "%s addr=3D%x val=3D%x (timer=3D%d off=3D%d)\n", + D(error_report("%s addr=3D%x val=3D%x (timer=3D%d off=3D%d)", __func__, addr * 4, value, timer, addr & 3)); /* Further decoding to address a specific timers reg. */ addr &=3D 3; @@ -197,7 +197,7 @@ static void timer_hit(void *opaque) { struct xlx_timer *xt =3D opaque; struct timerblock *t =3D xt->parent; - D(fprintf(stderr, "%s %d\n", __func__, xt->nr)); + D(error_report("%s %d", __func__, xt->nr)); xt->regs[R_TCSR] |=3D TCSR_TINT; =20 if (xt->regs[R_TCSR] & TCSR_ARHT) diff --git a/hw/usb/core.c b/hw/usb/core.c index 241ae66b15..9ffdef055c 100644 --- a/hw/usb/core.c +++ b/hw/usb/core.c @@ -24,6 +24,7 @@ * THE SOFTWARE. */ #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "qemu-common.h" #include "hw/usb.h" #include "qemu/iov.h" @@ -599,7 +600,7 @@ void usb_packet_copy(USBPacket *p, void *ptr, size_t by= tes) iov_from_buf(iov->iov, iov->niov, p->actual_length, ptr, bytes); break; default: - fprintf(stderr, "%s: invalid pid: %x\n", __func__, p->pid); + error_report("%s: invalid pid: %x", __func__, p->pid); abort(); } p->actual_length +=3D bytes; @@ -681,7 +682,7 @@ void usb_ep_dump(USBDevice *dev) }; int ifnum, ep, first; =20 - fprintf(stderr, "Device \"%s\", config %d\n", + error_report("Device \"%s\", config %d", dev->product_desc, dev->configuration); for (ifnum =3D 0; ifnum < 16; ifnum++) { first =3D 1; @@ -690,10 +691,10 @@ void usb_ep_dump(USBDevice *dev) dev->ep_in[ep].ifnum =3D=3D ifnum) { if (first) { first =3D 0; - fprintf(stderr, " Interface %d, alternative %d\n", + error_report(" Interface %d, alternative %d", ifnum, dev->altsetting[ifnum]); } - fprintf(stderr, " Endpoint %d, IN, %s, %d max\n", ep, + error_report(" Endpoint %d, IN, %s, %d max", ep, tname[dev->ep_in[ep].type], dev->ep_in[ep].max_packet_size); } @@ -701,16 +702,16 @@ void usb_ep_dump(USBDevice *dev) dev->ep_out[ep].ifnum =3D=3D ifnum) { if (first) { first =3D 0; - fprintf(stderr, " Interface %d, alternative %d\n", + error_report(" Interface %d, alternative %d", ifnum, dev->altsetting[ifnum]); } - fprintf(stderr, " Endpoint %d, OUT, %s, %d max\n", ep, + error_report(" Endpoint %d, OUT, %s, %d max", ep, tname[dev->ep_out[ep].type], dev->ep_out[ep].max_packet_size); } } } - fprintf(stderr, "--\n"); + error_report("--"); } =20 struct USBEndpoint *usb_ep_get(USBDevice *dev, int pid, int ep) diff --git a/hw/usb/desc.c b/hw/usb/desc.c index 85c15addc5..afae910f8e 100644 --- a/hw/usb/desc.c +++ b/hw/usb/desc.c @@ -1,5 +1,5 @@ #include "qemu/osdep.h" - +#include "qemu/error-report.h" #include "hw/usb.h" #include "hw/usb/desc.h" #include "trace.h" @@ -688,7 +688,7 @@ int usb_desc_get_descriptor(USBDevice *dev, USBPacket *= p, break; =20 default: - fprintf(stderr, "%s: %d unknown type %d (len %zd)\n", __func__, + error_report("%s: %d unknown type %d (len %zd)", __func__, dev->addr, type, len); break; } diff --git a/hw/usb/dev-audio.c b/hw/usb/dev-audio.c index 343345235c..43fc20469a 100644 --- a/hw/usb/dev-audio.c +++ b/hw/usb/dev-audio.c @@ -30,6 +30,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "qemu-common.h" #include "hw/usb.h" #include "hw/usb/desc.h" @@ -398,7 +399,7 @@ static int usb_audio_set_output_altset(USBAudioState *s= , int altset) } =20 if (s->debug) { - fprintf(stderr, "usb-audio: set interface %d\n", altset); + error_report("usb-audio: set interface %d", altset); } s->out.altset =3D altset; return 0; @@ -478,7 +479,7 @@ static int usb_audio_set_control(USBAudioState *s, uint= 8_t attrib, uint16_t vol =3D data[0] + (data[1] << 8); =20 if (s->debug) { - fprintf(stderr, "usb-audio: vol %04x\n", (uint16_t)vol); + error_report("usb-audio: vol %04x", (uint16_t)vol); } =20 vol -=3D 0x8000; @@ -496,7 +497,7 @@ static int usb_audio_set_control(USBAudioState *s, uint= 8_t attrib, =20 if (set_vol) { if (s->debug) { - fprintf(stderr, "usb-audio: mute %d, lvol %3d, rvol %3d\n", + error_report("usb-audio: mute %d, lvol %3d, rvol %3d", s->out.mute, s->out.vol[0], s->out.vol[1]); } AUD_set_volume_out(s->out.voice, s->out.mute, @@ -514,8 +515,8 @@ static void usb_audio_handle_control(USBDevice *dev, US= BPacket *p, int ret =3D 0; =20 if (s->debug) { - fprintf(stderr, "usb-audio: control transaction: " - "request 0x%04x value 0x%04x index 0x%04x length 0x%04x\n"= , + error_report("usb-audio: control transaction: " + "request 0x%04x value 0x%04x index 0x%04x length 0x%04x", request, value, index, length); } =20 @@ -533,7 +534,7 @@ static void usb_audio_handle_control(USBDevice *dev, US= BPacket *p, length, data); if (ret < 0) { if (s->debug) { - fprintf(stderr, "usb-audio: fail: get control\n"); + error_report("usb-audio: fail: get control"); } goto fail; } @@ -548,7 +549,7 @@ static void usb_audio_handle_control(USBDevice *dev, US= BPacket *p, length, data); if (ret < 0) { if (s->debug) { - fprintf(stderr, "usb-audio: fail: set control\n"); + error_report("usb-audio: fail: set control"); } goto fail; } @@ -557,8 +558,8 @@ static void usb_audio_handle_control(USBDevice *dev, US= BPacket *p, default: fail: if (s->debug) { - fprintf(stderr, "usb-audio: failed control transaction: " - "request 0x%04x value 0x%04x index 0x%04x length 0x%04= x\n", + error_report("usb-audio: failed control transaction: " + "request 0x%04x value 0x%04x index 0x%04x length 0x%04= x", request, value, index, length); } p->status =3D USB_RET_STALL; @@ -581,7 +582,7 @@ static void usb_audio_handle_reset(USBDevice *dev) USBAudioState *s =3D USB_AUDIO(dev); =20 if (s->debug) { - fprintf(stderr, "usb-audio: reset\n"); + error_report("usb-audio: reset"); } usb_audio_set_output_altset(s, ALTSET_OFF); } @@ -595,7 +596,7 @@ static void usb_audio_handle_dataout(USBAudioState *s, = USBPacket *p) =20 streambuf_put(&s->out.buf, p); if (p->actual_length < p->iov.size && s->debug > 1) { - fprintf(stderr, "usb-audio: output overrun (%zd bytes)\n", + error_report("usb-audio: output overrun (%zd bytes)", p->iov.size - p->actual_length); } } @@ -611,8 +612,8 @@ static void usb_audio_handle_data(USBDevice *dev, USBPa= cket *p) =20 p->status =3D USB_RET_STALL; if (s->debug) { - fprintf(stderr, "usb-audio: failed data transaction: " - "pid 0x%x ep 0x%x len 0x%zx\n", + error_report("usb-audio: failed data transaction: " + "pid 0x%x ep 0x%x len 0x%zx", p->pid, p->ep->nr, p->iov.size); } } @@ -622,7 +623,7 @@ static void usb_audio_unrealize(USBDevice *dev, Error *= *errp) USBAudioState *s =3D USB_AUDIO(dev); =20 if (s->debug) { - fprintf(stderr, "usb-audio: destroy\n"); + error_report("usb-audio: destroy"); } =20 usb_audio_set_output_altset(s, ALTSET_OFF); diff --git a/hw/usb/dev-bluetooth.c b/hw/usb/dev-bluetooth.c index 0bbceaea0b..dfef258dca 100644 --- a/hw/usb/dev-bluetooth.c +++ b/hw/usb/dev-bluetooth.c @@ -274,13 +274,13 @@ static void usb_bt_fifo_enqueue(struct usb_hci_in_fif= o_s *fifo, if (off <=3D DFIFO_LEN_MASK) { if (off + len > DFIFO_LEN_MASK + 1 && (fifo->dsize =3D off + len) > (DFIFO_LEN_MASK + 1)= * 2) { - fprintf(stderr, "%s: can't alloc %i bytes\n", __func__, len); + error_report("%s: can't alloc %i bytes", __func__, len); exit(-1); } buf =3D fifo->data + off; } else { if (fifo->dlen > fifo->dsize) { - fprintf(stderr, "%s: can't alloc %i bytes\n", __func__, len); + error_report("%s: can't alloc %i bytes", __func__, len); exit(-1); } buf =3D fifo->data + off - fifo->dsize; diff --git a/hw/usb/dev-mtp.c b/hw/usb/dev-mtp.c index 94c2e94f10..7e1782b8fc 100644 --- a/hw/usb/dev-mtp.c +++ b/hw/usb/dev-mtp.c @@ -10,6 +10,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "qapi/error.h" #include #include @@ -546,7 +547,7 @@ static void inotify_watchfn(void *arg) break; =20 default: - fprintf(stderr, "usb-mtp: failed to parse inotify event\n"= ); + error_report("usb-mtp: failed to parse inotify event"); continue; } =20 @@ -617,7 +618,7 @@ static void usb_mtp_object_readdir(MTPState *s, MTPObje= ct *o) #ifdef CONFIG_INOTIFY1 int watchfd =3D usb_mtp_add_watch(s->inotifyfd, o->path); if (watchfd =3D=3D -1) { - fprintf(stderr, "usb-mtp: failed to add watch for %s\n", o->path); + error_report("usb-mtp: failed to add watch for %s", o->path); } else { trace_usb_mtp_inotify_event(s->dev.addr, o->path, 0, "Watch Added"); @@ -1144,7 +1145,7 @@ static void usb_mtp_command(MTPState *s, MTPControl *= c) usb_mtp_object_alloc(s, s->next_handle++, NULL, s->root); #ifdef CONFIG_INOTIFY1 if (usb_mtp_inotify_init(s)) { - fprintf(stderr, "usb-mtp: file monitoring init failed\n"); + error_report("usb-mtp: file monitoring init failed"); } #endif break; @@ -1348,7 +1349,7 @@ static void usb_mtp_handle_control(USBDevice *dev, US= BPacket *p, static void usb_mtp_cancel_packet(USBDevice *dev, USBPacket *p) { /* we don't use async packets, so this should never be called */ - fprintf(stderr, "%s\n", __func__); + error_report("%s", __func__); } =20 static void usb_mtp_handle_data(USBDevice *dev, USBPacket *p) diff --git a/hw/usb/dev-network.c b/hw/usb/dev-network.c index 85fc81bf43..9dd4af5e34 100644 --- a/hw/usb/dev-network.c +++ b/hw/usb/dev-network.c @@ -815,7 +815,7 @@ static int ndis_query(USBNetState *s, uint32_t oid, return sizeof(le32); =20 default: - fprintf(stderr, "usbnet: unknown OID 0x%08x\n", oid); + error_report("usbnet: unknown OID 0x%08x", oid); return 0; } return -1; @@ -1084,9 +1084,9 @@ static void usb_net_handle_control(USBDevice *dev, US= BPacket *p, for (i =3D 0; i < length; i++) { if (!(i & 15)) fprintf(stderr, "\n%04x:", i); - fprintf(stderr, " %02x", data[i]); + error_report(" %02x", data[i]); } - fprintf(stderr, "\n\n"); + fprintf(stderr, "\n"); } #endif ret =3D rndis_parse(s, data, length); @@ -1111,17 +1111,17 @@ static void usb_net_handle_control(USBDevice *dev, = USBPacket *p, for (i =3D 0; i < p->actual_length; i++) { if (!(i & 15)) fprintf(stderr, "\n%04x:", i); - fprintf(stderr, " %02x", data[i]); + error_report(" %02x", data[i]); } - fprintf(stderr, "\n\n"); + fprintf(stderr, "\n"); } #endif break; =20 default: fail: - fprintf(stderr, "usbnet: failed control transaction: " - "request 0x%x value 0x%x index 0x%x length 0x%x\n"= , + error_report("usbnet: failed control transaction: " + "request 0x%x value 0x%x index 0x%x length 0x%x", request, value, index, length); p->status =3D USB_RET_STALL; break; @@ -1190,7 +1190,7 @@ static void usb_net_handle_dataout(USBNetState *s, US= BPacket *p) uint32_t len; =20 #ifdef TRAFFIC_DEBUG - fprintf(stderr, "usbnet: data out len %zu\n", p->iov.size); + error_report("usbnet: data out len %zu", p->iov.size); iov_hexdump(p->iov.iov, p->iov.niov, stderr, "usbnet", p->iov.size); #endif =20 @@ -1260,8 +1260,8 @@ static void usb_net_handle_data(USBDevice *dev, USBPa= cket *p) } =20 if (p->status =3D=3D USB_RET_STALL) { - fprintf(stderr, "usbnet: failed data transaction: " - "pid 0x%x ep 0x%x len 0x%zx\n", + error_report("usbnet: failed data transaction: " + "pid 0x%x ep 0x%x len 0x%zx", p->pid, p->ep->nr, p->iov.size); } } diff --git a/hw/usb/hcd-ehci.c b/hw/usb/hcd-ehci.c index 46fd30b075..d6c8a56aec 100644 --- a/hw/usb/hcd-ehci.c +++ b/hw/usb/hcd-ehci.c @@ -419,7 +419,7 @@ static int ehci_get_pid(EHCIqtd *qtd) case 2: return USB_TOKEN_SETUP; default: - fprintf(stderr, "bad token\n"); + error_report("bad token"); return 0; } } @@ -1033,7 +1033,7 @@ static void ehci_opreg_write(void *ptr, hwaddr addr, =20 /* not supporting dynamic frame list size at the moment */ if ((val & USBCMD_FLS) && !(s->usbcmd & USBCMD_FLS)) { - fprintf(stderr, "attempt to set frame list size -- value %d\n"= , + error_report("attempt to set frame list size -- value %d", (int)val & USBCMD_FLS); val &=3D ~USBCMD_FLS; } @@ -1190,7 +1190,7 @@ static int ehci_init_transfer(EHCIPacket *p) =20 while (bytes > 0) { if (cpage > 4) { - fprintf(stderr, "cpage out of range (%d)\n", cpage); + error_report("cpage out of range (%d)", cpage); qemu_sglist_destroy(&p->sgl); return -1; } @@ -1296,7 +1296,7 @@ static void ehci_execute_complete(EHCIQueue *q) break; default: /* should not be triggerable */ - fprintf(stderr, "USB invalid response %d\n", p->packet.status); + error_report("USB invalid response %d", p->packet.status); g_assert_not_reached(); break; } @@ -1345,7 +1345,7 @@ static int ehci_execute(EHCIPacket *p, const char *ac= tion) p->async =3D=3D EHCI_ASYNC_INITIALIZED); =20 if (!(p->qtd.token & QTD_TOKEN_ACTIVE)) { - fprintf(stderr, "Attempting to execute inactive qtd\n"); + error_report("Attempting to execute inactive qtd"); return -1; } =20 @@ -1383,7 +1383,7 @@ static int ehci_execute(EHCIPacket *p, const char *ac= tion) p->packet.actual_length); =20 if (p->packet.actual_length > BUFF_SIZE) { - fprintf(stderr, "ret from usb_handle_packet > BUFF_SIZE\n"); + error_report("ret from usb_handle_packet > BUFF_SIZE"); return -1; } =20 @@ -1461,7 +1461,7 @@ static int ehci_process_itd(EHCIState *ehci, case USB_RET_SUCCESS: break; default: - fprintf(stderr, "Unexpected iso usb result: %d\n", + error_report("Unexpected iso usb result: %d", ehci->ipacket.status); /* Fall through */ case USB_RET_IOERROR: @@ -1564,7 +1564,7 @@ static int ehci_state_fetchentry(EHCIState *ehci, int= async) =20 /* section 4.8, only QH in async schedule */ if (async && (NLPTR_TYPE_GET(entry) !=3D NLPTR_TYPE_QH)) { - fprintf(stderr, "non queue head request in async schedule\n"); + error_report("non queue head request in async schedule"); return -1; } =20 @@ -1586,8 +1586,8 @@ static int ehci_state_fetchentry(EHCIState *ehci, int= async) =20 default: /* TODO: handle FSTN type */ - fprintf(stderr, "FETCHENTRY: entry at %X is of type %d " - "which is not supported yet\n", entry, NLPTR_TYPE_GET(entr= y)); + error_report("FETCHENTRY: entry at %X is of type %d " + "which is not supported yet", entry, NLPTR_TYPE_GET(entry)= ); return -1; } =20 @@ -2086,7 +2086,7 @@ static void ehci_advance_state(EHCIState *ehci, int a= sync) break; =20 default: - fprintf(stderr, "Bad state!\n"); + error_report("Bad state!"); again =3D -1; g_assert_not_reached(); break; @@ -2094,7 +2094,7 @@ static void ehci_advance_state(EHCIState *ehci, int a= sync) =20 if (again < 0 || itd_count > 16) { /* TODO: notify guest (raise HSE irq?) */ - fprintf(stderr, "processing error - resetting ehci HC\n"); + error_report("processing error - resetting ehci HC"); ehci_reset(ehci); again =3D 0; } @@ -2151,8 +2151,8 @@ static void ehci_advance_async_state(EHCIState *ehci) =20 default: /* this should only be due to a developer mistake */ - fprintf(stderr, "ehci: Bad asynchronous state %d. " - "Resetting to active\n", ehci->astate); + error_report("ehci: Bad asynchronous state %d. " + "Resetting to active", ehci->astate); g_assert_not_reached(); } } @@ -2201,8 +2201,8 @@ static void ehci_advance_periodic_state(EHCIState *eh= ci) =20 default: /* this should only be due to a developer mistake */ - fprintf(stderr, "ehci: Bad periodic state %d. " - "Resetting to active\n", ehci->pstate); + error_report("ehci: Bad periodic state %d. " + "Resetting to active", ehci->pstate); g_assert_not_reached(); } } diff --git a/hw/usb/hcd-musb.c b/hw/usb/hcd-musb.c index d70a91a58c..4729926124 100644 --- a/hw/usb/hcd-musb.c +++ b/hw/usb/hcd-musb.c @@ -253,8 +253,8 @@ /* #define MUSB_DEBUG */ =20 #ifdef MUSB_DEBUG -#define TRACE(fmt, ...) fprintf(stderr, "%s@%d: " fmt "\n", __func__, \ - __LINE__, ##__VA_ARGS__) +#define TRACE(fmt, ...) error_report("%s@%d: " fmt "", __func__, \ + __LINE__, ##__VA_ARGS__) #else #define TRACE(...) #endif diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c index d75c085d94..6cc1be09a2 100644 --- a/hw/usb/hcd-xhci.c +++ b/hw/usb/hcd-xhci.c @@ -19,6 +19,7 @@ * License along with this library; if not, see . */ #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "hw/hw.h" #include "qemu/timer.h" #include "qemu/queue.h" @@ -39,7 +40,7 @@ #else #define DPRINTF(...) do {} while (0) #endif -#define FIXME(_msg) do { fprintf(stderr, "FIXME %s:%d %s\n", \ +#define FIXME(_msg) do { error_report("FIXME %s:%d %s", \ __func__, __LINE__, _msg); abort(); } whi= le (0) =20 #define TRB_LINK_LIMIT 32 diff --git a/hw/usb/host-legacy.c b/hw/usb/host-legacy.c index 3b57e21b52..f0c81e5309 100644 --- a/hw/usb/host-legacy.c +++ b/hw/usb/host-legacy.c @@ -86,7 +86,7 @@ static int parse_filter(const char *spec, struct USBAutoF= ilter *f) } =20 if (i < DEV) { - fprintf(stderr, "husb: invalid auto filter spec %s\n", spec); + error_report("husb: invalid auto filter spec %s", spec); return -1; } =20 diff --git a/hw/watchdog/watchdog.c b/hw/watchdog/watchdog.c index 0c5c9cde1c..76ae5d2fe5 100644 --- a/hw/watchdog/watchdog.c +++ b/hw/watchdog/watchdog.c @@ -20,6 +20,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/error-report.h" #include "qemu/option.h" #include "qemu/config-file.h" #include "qemu/queue.h" @@ -51,7 +52,7 @@ int select_watchdog(const char *p) /* -watchdog ? lists available devices and exits cleanly. */ if (is_help_option(p)) { QLIST_FOREACH(model, &watchdog_list, entry) { - fprintf(stderr, "\t%s\t%s\n", + error_report("\t%s\t%s", model->wdt_name, model->wdt_description); } return 2; @@ -67,9 +68,9 @@ int select_watchdog(const char *p) } } =20 - fprintf(stderr, "Unknown -watchdog device. Supported devices are:\n"); + error_report("Unknown -watchdog device. Supported devices are:"); QLIST_FOREACH(model, &watchdog_list, entry) { - fprintf(stderr, "\t%s\t%s\n", + error_report("\t%s\t%s", model->wdt_name, model->wdt_description); } return 1; @@ -133,7 +134,7 @@ void watchdog_perform_action(void) =20 case WDT_DEBUG: qapi_event_send_watchdog(WATCHDOG_EXPIRATION_ACTION_DEBUG, &error_= abort); - fprintf(stderr, "watchdog: timer fired\n"); + error_report("watchdog: timer fired"); break; =20 case WDT_NONE: diff --git a/hw/watchdog/wdt_i6300esb.c b/hw/watchdog/wdt_i6300esb.c index 49b3cd188a..f596f70a3b 100644 --- a/hw/watchdog/wdt_i6300esb.c +++ b/hw/watchdog/wdt_i6300esb.c @@ -20,7 +20,7 @@ */ =20 #include "qemu/osdep.h" - +#include "qemu/error-report.h" #include "qemu-common.h" #include "qemu/timer.h" #include "sysemu/watchdog.h" @@ -186,10 +186,12 @@ static void i6300esb_timer_expired(void *vp) /* What to do at the end of stage 1? */ switch (d->int_type) { case INT_TYPE_IRQ: - fprintf(stderr, "i6300esb_timer_expired: I would send APIC 1 I= NT 10 here if I knew how (XXX)\n"); + error_report("i6300esb_timer_expired: I would send APIC 1 INT = 10" + "here if I knew how (XXX)"); break; case INT_TYPE_SMI: - fprintf(stderr, "i6300esb_timer_expired: I would send SMI here= if I knew how (XXX)\n"); + error_report("i6300esb_timer_expired: I would send SMI here if= I" + "knew how (XXX)"); break; } =20 diff --git a/hw/xen/xen-common.c b/hw/xen/xen-common.c index 632a938dcc..a7c821cfcf 100644 --- a/hw/xen/xen-common.c +++ b/hw/xen/xen-common.c @@ -47,19 +47,19 @@ static int store_dev_info(int domid, Chardev *cs, const= char *string) /* We now have everything we need to set the xenstore entry. */ xs =3D xs_open(0); if (xs =3D=3D NULL) { - fprintf(stderr, "Could not contact XenStore\n"); + error_report("Could not contact XenStore"); goto out; } =20 path =3D xs_get_domain_path(xs, domid); if (path =3D=3D NULL) { - fprintf(stderr, "xs_get_domain_path() error\n"); + error_report("xs_get_domain_path() error"); goto out; } newpath =3D realloc(path, (strlen(path) + strlen(string) + strlen("/tty") + 1)); if (newpath =3D=3D NULL) { - fprintf(stderr, "realloc error\n"); + error_report("realloc error"); goto out; } path =3D newpath; @@ -96,13 +96,13 @@ static void xenstore_record_dm_state(struct xs_handle *= xs, const char *state) char path[50]; =20 if (xs =3D=3D NULL) { - fprintf(stderr, "xenstore connection not initialized\n"); + error_report("xenstore connection not initialized"); exit(1); } =20 snprintf(path, sizeof (path), "device-model/%u/state", xen_domid); if (!xs_write(xs, XBT_NULL, path, state, strlen(state))) { - fprintf(stderr, "error recording dm state\n"); + error_report("error recording dm state"); exit(1); } } diff --git a/hw/xen/xen_pt.c b/hw/xen/xen_pt.c index 375efa68f6..e86d380d02 100644 --- a/hw/xen/xen_pt.c +++ b/hw/xen/xen_pt.c @@ -73,7 +73,7 @@ void xen_pt_log(const PCIDevice *d, const char *f, ...) =20 va_start(ap, f); if (d) { - fprintf(stderr, "[%02x:%02x.%d] ", pci_bus_num(d->bus), + error_report("[%02x:%02x.%d] ", pci_bus_num(d->bus), PCI_SLOT(d->devfn), PCI_FUNC(d->devfn)); } vfprintf(stderr, f, ap); @@ -87,7 +87,7 @@ static int xen_pt_pci_config_access_check(PCIDevice *d, u= int32_t addr, int len) /* check offset range */ if (addr > 0xFF) { XEN_PT_ERR(d, "Failed to access register with offset exceeding 0xF= F. " - "(addr: 0x%02x, len: %d)\n", addr, len); + "(addr: 0x%02x, len: %d)", addr, len); return -1; } =20 diff --git a/hw/xenpv/xen_domainbuild.c b/hw/xenpv/xen_domainbuild.c index 027f76fad1..f5514ffec2 100644 --- a/hw/xenpv/xen_domainbuild.c +++ b/hw/xenpv/xen_domainbuild.c @@ -25,22 +25,22 @@ static int xenstore_domain_mkdir(char *path) int i; =20 if (!xs_mkdir(xenstore, 0, path)) { - fprintf(stderr, "%s: xs_mkdir %s: failed\n", __func__, path); - return -1; + error_report("%s: xs_mkdir %s: failed", __func__, path); + return -1; } if (!xs_set_permissions(xenstore, 0, path, perms_ro, 2)) { - fprintf(stderr, "%s: xs_set_permissions failed\n", __func__); - return -1; + error_report("%s: xs_set_permissions failed", __func__); + return -1; } =20 for (i =3D 0; writable[i]; i++) { snprintf(subpath, sizeof(subpath), "%s/%s", path, writable[i]); if (!xs_mkdir(xenstore, 0, subpath)) { - fprintf(stderr, "%s: xs_mkdir %s: failed\n", __func__, subpath= ); + error_report("%s: xs_mkdir %s: failed", __func__, subpath); return -1; } if (!xs_set_permissions(xenstore, 0, subpath, perms_rw, 2)) { - fprintf(stderr, "%s: xs_set_permissions failed\n", __func__); + error_report("%s: xs_set_permissions failed", __func__); return -1; } } @@ -235,7 +235,7 @@ int xen_domain_build_pv(const char *kernel, const char = *ramdisk, memcpy(uuid, &qemu_uuid, sizeof(uuid)); rc =3D xen_domain_create(xen_xc, ssidref, uuid, flags, &xen_domid); if (rc < 0) { - fprintf(stderr, "xen: xc_domain_create() failed\n"); + error_report("xen: xc_domain_create() failed"); goto err; } qemu_log("xen: created domain %d\n", xen_domid); @@ -248,21 +248,21 @@ int xen_domain_build_pv(const char *kernel, const cha= r *ramdisk, =20 rc =3D xc_domain_max_vcpus(xen_xc, xen_domid, smp_cpus); if (rc < 0) { - fprintf(stderr, "xen: xc_domain_max_vcpus() failed\n"); + error_report("xen: xc_domain_max_vcpus() failed"); goto err; } =20 #if 0 rc =3D xc_domain_setcpuweight(xen_xc, xen_domid, 256); if (rc < 0) { - fprintf(stderr, "xen: xc_domain_setcpuweight() failed\n"); + error_report("xen: xc_domain_setcpuweight() failed"); goto err; } #endif =20 rc =3D xc_domain_setmaxmem(xen_xc, xen_domid, ram_size >> 10); if (rc < 0) { - fprintf(stderr, "xen: xc_domain_setmaxmem() failed\n"); + error_report("xen: xc_domain_setmaxmem() failed"); goto err; } =20 @@ -275,7 +275,7 @@ int xen_domain_build_pv(const char *kernel, const char = *ramdisk, xenstore_port, &xenstore_mfn, console_port, &console_mfn); if (rc < 0) { - fprintf(stderr, "xen: xc_linux_build() failed\n"); + error_report("xen: xc_linux_build() failed"); goto err; } =20 @@ -285,7 +285,7 @@ int xen_domain_build_pv(const char *kernel, const char = *ramdisk, qemu_log("xen: unpausing domain %d\n", xen_domid); rc =3D xc_domain_unpause(xen_xc, xen_domid); if (rc < 0) { - fprintf(stderr, "xen: xc_domain_unpause() failed\n"); + error_report("xen: xc_domain_unpause() failed"); goto err; } =20 diff --git a/hw/xenpv/xen_machine_pv.c b/hw/xenpv/xen_machine_pv.c index 69a52a9f93..ac419e164b 100644 --- a/hw/xenpv/xen_machine_pv.c +++ b/hw/xenpv/xen_machine_pv.c @@ -36,7 +36,7 @@ static void xen_init_pv(MachineState *machine) =20 /* Initialize backend core & drivers */ if (xen_be_init() !=3D 0) { - fprintf(stderr, "%s: xen backend core setup failed\n", __func__); + error_report("%s: xen backend core setup failed", __func__); exit(1); } =20 @@ -51,18 +51,18 @@ static void xen_init_pv(MachineState *machine) const char *initrd_filename =3D machine->initrd_filename; if (xen_domain_build_pv(kernel_filename, initrd_filename, kernel_cmdline) < 0) { - fprintf(stderr, "xen pv domain creation failed\n"); + error_report("xen pv domain creation failed"); exit(1); } break; } #endif case XEN_EMULATE: - fprintf(stderr, "xen emulation not implemented (yet)\n"); + error_report("xen emulation not implemented (yet)"); exit(1); break; default: - fprintf(stderr, "unhandled xen_mode %d\n", xen_mode); + error_report("unhandled xen_mode %d", xen_mode); exit(1); break; } --=20 2.11.0 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alistair Francis Subject: [PATCH v1 3/8] hw: Replace fprintf(stderr, "*\n" with error_report() Date: Mon, 25 Sep 2017 17:08:52 -0700 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dwdUp-00059E-Og for xen-devel@lists.xenproject.org; Tue, 26 Sep 2017 00:13:08 +0000 In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: qemu-devel@nongnu.org Cc: Chris Wulff , "Michael S. Tsirkin" , Anthony Green , Mark Cave-Ayland , armbru@redhat.com, Gerd Hoffmann , Marek Vasut , Stefano Stabellini , Jia Liu , qemu-block@nongnu.org, Magnus Damm , Alexander Graf , Christian Borntraeger , =?UTF-8?q?Herv=C3=A9=20Poussineau?= , Anthony Perard , xen-devel@lists.xenproject.org, Andrzej Zaborowski , Jason Wang , Artyom Tarasenko , Eduardo Habkost , Fabien Chouteau , alistair.francis@xilinx.com, Marcel Apfelbaum , qemu-arm@nongnu.org, Jan List-Id: xen-devel@lists.xenproject.org UmVwbGFjZSBhIGxhcmdlIG51bWJlciBvZiB0aGUgZnByaW50ZihzdGRlcnIsICIqXG4iIGNhbGxz IHdpdGgKZXJyb3JfcmVwb3J0KCkuIFRoZSBmdW5jdGlvbnMgd2VyZSByZW5hbWVkIHdpdGggdGhl c2UgY29tbWFuZHMgYW5kIHRoZW4KY29tcGlsZXIgaXNzdWVzIHdoZXJlIG1hbnVhbGx5IGZpeGVk LgoKZmluZCAuLyogLXR5cGUgZiAtZXhlYyBzZWQgLWkgXAogICAgJ047TjtOO047TjtOO047TjtO O047TjtOOyB7c3xmcHJpbnRmKHN0ZGVyciwgIlwoLipcKVxcbiJcKC4qXCkpO3xlcnJvcl9yZXBv cnQoIlwxIlwyKTt8SWd9JyBcCiAgICB7fSArCmZpbmQgLi8qIC10eXBlIGYgLWV4ZWMgc2VkIC1p IFwKICAgICdOO047TjtOO047TjtOO047TjtOO047IHtzfGZwcmludGYoc3RkZXJyLCAiXCguKlwp XFxuIlwoLipcKSk7fGVycm9yX3JlcG9ydCgiXDEiXDIpO3xJZ30nIFwKICAgIHt9ICsKZmluZCAu LyogLXR5cGUgZiAtZXhlYyBzZWQgLWkgXAogICAgJ047TjtOO047TjtOO047TjtOOyB7c3xmcHJp bnRmKHN0ZGVyciwgIlwoLipcKVxcbiJcKC4qXCkpO3xlcnJvcl9yZXBvcnQoIlwxIlwyKTt8SWd9 JyBcCiAgICB7fSArCmZpbmQgLi8qIC10eXBlIGYgLWV4ZWMgc2VkIC1pIFwKICAgICdOO047TjtO O047TjtOO047IHtzfGZwcmludGYoc3RkZXJyLCAiXCguKlwpXFxuIlwoLipcKSk7fGVycm9yX3Jl cG9ydCgiXDEiXDIpO3xJZ30nIFwKICAgIHt9ICsKZmluZCAuLyogLXR5cGUgZiAtZXhlYyBzZWQg LWkgXAogICAgJ047TjtOO047TjtOO047IHtzfGZwcmludGYoc3RkZXJyLCAiXCguKlwpXFxuIlwo LipcKSk7fGVycm9yX3JlcG9ydCgiXDEiXDIpO3xJZ30nIFwKICAgIHt9ICsKZmluZCAuLyogLXR5 cGUgZiAtZXhlYyBzZWQgLWkgXAogICAgJ047TjtOO047TjtOOyB7c3xmcHJpbnRmKHN0ZGVyciwg IlwoLipcKVxcbiJcKC4qXCkpO3xlcnJvcl9yZXBvcnQoIlwxIlwyKTt8SWd9JyBcCiAgICB7fSAr CmZpbmQgLi8qIC10eXBlIGYgLWV4ZWMgc2VkIC1pIFwKICAgICdOO047TjtOO047IHtzfGZwcmlu dGYoc3RkZXJyLCAiXCguKlwpXFxuIlwoLipcKSk7fGVycm9yX3JlcG9ydCgiXDEiXDIpO3xJZ30n IFwKICAgIHt9ICsKZmluZCAuLyogLXR5cGUgZiAtZXhlYyBzZWQgLWkgXAogICAgJ047TjtOO047 IHtzfGZwcmludGYoc3RkZXJyLCAiXCguKlwpXFxuIlwoLipcKSk7fGVycm9yX3JlcG9ydCgiXDEi XDIpO3xJZ30nIFwKICAgIHt9ICsKZmluZCAuLyogLXR5cGUgZiAtZXhlYyBzZWQgLWkgXAogICAg J047TjtOOyB7c3xmcHJpbnRmKHN0ZGVyciwgIlwoLipcKVxcbiJcKC4qXCkpO3xlcnJvcl9yZXBv cnQoIlwxIlwyKTt8SWd9JyBcCiAgICB7fSArCmZpbmQgLi8qIC10eXBlIGYgLWV4ZWMgc2VkIC1p IFwKICAgICdOO047IHtzfGZwcmludGYoc3RkZXJyLCAiXCguKlwpXFxuIlwoLipcKSk7fGVycm9y X3JlcG9ydCgiXDEiXDIpO3xJZ30nIFwKICAgIHt9ICsKZmluZCAuLyogLXR5cGUgZiAtZXhlYyBz ZWQgLWkgXAogICAgJ047IHtzfGZwcmludGYoc3RkZXJyLCAiXCguKlwpXFxuIlwoLipcKSk7fGVy cm9yX3JlcG9ydCgiXDEiXDIpO3xJZ30nIFwKICAgIHt9ICsKClNvbWUgbGluZXMgd2hlcmUgdGhl biBtYW51YWxseSB0d2Vha2VkIHRvIHBhc3MgY2hlY2twYXRjaC4KClNpZ25lZC1vZmYtYnk6IEFs aXN0YWlyIEZyYW5jaXMgPGFsaXN0YWlyLmZyYW5jaXNAeGlsaW54LmNvbT4KQ2M6IEFuZHJ6ZWog WmFib3Jvd3NraSA8YmFscm9nZ0BnbWFpbC5jb20+CkNjOiBKYW4gS2lzemthIDxqYW4ua2lzemth QHdlYi5kZT4KQ2M6IFN0ZWZhbiBIYWpub2N6aSA8c3RlZmFuaGFAcmVkaGF0LmNvbT4KQ2M6IFBh b2xvIEJvbnppbmkgPHBib256aW5pQHJlZGhhdC5jb20+CkNjOiBUaG9tYXMgSHV0aCA8aHV0aEB0 dXhmYW1pbHkub3JnPgpDYzogR2VyZCBIb2ZmbWFubiA8a3JheGVsQHJlZGhhdC5jb20+CkNjOiAi TWljaGFlbCBTLiBUc2lya2luIiA8bXN0QHJlZGhhdC5jb20+CkNjOiBSaWNoYXJkIEhlbmRlcnNv biA8cnRoQHR3aWRkbGUubmV0PgpDYzogRWR1YXJkbyBIYWJrb3N0IDxlaGFia29zdEByZWRoYXQu Y29tPgpDYzogU3RlZmFubyBTdGFiZWxsaW5pIDxzc3RhYmVsbGluaUBrZXJuZWwub3JnPgpDYzog QW50aG9ueSBQZXJhcmQgPGFudGhvbnkucGVyYXJkQGNpdHJpeC5jb20+CkNjOiBKb2huIFNub3cg PGpzbm93QHJlZGhhdC5jb20+CkNjOiBDaHJpc3RpYW4gQm9ybnRyYWVnZXIgPGJvcm50cmFlZ2Vy QGRlLmlibS5jb20+CkNjOiBDb3JuZWxpYSBIdWNrIDxjb2h1Y2tAcmVkaGF0LmNvbT4KQ2M6IEFs ZXhhbmRlciBHcmFmIDxhZ3JhZkBzdXNlLmRlPgpDYzogTWljaGFlbCBXYWxsZSA8bWljaGFlbEB3 YWxsZS5jYz4KQ2M6IFBhdWwgQnVydG9uIDxwYXVsLmJ1cnRvbkBpbWd0ZWMuY29tPgpDYzogQXVy ZWxpZW4gSmFybm8gPGF1cmVsaWVuQGF1cmVsMzIubmV0PgpDYzogWW9uZ2JvayBLaW0gPHlvbmdi b2sua2ltQGltZ3RlYy5jb20+CkNjOiAiSGVydsOpIFBvdXNzaW5lYXUiIDxocG91c3NpbkByZWFj dG9zLm9yZz4KQ2M6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgpDYzogSmFz b24gV2FuZyA8amFzb3dhbmdAcmVkaGF0LmNvbT4KQ2M6IENocmlzIFd1bGZmIDxjcnd1bGZmQGdt YWlsLmNvbT4KQ2M6IE1hcmVrIFZhc3V0IDxtYXJleEBkZW54LmRlPgpDYzogSmlhIExpdSA8cHJv bGpjQGdtYWlsLmNvbT4KQ2M6IFN0YWZmb3JkIEhvcm5lIDxzaG9ybmVAZ21haWwuY29tPgpDYzog TWFyY2VsIEFwZmVsYmF1bSA8bWFyY2VsQHJlZGhhdC5jb20+CkNjOiBNYWdudXMgRGFtbSA8bWFn bnVzLmRhbW1AZ21haWwuY29tPgpDYzogRmFiaWVuIENob3V0ZWF1IDxjaG91dGVhdUBhZGFjb3Jl LmNvbT4KQ2M6IE1hcmsgQ2F2ZS1BeWxhbmQgPG1hcmsuY2F2ZS1heWxhbmRAaWxhbmRlLmNvLnVr PgpDYzogQXJ0eW9tIFRhcmFzZW5rbyA8YXRhcjRxZW11QGdtYWlsLmNvbT4KQ2M6IHFlbXUtYXJt QG5vbmdudS5vcmcKQ2M6IHFlbXUtYmxvY2tAbm9uZ251Lm9yZwpDYzogeGVuLWRldmVsQGxpc3Rz LnhlbnByb2plY3Qub3JnCkNjOiBxZW11LXBwY0Bub25nbnUub3JnCi0tLQoKIGh3L2FybS9hcm12 N20uYyAgICAgICAgICAgICAgICAgfCAgMiArLQogaHcvYXJtL2Jvb3QuYyAgICAgICAgICAgICAg ICAgICB8IDM0ICsrKysrKysrKy0tLS0tLS0tLS0KIGh3L2FybS9ndW1zdGl4LmMgICAgICAgICAg ICAgICAgfCAxMyArKysrLS0tLQogaHcvYXJtL21haW5zdG9uZS5jICAgICAgICAgICAgICB8ICA3 ICsrLS0KIGh3L2FybS9tdXNpY3BhbC5jICAgICAgICAgICAgICAgfCAgMiArLQogaHcvYXJtL29t YXAxLmMgICAgICAgICAgICAgICAgICB8ICA1ICstLQogaHcvYXJtL29tYXAyLmMgICAgICAgICAg ICAgICAgICB8IDIxICsrKysrKy0tLS0tLQogaHcvYXJtL29tYXBfc3gxLmMgICAgICAgICAgICAg ICB8ICA2ICsrLS0KIGh3L2FybS9wYWxtLmMgICAgICAgICAgICAgICAgICAgfCAxMCArKystLS0K IGh3L2FybS9weGEyeHguYyAgICAgICAgICAgICAgICAgfCAgNyArKy0tCiBody9hcm0vc3RlbGxh cmlzLmMgICAgICAgICAgICAgIHwgIDMgKy0KIGh3L2FybS90b3NhLmMgICAgICAgICAgICAgICAg ICAgfCAxNyArKysrKy0tLS0tCiBody9hcm0vdmVyc2F0aWxlcGIuYyAgICAgICAgICAgIHwgIDIg Ky0KIGh3L2FybS92ZXhwcmVzcy5jICAgICAgICAgICAgICAgfCAgOCArKy0tLQogaHcvYXJtL3oy LmMgICAgICAgICAgICAgICAgICAgICB8ICA2ICsrLS0KIGh3L2Jsb2NrL2RhdGFwbGFuZS92aXJ0 aW8tYmxrLmMgfCAgNiArKy0tCiBody9ibG9jay9vbmVuYW5kLmMgICAgICAgICAgICAgIHwgIDgg KystLS0KIGh3L2Jsb2NrL3RjNTgxMjguYyAgICAgICAgICAgICAgfCA0NCArKysrKysrKysrKyst LS0tLS0tLS0tLS0tCiBody9idC9jb3JlLmMgICAgICAgICAgICAgICAgICAgIHwgMTUgKysrKyst LS0tCiBody9idC9oY2ktY3NyLmMgICAgICAgICAgICAgICAgIHwgMTcgKysrKystLS0tLQogaHcv YnQvaGNpLmMgICAgICAgICAgICAgICAgICAgICB8IDMwICsrKysrKysrLS0tLS0tLS0tCiBody9i dC9oaWQuYyAgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KIGh3L2J0L2wyY2FwLmMgICAgICAg ICAgICAgICAgICAgfCA0NyArKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0KIGh3L2J0L3NkcC5j ICAgICAgICAgICAgICAgICAgICAgfCAgNyArKy0tCiBody9jaGFyL2V4eW5vczQyMTBfdWFydC5j ICAgICAgIHwgIDYgKystLQogaHcvY2hhci9tY2ZfdWFydC5jICAgICAgICAgICAgICB8ICA1ICst LQogaHcvY2hhci9zaF9zZXJpYWwuYyAgICAgICAgICAgICB8ICA5ICsrKy0tLQogaHcvY29yZS9s b2FkZXIuYyAgICAgICAgICAgICAgICB8IDMxICsrKysrKysrKy0tLS0tLS0tLQogaHcvY29yZS9w dGltZXIuYyAgICAgICAgICAgICAgICB8ICA3ICsrLS0KIGh3L2NyaXMvYXhpc19kZXY4OC5jICAg ICAgICAgICAgfCAgMyArLQogaHcvY3Jpcy9ib290LmMgICAgICAgICAgICAgICAgICB8ICA1ICst LQogaHcvZGlzcGxheS9ibGl6emFyZC5jICAgICAgICAgICB8IDIwICsrKysrKy0tLS0tLQogaHcv ZGlzcGxheS9vbWFwX2Rzcy5jICAgICAgICAgICB8IDE0ICsrKystLS0tCiBody9kaXNwbGF5L3Bs MTEwLmMgICAgICAgICAgICAgIHwgIDIgKy0KIGh3L2Rpc3BsYXkvcHhhMnh4X2xjZC5jICAgICAg ICAgfCAgMiArLQogaHcvZGlzcGxheS9xeGwtcmVuZGVyLmMgICAgICAgICB8ICA3ICsrLS0KIGh3 L2Rpc3BsYXkvcXhsLmMgICAgICAgICAgICAgICAgfCAxMCArKystLS0KIGh3L2Rpc3BsYXkvdGM2 MzkzeGIuYyAgICAgICAgICAgfCAzNiArKysrKysrKysrKystLS0tLS0tLS0KIGh3L2Rpc3BsYXkv dmlydGlvLWdwdS0zZC5jICAgICAgfCAgNCArLS0KIGh3L2Rpc3BsYXkvdm13YXJlX3ZnYS5jICAg ICAgICAgfCAyMiArKysrKystLS0tLS0tCiBody9kbWEvb21hcF9kbWEuYyAgICAgICAgICAgICAg IHwgMjYgKysrKysrKystLS0tLS0tCiBody9kbWEvc29jX2RtYS5jICAgICAgICAgICAgICAgIHwg MzcgKysrKysrKysrKy0tLS0tLS0tLS0tCiBody9ncGlvL29tYXBfZ3Bpby5jICAgICAgICAgICAg IHwgIDIgKy0KIGh3L2kyYy9vbWFwX2kyYy5jICAgICAgICAgICAgICAgfCAxMCArKystLS0KIGh3 L2kzODYva3ZtL2FwaWMuYyAgICAgICAgICAgICAgfCAgOSArKystLS0KIGh3L2kzODYva3ZtL2Ns b2NrLmMgICAgICAgICAgICAgfCAgNyArKy0tCiBody9pMzg2L2t2bS9pODI1NC5jICAgICAgICAg ICAgIHwgIDcgKystLQogaHcvaTM4Ni9rdm0vaTgyNTkuYyAgICAgICAgICAgICB8ICA1ICstLQog aHcvaTM4Ni9rdm0vaW9hcGljLmMgICAgICAgICAgICB8ICA1ICstLQogaHcvaTM4Ni9tdWx0aWJv b3QuYyAgICAgICAgICAgICB8IDIxICsrKysrKy0tLS0tLQogaHcvaTM4Ni9wYy5jICAgICAgICAg ICAgICAgICAgICB8IDE4ICsrKysrLS0tLS0tCiBody9pMzg2L3BjX3BpaXguYyAgICAgICAgICAg ICAgIHwgIDIgKy0KIGh3L2kzODYvcGNfc3lzZncuYyAgICAgICAgICAgICAgfCAgNSArLS0KIGh3 L2kzODYveGVuL3hlbi1odm0uYyAgICAgICAgICAgfCAzMiArKysrKysrKystLS0tLS0tLS0KIGh3 L2kzODYveGVuL3hlbi1tYXBjYWNoZS5jICAgICAgfCAxMiArKystLS0tCiBody9pMzg2L3hlbi94 ZW5fYXBpYy5jICAgICAgICAgIHwgIDIgKy0KIGh3L2lkZS9haGNpLmMgICAgICAgICAgICAgICAg ICAgfCAgNiArKy0tCiBody9pZGUvY29yZS5jICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KIGh3 L2lucHV0L2xtODMyeC5jICAgICAgICAgICAgICAgfCAgNiArKy0tCiBody9pbnB1dC9wY2tiZC5j ICAgICAgICAgICAgICAgIHwgIDMgKy0KIGh3L2lucHV0L3B4YTJ4eF9rZXlwYWQuYyAgICAgICAg fCAgMiArLQogaHcvaW5wdXQvdHNjMjAwNS5jICAgICAgICAgICAgICB8IDE3ICsrKysrLS0tLS0K IGh3L2lucHV0L3RzYzIxMHguYyAgICAgICAgICAgICAgfCA3MiArKysrKysrKysrKysrKysrKysr Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLQogaHcvaW5wdXQvdmlydGlvLWlucHV0LWhpZC5jICAgICB8 IDE0ICsrKystLS0tCiBody9pbnB1dC92aXJ0aW8taW5wdXQuYyAgICAgICAgIHwgIDUgKy0tCiBo dy9pbnRjL2FybV9naWNfa3ZtLmMgICAgICAgICAgIHwgMTIgKysrLS0tLQogaHcvaW50Yy9vbWFw X2ludGMuYyAgICAgICAgICAgICB8ICA0ICstLQogaHcvaW50Yy9vcGVucGljLmMgICAgICAgICAg ICAgICB8ICA3ICsrLS0KIGh3L2ludGMvb3BlbnBpY19rdm0uYyAgICAgICAgICAgfCAgOCArKy0t LQogaHcvaW50Yy9zMzkwX2ZsaWNfa3ZtLmMgICAgICAgICB8ICA0ICstLQogaHcvaXBtaS9pcG1p LmMgICAgICAgICAgICAgICAgICB8ICAxICsKIGh3L2lwbWkvaXBtaV9ibWNfZXh0ZXJuLmMgICAg ICAgfCAgNSArLS0KIGh3L2lzYS9pc2EtYnVzLmMgICAgICAgICAgICAgICAgfCAgNyArKy0tCiBo dy9sbTMyL2xtMzJfYm9hcmRzLmMgICAgICAgICAgIHwgIDUgKy0tCiBody9sbTMyL21pbGt5bWlz dC5jICAgICAgICAgICAgIHwgIDUgKy0tCiBody9tNjhrL2FuNTIwNi5jICAgICAgICAgICAgICAg IHwgIDQgKy0tCiBody9tNjhrL21jZjUyMDYuYyAgICAgICAgICAgICAgIHwgIDMgKy0KIGh3L202 OGsvbWNmNTIwOC5jICAgICAgICAgICAgICAgfCAgNyArKy0tCiBody9taWNyb2JsYXplL2Jvb3Qu YyAgICAgICAgICAgIHwgIDIgKy0KIGh3L21pcHMvYm9zdG9uLmMgICAgICAgICAgICAgICAgfCAg NCArLS0KIGh3L21pcHMvbWlwc19mdWxvbmcyZS5jICAgICAgICAgfCAgNCArLS0KIGh3L21pcHMv bWlwc19qYXp6LmMgICAgICAgICAgICAgfCAgNCArLS0KIGh3L21pcHMvbWlwc19tYWx0YS5jICAg ICAgICAgICAgfCAgNCArLS0KIGh3L21pcHMvbWlwc19taXBzc2ltLmMgICAgICAgICAgfCAgNCAr LS0KIGh3L21pcHMvbWlwc19yNGsuYyAgICAgICAgICAgICAgfCAgNiArKy0tCiBody9taXNjL2E5 c2N1LmMgICAgICAgICAgICAgICAgIHwgIDMgKy0KIGh3L21pc2Mvb21hcF9ncG1jLmMgICAgICAg ICAgICAgfCAxMSArKysrLS0tCiBody9taXNjL29tYXBfbDQuYyAgICAgICAgICAgICAgIHwgIDUg Ky0tCiBody9taXNjL29tYXBfc2RyYy5jICAgICAgICAgICAgIHwgIDMgKy0KIGh3L21pc2Mvdm1w b3J0LmMgICAgICAgICAgICAgICAgfCAgMiArLQogaHcvbW94aWUvbW94aWVzaW0uYyAgICAgICAg ICAgICB8ICA3ICsrLS0KIGh3L25ldC9mc2xfZXRzZWMvZXRzZWMuYyAgICAgICAgfCAgMiArLQog aHcvbmV0L3BjbmV0LmMgICAgICAgICAgICAgICAgICB8ICAyICstCiBody9uZXQvc21jOTFjMTEx LmMgICAgICAgICAgICAgIHwgIDUgKy0tCiBody9uZXQvdmhvc3RfbmV0LmMgICAgICAgICAgICAg IHwgMTYgKysrKy0tLS0tCiBody9uaW9zMi9ib290LmMgICAgICAgICAgICAgICAgIHwgIDIgKy0K IGh3L252cmFtL2VlcHJvbTkzeHguYyAgICAgICAgICAgfCAgNSArLS0KIGh3L252cmFtL2Z3X2Nm Zy5jICAgICAgICAgICAgICAgfCAgNCArLS0KIGh3L29wZW5yaXNjL29wZW5yaXNjX3NpbS5jICAg ICAgfCAgMyArLQogaHcvcGNpLWhvc3QvYm9uaXRvLmMgICAgICAgICAgICB8ICA2ICsrLS0KIGh3 L3BjaS9wY2kuYyAgICAgICAgICAgICAgICAgICAgfCAxMCArKystLS0KIGh3L3BwYy9lNTAwLmMg ICAgICAgICAgICAgICAgICAgfCAyMCArKysrKystLS0tLS0KIGh3L3BwYy9tYWNfbmV3d29ybGQu YyAgICAgICAgICAgfCAgMiArLQogaHcvcHBjL21hY19vbGR3b3JsZC5jICAgICAgICAgICB8ICAy ICstCiBody9wcGMvbXBjODU0NF9ndXRzLmMgICAgICAgICAgIHwgIDUgKy0tCiBody9wcGMvcHBj NDA1X2JvYXJkcy5jICAgICAgICAgIHwgIDggKystLS0KIGh3L3BwYy9wcGM0NDBfYmFtYm9vLmMg ICAgICAgICAgfCAxOSArKysrKy0tLS0tLQogaHcvcHBjL3BwYzR4eF9wY2kuYyAgICAgICAgICAg ICB8ICAzICstCiBody9wcGMvcHJlcC5jICAgICAgICAgICAgICAgICAgIHwgIDQgKy0tCiBody9w cGMvdmlydGV4X21sNTA3LmMgICAgICAgICAgIHwgIDQgKy0tCiBody9zMzkweC92aXJ0aW8tY2N3 LmMgICAgICAgICAgIHwgIDIgKy0KIGh3L3Njc2kvbHNpNTNjODk1YS5jICAgICAgICAgICAgfCAg NCArLS0KIGh3L3Njc2kvc3BhcHJfdnNjc2kuYyAgICAgICAgICAgfCA0OSArKysrKysrKysrKysr Ky0tLS0tLS0tLS0tLS0tCiBody9zY3NpL3ZpcnRpby1zY3NpLWRhdGFwbGFuZS5jIHwgIDYgKyst LQogaHcvc2QvcGwxODEuYyAgICAgICAgICAgICAgICAgICB8ICA1ICstLQogaHcvc2Qvc2QuYyAg ICAgICAgICAgICAgICAgICAgICB8IDE0ICsrKystLS0tCiBody9zaDQvcjJkLmMgICAgICAgICAg ICAgICAgICAgIHwgIDkgKysrLS0tCiBody9zaDQvc2g3NzUwLmMgICAgICAgICAgICAgICAgIHwg NjQgKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tCiBody9zcGFyYy9sZW9uMy5j ICAgICAgICAgICAgICAgIHwgIDkgKysrLS0tCiBody9zcGFyYy9zdW40bS5jICAgICAgICAgICAg ICAgIHwgIDggKystLS0KIGh3L3NwYXJjNjQvbmlhZ2FyYS5jICAgICAgICAgICAgfCAgMiArLQog aHcvc3BhcmM2NC9zdW40dS5jICAgICAgICAgICAgICB8ICA5ICsrKy0tLQogaHcvc3NpL29tYXBf c3BpLmMgICAgICAgICAgICAgICB8ICA1ICstLQogaHcvdGltZXIvb21hcF9ncHRpbWVyLmMgICAg ICAgICB8IDExICsrKystLS0KIGh3L3RpbWVyL3R3bDkyMjMwLmMgICAgICAgICAgICAgfCAgMiAr LQogaHcvdGltZXIveGlsaW54X3RpbWVyLmMgICAgICAgICB8ICA4ICsrLS0tCiBody91c2IvY29y ZS5jICAgICAgICAgICAgICAgICAgIHwgMTUgKysrKystLS0tCiBody91c2IvZGVzYy5jICAgICAg ICAgICAgICAgICAgIHwgIDQgKy0tCiBody91c2IvZGV2LWF1ZGlvLmMgICAgICAgICAgICAgIHwg MjkgKysrKysrKysrLS0tLS0tLS0KIGh3L3VzYi9kZXYtYmx1ZXRvb3RoLmMgICAgICAgICAgfCAg NCArLS0KIGh3L3VzYi9kZXYtbXRwLmMgICAgICAgICAgICAgICAgfCAgOSArKystLS0KIGh3L3Vz Yi9kZXYtbmV0d29yay5jICAgICAgICAgICAgfCAyMCArKysrKystLS0tLS0KIGh3L3VzYi9oY2Qt ZWhjaS5jICAgICAgICAgICAgICAgfCAzMiArKysrKysrKystLS0tLS0tLS0KIGh3L3VzYi9oY2Qt bXVzYi5jICAgICAgICAgICAgICAgfCAgNCArLS0KIGh3L3VzYi9oY2QteGhjaS5jICAgICAgICAg ICAgICAgfCAgMyArLQogaHcvdXNiL2hvc3QtbGVnYWN5LmMgICAgICAgICAgICB8ICAyICstCiBo dy93YXRjaGRvZy93YXRjaGRvZy5jICAgICAgICAgIHwgIDkgKysrLS0tCiBody93YXRjaGRvZy93 ZHRfaTYzMDBlc2IuYyAgICAgIHwgIDggKysrLS0KIGh3L3hlbi94ZW4tY29tbW9uLmMgICAgICAg ICAgICAgfCAxMCArKystLS0KIGh3L3hlbi94ZW5fcHQuYyAgICAgICAgICAgICAgICAgfCAgNCAr LS0KIGh3L3hlbnB2L3hlbl9kb21haW5idWlsZC5jICAgICAgfCAyNCArKysrKysrLS0tLS0tLQog aHcveGVucHYveGVuX21hY2hpbmVfcHYuYyAgICAgICB8ICA4ICsrLS0tCiAxNDIgZmlsZXMgY2hh bmdlZCwgNzY5IGluc2VydGlvbnMoKyksIDcwNSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9o dy9hcm0vYXJtdjdtLmMgYi9ody9hcm0vYXJtdjdtLmMKaW5kZXggYmIyZGZjOTQyYi4uNTY3NzBh NzA0OCAxMDA2NDQKLS0tIGEvaHcvYXJtL2FybXY3bS5jCisrKyBiL2h3L2FybS9hcm12N20uYwpA QCAtMjc4LDcgKzI3OCw3IEBAIHZvaWQgYXJtdjdtX2xvYWRfa2VybmVsKEFSTUNQVSAqY3B1LCBj b25zdCBjaGFyICprZXJuZWxfZmlsZW5hbWUsIGludCBtZW1fc2l6ZSkKICNlbmRpZgogCiAgICAg aWYgKCFrZXJuZWxfZmlsZW5hbWUgJiYgIXF0ZXN0X2VuYWJsZWQoKSkgewotICAgICAgICBmcHJp bnRmKHN0ZGVyciwgIkd1ZXN0IGltYWdlIG11c3QgYmUgc3BlY2lmaWVkICh1c2luZyAta2VybmVs KVxuIik7CisgICAgICAgIGVycm9yX3JlcG9ydCgiR3Vlc3QgaW1hZ2UgbXVzdCBiZSBzcGVjaWZp ZWQgKHVzaW5nIC1rZXJuZWwpIik7CiAgICAgICAgIGV4aXQoMSk7CiAgICAgfQogCmRpZmYgLS1n aXQgYS9ody9hcm0vYm9vdC5jIGIvaHcvYXJtL2Jvb3QuYwppbmRleCBjMjcyMGM4MDQ2Li41YjJk MTdmMDhhIDEwMDY0NAotLS0gYS9ody9hcm0vYm9vdC5jCisrKyBiL2h3L2FybS9ib290LmMKQEAg LTgsNiArOCw3IEBACiAgKi8KIAogI2luY2x1ZGUgInFlbXUvb3NkZXAuaCIKKyNpbmNsdWRlICJx ZW11L2Vycm9yLXJlcG9ydC5oIgogI2luY2x1ZGUgInFhcGkvZXJyb3IuaCIKICNpbmNsdWRlIDxs aWJmZHQuaD4KICNpbmNsdWRlICJody9ody5oIgpAQCAtNDE4LDEzICs0MTksMTMgQEAgc3RhdGlj IGludCBsb2FkX2R0Yihod2FkZHIgYWRkciwgY29uc3Qgc3RydWN0IGFybV9ib290X2luZm8gKmJp bmZvLAogICAgICAgICBjaGFyICpmaWxlbmFtZTsKICAgICAgICAgZmlsZW5hbWUgPSBxZW11X2Zp bmRfZmlsZShRRU1VX0ZJTEVfVFlQRV9CSU9TLCBiaW5mby0+ZHRiX2ZpbGVuYW1lKTsKICAgICAg ICAgaWYgKCFmaWxlbmFtZSkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4n dCBvcGVuIGR0YiBmaWxlICVzXG4iLCBiaW5mby0+ZHRiX2ZpbGVuYW1lKTsKKyAgICAgICAgICAg IGVycm9yX3JlcG9ydCgiQ291bGRuJ3Qgb3BlbiBkdGIgZmlsZSAlcyIsIGJpbmZvLT5kdGJfZmls ZW5hbWUpOwogICAgICAgICAgICAgZ290byBmYWlsOwogICAgICAgICB9CiAKICAgICAgICAgZmR0 ID0gbG9hZF9kZXZpY2VfdHJlZShmaWxlbmFtZSwgJnNpemUpOwogICAgICAgICBpZiAoIWZkdCkg ewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZG4ndCBvcGVuIGR0YiBmaWxlICVz XG4iLCBmaWxlbmFtZSk7CisgICAgICAgICAgICBlcnJvcl9yZXBvcnQoIkNvdWxkbid0IG9wZW4g ZHRiIGZpbGUgJXMiLCBmaWxlbmFtZSk7CiAgICAgICAgICAgICBnX2ZyZWUoZmlsZW5hbWUpOwog ICAgICAgICAgICAgZ290byBmYWlsOwogICAgICAgICB9CkBAIC00MzIsNyArNDMzLDcgQEAgc3Rh dGljIGludCBsb2FkX2R0Yihod2FkZHIgYWRkciwgY29uc3Qgc3RydWN0IGFybV9ib290X2luZm8g KmJpbmZvLAogICAgIH0gZWxzZSB7CiAgICAgICAgIGZkdCA9IGJpbmZvLT5nZXRfZHRiKGJpbmZv LCAmc2l6ZSk7CiAgICAgICAgIGlmICghZmR0KSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVy ciwgIkJvYXJkIHdhcyB1bmFibGUgdG8gY3JlYXRlIGEgZHRiIGJsb2JcbiIpOworICAgICAgICAg ICAgZXJyb3JfcmVwb3J0KCJCb2FyZCB3YXMgdW5hYmxlIHRvIGNyZWF0ZSBhIGR0YiBibG9iIik7 CiAgICAgICAgICAgICBnb3RvIGZhaWw7CiAgICAgICAgIH0KICAgICB9CkBAIC00NTEsNyArNDUy LDcgQEAgc3RhdGljIGludCBsb2FkX2R0Yihod2FkZHIgYWRkciwgY29uc3Qgc3RydWN0IGFybV9i b290X2luZm8gKmJpbmZvLAogICAgIHNjZWxscyA9IHFlbXVfZmR0X2dldHByb3BfY2VsbChmZHQs ICIvIiwgIiNzaXplLWNlbGxzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TlVMTCwgJmVycm9yX2ZhdGFsKTsKICAgICBpZiAoYWNlbGxzID09IDAgfHwgc2NlbGxzID09IDAp IHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJkdGIgZmlsZSBpbnZhbGlkICgjYWRkcmVzcy1j ZWxscyBvciAjc2l6ZS1jZWxscyAwKVxuIik7CisgICAgICAgIGVycm9yX3JlcG9ydCgiZHRiIGZp bGUgaW52YWxpZCAoI2FkZHJlc3MtY2VsbHMgb3IgI3NpemUtY2VsbHMgMCkiKTsKICAgICAgICAg Z290byBmYWlsOwogICAgIH0KIApAQCAtNDU5LDggKzQ2MCw3IEBAIHN0YXRpYyBpbnQgbG9hZF9k dGIoaHdhZGRyIGFkZHIsIGNvbnN0IHN0cnVjdCBhcm1fYm9vdF9pbmZvICpiaW5mbywKICAgICAg ICAgLyogVGhpcyBpcyB1c2VyIGVycm9yIHNvIGRlc2VydmVzIGEgZnJpZW5kbGllciBlcnJvciBt ZXNzYWdlCiAgICAgICAgICAqIHRoYW4gdGhlIGZhaWx1cmUgb2Ygc2V0cHJvcF9zaXplZF9jZWxs cyB3b3VsZCBwcm92aWRlCiAgICAgICAgICAqLwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInFl bXU6IGR0YiBmaWxlIG5vdCBjb21wYXRpYmxlIHdpdGggIgotICAgICAgICAgICAgICAgICJSQU0g c2l6ZSA+IDRHQlxuIik7CisgICAgICAgIGVycm9yX3JlcG9ydCgicWVtdTogZHRiIGZpbGUgbm90 IGNvbXBhdGlibGUgd2l0aCBSQU0gc2l6ZSA+IDRHQiIpOwogICAgICAgICBnb3RvIGZhaWw7CiAg ICAgfQogCkBAIC00ODAsNyArNDgwLDcgQEAgc3RhdGljIGludCBsb2FkX2R0Yihod2FkZHIgYWRk ciwgY29uc3Qgc3RydWN0IGFybV9ib290X2luZm8gKmJpbmZvLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjZWxscywgbWVtX2Jhc2UsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NlbGxzLCBtZW1fbGVuKTsKICAg ICAgICAgICAgIGlmIChyYyA8IDApIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg ImNvdWxkbid0IHNldCAlcy9yZWcgZm9yIG5vZGUgJWRcbiIsIG5vZGVuYW1lLAorICAgICAgICAg ICAgICAgIGVycm9yX3JlcG9ydCgiY291bGRuJ3Qgc2V0ICVzL3JlZyBmb3Igbm9kZSAlZCIsIG5v ZGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgaSk7CiAgICAgICAgICAgICAgICAgZ290 byBmYWlsOwogICAgICAgICAgICAgfQpAQCAtNTA1LDcgKzUwNSw3IEBAIHN0YXRpYyBpbnQgbG9h ZF9kdGIoaHdhZGRyIGFkZHIsIGNvbnN0IHN0cnVjdCBhcm1fYm9vdF9pbmZvICpiaW5mbywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjZWxscywgYmluZm8tPmxv YWRlcl9zdGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNj ZWxscywgYmluZm8tPnJhbV9zaXplKTsKICAgICAgICAgaWYgKHJjIDwgMCkgewotICAgICAgICAg ICAgZnByaW50ZihzdGRlcnIsICJjb3VsZG4ndCBzZXQgL21lbW9yeS9yZWdcbiIpOworICAgICAg ICAgICAgZXJyb3JfcmVwb3J0KCJjb3VsZG4ndCBzZXQgL21lbW9yeS9yZWciKTsKICAgICAgICAg ICAgIGdvdG8gZmFpbDsKICAgICAgICAgfQogICAgIH0KQEAgLTUxOSw3ICs1MTksNyBAQCBzdGF0 aWMgaW50IGxvYWRfZHRiKGh3YWRkciBhZGRyLCBjb25zdCBzdHJ1Y3QgYXJtX2Jvb3RfaW5mbyAq YmluZm8sCiAgICAgICAgIHJjID0gcWVtdV9mZHRfc2V0cHJvcF9zdHJpbmcoZmR0LCAiL2Nob3Nl biIsICJib290YXJncyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlu Zm8tPmtlcm5lbF9jbWRsaW5lKTsKICAgICAgICAgaWYgKHJjIDwgMCkgewotICAgICAgICAgICAg ZnByaW50ZihzdGRlcnIsICJjb3VsZG4ndCBzZXQgL2Nob3Nlbi9ib290YXJnc1xuIik7CisgICAg ICAgICAgICBlcnJvcl9yZXBvcnQoImNvdWxkbid0IHNldCAvY2hvc2VuL2Jvb3RhcmdzIik7CiAg ICAgICAgICAgICBnb3RvIGZhaWw7CiAgICAgICAgIH0KICAgICB9CkBAIC01MjgsMTQgKzUyOCwx NCBAQCBzdGF0aWMgaW50IGxvYWRfZHRiKGh3YWRkciBhZGRyLCBjb25zdCBzdHJ1Y3QgYXJtX2Jv b3RfaW5mbyAqYmluZm8sCiAgICAgICAgIHJjID0gcWVtdV9mZHRfc2V0cHJvcF9jZWxsKGZkdCwg Ii9jaG9zZW4iLCAibGludXgsaW5pdHJkLXN0YXJ0IiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYmluZm8tPmluaXRyZF9zdGFydCk7CiAgICAgICAgIGlmIChyYyA8IDApIHsK LSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiY291bGRuJ3Qgc2V0IC9jaG9zZW4vbGludXgs aW5pdHJkLXN0YXJ0XG4iKTsKKyAgICAgICAgICAgIGVycm9yX3JlcG9ydCgiY291bGRuJ3Qgc2V0 IC9jaG9zZW4vbGludXgsaW5pdHJkLXN0YXJ0Iik7CiAgICAgICAgICAgICBnb3RvIGZhaWw7CiAg ICAgICAgIH0KIAogICAgICAgICByYyA9IHFlbXVfZmR0X3NldHByb3BfY2VsbChmZHQsICIvY2hv c2VuIiwgImxpbnV4LGluaXRyZC1lbmQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBiaW5mby0+aW5pdHJkX3N0YXJ0ICsgYmluZm8tPmluaXRyZF9zaXplKTsKICAgICAgICAg aWYgKHJjIDwgMCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJjb3VsZG4ndCBzZXQg L2Nob3Nlbi9saW51eCxpbml0cmQtZW5kXG4iKTsKKyAgICAgICAgICAgIGVycm9yX3JlcG9ydCgi Y291bGRuJ3Qgc2V0IC9jaG9zZW4vbGludXgsaW5pdHJkLWVuZCIpOwogICAgICAgICAgICAgZ290 byBmYWlsOwogICAgICAgICB9CiAgICAgfQpAQCAtNjkwLDcgKzY5MCw3IEBAIHN0YXRpYyB2b2lk IGxvYWRfaW1hZ2VfdG9fZndfY2ZnKEZXQ2ZnU3RhdGUgKmZ3X2NmZywgdWludDE2X3Qgc2l6ZV9r ZXksCiAgICAgICAgIGdzaXplIGxlbmd0aDsKIAogICAgICAgICBpZiAoIWdfZmlsZV9nZXRfY29u dGVudHMoaW1hZ2VfbmFtZSwgJmNvbnRlbnRzLCAmbGVuZ3RoLCBOVUxMKSkgewotICAgICAgICAg ICAgZnByaW50ZihzdGRlcnIsICJmYWlsZWQgdG8gbG9hZCBcIiVzXCJcbiIsIGltYWdlX25hbWUp OworICAgICAgICAgICAgZXJyb3JfcmVwb3J0KCJmYWlsZWQgdG8gbG9hZCBcIiVzXCIiLCBpbWFn ZV9uYW1lKTsKICAgICAgICAgICAgIGV4aXQoMSk7CiAgICAgICAgIH0KICAgICAgICAgc2l6ZSA9 IGxlbmd0aDsKQEAgLTk1Niw3ICs5NTYsNyBAQCBzdGF0aWMgdm9pZCBhcm1fbG9hZF9rZXJuZWxf bm90aWZ5KE5vdGlmaWVyICpub3RpZmllciwgdm9pZCAqZGF0YSkKICAgICAgICAgaXNfbGludXgg PSAxOwogICAgIH0KICAgICBpZiAoa2VybmVsX3NpemUgPCAwKSB7Ci0gICAgICAgIGZwcmludGYo c3RkZXJyLCAicWVtdTogY291bGQgbm90IGxvYWQga2VybmVsICclcydcbiIsCisgICAgICAgIGVy cm9yX3JlcG9ydCgicWVtdTogY291bGQgbm90IGxvYWQga2VybmVsICclcyciLAogICAgICAgICAg ICAgICAgIGluZm8tPmtlcm5lbF9maWxlbmFtZSk7CiAgICAgICAgIGV4aXQoMSk7CiAgICAgfQpA QCAtOTc2LDcgKzk3Niw3IEBAIHN0YXRpYyB2b2lkIGFybV9sb2FkX2tlcm5lbF9ub3RpZnkoTm90 aWZpZXIgKm5vdGlmaWVyLCB2b2lkICpkYXRhKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbmZvLT5pbml0cmRfc3RhcnQpOwogICAgICAgICAgICAg fQogICAgICAgICAgICAgaWYgKGluaXRyZF9zaXplIDwgMCkgewotICAgICAgICAgICAgICAgIGZw cmludGYoc3RkZXJyLCAicWVtdTogY291bGQgbm90IGxvYWQgaW5pdHJkICclcydcbiIsCisgICAg ICAgICAgICAgICAgZXJyb3JfcmVwb3J0KCJxZW11OiBjb3VsZCBub3QgbG9hZCBpbml0cmQgJyVz JyIsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLT5pbml0cmRfZmlsZW5hbWUpOwogICAg ICAgICAgICAgICAgIGV4aXQoMSk7CiAgICAgICAgICAgICB9CkBAIC0xMDIxLDkgKzEwMjEsOSBA QCBzdGF0aWMgdm9pZCBhcm1fbG9hZF9rZXJuZWxfbm90aWZ5KE5vdGlmaWVyICpub3RpZmllciwg dm9pZCAqZGF0YSkKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGZpeHVwY29udGV4dFtG SVhVUF9BUkdQVFJdID0gaW5mby0+bG9hZGVyX3N0YXJ0ICsgS0VSTkVMX0FSR1NfQUREUjsKICAg ICAgICAgICAgIGlmIChpbmZvLT5yYW1fc2l6ZSA+PSAoMVVMTCA8PCAzMikpIHsKLSAgICAgICAg ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInFlbXU6IFJBTSBzaXplIG11c3QgYmUgbGVzcyB0aGFu IDRHQiB0byBib290IgotICAgICAgICAgICAgICAgICAgICAgICAgIiBMaW51eCBrZXJuZWwgdXNp bmcgQVRBR1MgKHRyeSBwYXNzaW5nIGEgZGV2aWNlIHRyZWUiCi0gICAgICAgICAgICAgICAgICAg ICAgICAiIHVzaW5nIC1kdGIpXG4iKTsKKyAgICAgICAgICAgICAgICBlcnJvcl9yZXBvcnQoInFl bXU6IFJBTSBzaXplIG11c3QgYmUgbGVzcyB0aGFuIDRHQiB0byBib290IgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICIgTGludXgga2VybmVsIHVzaW5nIEFUQUdTICh0cnkgcGFzc2luZyBh IGRldmljZSB0cmVlIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgdXNpbmcgLWR0Yiki KTsKICAgICAgICAgICAgICAgICBleGl0KDEpOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRp ZmYgLS1naXQgYS9ody9hcm0vZ3Vtc3RpeC5jIGIvaHcvYXJtL2d1bXN0aXguYwppbmRleCBiYmE5 ZTlmNTdhLi44YmQzNDk1NmI3IDEwMDY0NAotLS0gYS9ody9hcm0vZ3Vtc3RpeC5jCisrKyBiL2h3 L2FybS9ndW1zdGl4LmMKQEAgLTM1LDYgKzM1LDcgQEAKICAqLwogCiAjaW5jbHVkZSAicWVtdS9v c2RlcC5oIgorI2luY2x1ZGUgInFlbXUvZXJyb3ItcmVwb3J0LmgiCiAjaW5jbHVkZSAiaHcvaHcu aCIKICNpbmNsdWRlICJody9hcm0vcHhhLmgiCiAjaW5jbHVkZSAibmV0L25ldC5oIgpAQCAtNjIs OCArNjMsOCBAQCBzdGF0aWMgdm9pZCBjb25uZXhfaW5pdChNYWNoaW5lU3RhdGUgKm1hY2hpbmUp CiAKICAgICBkaW5mbyA9IGRyaXZlX2dldChJRl9QRkxBU0gsIDAsIDApOwogICAgIGlmICghZGlu Zm8gJiYgIXF0ZXN0X2VuYWJsZWQoKSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkEgZmxh c2ggaW1hZ2UgbXVzdCBiZSBnaXZlbiB3aXRoIHRoZSAiCi0gICAgICAgICAgICAgICAgIidwZmxh c2gnIHBhcmFtZXRlclxuIik7CisgICAgICAgIGVycm9yX3JlcG9ydCgiQSBmbGFzaCBpbWFnZSBt dXN0IGJlIGdpdmVuIHdpdGggdGhlICIKKyAgICAgICAgICAgICAgICAgICAgICIncGZsYXNoJyBw YXJhbWV0ZXIiKTsKICAgICAgICAgZXhpdCgxKTsKICAgICB9CiAKQEAgLTc2LDcgKzc3LDcgQEAg c3RhdGljIHZvaWQgY29ubmV4X2luaXQoTWFjaGluZVN0YXRlICptYWNoaW5lKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGRpbmZvID8gYmxrX2J5X2xlZ2FjeV9kaW5mbyhkaW5mbykg OiBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rvcl9sZW4sIGNvbm5l eF9yb20gLyBzZWN0b3JfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIsIDAs IDAsIDAsIDAsIGJlKSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInFlbXU6IEVycm9yIHJl Z2lzdGVyaW5nIGZsYXNoIG1lbW9yeS5cbiIpOworICAgICAgICBlcnJvcl9yZXBvcnQoInFlbXU6 IEVycm9yIHJlZ2lzdGVyaW5nIGZsYXNoIG1lbW9yeS4iKTsKICAgICAgICAgZXhpdCgxKTsKICAg ICB9CiAKQEAgLTk5LDggKzEwMCw4IEBAIHN0YXRpYyB2b2lkIHZlcmRleF9pbml0KE1hY2hpbmVT dGF0ZSAqbWFjaGluZSkKIAogICAgIGRpbmZvID0gZHJpdmVfZ2V0KElGX1BGTEFTSCwgMCwgMCk7 CiAgICAgaWYgKCFkaW5mbyAmJiAhcXRlc3RfZW5hYmxlZCgpKSB7Ci0gICAgICAgIGZwcmludGYo c3RkZXJyLCAiQSBmbGFzaCBpbWFnZSBtdXN0IGJlIGdpdmVuIHdpdGggdGhlICIKLSAgICAgICAg ICAgICAgICAiJ3BmbGFzaCcgcGFyYW1ldGVyXG4iKTsKKyAgICAgICAgZXJyb3JfcmVwb3J0KCJB IGZsYXNoIGltYWdlIG11c3QgYmUgZ2l2ZW4gd2l0aCB0aGUgIgorICAgICAgICAgICAgICAgICAg ICAgIidwZmxhc2gnIHBhcmFtZXRlciIpOwogICAgICAgICBleGl0KDEpOwogICAgIH0KIApAQCAt MTEzLDcgKzExNCw3IEBAIHN0YXRpYyB2b2lkIHZlcmRleF9pbml0KE1hY2hpbmVTdGF0ZSAqbWFj aGluZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaW5mbyA/IGJsa19ieV9sZWdh Y3lfZGluZm8oZGluZm8pIDogTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz ZWN0b3JfbGVuLCB2ZXJkZXhfcm9tIC8gc2VjdG9yX2xlbiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAyLCAwLCAwLCAwLCAwLCBiZSkpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIs ICJxZW11OiBFcnJvciByZWdpc3RlcmluZyBmbGFzaCBtZW1vcnkuXG4iKTsKKyAgICAgICAgZXJy b3JfcmVwb3J0KCJxZW11OiBFcnJvciByZWdpc3RlcmluZyBmbGFzaCBtZW1vcnkuIik7CiAgICAg ICAgIGV4aXQoMSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9ody9hcm0vbWFpbnN0b25lLmMgYi9o dy9hcm0vbWFpbnN0b25lLmMKaW5kZXggZDA3OTcyYTk2Ni4uNWM0NTRjNzEwOSAxMDA2NDQKLS0t IGEvaHcvYXJtL21haW5zdG9uZS5jCisrKyBiL2h3L2FybS9tYWluc3RvbmUuYwpAQCAtMTIsNiAr MTIsNyBAQAogICogR05VIEdQTCwgdmVyc2lvbiAyIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uCiAgKi8KICNpbmNsdWRlICJxZW11L29zZGVwLmgiCisjaW5jbHVkZSAicWVt dS9lcnJvci1yZXBvcnQuaCIKICNpbmNsdWRlICJxYXBpL2Vycm9yLmgiCiAjaW5jbHVkZSAiaHcv aHcuaCIKICNpbmNsdWRlICJody9hcm0vcHhhLmgiCkBAIC0xNDMsOCArMTQ0LDggQEAgc3RhdGlj IHZvaWQgbWFpbnN0b25lX2NvbW1vbl9pbml0KE1lbW9yeVJlZ2lvbiAqYWRkcmVzc19zcGFjZV9t ZW0sCiAgICAgICAgICAgICBpZiAocXRlc3RfZW5hYmxlZCgpKSB7CiAgICAgICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlR3byBm bGFzaCBpbWFnZXMgbXVzdCBiZSBnaXZlbiB3aXRoIHRoZSAiCi0gICAgICAgICAgICAgICAgICAg ICIncGZsYXNoJyBwYXJhbWV0ZXJcbiIpOworICAgICAgICAgICAgZXJyb3JfcmVwb3J0KCJUd28g Zmxhc2ggaW1hZ2VzIG11c3QgYmUgZ2l2ZW4gd2l0aCB0aGUgIgorICAgICAgICAgICAgICAgICAg ICAgICAgICIncGZsYXNoJyBwYXJhbWV0ZXIiKTsKICAgICAgICAgICAgIGV4aXQoMSk7CiAgICAg ICAgIH0KIApAQCAtMTU0LDcgKzE1NSw3IEBAIHN0YXRpYyB2b2lkIG1haW5zdG9uZV9jb21tb25f aW5pdChNZW1vcnlSZWdpb24gKmFkZHJlc3Nfc3BhY2VfbWVtLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBibGtfYnlfbGVnYWN5X2RpbmZvKGRpbmZvKSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2VjdG9yX2xlbiwgTUFJTlNUT05FX0ZMQVNIIC8gc2Vj dG9yX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCwgMCwgMCwgMCwg MCwgYmUpKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInFlbXU6IEVycm9yIHJlZ2lz dGVyaW5nIGZsYXNoIG1lbW9yeS5cbiIpOworICAgICAgICAgICAgZXJyb3JfcmVwb3J0KCJxZW11 OiBFcnJvciByZWdpc3RlcmluZyBmbGFzaCBtZW1vcnkuIik7CiAgICAgICAgICAgICBleGl0KDEp OwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvaHcvYXJtL211c2ljcGFsLmMgYi9ody9h cm0vbXVzaWNwYWwuYwppbmRleCBiNjQ4NzcwODgyLi4wNjEyN2E4NzNkIDEwMDY0NAotLS0gYS9o dy9hcm0vbXVzaWNwYWwuYworKysgYi9ody9hcm0vbXVzaWNwYWwuYwpAQCAtMTYyNiw3ICsxNjI2 LDcgQEAgc3RhdGljIHZvaWQgbXVzaWNwYWxfaW5pdChNYWNoaW5lU3RhdGUgKm1hY2hpbmUpCiAg ICAgICAgIGZsYXNoX3NpemUgPSBibGtfZ2V0bGVuZ3RoKGJsayk7CiAgICAgICAgIGlmIChmbGFz aF9zaXplICE9IDgqMTAyNCoxMDI0ICYmIGZsYXNoX3NpemUgIT0gMTYqMTAyNCoxMDI0ICYmCiAg ICAgICAgICAgICBmbGFzaF9zaXplICE9IDMyKjEwMjQqMTAyNCkgewotICAgICAgICAgICAgZnBy aW50ZihzdGRlcnIsICJJbnZhbGlkIGZsYXNoIGltYWdlIHNpemVcbiIpOworICAgICAgICAgICAg ZXJyb3JfcmVwb3J0KCJJbnZhbGlkIGZsYXNoIGltYWdlIHNpemUiKTsKICAgICAgICAgICAgIGV4 aXQoMSk7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvaHcvYXJtL29tYXAxLmMgYi9ody9hcm0v b21hcDEuYwppbmRleCAxMzg4MjAwMTkxLi44MjFlZTY5NDQxIDEwMDY0NAotLS0gYS9ody9hcm0v b21hcDEuYworKysgYi9ody9hcm0vb21hcDEuYwpAQCAtMTgsNiArMTgsNyBAQAogICovCiAKICNp bmNsdWRlICJxZW11L29zZGVwLmgiCisjaW5jbHVkZSAicWVtdS9lcnJvci1yZXBvcnQuaCIKICNp bmNsdWRlICJxYXBpL2Vycm9yLmgiCiAjaW5jbHVkZSAicWVtdS1jb21tb24uaCIKICNpbmNsdWRl ICJjcHUuaCIKQEAgLTIzMTMsNyArMjMxNCw3IEBAIHZvaWQgb21hcF91d2lyZV9hdHRhY2goc3Ry dWN0IG9tYXBfdXdpcmVfcyAqcywKICAgICAgICAgICAgICAgICB1V2lyZVNsYXZlICpzbGF2ZSwg aW50IGNoaXBzZWxlY3QpCiB7CiAgICAgaWYgKGNoaXBzZWxlY3QgPCAwIHx8IGNoaXBzZWxlY3Qg PiAzKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IEJhZCBjaGlwc2VsZWN0ICVpXG4i LCBfX2Z1bmNfXywgY2hpcHNlbGVjdCk7CisgICAgICAgIGVycm9yX3JlcG9ydCgiJXM6IEJhZCBj aGlwc2VsZWN0ICVpIiwgX19mdW5jX18sIGNoaXBzZWxlY3QpOwogICAgICAgICBleGl0KC0xKTsK ICAgICB9CiAKQEAgLTM5ODksNyArMzk5MCw3IEBAIHN0cnVjdCBvbWFwX21wdV9zdGF0ZV9zICpv bWFwMzEwX21wdV9pbml0KE1lbW9yeVJlZ2lvbiAqc3lzdGVtX21lbW9yeSwKIAogICAgIGRpbmZv ID0gZHJpdmVfZ2V0KElGX1NELCAwLCAwKTsKICAgICBpZiAoIWRpbmZvKSB7Ci0gICAgICAgIGZw cmludGYoc3RkZXJyLCAicWVtdTogbWlzc2luZyBTZWN1cmVEaWdpdGFsIGRldmljZVxuIik7Cisg ICAgICAgIGVycm9yX3JlcG9ydCgicWVtdTogbWlzc2luZyBTZWN1cmVEaWdpdGFsIGRldmljZSIp OwogICAgICAgICBleGl0KDEpOwogICAgIH0KICAgICBzLT5tbWMgPSBvbWFwX21tY19pbml0KDB4 ZmZmYjc4MDAsIHN5c3RlbV9tZW1vcnksCmRpZmYgLS1naXQgYS9ody9hcm0vb21hcDIuYyBiL2h3 L2FybS9vbWFwMi5jCmluZGV4IGI1Mzg3OGI4YjkuLmNiYmIzZWMwNWYgMTAwNjQ0Ci0tLSBhL2h3 L2FybS9vbWFwMi5jCisrKyBiL2h3L2FybS9vbWFwMi5jCkBAIC0xOSw2ICsxOSw3IEBACiAgKi8K IAogI2luY2x1ZGUgInFlbXUvb3NkZXAuaCIKKyNpbmNsdWRlICJxZW11L2Vycm9yLXJlcG9ydC5o IgogI2luY2x1ZGUgInFhcGkvZXJyb3IuaCIKICNpbmNsdWRlICJxZW11LWNvbW1vbi5oIgogI2lu Y2x1ZGUgImNwdS5oIgpAQCAtMTMxMSw3ICsxMzEyLDcgQEAgc3RhdGljIHZvaWQgb21hcF9wcmNt X2FwbGxfdXBkYXRlKHN0cnVjdCBvbWFwX3ByY21fcyAqcykKICAgICAvKiBUT0RPOiB1cGRhdGUg Y2xvY2tzICovCiAKICAgICBpZiAobW9kZVswXSA9PSAxIHx8IG1vZGVbMF0gPT0gMiB8fCBtb2Rl WzFdID09IDEgfHwgbW9kZVsxXSA9PSAyKQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBi YWQgRU5fNTRNX1BMTCBvciBiYWQgRU5fOTZNX1BMTFxuIiwKKyAgICAgICAgZXJyb3JfcmVwb3J0 KCIlczogYmFkIEVOXzU0TV9QTEwgb3IgYmFkIEVOXzk2TV9QTEwiLAogICAgICAgICAgICAgICAg ICAgICAgICAgX19mdW5jX18pOwogfQogCkBAIC0xMzMxLDcgKzEzMzIsNyBAQCBzdGF0aWMgdm9p ZCBvbWFwX3ByY21fZHBsbF91cGRhdGUoc3RydWN0IG9tYXBfcHJjbV9zICpzKQogICAgIHMtPmRw bGxfbG9jayA9IDA7CiAgICAgc3dpdGNoIChtb2RlKSB7CiAgICAgY2FzZSAwOgotICAgICAgICBm cHJpbnRmKHN0ZGVyciwgIiVzOiBiYWQgRU5fRFBMTFxuIiwgX19mdW5jX18pOworICAgICAgICBl cnJvcl9yZXBvcnQoIiVzOiBiYWQgRU5fRFBMTCIsIF9fZnVuY19fKTsKICAgICAgICAgYnJlYWs7 CiAgICAgY2FzZSAxOgkvKiBMb3ctcG93ZXIgYnlwYXNzIG1vZGUgKERlZmF1bHQpICovCiAgICAg Y2FzZSAyOgkvKiBGYXN0LXJlbG9jayBieXBhc3MgbW9kZSAqLwpAQCAtMTM1OCw3ICsxMzU5LDcg QEAgc3RhdGljIHZvaWQgb21hcF9wcmNtX2RwbGxfdXBkYXRlKHN0cnVjdCBvbWFwX3ByY21fcyAq cykKICAgICAgICAgb21hcF9jbGtfcmVwYXJlbnQoY29yZSwgZHBsbF94Mik7CiAgICAgICAgIGJy ZWFrOwogICAgIGNhc2UgMzoKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogYmFkIENPUkVf Q0xLX1NSQ1xuIiwgX19mdW5jX18pOworICAgICAgICBlcnJvcl9yZXBvcnQoIiVzOiBiYWQgQ09S RV9DTEtfU1JDIiwgX19mdW5jX18pOwogICAgICAgICBicmVhazsKICAgICB9CiB9CkBAIC0xNjI3 LDggKzE2MjgsOCBAQCBzdGF0aWMgdm9pZCBvbWFwX3ByY21fd3JpdGUodm9pZCAqb3BhcXVlLCBo d2FkZHIgYWRkciwKIAogICAgIGNhc2UgMHg1MDA6CS8qIENNX0NMS0VOX1BMTCAqLwogICAgICAg ICBpZiAodmFsdWUgJiAweGZmZmZmZjMwKQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIl czogd3JpdGUgMHMgaW4gQ01fQ0xLRU5fUExMIGZvciAiCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgImZ1dHVyZSBjb21wYXRpYmlsaXR5XG4iLCBfX2Z1bmNfXyk7CisgICAgICAgICAgICBl cnJvcl9yZXBvcnQoIiVzOiB3cml0ZSAwcyBpbiBDTV9DTEtFTl9QTEwgZm9yICIKKyAgICAgICAg ICAgICAgICAgICAgICAgICAiZnV0dXJlIGNvbXBhdGliaWxpdHkiLCBfX2Z1bmNfXyk7CiAgICAg ICAgIGlmICgocy0+Y2xrZW5bOV0gXiB2YWx1ZSkgJiAweGNjKSB7CiAgICAgICAgICAgICBzLT5j bGtlbls5XSAmPSB+MHhjYzsKICAgICAgICAgICAgIHMtPmNsa2VuWzldIHw9IHZhbHVlICYgMHhj YzsKQEAgLTE2NDYsOCArMTY0Nyw4IEBAIHN0YXRpYyB2b2lkIG9tYXBfcHJjbV93cml0ZSh2b2lk ICpvcGFxdWUsIGh3YWRkciBhZGRyLAogICAgICAgICBicmVhazsKICAgICBjYXNlIDB4NTQwOgkv KiBDTV9DTEtTRUwxX1BMTCAqLwogICAgICAgICBpZiAodmFsdWUgJiAweGZjNDAwMGQ3KQotICAg ICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogd3JpdGUgMHMgaW4gQ01fQ0xLU0VMMV9QTEwg Zm9yICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnV0dXJlIGNvbXBhdGliaWxpdHlc biIsIF9fZnVuY19fKTsKKyAgICAgICAgICAgIGVycm9yX3JlcG9ydCgiJXM6IHdyaXRlIDBzIGlu IENNX0NMS1NFTDFfUExMIGZvciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgImZ1dHVyZSBj b21wYXRpYmlsaXR5IiwgX19mdW5jX18pOwogICAgICAgICBpZiAoKHMtPmNsa3NlbFs1XSBeIHZh bHVlKSAmIDB4MDAzZmZmMDApIHsKICAgICAgICAgICAgIHMtPmNsa3NlbFs1XSA9IHZhbHVlICYg MHgwM2JmZmYyODsKICAgICAgICAgICAgIG9tYXBfcHJjbV9kcGxsX3VwZGF0ZShzKTsKQEAgLTE2 NTgsOCArMTY1OSw4IEBAIHN0YXRpYyB2b2lkIG9tYXBfcHJjbV93cml0ZSh2b2lkICpvcGFxdWUs IGh3YWRkciBhZGRyLAogICAgICAgICBicmVhazsKICAgICBjYXNlIDB4NTQ0OgkvKiBDTV9DTEtT RUwyX1BMTCAqLwogICAgICAgICBpZiAodmFsdWUgJiB+MykKLSAgICAgICAgICAgIGZwcmludGYo c3RkZXJyLCAiJXM6IHdyaXRlIDBzIGluIENNX0NMS1NFTDJfUExMWzMxOjJdIGZvciAiCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgImZ1dHVyZSBjb21wYXRpYmlsaXR5XG4iLCBfX2Z1bmNf Xyk7CisgICAgICAgICAgICBlcnJvcl9yZXBvcnQoIiVzOiB3cml0ZSAwcyBpbiBDTV9DTEtTRUwy X1BMTFszMToyXSBmb3IgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJmdXR1cmUgY29tcGF0 aWJpbGl0eSIsIF9fZnVuY19fKTsKICAgICAgICAgaWYgKHMtPmNsa3NlbFs2XSAhPSAodmFsdWUg JiAzKSkgewogICAgICAgICAgICAgcy0+Y2xrc2VsWzZdID0gdmFsdWUgJiAzOwogICAgICAgICAg ICAgb21hcF9wcmNtX2RwbGxfdXBkYXRlKHMpOwpAQCAtMjQ4Niw3ICsyNDg3LDcgQEAgc3RydWN0 IG9tYXBfbXB1X3N0YXRlX3MgKm9tYXAyNDIwX21wdV9pbml0KE1lbW9yeVJlZ2lvbiAqc3lzbWVt LAogCiAgICAgZGluZm8gPSBkcml2ZV9nZXQoSUZfU0QsIDAsIDApOwogICAgIGlmICghZGluZm8p IHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJxZW11OiBtaXNzaW5nIFNlY3VyZURpZ2l0YWwg ZGV2aWNlXG4iKTsKKyAgICAgICAgZXJyb3JfcmVwb3J0KCJxZW11OiBtaXNzaW5nIFNlY3VyZURp Z2l0YWwgZGV2aWNlIik7CiAgICAgICAgIGV4aXQoMSk7CiAgICAgfQogICAgIHMtPm1tYyA9IG9t YXAyX21tY19pbml0KG9tYXBfbDR0YW8ocy0+bDQsIDkpLApkaWZmIC0tZ2l0IGEvaHcvYXJtL29t YXBfc3gxLmMgYi9ody9hcm0vb21hcF9zeDEuYwppbmRleCA5YTE0MjcwNzk1Li42ZWI1NmFlNzQ0 IDEwMDY0NAotLS0gYS9ody9hcm0vb21hcF9zeDEuYworKysgYi9ody9hcm0vb21hcF9zeDEuYwpA QCAtMTU4LDcgKzE1OCw3IEBAIHN0YXRpYyB2b2lkIHN4MV9pbml0KE1hY2hpbmVTdGF0ZSAqbWFj aGluZSwgY29uc3QgaW50IHZlcnNpb24pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJsa19ieV9sZWdhY3lfZGluZm8oZGluZm8pLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzZWN0b3Jfc2l6ZSwgZmxhc2hfc2l6ZSAvIHNlY3Rvcl9zaXplLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LCAwLCAwLCAwLCAwLCBiZSkpIHsKLSAgICAg ICAgICAgIGZwcmludGYoc3RkZXJyLCAicWVtdTogRXJyb3IgcmVnaXN0ZXJpbmcgZmxhc2ggbWVt b3J5ICVkLlxuIiwKKyAgICAgICAgICAgIGVycm9yX3JlcG9ydCgicWVtdTogRXJyb3IgcmVnaXN0 ZXJpbmcgZmxhc2ggbWVtb3J5ICVkLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbF9p ZHgpOwogICAgICAgICB9CiAgICAgICAgIGZsX2lkeCsrOwpAQCAtMTgyLDcgKzE4Miw3IEBAIHN0 YXRpYyB2b2lkIHN4MV9pbml0KE1hY2hpbmVTdGF0ZSAqbWFjaGluZSwgY29uc3QgaW50IHZlcnNp b24pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsa19ieV9sZWdhY3lfZGlu Zm8oZGluZm8pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0b3Jfc2l6 ZSwgZmxhc2gxX3NpemUgLyBzZWN0b3Jfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgNCwgMCwgMCwgMCwgMCwgYmUpKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVy ciwgInFlbXU6IEVycm9yIHJlZ2lzdGVyaW5nIGZsYXNoIG1lbW9yeSAlZC5cbiIsCisgICAgICAg ICAgICBlcnJvcl9yZXBvcnQoInFlbXU6IEVycm9yIHJlZ2lzdGVyaW5nIGZsYXNoIG1lbW9yeSAl ZC4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxfaWR4KTsKICAgICAgICAgfQogICAg ICAgICBmbF9pZHgrKzsKQEAgLTE5NCw3ICsxOTQsNyBAQCBzdGF0aWMgdm9pZCBzeDFfaW5pdChN YWNoaW5lU3RhdGUgKm1hY2hpbmUsIGNvbnN0IGludCB2ZXJzaW9uKQogICAgIH0KIAogICAgIGlm ICghbWFjaGluZS0+a2VybmVsX2ZpbGVuYW1lICYmICFmbF9pZHggJiYgIXF0ZXN0X2VuYWJsZWQo KSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIktlcm5lbCBvciBGbGFzaCBpbWFnZSBtdXN0 IGJlIHNwZWNpZmllZFxuIik7CisgICAgICAgIGVycm9yX3JlcG9ydCgiS2VybmVsIG9yIEZsYXNo IGltYWdlIG11c3QgYmUgc3BlY2lmaWVkIik7CiAgICAgICAgIGV4aXQoMSk7CiAgICAgfQogCmRp ZmYgLS1naXQgYS9ody9hcm0vcGFsbS5jIGIvaHcvYXJtL3BhbG0uYwppbmRleCAyODVmNDM3MDlk Li43ZjM2MzcwNDFhIDEwMDY0NAotLS0gYS9ody9hcm0vcGFsbS5jCisrKyBiL2h3L2FybS9wYWxt LmMKQEAgLTIzMyw4ICsyMzMsOCBAQCBzdGF0aWMgdm9pZCBwYWxtdGVfaW5pdChNYWNoaW5lU3Rh dGUgKm1hY2hpbmUpCiAgICAgaWYgKG5iX29wdGlvbl9yb21zKSB7CiAgICAgICAgIHJvbV9zaXpl ID0gZ2V0X2ltYWdlX3NpemUob3B0aW9uX3JvbVswXS5uYW1lKTsKICAgICAgICAgaWYgKHJvbV9z aXplID4gZmxhc2hfc2l6ZSkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogUk9N IGltYWdlIHRvbyBiaWcgKCV4ID4gJXgpXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fZnVuY19fLCByb21fc2l6ZSwgZmxhc2hfc2l6ZSk7CisgICAgICAgICAgICBlcnJvcl9yZXBv cnQoIiVzOiBST00gaW1hZ2UgdG9vIGJpZyAoJXggPiAleCkiLAorICAgICAgICAgICAgICAgICAg ICAgICAgIF9fZnVuY19fLCByb21fc2l6ZSwgZmxhc2hfc2l6ZSk7CiAgICAgICAgICAgICByb21f c2l6ZSA9IDA7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHJvbV9zaXplID4gMCkgewpAQCAtMjQz LDEzICsyNDMsMTMgQEAgc3RhdGljIHZvaWQgcGFsbXRlX2luaXQoTWFjaGluZVN0YXRlICptYWNo aW5lKQogICAgICAgICAgICAgcm9tX2xvYWRlZCA9IDE7CiAgICAgICAgIH0KICAgICAgICAgaWYg KHJvbV9zaXplIDwgMCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogZXJyb3Ig bG9hZGluZyAnJXMnXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBv cHRpb25fcm9tWzBdLm5hbWUpOworICAgICAgICAgICAgZXJyb3JfcmVwb3J0KCIlczogZXJyb3Ig bG9hZGluZyAnJXMnIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgb3B0aW9u X3JvbVswXS5uYW1lKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmICghcm9tX2xvYWRlZCAm JiAha2VybmVsX2ZpbGVuYW1lICYmICFxdGVzdF9lbmFibGVkKCkpIHsKLSAgICAgICAgZnByaW50 ZihzdGRlcnIsICJLZXJuZWwgb3IgUk9NIGltYWdlIG11c3QgYmUgc3BlY2lmaWVkXG4iKTsKKyAg ICAgICAgZnByaW50ZihzdGRlcnIsICJLZXJuZWwgb3IgUk9NIGltYWdlIG11c3QgYmUgc3BlY2lm aWVkIik7CiAgICAgICAgIGV4aXQoMSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9ody9hcm0vcHhh Mnh4LmMgYi9ody9hcm0vcHhhMnh4LmMKaW5kZXggMDc4MDA2ZjM5MC4uYzQ2YjY1ZDVkMiAxMDA2 NDQKLS0tIGEvaHcvYXJtL3B4YTJ4eC5jCisrKyBiL2h3L2FybS9weGEyeHguYwpAQCAtOCw2ICs4 LDcgQEAKICAqLwogCiAjaW5jbHVkZSAicWVtdS9vc2RlcC5oIgorI2luY2x1ZGUgInFlbXUvZXJy b3ItcmVwb3J0LmgiCiAjaW5jbHVkZSAicWFwaS9lcnJvci5oIgogI2luY2x1ZGUgInFlbXUtY29t bW9uLmgiCiAjaW5jbHVkZSAiY3B1LmgiCkBAIC0yMDYwLDcgKzIwNjEsNyBAQCBQWEEyeHhTdGF0 ZSAqcHhhMjcwX2luaXQoTWVtb3J5UmVnaW9uICphZGRyZXNzX3NwYWNlLAogICAgIHMgPSBnX25l dzAoUFhBMnh4U3RhdGUsIDEpOwogCiAgICAgaWYgKHN0cm5jbXAoY3B1X3R5cGUsICJweGEyNyIs IDUpKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiTWFjaGluZSByZXF1aXJlcyBhIFBYQTI3 eCBwcm9jZXNzb3IuXG4iKTsKKyAgICAgICAgZXJyb3JfcmVwb3J0KCJNYWNoaW5lIHJlcXVpcmVz IGEgUFhBMjd4IHByb2Nlc3Nvci4iKTsKICAgICAgICAgZXhpdCgxKTsKICAgICB9CiAKQEAgLTIw OTMsNyArMjA5NCw3IEBAIFBYQTJ4eFN0YXRlICpweGEyNzBfaW5pdChNZW1vcnlSZWdpb24gKmFk ZHJlc3Nfc3BhY2UsCiAKICAgICBkaW5mbyA9IGRyaXZlX2dldChJRl9TRCwgMCwgMCk7CiAgICAg aWYgKCFkaW5mbykgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInFlbXU6IG1pc3NpbmcgU2Vj dXJlRGlnaXRhbCBkZXZpY2VcbiIpOworICAgICAgICBlcnJvcl9yZXBvcnQoInFlbXU6IG1pc3Np bmcgU2VjdXJlRGlnaXRhbCBkZXZpY2UiKTsKICAgICAgICAgZXhpdCgxKTsKICAgICB9CiAgICAg cy0+bW1jID0gcHhhMnh4X21tY2lfaW5pdChhZGRyZXNzX3NwYWNlLCAweDQxMTAwMDAwLApAQCAt MjIxOCw3ICsyMjE5LDcgQEAgUFhBMnh4U3RhdGUgKnB4YTI1NV9pbml0KE1lbW9yeVJlZ2lvbiAq YWRkcmVzc19zcGFjZSwgdW5zaWduZWQgaW50IHNkcmFtX3NpemUpCiAKICAgICBkaW5mbyA9IGRy aXZlX2dldChJRl9TRCwgMCwgMCk7CiAgICAgaWYgKCFkaW5mbykgewotICAgICAgICBmcHJpbnRm KHN0ZGVyciwgInFlbXU6IG1pc3NpbmcgU2VjdXJlRGlnaXRhbCBkZXZpY2VcbiIpOworICAgICAg ICBlcnJvcl9yZXBvcnQoInFlbXU6IG1pc3NpbmcgU2VjdXJlRGlnaXRhbCBkZXZpY2UiKTsKICAg ICAgICAgZXhpdCgxKTsKICAgICB9CiAgICAgcy0+bW1jID0gcHhhMnh4X21tY2lfaW5pdChhZGRy ZXNzX3NwYWNlLCAweDQxMTAwMDAwLApkaWZmIC0tZ2l0IGEvaHcvYXJtL3N0ZWxsYXJpcy5jIGIv aHcvYXJtL3N0ZWxsYXJpcy5jCmluZGV4IGRlN2MwZmM0YTYuLmY2ZjI5NWIzNjMgMTAwNjQ0Ci0t LSBhL2h3L2FybS9zdGVsbGFyaXMuYworKysgYi9ody9hcm0vc3RlbGxhcmlzLmMKQEAgLTgsNiAr OCw3IEBACiAgKi8KIAogI2luY2x1ZGUgInFlbXUvb3NkZXAuaCIKKyNpbmNsdWRlICJxZW11L2Vy cm9yLXJlcG9ydC5oIgogI2luY2x1ZGUgInFhcGkvZXJyb3IuaCIKICNpbmNsdWRlICJody9zeXNi dXMuaCIKICNpbmNsdWRlICJody9zc2kvc3NpLmgiCkBAIC01NTksNyArNTYwLDcgQEAgc3RhdGlj IHZvaWQgc3N5c193cml0ZSh2b2lkICpvcGFxdWUsIGh3YWRkciBvZmZzZXQsCiAgICAgY2FzZSAw eDA0MDogLyogU1JDUjAgKi8KICAgICBjYXNlIDB4MDQ0OiAvKiBTUkNSMSAqLwogICAgIGNhc2Ug MHgwNDg6IC8qIFNSQ1IyICovCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiUGVyaXBoZXJhbCBy ZXNldCBub3QgaW1wbGVtZW50ZWRcbiIpOworICAgICAgICBlcnJvcl9yZXBvcnQoIlBlcmlwaGVy YWwgcmVzZXQgbm90IGltcGxlbWVudGVkIik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMHgw NTQ6IC8qIElNQyAqLwogICAgICAgICBzLT5pbnRfbWFzayA9IHZhbHVlICYgMHg3ZjsKZGlmZiAt LWdpdCBhL2h3L2FybS90b3NhLmMgYi9ody9hcm0vdG9zYS5jCmluZGV4IGE1NWIxYTM2OWMuLmEw NjljOTVmMWMgMTAwNjQ0Ci0tLSBhL2h3L2FybS90b3NhLmMKKysrIGIvaHcvYXJtL3Rvc2EuYwpA QCAtMTIsNiArMTIsNyBAQAogICovCiAKICNpbmNsdWRlICJxZW11L29zZGVwLmgiCisjaW5jbHVk ZSAicWVtdS9lcnJvci1yZXBvcnQuaCIKICNpbmNsdWRlICJxYXBpL2Vycm9yLmgiCiAjaW5jbHVk ZSAiaHcvaHcuaCIKICNpbmNsdWRlICJody9hcm0vcHhhLmgiCkBAIC03MCwxOSArNzEsMTkgQEAg c3RhdGljIHZvaWQgdG9zYV9vdXRfc3dpdGNoKHZvaWQgKm9wYXF1ZSwgaW50IGxpbmUsIGludCBs ZXZlbCkKIHsKICAgICBzd2l0Y2ggKGxpbmUpIHsKICAgICAgICAgY2FzZSAwOgotICAgICAgICAg ICAgZnByaW50ZihzdGRlcnIsICJibHVlIExFRCAlcy5cbiIsIGxldmVsID8gIm9uIiA6ICJvZmYi KTsKKyAgICAgICAgICAgIGVycm9yX3JlcG9ydCgiYmx1ZSBMRUQgJXMuIiwgbGV2ZWwgPyAib24i IDogIm9mZiIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgMToKLSAgICAgICAg ICAgIGZwcmludGYoc3RkZXJyLCAiZ3JlZW4gTEVEICVzLlxuIiwgbGV2ZWwgPyAib24iIDogIm9m ZiIpOworICAgICAgICAgICAgZXJyb3JfcmVwb3J0KCJncmVlbiBMRUQgJXMuIiwgbGV2ZWwgPyAi b24iIDogIm9mZiIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgMjoKLSAgICAg ICAgICAgIGZwcmludGYoc3RkZXJyLCAiYW1iZXIgTEVEICVzLlxuIiwgbGV2ZWwgPyAib24iIDog Im9mZiIpOworICAgICAgICAgICAgZXJyb3JfcmVwb3J0KCJhbWJlciBMRUQgJXMuIiwgbGV2ZWwg PyAib24iIDogIm9mZiIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgMzoKLSAg ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAid2xhbiBMRUQgJXMuXG4iLCBsZXZlbCA/ICJvbiIg OiAib2ZmIik7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIndsYW4gTEVEICVzLiIsIGxl dmVsID8gIm9uIiA6ICJvZmYiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0 OgotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVaGFuZGxlZCBvdXQgZXZlbnQ6ICVkID0g JWRcbiIsIGxpbmUsIGxldmVsKTsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVWhhbmRs ZWQgb3V0IGV2ZW50OiAlZCA9ICVkIiwgbGluZSwgbGV2ZWwpOwogICAgICAgICAgICAgYnJlYWs7 CiAgICAgfQogfQpAQCAtMTMzLDcgKzEzNCw3IEBAIHN0YXRpYyB2b2lkIHRvc2FfZ3Bpb19zZXR1 cChQWEEyeHhTdGF0ZSAqY3B1LAogCiBzdGF0aWMgdWludDMyX3QgdG9zYV9zc3BfdGFuc2ZlcihT U0lTbGF2ZSAqZGV2LCB1aW50MzJfdCB2YWx1ZSkKIHsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIlRH OiAlZCAlMDJ4XG4iLCB2YWx1ZSA+PiA1LCB2YWx1ZSAmIDB4MWYpOworICAgIGVycm9yX3JlcG9y dCgiVEc6ICVkICUwMngiLCB2YWx1ZSA+PiA1LCB2YWx1ZSAmIDB4MWYpOwogICAgIHJldHVybiAw OwogfQogCkBAIC0xNTksMTMgKzE2MCwxMyBAQCBzdGF0aWMgaW50IHRvc2FfZGFjX3NlbmQoSTJD U2xhdmUgKmkyYywgdWludDhfdCBkYXRhKQogICAgIHMtPmJ1ZltzLT5sZW5dID0gZGF0YTsKICAg ICBpZiAocy0+bGVuICsrID4gMikgewogI2lmZGVmIFZFUkJPU0UKLSAgICAgICAgZnByaW50Zihz dGRlcnIsICIlczogbWVzc2FnZSB0b28gbG9uZyAoJWkgYnl0ZXMpXG4iLCBfX2Z1bmNfXywgcy0+ bGVuKTsKKyAgICAgICAgZXJyb3JfcmVwb3J0KCIlczogbWVzc2FnZSB0b28gbG9uZyAoJWkgYnl0 ZXMpIiwgX19mdW5jX18sIHMtPmxlbik7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuIDE7CiAgICAg fQogCiAgICAgaWYgKHMtPmxlbiA9PSAyKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiZGFj OiBjaGFubmVsICVkIHZhbHVlIDB4JTAyeFxuIiwKKyAgICAgICAgZXJyb3JfcmVwb3J0KCJkYWM6 IGNoYW5uZWwgJWQgdmFsdWUgMHglMDJ4IiwKICAgICAgICAgICAgICAgICBzLT5idWZbMF0sIHMt PmJ1ZlsxXSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9ody9hcm0vdmVyc2F0aWxlcGIuYyBiL2h3 L2FybS92ZXJzYXRpbGVwYi5jCmluZGV4IDQxODc5MmNkMDIuLmYwYWUwNjkxNzIgMTAwNjQ0Ci0t LSBhL2h3L2FybS92ZXJzYXRpbGVwYi5jCisrKyBiL2h3L2FybS92ZXJzYXRpbGVwYi5jCkBAIC0z NjQsNyArMzY0LDcgQEAgc3RhdGljIHZvaWQgdmVyc2F0aWxlX2luaXQoTWFjaGluZVN0YXRlICpt YWNoaW5lLCBpbnQgYm9hcmRfaWQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFZFUlNBVElM RV9GTEFTSF9TRUNUX1NJWkUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFZFUlNBVElMRV9G TEFTSF9TSVpFIC8gVkVSU0FUSUxFX0ZMQVNIX1NFQ1RfU0laRSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgNCwgMHgwMDg5LCAweDAwMTgsIDB4MDAwMCwgMHgwLCAwKSkgewotICAgICAgICBm cHJpbnRmKHN0ZGVyciwgInFlbXU6IEVycm9yIHJlZ2lzdGVyaW5nIGZsYXNoIG1lbW9yeS5cbiIp OworICAgICAgICBlcnJvcl9yZXBvcnQoInFlbXU6IEVycm9yIHJlZ2lzdGVyaW5nIGZsYXNoIG1l bW9yeS4iKTsKICAgICB9CiAKICAgICB2ZXJzYXRpbGVfYmluZm8ucmFtX3NpemUgPSBtYWNoaW5l LT5yYW1fc2l6ZTsKZGlmZiAtLWdpdCBhL2h3L2FybS92ZXhwcmVzcy5jIGIvaHcvYXJtL3ZleHBy ZXNzLmMKaW5kZXggZWZiNWEyOTQ3NS4uNTA4NjI5ZGZlOSAxMDA2NDQKLS0tIGEvaHcvYXJtL3Zl eHByZXNzLmMKKysrIGIvaHcvYXJtL3ZleHByZXNzLmMKQEAgLTI2Niw3ICsyNjYsNyBAQCBzdGF0 aWMgdm9pZCBhOV9kYXVnaHRlcmJvYXJkX2luaXQoY29uc3QgVmV4cHJlc3NNYWNoaW5lU3RhdGUg KnZtcywKIAogICAgIGlmIChyYW1fc2l6ZSA+IDB4NDAwMDAwMDApIHsKICAgICAgICAgLyogMUdC IGlzIHRoZSBtYXhpbXVtIHRoZSBhZGRyZXNzIHNwYWNlIHBlcm1pdHMgKi8KLSAgICAgICAgZnBy aW50ZihzdGRlcnIsICJ2ZXhwcmVzcy1hOTogY2Fubm90IG1vZGVsIG1vcmUgdGhhbiAxR0IgUkFN XG4iKTsKKyAgICAgICAgZXJyb3JfcmVwb3J0KCJ2ZXhwcmVzcy1hOTogY2Fubm90IG1vZGVsIG1v cmUgdGhhbiAxR0IgUkFNIik7CiAgICAgICAgIGV4aXQoMSk7CiAgICAgfQogCkBAIC0zNTUsNyAr MzU1LDcgQEAgc3RhdGljIHZvaWQgYTE1X2RhdWdodGVyYm9hcmRfaW5pdChjb25zdCBWZXhwcmVz c01hY2hpbmVTdGF0ZSAqdm1zLAogICAgICAgICAgKi8KICAgICAgICAgdWludDY0X3QgcnN6ID0g cmFtX3NpemU7CiAgICAgICAgIGlmIChyc3ogPiAoMzBVTEwgKiAxMDI0ICogMTAyNCAqIDEwMjQp KSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInZleHByZXNzLWExNTogY2Fubm90IG1v ZGVsIG1vcmUgdGhhbiAzMEdCIFJBTVxuIik7CisgICAgICAgICAgICBlcnJvcl9yZXBvcnQoInZl eHByZXNzLWExNTogY2Fubm90IG1vZGVsIG1vcmUgdGhhbiAzMEdCIFJBTSIpOwogICAgICAgICAg ICAgZXhpdCgxKTsKICAgICAgICAgfQogICAgIH0KQEAgLTY0MCw3ICs2NDAsNyBAQCBzdGF0aWMg dm9pZCB2ZXhwcmVzc19jb21tb25faW5pdChNYWNoaW5lU3RhdGUgKm1hY2hpbmUpCiAgICAgcGZs YXNoMCA9IHZlX3BmbGFzaF9jZmkwMV9yZWdpc3RlcihtYXBbVkVfTk9SRkxBU0gwXSwgInZleHBy ZXNzLmZsYXNoMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaW5m byk7CiAgICAgaWYgKCFwZmxhc2gwKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAidmV4cHJl c3M6IGVycm9yIHJlZ2lzdGVyaW5nIGZsYXNoIDAuXG4iKTsKKyAgICAgICAgZXJyb3JfcmVwb3J0 KCJ2ZXhwcmVzczogZXJyb3IgcmVnaXN0ZXJpbmcgZmxhc2ggMC4iKTsKICAgICAgICAgZXhpdCgx KTsKICAgICB9CiAKQEAgLTY1NSw3ICs2NTUsNyBAQCBzdGF0aWMgdm9pZCB2ZXhwcmVzc19jb21t b25faW5pdChNYWNoaW5lU3RhdGUgKm1hY2hpbmUpCiAgICAgZGluZm8gPSBkcml2ZV9nZXRfbmV4 dChJRl9QRkxBU0gpOwogICAgIGlmICghdmVfcGZsYXNoX2NmaTAxX3JlZ2lzdGVyKG1hcFtWRV9O T1JGTEFTSDFdLCAidmV4cHJlc3MuZmxhc2gxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkaW5mbykpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJ2ZXhwcmVzczogZXJy b3IgcmVnaXN0ZXJpbmcgZmxhc2ggMS5cbiIpOworICAgICAgICBlcnJvcl9yZXBvcnQoInZleHBy ZXNzOiBlcnJvciByZWdpc3RlcmluZyBmbGFzaCAxLiIpOwogICAgICAgICBleGl0KDEpOwogICAg IH0KIApkaWZmIC0tZ2l0IGEvaHcvYXJtL3oyLmMgYi9ody9hcm0vejIuYwppbmRleCA2MDU2MWM3 YjdjLi41MDQ4NDM5Nzk5IDEwMDY0NAotLS0gYS9ody9hcm0vejIuYworKysgYi9ody9hcm0vejIu YwpAQCAtMzE5LDggKzMxOSw4IEBAIHN0YXRpYyB2b2lkIHoyX2luaXQoTWFjaGluZVN0YXRlICpt YWNoaW5lKQogI2VuZGlmCiAgICAgZGluZm8gPSBkcml2ZV9nZXQoSUZfUEZMQVNILCAwLCAwKTsK ICAgICBpZiAoIWRpbmZvICYmICFxdGVzdF9lbmFibGVkKCkpIHsKLSAgICAgICAgZnByaW50Zihz dGRlcnIsICJGbGFzaCBpbWFnZSBtdXN0IGJlIGdpdmVuIHdpdGggdGhlICIKLSAgICAgICAgICAg ICAgICAiJ3BmbGFzaCcgcGFyYW1ldGVyXG4iKTsKKyAgICAgICAgZXJyb3JfcmVwb3J0KCJGbGFz aCBpbWFnZSBtdXN0IGJlIGdpdmVuIHdpdGggdGhlICIKKyAgICAgICAgICAgICAgICAgICAgICIn cGZsYXNoJyBwYXJhbWV0ZXIiKTsKICAgICAgICAgZXhpdCgxKTsKICAgICB9CiAKQEAgLTMyOSw3 ICszMjksNyBAQCBzdGF0aWMgdm9pZCB6Ml9pbml0KE1hY2hpbmVTdGF0ZSAqbWFjaGluZSkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaW5mbyA/IGJsa19ieV9sZWdhY3lfZGluZm8o ZGluZm8pIDogTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0b3JfbGVu LCBaMl9GTEFTSF9TSVpFIC8gc2VjdG9yX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA0LCAwLCAwLCAwLCAwLCBiZSkpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJxZW11 OiBFcnJvciByZWdpc3RlcmluZyBmbGFzaCBtZW1vcnkuXG4iKTsKKyAgICAgICAgZXJyb3JfcmVw b3J0KCJxZW11OiBFcnJvciByZWdpc3RlcmluZyBmbGFzaCBtZW1vcnkuIik7CiAgICAgICAgIGV4 aXQoMSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9ody9ibG9jay9kYXRhcGxhbmUvdmlydGlvLWJs ay5jIGIvaHcvYmxvY2svZGF0YXBsYW5lL3ZpcnRpby1ibGsuYwppbmRleCA1NTU2ZjBlNjRlLi42 OWRmZDQ5MTkxIDEwMDY0NAotLS0gYS9ody9ibG9jay9kYXRhcGxhbmUvdmlydGlvLWJsay5jCisr KyBiL2h3L2Jsb2NrL2RhdGFwbGFuZS92aXJ0aW8tYmxrLmMKQEAgLTE3OCw4ICsxNzgsOCBAQCBp bnQgdmlydGlvX2Jsa19kYXRhX3BsYW5lX3N0YXJ0KFZpcnRJT0RldmljZSAqdmRldikKICAgICAv KiBTZXQgdXAgZ3Vlc3Qgbm90aWZpZXIgKGlycSkgKi8KICAgICByID0gay0+c2V0X2d1ZXN0X25v dGlmaWVycyhxYnVzLT5wYXJlbnQsIG52cXMsIHRydWUpOwogICAgIGlmIChyICE9IDApIHsKLSAg ICAgICAgZnByaW50ZihzdGRlcnIsICJ2aXJ0aW8tYmxrIGZhaWxlZCB0byBzZXQgZ3Vlc3Qgbm90 aWZpZXIgKCVkKSwgIgotICAgICAgICAgICAgICAgICJlbnN1cmUgLWVuYWJsZS1rdm0gaXMgc2V0 XG4iLCByKTsKKyAgICAgICAgZXJyb3JfcmVwb3J0KCJ2aXJ0aW8tYmxrIGZhaWxlZCB0byBzZXQg Z3Vlc3Qgbm90aWZpZXIgKCVkKSwgIgorICAgICAgICAgICAgICAgICJlbnN1cmUgLWVuYWJsZS1r dm0gaXMgc2V0Iiwgcik7CiAgICAgICAgIGdvdG8gZmFpbF9ndWVzdF9ub3RpZmllcnM7CiAgICAg fQogCkBAIC0xODcsNyArMTg3LDcgQEAgaW50IHZpcnRpb19ibGtfZGF0YV9wbGFuZV9zdGFydChW aXJ0SU9EZXZpY2UgKnZkZXYpCiAgICAgZm9yIChpID0gMDsgaSA8IG52cXM7IGkrKykgewogICAg ICAgICByID0gdmlydGlvX2J1c19zZXRfaG9zdF9ub3RpZmllcihWSVJUSU9fQlVTKHFidXMpLCBp LCB0cnVlKTsKICAgICAgICAgaWYgKHIgIT0gMCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRl cnIsICJ2aXJ0aW8tYmxrIGZhaWxlZCB0byBzZXQgaG9zdCBub3RpZmllciAoJWQpXG4iLCByKTsK KyAgICAgICAgICAgIGVycm9yX3JlcG9ydCgidmlydGlvLWJsayBmYWlsZWQgdG8gc2V0IGhvc3Qg bm90aWZpZXIgKCVkKSIsIHIpOwogICAgICAgICAgICAgd2hpbGUgKGktLSkgewogICAgICAgICAg ICAgICAgIHZpcnRpb19idXNfc2V0X2hvc3Rfbm90aWZpZXIoVklSVElPX0JVUyhxYnVzKSwgaSwg ZmFsc2UpOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvaHcvYmxvY2svb25lbmFuZC5jIGIv aHcvYmxvY2svb25lbmFuZC5jCmluZGV4IDIyNGRhZjdjY2YuLjhiY2Q2NzY4OGIgMTAwNjQ0Ci0t LSBhL2h3L2Jsb2NrL29uZW5hbmQuYworKysgYi9ody9ibG9jay9vbmVuYW5kLmMKQEAgLTU5OCw3 ICs1OTgsNyBAQCBzdGF0aWMgdm9pZCBvbmVuYW5kX2NvbW1hbmQoT25lTkFORFN0YXRlICpzKQog ICAgIGRlZmF1bHQ6CiAgICAgICAgIHMtPnN0YXR1cyB8PSBPTkVOX0VSUl9DTUQ7CiAgICAgICAg IHMtPmludHN0YXR1cyB8PSBPTkVOX0lOVDsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczog dW5rbm93biBPbmVOQU5EIGNvbW1hbmQgJXhcbiIsCisgICAgICAgIGVycm9yX3JlcG9ydCgiJXM6 IHVua25vd24gT25lTkFORCBjb21tYW5kICV4IiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9f ZnVuY19fLCBzLT5jb21tYW5kKTsKICAgICB9CiAKQEAgLTY2NSw3ICs2NjUsNyBAQCBzdGF0aWMg dWludDY0X3Qgb25lbmFuZF9yZWFkKHZvaWQgKm9wYXF1ZSwgaHdhZGRyIGFkZHIsCiAgICAgICAg IHJldHVybiAweDAwMDA7CiAgICAgfQogCi0gICAgZnByaW50ZihzdGRlcnIsICIlczogdW5rbm93 biBPbmVOQU5EIHJlZ2lzdGVyICV4XG4iLAorICAgIGVycm9yX3JlcG9ydCgiJXM6IHVua25vd24g T25lTkFORCByZWdpc3RlciAleCIsCiAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBvZmZz ZXQpOwogICAgIHJldHVybiAwOwogfQpAQCAtNzEwLDcgKzcxMCw3IEBAIHN0YXRpYyB2b2lkIG9u ZW5hbmRfd3JpdGUodm9pZCAqb3BhcXVlLCBod2FkZHIgYWRkciwKICAgICAgICAgICAgIGJyZWFr OwogCiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiB1 bmtub3duIE9uZU5BTkQgYm9vdCBjb21tYW5kICUiUFJJeDY0IlxuIiwKKyAgICAgICAgICAgIGVy cm9yX3JlcG9ydCgiJXM6IHVua25vd24gT25lTkFORCBib290IGNvbW1hbmQgJSJQUkl4NjQiIiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgdmFsdWUpOwogICAgICAgICB9 CiAgICAgICAgIGJyZWFrOwpAQCAtNzYxLDcgKzc2MSw3IEBAIHN0YXRpYyB2b2lkIG9uZW5hbmRf d3JpdGUodm9pZCAqb3BhcXVlLCBod2FkZHIgYWRkciwKICAgICAgICAgYnJlYWs7CiAKICAgICBk ZWZhdWx0OgotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiB1bmtub3duIE9uZU5BTkQgcmVn aXN0ZXIgJXhcbiIsCisgICAgICAgIGVycm9yX3JlcG9ydCgiJXM6IHVua25vd24gT25lTkFORCBy ZWdpc3RlciAleCIsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgb2Zmc2V0KTsK ICAgICB9CiB9CmRpZmYgLS1naXQgYS9ody9ibG9jay90YzU4MTI4LmMgYi9ody9ibG9jay90YzU4 MTI4LmMKaW5kZXggMWQ5ZjdlZTAwMC4uZDI3NGM5YWFmZSAxMDA2NDQKLS0tIGEvaHcvYmxvY2sv dGM1ODEyOC5jCisrKyBiL2h3L2Jsb2NrL3RjNTgxMjguYwpAQCAtNTAsOCArNTAsOCBAQCBzdGF0 aWMgdm9pZCBpbml0X2Rldih0YzU4MTI4X2RldiAqIGRldiwgY29uc3QgY2hhciAqZmlsZW5hbWUp CiAJICAgIGRldi0+Zmxhc2hfY29udGVudHNbMV0gPSAoYmxvY2tzID4+IDgpICYgMHhmZjsKIAkg ICAgZGV2LT5mbGFzaF9jb250ZW50c1syXSA9IChibG9ja3MgPj4gMTYpICYgMHhmZjsKIAkgICAg ZGV2LT5mbGFzaF9jb250ZW50c1szXSA9IChibG9ja3MgPj4gMjQpICYgMHhmZjsKLQkgICAgZnBy aW50ZihzdGRlcnIsICJsb2FkZWQgJWQgYnl0ZXMgZm9yICVzIGludG8gZmxhc2hcbiIsIHJldCwK LQkJICAgIGZpbGVuYW1lKTsKKyAgICAgICAgZXJyb3JfcmVwb3J0KCJsb2FkZWQgJWQgYnl0ZXMg Zm9yICVzIGludG8gZmxhc2giLCByZXQsCisgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSk7 CiAJfQogICAgIH0KIH0KQEAgLTYwLDI2ICs2MCwyNiBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfY29t bWFuZCh0YzU4MTI4X2RldiAqIGRldiwgdWludDhfdCBjb21tYW5kKQogewogICAgIHN3aXRjaCAo Y29tbWFuZCkgewogICAgIGNhc2UgMHhmZjoKLQlmcHJpbnRmKHN0ZGVyciwgInJlc2V0IGZsYXNo IGRldmljZVxuIik7Ci0JZGV2LT5zdGF0ZSA9IFdBSVQ7Ci0JYnJlYWs7CisgICAgICAgIGVycm9y X3JlcG9ydCgicmVzZXQgZmxhc2ggZGV2aWNlIik7CisgICAgICAgIGRldi0+c3RhdGUgPSBXQUlU OworICAgICAgICBicmVhazsKICAgICBjYXNlIDB4MDA6Ci0JZnByaW50ZihzdGRlcnIsICJyZWFk IG1vZGUgMVxuIik7Ci0JZGV2LT5zdGF0ZSA9IFJFQUQxOwotCWRldi0+YWRkcmVzc19jeWNsZSA9 IDA7Ci0JYnJlYWs7CisgICAgICAgIGVycm9yX3JlcG9ydCgicmVhZCBtb2RlIDEiKTsKKyAgICAg ICAgZGV2LT5zdGF0ZSA9IFJFQUQxOworICAgICAgICBkZXYtPmFkZHJlc3NfY3ljbGUgPSAwOwor ICAgICAgICBicmVhazsKICAgICBjYXNlIDB4MDE6Ci0JZnByaW50ZihzdGRlcnIsICJyZWFkIG1v ZGUgMlxuIik7Ci0JZGV2LT5zdGF0ZSA9IFJFQUQyOwotCWRldi0+YWRkcmVzc19jeWNsZSA9IDA7 Ci0JYnJlYWs7CisgICAgICAgIGVycm9yX3JlcG9ydCgicmVhZCBtb2RlIDIiKTsKKyAgICAgICAg ZGV2LT5zdGF0ZSA9IFJFQUQyOworICAgICAgICBkZXYtPmFkZHJlc3NfY3ljbGUgPSAwOworICAg ICAgICBicmVhazsKICAgICBjYXNlIDB4NTA6Ci0JZnByaW50ZihzdGRlcnIsICJyZWFkIG1vZGUg M1xuIik7Ci0JZGV2LT5zdGF0ZSA9IFJFQUQzOwotCWRldi0+YWRkcmVzc19jeWNsZSA9IDA7Ci0J YnJlYWs7CisgICAgICAgIGVycm9yX3JlcG9ydCgicmVhZCBtb2RlIDMiKTsKKyAgICAgICAgZGV2 LT5zdGF0ZSA9IFJFQUQzOworICAgICAgICBkZXYtPmFkZHJlc3NfY3ljbGUgPSAwOworICAgICAg ICBicmVhazsKICAgICBkZWZhdWx0OgotCWZwcmludGYoc3RkZXJyLCAidW5rbm93biBmbGFzaCBj b21tYW5kIDB4JTAyeFxuIiwgY29tbWFuZCk7CisgICAgICAgIGVycm9yX3JlcG9ydCgidW5rbm93 biBmbGFzaCBjb21tYW5kIDB4JTAyeCIsIGNvbW1hbmQpOwogICAgICAgICBhYm9ydCgpOwogICAg IH0KIH0KQEAgLTEwMyw4ICsxMDMsOCBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfYWRkcmVzcyh0YzU4 MTI4X2RldiAqIGRldiwgdWludDhfdCBkYXRhKQogCSAgICBicmVhazsKIAljYXNlIDI6CiAJICAg IGRldi0+YWRkcmVzcyArPSBkYXRhICogNTI4OwotCSAgICBmcHJpbnRmKHN0ZGVyciwgImFkZHJl c3MgcG9pbnRlciBpbiBmbGFzaDogMHglMDh4XG4iLAotCQkgICAgZGV2LT5hZGRyZXNzKTsKKyAg ICAgICAgZXJyb3JfcmVwb3J0KCJhZGRyZXNzIHBvaW50ZXIgaW4gZmxhc2g6IDB4JTA4eCIsCisg ICAgICAgICAgICAgICAgICAgICBkZXYtPmFkZHJlc3MpOwogCSAgICBicmVhazsKIAlkZWZhdWx0 OgogCSAgICAvKiBJbnZhbGlkIGRhdGEgKi8KQEAgLTExOSwxMCArMTE5LDYgQEAgc3RhdGljIHZv aWQgaGFuZGxlX2FkZHJlc3ModGM1ODEyOF9kZXYgKiBkZXYsIHVpbnQ4X3QgZGF0YSkKIAogc3Rh dGljIHVpbnQ4X3QgaGFuZGxlX3JlYWQodGM1ODEyOF9kZXYgKiBkZXYpCiB7Ci0jaWYgMAotICAg IGlmIChkZXYtPmFkZHJlc3MgJSAweDEwMDAwMCA9PSAwKQotCWZwcmludGYoc3RkZXJyLCAicmVh ZGluZyBmbGFzaCBhdCBhZGRyZXNzIDB4JTA4eFxuIiwgZGV2LT5hZGRyZXNzKTsKLSNlbmRpZgog ICAgIHJldHVybiBkZXYtPmZsYXNoX2NvbnRlbnRzW2Rldi0+YWRkcmVzcysrXTsKIH0KIApkaWZm IC0tZ2l0IGEvaHcvYnQvY29yZS5jIGIvaHcvYnQvY29yZS5jCmluZGV4IGMxODA2YjcxYTMuLmE2 ZTliZjJhM2UgMTAwNjQ0Ci0tLSBhL2h3L2J0L2NvcmUuYworKysgYi9ody9idC9jb3JlLmMKQEAg LTE4LDYgKzE4LDcgQEAKICAqLwogCiAjaW5jbHVkZSAicWVtdS9vc2RlcC5oIgorI2luY2x1ZGUg InFlbXUvZXJyb3ItcmVwb3J0LmgiCiAjaW5jbHVkZSAicWVtdS1jb21tb24uaCIKICNpbmNsdWRl ICJzeXNlbXUvYnQuaCIKICNpbmNsdWRlICJody9idC5oIgpAQCAtMzEsMjQgKzMyLDI0IEBAIHN0 YXRpYyB2b2lkIGJ0X2R1bW15X2xtcF9tb2RlX2NoYW5nZShzdHJ1Y3QgYnRfbGlua19zICpsaW5r KQogc3RhdGljIHZvaWQgYnRfZHVtbXlfbG1wX2Nvbm5lY3Rpb25fY29tcGxldGUoc3RydWN0IGJ0 X2xpbmtfcyAqbGluaykKIHsKICAgICBpZiAobGluay0+c2xhdmUtPnJlamVjdF9yZWFzb24pCi0g ICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IHN0cmF5IExNUF9ub3RfYWNjZXB0ZWQgcmVjZWl2 ZWQsIGZpeG1lXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18pOworICAgICAg ICBlcnJvcl9yZXBvcnQoIiVzOiBzdHJheSBMTVBfbm90X2FjY2VwdGVkIHJlY2VpdmVkLCBmaXht ZSIsCisgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXyk7CiAgICAgZWxzZQotICAgICAgICBm cHJpbnRmKHN0ZGVyciwgIiVzOiBzdHJheSBMTVBfYWNjZXB0ZWQgcmVjZWl2ZWQsIGZpeG1lXG4i LAotICAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18pOworICAgICAgICBlcnJvcl9yZXBv cnQoIiVzOiBzdHJheSBMTVBfYWNjZXB0ZWQgcmVjZWl2ZWQsIGZpeG1lIiwKKyAgICAgICAgICAg ICAgICAgICAgIF9fZnVuY19fKTsKICAgICBleGl0KC0xKTsKIH0KIAogc3RhdGljIHZvaWQgYnRf ZHVtbXlfbG1wX2Rpc2Nvbm5lY3RfbWFzdGVyKHN0cnVjdCBidF9saW5rX3MgKmxpbmspCiB7Ci0g ICAgZnByaW50ZihzdGRlcnIsICIlczogc3RyYXkgTE1QX2RldGFjaCByZWNlaXZlZCwgZml4bWVc biIsIF9fZnVuY19fKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBzdHJheSBMTVBfZGV0YWNo IHJlY2VpdmVkLCBmaXhtZSIsIF9fZnVuY19fKTsKICAgICBleGl0KC0xKTsKIH0KIAogc3RhdGlj IHZvaWQgYnRfZHVtbXlfbG1wX2FjbF9yZXNwKHN0cnVjdCBidF9saW5rX3MgKmxpbmssCiAgICAg ICAgICAgICAgICAgY29uc3QgdWludDhfdCAqZGF0YSwgaW50IHN0YXJ0LCBpbnQgbGVuKQogewot ICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IHN0cmF5IEFDTCByZXNwb25zZSBQRFUsIGZpeG1lXG4i LCBfX2Z1bmNfXyk7CisgICAgZXJyb3JfcmVwb3J0KCIlczogc3RyYXkgQUNMIHJlc3BvbnNlIFBE VSwgZml4bWUiLCBfX2Z1bmNfXyk7CiAgICAgZXhpdCgtMSk7CiB9CiAKQEAgLTExMyw3ICsxMTQs NyBAQCB2b2lkIGJ0X2RldmljZV9kb25lKHN0cnVjdCBidF9kZXZpY2VfcyAqZGV2KQogICAgIHdo aWxlICgqcCAmJiAqcCAhPSBkZXYpCiAgICAgICAgIHAgPSAmKCpwKS0+bmV4dDsKICAgICBpZiAo KnAgIT0gZGV2KSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGJhZCBidCBkZXZpY2Ug XCIlc1wiXG4iLCBfX2Z1bmNfXywKKyAgICAgICAgZXJyb3JfcmVwb3J0KCIlczogYmFkIGJ0IGRl dmljZSBcIiVzXCIiLCBfX2Z1bmNfXywKICAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+bG1w X25hbWUgPzogIihudWxsKSIpOwogICAgICAgICBleGl0KC0xKTsKICAgICB9CmRpZmYgLS1naXQg YS9ody9idC9oY2ktY3NyLmMgYi9ody9idC9oY2ktY3NyLmMKaW5kZXggYWMwNjdiODFmNi4uNmEx NzFhNTRiNyAxMDA2NDQKLS0tIGEvaHcvYnQvaGNpLWNzci5jCisrKyBiL2h3L2J0L2hjaS1jc3Iu YwpAQCAtMTksNiArMTksNyBAQAogICovCiAKICNpbmNsdWRlICJxZW11L29zZGVwLmgiCisjaW5j bHVkZSAicWVtdS9lcnJvci1yZXBvcnQuaCIKICNpbmNsdWRlICJxZW11LWNvbW1vbi5oIgogI2lu Y2x1ZGUgImNoYXJkZXYvY2hhci1zZXJpYWwuaCIKICNpbmNsdWRlICJxZW11L3RpbWVyLmgiCkBA IC0xMTEsMTQgKzExMiwxNCBAQCBzdGF0aWMgdWludDhfdCAqY3NyaGNpX291dF9wYWNrZXQoc3Ry dWN0IGNzcmhjaV9zICpzLCBpbnQgbGVuKQogCiAgICAgaWYgKG9mZiA8IEZJRk9fTEVOKSB7CiAg ICAgICAgIGlmIChvZmYgKyBsZW4gPiBGSUZPX0xFTiAmJiAocy0+b3V0X3NpemUgPSBvZmYgKyBs ZW4pID4gRklGT19MRU4gKiAyKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBj YW4ndCBhbGxvYyAlaSBieXRlc1xuIiwgX19mdW5jX18sIGxlbik7CisgICAgICAgICAgICBlcnJv cl9yZXBvcnQoIiVzOiBjYW4ndCBhbGxvYyAlaSBieXRlcyIsIF9fZnVuY19fLCBsZW4pOwogICAg ICAgICAgICAgZXhpdCgtMSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHMtPm91dGZpZm8g KyBvZmY7CiAgICAgfQogCiAgICAgaWYgKHMtPm91dF9sZW4gPiBzLT5vdXRfc2l6ZSkgewotICAg ICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBjYW4ndCBhbGxvYyAlaSBieXRlc1xuIiwgX19mdW5j X18sIGxlbik7CisgICAgICAgIGVycm9yX3JlcG9ydCgiJXM6IGNhbid0IGFsbG9jICVpIGJ5dGVz IiwgX19mdW5jX18sIGxlbik7CiAgICAgICAgIGV4aXQoLTEpOwogICAgIH0KIApAQCAtMTY4LDgg KzE2OSw4IEBAIHN0YXRpYyB2b2lkIGNzcmhjaV9pbl9wYWNrZXRfdmVuZG9yKHN0cnVjdCBjc3Jo Y2lfcyAqcywgaW50IG9jZiwKICAgICAgICAgICAgIHMtPmJkX2FkZHIuYls1XSA9IGRhdGFbb2Zm c2V0ICsgMl07CiAKICAgICAgICAgICAgIHMtPmhjaS0+YmRhZGRyX3NldChzLT5oY2ksIHMtPmJk X2FkZHIuYik7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBiZF9hZGRyZXNzIGxv YWRlZCBmcm9tIGZpcm13YXJlOiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUwMng6 JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLCBfX2Z1bmNfXywKKyAgICAgICAgICAgIGVycm9y X3JlcG9ydCgiJXM6IGJkX2FkZHJlc3MgbG9hZGVkIGZyb20gZmlybXdhcmU6ICIKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMngiLCBfX2Z1 bmNfXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5iZF9hZGRyLmJbMF0sIHMtPmJk X2FkZHIuYlsxXSwgcy0+YmRfYWRkci5iWzJdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IHMtPmJkX2FkZHIuYlszXSwgcy0+YmRfYWRkci5iWzRdLCBzLT5iZF9hZGRyLmJbNV0pOwogICAg ICAgICB9CkBAIC0xODEsNyArMTgyLDcgQEAgc3RhdGljIHZvaWQgY3NyaGNpX2luX3BhY2tldF92 ZW5kb3Ioc3RydWN0IGNzcmhjaV9zICpzLCBpbnQgb2NmLAogICAgICAgICBicmVhazsKIAogICAg IGRlZmF1bHQ6Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGdvdCBhIGJhZCBDTUQgcGFj a2V0XG4iLCBfX2Z1bmNfXyk7CisgICAgICAgIGVycm9yX3JlcG9ydCgiJXM6IGdvdCBhIGJhZCBD TUQgcGFja2V0IiwgX19mdW5jX18pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yMjYs NyArMjI3LDcgQEAgc3RhdGljIHZvaWQgY3NyaGNpX2luX3BhY2tldChzdHJ1Y3QgY3NyaGNpX3Mg KnMsIHVpbnQ4X3QgKnBrdCkKICAgICBjYXNlIEg0X05FR19QS1Q6CiAgICAgICAgIGlmIChzLT5p bl9oZHIgIT0gc2l6ZW9mKGNzcmhjaV9uZWdfcGFja2V0KSB8fAogICAgICAgICAgICAgICAgICAg ICAgICAgbWVtY21wKHBrdCAtIDEsIGNzcmhjaV9uZWdfcGFja2V0LCBzLT5pbl9oZHIpKSB7Ci0g ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBnb3QgYSBiYWQgTkVHIHBhY2tldFxuIiwg X19mdW5jX18pOworICAgICAgICAgICAgZXJyb3JfcmVwb3J0KCIlczogZ290IGEgYmFkIE5FRyBw YWNrZXQiLCBfX2Z1bmNfXyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAg ICAgcGt0ICs9IDI7CkBAIC0yNDEsNyArMjQyLDcgQEAgc3RhdGljIHZvaWQgY3NyaGNpX2luX3Bh Y2tldChzdHJ1Y3QgY3NyaGNpX3MgKnMsIHVpbnQ4X3QgKnBrdCkKIAogICAgIGNhc2UgSDRfQUxJ VkVfUEtUOgogICAgICAgICBpZiAocy0+aW5faGRyICE9IDQgfHwgcGt0WzFdICE9IDB4NTUgfHwg cGt0WzJdICE9IDB4MDApIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGdvdCBh IGJhZCBBTElWRSBwYWNrZXRcbiIsIF9fZnVuY19fKTsKKyAgICAgICAgICAgIGVycm9yX3JlcG9y dCgiJXM6IGdvdCBhIGJhZCBBTElWRSBwYWNrZXQiLCBfX2Z1bmNfXyk7CiAgICAgICAgICAgICBy ZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjU0LDcgKzI1NSw3IEBAIHN0YXRpYyB2b2lkIGNzcmhj aV9pbl9wYWNrZXQoc3RydWN0IGNzcmhjaV9zICpzLCB1aW50OF90ICpwa3QpCiAgICAgZGVmYXVs dDoKICAgICBiYWRfcGt0OgogICAgICAgICAvKiBUT0RPOiBlcnJvciBvdXQgKi8KLSAgICAgICAg ZnByaW50ZihzdGRlcnIsICIlczogZ290IGEgYmFkIHBhY2tldFxuIiwgX19mdW5jX18pOworICAg ICAgICBlcnJvcl9yZXBvcnQoIiVzOiBnb3QgYSBiYWQgcGFja2V0IiwgX19mdW5jX18pOwogICAg ICAgICBicmVhazsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2h3L2J0L2hjaS5jIGIvaHcvYnQvaGNp LmMKaW5kZXggZGYwNWYwNzg4Ny4uYWM5Mzk0ZGFmMCAxMDA2NDQKLS0tIGEvaHcvYnQvaGNpLmMK KysrIGIvaHcvYnQvaGNpLmMKQEAgLTE5LDYgKzE5LDcgQEAKICAqLwogCiAjaW5jbHVkZSAicWVt dS9vc2RlcC5oIgorI2luY2x1ZGUgInFlbXUvZXJyb3ItcmVwb3J0LmgiCiAjaW5jbHVkZSAicWFw aS9lcnJvci5oIgogI2luY2x1ZGUgInFlbXUtY29tbW9uLmgiCiAjaW5jbHVkZSAicWVtdS90aW1l ci5oIgpAQCAtNDU3LDcgKzQ1OCw3IEBAIHN0YXRpYyBpbmxpbmUgdWludDhfdCAqYnRfaGNpX2V2 ZW50X3N0YXJ0KHN0cnVjdCBidF9oY2lfcyAqaGNpLAogICAgIGludCBtYXNrX2J5dGU7CiAKICAg ICBpZiAobGVuID4gMjU1KSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IEhDSSBldmVu dCBwYXJhbXMgdG9vIGxvbmcgKCVpYilcbiIsCisgICAgICAgIGVycm9yX3JlcG9ydCgiJXM6IEhD SSBldmVudCBwYXJhbXMgdG9vIGxvbmcgKCVpYikiLAogICAgICAgICAgICAgICAgICAgICAgICAg X19mdW5jX18sIGxlbik7CiAgICAgICAgIGV4aXQoLTEpOwogICAgIH0KQEAgLTU4OSw3ICs1OTAs NyBAQCBzdGF0aWMgdm9pZCBidF9oY2lfaW5xdWlyeV9yZXN1bHQoc3RydWN0IGJ0X2hjaV9zICpo Y2ksCiAgICAgICAgIGJ0X2hjaV9pbnF1aXJ5X3Jlc3VsdF93aXRoX3Jzc2koaGNpLCBzbGF2ZSk7 CiAgICAgICAgIHJldHVybjsKICAgICBkZWZhdWx0OgotICAgICAgICBmcHJpbnRmKHN0ZGVyciwg IiVzOiBiYWQgaW5xdWlyeSBtb2RlICUwMnhcbiIsIF9fZnVuY19fLAorICAgICAgICBlcnJvcl9y ZXBvcnQoIiVzOiBiYWQgaW5xdWlyeSBtb2RlICUwMngiLCBfX2Z1bmNfXywKICAgICAgICAgICAg ICAgICAgICAgICAgIGhjaS0+bG0uaW5xdWlyeV9tb2RlKTsKICAgICAgICAgZXhpdCgtMSk7CiAg ICAgfQpAQCAtMTk3MSw3ICsxOTcyLDcgQEAgc3RhdGljIHZvaWQgYnRfc3VibWl0X2hjaShzdHJ1 Y3QgSENJSW5mbyAqaW5mbywKICAgICAgICAgYnJlYWs7CiAKICAgICBzaG9ydF9oY2k6Ci0gICAg ICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IEhDSSBwYWNrZXQgdG9vIHNob3J0ICglaUIpXG4iLAor ICAgICAgICBlcnJvcl9yZXBvcnQoIiVzOiBIQ0kgcGFja2V0IHRvbyBzaG9ydCAoJWlCKSIsCiAg ICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgbGVuZ3RoKTsKICAgICAgICAgYnRfaGNp X2V2ZW50X3N0YXR1cyhoY2ksIEhDSV9JTlZBTElEX1BBUkFNRVRFUlMpOwogICAgICAgICBicmVh azsKQEAgLTE5OTEsNyArMTk5Miw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBidF9oY2lfbG1wX2Fj bF9kYXRhKHN0cnVjdCBidF9oY2lfcyAqaGNpLCB1aW50MTZfdCBoYW5kbGUsCiAgICAgLyogVE9E TzogYXZvaWQgbWVtY3B5J2luZyAqLwogCiAgICAgaWYgKGxlbiArIEhDSV9BQ0xfSERSX1NJWkUg PiBzaXplb2YoaGNpLT5hY2xfYnVmKSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBj YW4ndCB0YWtlIEFDTCBwYWNrZXRzICVpIGJ5dGVzIGxvbmdcbiIsCisgICAgICAgIGVycm9yX3Jl cG9ydCgiJXM6IGNhbid0IHRha2UgQUNMIHBhY2tldHMgJWkgYnl0ZXMgbG9uZyIsCiAgICAgICAg ICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgbGVuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K QEAgLTIwMjksNyArMjAzMCw3IEBAIHN0YXRpYyB2b2lkIGJ0X3N1Ym1pdF9hY2woc3RydWN0IEhD SUluZm8gKmluZm8sCiAgICAgc3RydWN0IGJ0X2xpbmtfcyAqbGluazsKIAogICAgIGlmIChsZW5n dGggPCBIQ0lfQUNMX0hEUl9TSVpFKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IEFD TCBwYWNrZXQgdG9vIHNob3J0ICglaUIpXG4iLAorICAgICAgICBlcnJvcl9yZXBvcnQoIiVzOiBB Q0wgcGFja2V0IHRvbyBzaG9ydCAoJWlCKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1 bmNfXywgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTIwNDEsMTUgKzIwNDIs MTUgQEAgc3RhdGljIHZvaWQgYnRfc3VibWl0X2FjbChzdHJ1Y3QgSENJSW5mbyAqaW5mbywKICAg ICBsZW5ndGggLT0gSENJX0FDTF9IRFJfU0laRTsKIAogICAgIGlmIChidF9oY2lfaGFuZGxlX2Jh ZChoY2ksIGhhbmRsZSkpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogaW52YWxpZCBB Q0wgaGFuZGxlICUwM3hcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgaGFu ZGxlKTsKKyAgICAgICAgZXJyb3JfcmVwb3J0KCIlczogaW52YWxpZCBBQ0wgaGFuZGxlICUwM3gi LAorICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIGhhbmRsZSk7CiAgICAgICAgIC8qIFRP RE86IHNpZ25hbCBhbiBlcnJvciAqLwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGhhbmRs ZSAmPSB+SENJX0hBTkRMRV9PRkZTRVQ7CiAKICAgICBpZiAoZGF0YWxlbiA+IGxlbmd0aCkgewot ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBBQ0wgcGFja2V0IHRvbyBzaG9ydCAoJWlCIDwg JWlCKVxuIiwKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogQUNMIHBhY2tldCB0b28gc2hv cnQgKCVpQiA8ICVpQikiLAogICAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIGxlbmd0 aCwgZGF0YWxlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yMDYwLDcgKzIwNjEsNyBA QCBzdGF0aWMgdm9pZCBidF9zdWJtaXRfYWNsKHN0cnVjdCBIQ0lJbmZvICppbmZvLAogICAgICAg ICBpZiAoIWhjaS0+YXNiX2hhbmRsZSkKICAgICAgICAgICAgIGhjaS0+YXNiX2hhbmRsZSA9IGhh bmRsZTsKICAgICAgICAgZWxzZSBpZiAoaGFuZGxlICE9IGhjaS0+YXNiX2hhbmRsZSkgewotICAg ICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogQmFkIGhhbmRsZSAlMDN4IGluIEFjdGl2ZSBT bGF2ZSBCcm9hZGNhc3RcbiIsCisgICAgICAgICAgICBlcnJvcl9yZXBvcnQoIiVzOiBCYWQgaGFu ZGxlICUwM3ggaW4gQWN0aXZlIFNsYXZlIEJyb2FkY2FzdCIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19mdW5jX18sIGhhbmRsZSk7CiAgICAgICAgICAgICAvKiBUT0RPOiBzaWduYWwg YW4gZXJyb3IgKi8KICAgICAgICAgICAgIHJldHVybjsKQEAgLTIwNzMsNyArMjA3NCw3IEBAIHN0 YXRpYyB2b2lkIGJ0X3N1Ym1pdF9hY2woc3RydWN0IEhDSUluZm8gKmluZm8sCiAgICAgICAgIGlm ICghaGNpLT5wc2JfaGFuZGxlKQogICAgICAgICAgICAgaGNpLT5wc2JfaGFuZGxlID0gaGFuZGxl OwogICAgICAgICBlbHNlIGlmIChoYW5kbGUgIT0gaGNpLT5wc2JfaGFuZGxlKSB7Ci0gICAgICAg ICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBCYWQgaGFuZGxlICUwM3ggaW4gUGFya2VkIFNsYXZl IEJyb2FkY2FzdFxuIiwKKyAgICAgICAgICAgIGVycm9yX3JlcG9ydCgiJXM6IEJhZCBoYW5kbGUg JTAzeCBpbiBQYXJrZWQgU2xhdmUgQnJvYWRjYXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2Z1bmNfXywgaGFuZGxlKTsKICAgICAgICAgICAgIC8qIFRPRE86IHNpZ25hbCBhbiBl cnJvciAqLwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjEwNSwxNCArMjEwNiwxMyBAQCBzdGF0 aWMgdm9pZCBidF9zdWJtaXRfc2NvKHN0cnVjdCBIQ0lJbmZvICppbmZvLAogICAgIGxlbmd0aCAt PSAzOwogCiAgICAgaWYgKGJ0X2hjaV9oYW5kbGVfYmFkKGhjaSwgaGFuZGxlKSkgewotICAgICAg ICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBpbnZhbGlkIFNDTyBoYW5kbGUgJTAzeFxuIiwKLSAgICAg ICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBoYW5kbGUpOworICAgICAgICBlcnJvcl9yZXBv cnQoIiVzOiBpbnZhbGlkIFNDTyBoYW5kbGUgJTAzeCIsIF9fZnVuY19fLCBoYW5kbGUpOwogICAg ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKGRhdGFsZW4gPiBsZW5ndGgpIHsKLSAgICAg ICAgZnByaW50ZihzdGRlcnIsICIlczogU0NPIHBhY2tldCB0b28gc2hvcnQgKCVpQiA8ICVpQilc biIsCi0gICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgbGVuZ3RoLCBkYXRhbGVuKTsK KyAgICAgICAgZXJyb3JfcmVwb3J0KCIlczogU0NPIHBhY2tldCB0b28gc2hvcnQgKCVpQiA8ICVp QikiLAorICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIGxlbmd0aCwgZGF0YWxlbik7CiAg ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTIyMjMsNyArMjIyMyw3IEBAIHN0cnVjdCBIQ0lJ bmZvICpoY2lfaW5pdChjb25zdCBjaGFyICpzdHIpCiAgICAgICAgICAgIHJldHVybiBidF9uZXdf aGNpKHZsYW4pOwogICAgIH0KIAotICAgIGZwcmludGYoc3RkZXJyLCAicWVtdTogVW5rbm93biBi bHVldG9vdGggSENJIGAlcycuXG4iLCBzdHIpOworICAgIGVycm9yX3JlcG9ydCgicWVtdTogVW5r bm93biBibHVldG9vdGggSENJIGAlcycuIiwgc3RyKTsKIAogICAgIHJldHVybiAwOwogfQpkaWZm IC0tZ2l0IGEvaHcvYnQvaGlkLmMgYi9ody9idC9oaWQuYwppbmRleCAwOWQxNzMyMmU0Li4wNTYy OTFmOWI1IDEwMDY0NAotLS0gYS9ody9idC9oaWQuYworKysgYi9ody9idC9oaWQuYwpAQCAtNDE5 LDcgKzQxOSw3IEBAIHN0YXRpYyB2b2lkIGJ0X2hpZF9pbnRlcnJ1cHRfc2R1KHZvaWQgKm9wYXF1 ZSwgY29uc3QgdWludDhfdCAqZGF0YSwgaW50IGxlbikKIAogICAgIHJldHVybjsKIGJhZDoKLSAg ICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBiYWQgdHJhbnNhY3Rpb24gb24gSW50ZXJydXB0IGNoYW5u ZWwuXG4iLAorICAgIGVycm9yX3JlcG9ydCgiJXM6IGJhZCB0cmFuc2FjdGlvbiBvbiBJbnRlcnJ1 cHQgY2hhbm5lbC4iLAogICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXyk7CiB9CiAKZGlmZiAt LWdpdCBhL2h3L2J0L2wyY2FwLmMgYi9ody9idC9sMmNhcC5jCmluZGV4IDNlNTNkZDA4MmQuLjlj ZjI3ZjBkZjYgMTAwNjQ0Ci0tLSBhL2h3L2J0L2wyY2FwLmMKKysrIGIvaHcvYnQvbDJjYXAuYwpA QCAtMTgsNiArMTgsNyBAQAogICovCiAKICNpbmNsdWRlICJxZW11L29zZGVwLmgiCisjaW5jbHVk ZSAicWVtdS9lcnJvci1yZXBvcnQuaCIKICNpbmNsdWRlICJxZW11LWNvbW1vbi5oIgogI2luY2x1 ZGUgInFlbXUvdGltZXIuaCIKICNpbmNsdWRlICJxZW11L2Jzd2FwLmgiCkBAIC00NjcsOCArNDY4 LDggQEAgc3RhdGljIHZvaWQgbDJjYXBfY2hhbm5lbF9jbG9zZShzdHJ1Y3QgbDJjYXBfaW5zdGFu Y2VfcyAqbDJjYXAsCiAKICAgICBpZiAobGlrZWx5KGNoKSkgewogICAgICAgICBpZiAoY2gtPnJl bW90ZV9jaWQgIT0gc291cmNlX2NpZCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIl czogSWdub3JpbmcgYSBEaXNjb25uZWN0aW9uIFJlcXVlc3Qgd2l0aCB0aGUgIgotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIFNDSUQgJTA0eC5cbiIsIF9fZnVuY19fLCBzb3Vy Y2VfY2lkKTsKKyAgICAgICAgICAgIGVycm9yX3JlcG9ydCgiJXM6IElnbm9yaW5nIGEgRGlzY29u bmVjdGlvbiBSZXF1ZXN0IHdpdGggdGhlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAi aW52YWxpZCBTQ0lEICUwNHguIiwgX19mdW5jX18sIHNvdXJjZV9jaWQpOwogICAgICAgICAgICAg cmV0dXJuOwogICAgICAgICB9CiAKQEAgLTc5MCw3ICs3OTEsNyBAQCBzdGF0aWMgdm9pZCBsMmNh cF9jb21tYW5kKHN0cnVjdCBsMmNhcF9pbnN0YW5jZV9zICpsMmNhcCwgaW50IGNvZGUsIGludCBp ZCwKICNpZiAwCiAgICAgLyogVE9ETzogZG8gdGhlIElEcyByZWFsbHkgaGF2ZSB0byBiZSBpbiBz ZXF1ZW5jZT8gICovCiAgICAgaWYgKCFpZCB8fCAoaWQgIT0gbDJjYXAtPmxhc3RfaWQgJiYgaWQg IT0gbDJjYXAtPm5leHRfaWQpKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IG91dCBv ZiBzZXF1ZW5jZSBjb21tYW5kIHBhY2tldCBpZ25vcmVkLlxuIiwKKyAgICAgICAgZXJyb3JfcmVw b3J0KCIlczogb3V0IG9mIHNlcXVlbmNlIGNvbW1hbmQgcGFja2V0IGlnbm9yZWQuIiwKICAgICAg ICAgICAgICAgICAgICAgICAgIF9fZnVuY19fKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAg LTgxMyw5ICs4MTQsOSBAQCBzdGF0aWMgdm9pZCBsMmNhcF9jb21tYW5kKHN0cnVjdCBsMmNhcF9p bnN0YW5jZV9zICpsMmNhcCwgaW50IGNvZGUsIGludCBpZCwKICAgICAgICAgfQogCiAgICAgICAg IC8qIFdlIG5ldmVyIGlzc3VlIGNvbW1hbmRzIG90aGVyIHRoYW4gQ29tbWFuZCBSZWplY3QgY3Vy cmVudGx5LiAgKi8KLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogc3RyYXkgQ29tbWFuZCBS ZWplY3QgKCUwMngsICUwNHgpICIKLSAgICAgICAgICAgICAgICAgICAgICAgICJwYWNrZXQsIGln bm9yaW5nLlxuIiwgX19mdW5jX18sIGlkLAotICAgICAgICAgICAgICAgICAgICAgICAgbGUxNl90 b19jcHUoKChsMmNhcF9jbWRfcmVqICopIHBhcmFtcyktPnJlYXNvbikpOworICAgICAgICBlcnJv cl9yZXBvcnQoIiVzOiBzdHJheSBDb21tYW5kIFJlamVjdCAoJTAyeCwgJTA0eCkgIgorICAgICAg ICAgICAgICAgICAgICAgInBhY2tldCwgaWdub3JpbmcuIiwgX19mdW5jX18sIGlkLAorICAgICAg ICAgICAgICAgICAgICAgbGUxNl90b19jcHUoKChsMmNhcF9jbWRfcmVqICopIHBhcmFtcyktPnJl YXNvbikpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgTDJDQVBfQ09OTl9SRVE6CkBAIC04 MzYsOCArODM3LDggQEAgc3RhdGljIHZvaWQgbDJjYXBfY29tbWFuZChzdHJ1Y3QgbDJjYXBfaW5z dGFuY2VfcyAqbDJjYXAsIGludCBjb2RlLCBpbnQgaWQsCiAgICAgICAgIH0KIAogICAgICAgICAv KiBXZSBuZXZlciBpc3N1ZSBDb25uZWN0aW9uIFJlcXVlc3RzIGN1cnJlbnRseS4gVE9ETyAgKi8K LSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogdW5leHBlY3RlZCBDb25uZWN0aW9uIFJlc3Bv bnNlICglMDJ4KSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAicGFja2V0LCBpZ25vcmluZy5c biIsIF9fZnVuY19fLCBpZCk7CisgICAgICAgIGVycm9yX3JlcG9ydCgiJXM6IHVuZXhwZWN0ZWQg Q29ubmVjdGlvbiBSZXNwb25zZSAoJTAyeCkgIgorICAgICAgICAgICAgICAgICAgICAgInBhY2tl dCwgaWdub3JpbmcuIiwgX19mdW5jX18sIGlkKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNl IEwyQ0FQX0NPTkZfUkVROgpAQCAtODY1LDggKzg2Niw4IEBAIHN0YXRpYyB2b2lkIGwyY2FwX2Nv bW1hbmQoc3RydWN0IGwyY2FwX2luc3RhbmNlX3MgKmwyY2FwLCBpbnQgY29kZSwgaW50IGlkLAog ICAgICAgICAgICAgICAgICAgICAgICAgbGUxNl90b19jcHUoKChsMmNhcF9jb25mX3JzcCAqKSBw YXJhbXMpLT5zY2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICgobDJjYXBfY29uZl9yc3Ag KikgcGFyYW1zKS0+ZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAtIEwyQ0FQX0NP TkZfUlNQX1NJWkUoMCkpKQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogdW5leHBl Y3RlZCBDb25maWd1cmUgUmVzcG9uc2UgKCUwMngpICIKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAicGFja2V0LCBpZ25vcmluZy5cbiIsIF9fZnVuY19fLCBpZCk7CisgICAgICAgICAgICBl cnJvcl9yZXBvcnQoIiVzOiB1bmV4cGVjdGVkIENvbmZpZ3VyZSBSZXNwb25zZSAoJTAyeCkgIgor ICAgICAgICAgICAgICAgICAgICAgICAgICJwYWNrZXQsIGlnbm9yaW5nLiIsIF9fZnVuY19fLCBp ZCk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBMMkNBUF9ESVNDT05OX1JFUToKQEAgLTg4 Nyw4ICs4ODgsOCBAQCBzdGF0aWMgdm9pZCBsMmNhcF9jb21tYW5kKHN0cnVjdCBsMmNhcF9pbnN0 YW5jZV9zICpsMmNhcCwgaW50IGNvZGUsIGludCBpZCwKICAgICAgICAgfQogCiAgICAgICAgIC8q IFdlIG5ldmVyIGlzc3VlIERpc2Nvbm5lY3Rpb24gUmVxdWVzdHMgY3VycmVudGx5LiBUT0RPICAq LwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiB1bmV4cGVjdGVkIERpc2Nvbm5lY3Rpb24g UmVzcG9uc2UgKCUwMngpICIKLSAgICAgICAgICAgICAgICAgICAgICAgICJwYWNrZXQsIGlnbm9y aW5nLlxuIiwgX19mdW5jX18sIGlkKTsKKyAgICAgICAgZXJyb3JfcmVwb3J0KCIlczogdW5leHBl Y3RlZCBEaXNjb25uZWN0aW9uIFJlc3BvbnNlICglMDJ4KSAiCisgICAgICAgICAgICAgICAgICAg ICAicGFja2V0LCBpZ25vcmluZy4iLCBfX2Z1bmNfXywgaWQpOwogICAgICAgICBicmVhazsKIAog ICAgIGNhc2UgTDJDQVBfRUNIT19SRVE6CkBAIC04OTcsOCArODk4LDggQEAgc3RhdGljIHZvaWQg bDJjYXBfY29tbWFuZChzdHJ1Y3QgbDJjYXBfaW5zdGFuY2VfcyAqbDJjYXAsIGludCBjb2RlLCBp bnQgaWQsCiAKICAgICBjYXNlIEwyQ0FQX0VDSE9fUlNQOgogICAgICAgICAvKiBXZSBuZXZlciBp c3N1ZSBFY2hvIFJlcXVlc3RzIGN1cnJlbnRseS4gVE9ETyAgKi8KLSAgICAgICAgZnByaW50Zihz dGRlcnIsICIlczogdW5leHBlY3RlZCBFY2hvIFJlc3BvbnNlICglMDJ4KSAiCi0gICAgICAgICAg ICAgICAgICAgICAgICAicGFja2V0LCBpZ25vcmluZy5cbiIsIF9fZnVuY19fLCBpZCk7CisgICAg ICAgIGVycm9yX3JlcG9ydCgiJXM6IHVuZXhwZWN0ZWQgRWNobyBSZXNwb25zZSAoJTAyeCkgIgor ICAgICAgICAgICAgICAgICAgICAgInBhY2tldCwgaWdub3JpbmcuIiwgX19mdW5jX18sIGlkKTsK ICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEwyQ0FQX0lORk9fUkVROgpAQCAtOTE3LDggKzkx OCw4IEBAIHN0YXRpYyB2b2lkIGwyY2FwX2NvbW1hbmQoc3RydWN0IGwyY2FwX2luc3RhbmNlX3Mg KmwyY2FwLCBpbnQgY29kZSwgaW50IGlkLAogICAgICAgICB9CiAKICAgICAgICAgLyogV2UgbmV2 ZXIgaXNzdWUgSW5mb3JtYXRpb24gUmVxdWVzdHMgY3VycmVudGx5LiBUT0RPICAqLwotICAgICAg ICBmcHJpbnRmKHN0ZGVyciwgIiVzOiB1bmV4cGVjdGVkIEluZm9ybWF0aW9uIFJlc3BvbnNlICgl MDJ4KSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAicGFja2V0LCBpZ25vcmluZy5cbiIsIF9f ZnVuY19fLCBpZCk7CisgICAgICAgIGVycm9yX3JlcG9ydCgiJXM6IHVuZXhwZWN0ZWQgSW5mb3Jt YXRpb24gUmVzcG9uc2UgKCUwMngpICIKKyAgICAgICAgICAgICAgICAgICAgICJwYWNrZXQsIGln bm9yaW5nLiIsIF9fZnVuY19fLCBpZCk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgZGVmYXVsdDoK QEAgLTEwNjYsOCArMTA2Nyw4IEBAIHN0YXRpYyB2b2lkIGwyY2FwX2ZyYW1lX2luKHN0cnVjdCBs MmNhcF9pbnN0YW5jZV9zICpsMmNhcCwKICAgICB1aW50MTZfdCBsZW4gPSBsZTE2X3RvX2NwdShm cmFtZS0+bGVuKTsKIAogICAgIGlmICh1bmxpa2VseShjaWQgPj0gTDJDQVBfQ0lEX01BWCB8fCAh bDJjYXAtPmNpZFtjaWRdKSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBmcmFtZSBh ZGRyZXNzZWQgdG8gYSBub24tZXhpc3RlbnQgTDJDQVAgIgotICAgICAgICAgICAgICAgICAgICAg ICAgImNoYW5uZWwgJTA0eCByZWNlaXZlZC5cbiIsIF9fZnVuY19fLCBjaWQpOworICAgICAgICBl cnJvcl9yZXBvcnQoIiVzOiBmcmFtZSBhZGRyZXNzZWQgdG8gYSBub24tZXhpc3RlbnQgTDJDQVAg IgorICAgICAgICAgICAgICAgICAgICAgImNoYW5uZWwgJTA0eCByZWNlaXZlZC4iLCBfX2Z1bmNf XywgY2lkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTEyOCw5ICsxMTI5LDkgQEAg c3RhdGljIHVpbnQ4X3QgKmwyY2FwX2JmcmFtZV9vdXQoc3RydWN0IGJ0X2wyY2FwX2Nvbm5fcGFy YW1zX3MgKnBhcm0sIGludCBsZW4pCiAgICAgc3RydWN0IGwyY2FwX2NoYW5fcyAqY2hhbiA9IChz dHJ1Y3QgbDJjYXBfY2hhbl9zICopIHBhcm07CiAKICAgICBpZiAobGVuID4gY2hhbi0+cGFyYW1z LnJlbW90ZV9tdHUpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogQi1GcmFtZSBmb3Ig Q0lEICUwNHggbG9uZ2VyIHRoYW4gJWkgb2N0ZXRzLlxuIiwKLSAgICAgICAgICAgICAgICAgICAg ICAgIF9fZnVuY19fLAotICAgICAgICAgICAgICAgICAgICAgICAgY2hhbi0+cmVtb3RlX2NpZCwg Y2hhbi0+cGFyYW1zLnJlbW90ZV9tdHUpOworICAgICAgICBlcnJvcl9yZXBvcnQoIiVzOiBCLUZy YW1lIGZvciBDSUQgJTA0eCBsb25nZXIgdGhhbiAlaSBvY3RldHMuIiwKKyAgICAgICAgICAgICAg ICAgICAgIF9fZnVuY19fLAorICAgICAgICAgICAgICAgICAgICAgY2hhbi0+cmVtb3RlX2NpZCwg Y2hhbi0+cGFyYW1zLnJlbW90ZV9tdHUpOwogICAgICAgICBleGl0KC0xKTsKICAgICB9CiAKQEAg LTEzNTMsOCArMTM1NCw4IEBAIHZvaWQgYnRfbDJjYXBfcHNtX3JlZ2lzdGVyKHN0cnVjdCBidF9s MmNhcF9kZXZpY2VfcyAqZGV2LCBpbnQgcHNtLCBpbnQgbWluX210dSwKICAgICBzdHJ1Y3QgYnRf bDJjYXBfcHNtX3MgKm5ld19wc20gPSBsMmNhcF9wc20oZGV2LCBwc20pOwogCiAgICAgaWYgKG5l d19wc20pIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogUFNNICUwNHggYWxyZWFkeSBy ZWdpc3RlcmVkIGZvciBkZXZpY2UgYCVzJy5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBf X2Z1bmNfXywgcHNtLCBkZXYtPmRldmljZS5sbXBfbmFtZSk7CisgICAgICAgIGVycm9yX3JlcG9y dCgiJXM6IFBTTSAlMDR4IGFscmVhZHkgcmVnaXN0ZXJlZCBmb3IgZGV2aWNlIGAlcycuIiwKKyAg ICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBwc20sIGRldi0+ZGV2aWNlLmxtcF9uYW1lKTsK ICAgICAgICAgZXhpdCgtMSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9ody9idC9zZHAuYyBiL2h3 L2J0L3NkcC5jCmluZGV4IDdjMGQzOGI1MDQuLmY0YWJhOWQ3NGYgMTAwNjQ0Ci0tLSBhL2h3L2J0 L3NkcC5jCisrKyBiL2h3L2J0L3NkcC5jCkBAIC0xOCw2ICsxOCw3IEBACiAgKi8KIAogI2luY2x1 ZGUgInFlbXUvb3NkZXAuaCIKKyNpbmNsdWRlICJxZW11L2Vycm9yLXJlcG9ydC5oIgogI2luY2x1 ZGUgInFlbXUtY29tbW9uLmgiCiAjaW5jbHVkZSAicWVtdS9ob3N0LXV0aWxzLmgiCiAjaW5jbHVk ZSAiaHcvYnQuaCIKQEAgLTUwNiw3ICs1MDcsNyBAQCBzdGF0aWMgdm9pZCBidF9sMmNhcF9zZHBf c2R1X2luKHZvaWQgKm9wYXF1ZSwgY29uc3QgdWludDhfdCAqZGF0YSwgaW50IGxlbikKICAgICBp bnQgcnNwX2xlbiA9IDA7CiAKICAgICBpZiAobGVuIDwgNSkgewotICAgICAgICBmcHJpbnRmKHN0 ZGVyciwgIiVzOiBzaG9ydCBTRFAgUERVICglaUIpLlxuIiwgX19mdW5jX18sIGxlbik7CisgICAg ICAgIGVycm9yX3JlcG9ydCgiJXM6IHNob3J0IFNEUCBQRFUgKCVpQikuIiwgX19mdW5jX18sIGxl bik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTUxNyw3ICs1MTgsNyBAQCBzdGF0aWMg dm9pZCBidF9sMmNhcF9zZHBfc2R1X2luKHZvaWQgKm9wYXF1ZSwgY29uc3QgdWludDhfdCAqZGF0 YSwgaW50IGxlbikKICAgICBsZW4gLT0gNTsKIAogICAgIGlmIChsZW4gIT0gcGxlbikgewotICAg ICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiB3cm9uZyBTRFAgUERVIGxlbmd0aCAoJWlCICE9ICVp QikuXG4iLAorICAgICAgICBlcnJvcl9yZXBvcnQoIiVzOiB3cm9uZyBTRFAgUERVIGxlbmd0aCAo JWlCICE9ICVpQikuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBwbGVuLCBs ZW4pOwogICAgICAgICBlcnIgPSBTRFBfSU5WQUxJRF9QRFVfU0laRTsKICAgICAgICAgZ290byBy ZXNwb25kOwpAQCAtNTQ0LDcgKzU0NSw3IEBAIHN0YXRpYyB2b2lkIGJ0X2wyY2FwX3NkcF9zZHVf aW4odm9pZCAqb3BhcXVlLCBjb25zdCB1aW50OF90ICpkYXRhLCBpbnQgbGVuKQogICAgIGNhc2Ug U0RQX1NWQ19TRUFSQ0hfUlNQOgogICAgIGNhc2UgU0RQX1NWQ19TRUFSQ0hfQVRUUl9SU1A6CiAg ICAgZGVmYXVsdDoKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogdW5leHBlY3RlZCBTRFAg UERVIElEICUwMnguXG4iLAorICAgICAgICBlcnJvcl9yZXBvcnQoIiVzOiB1bmV4cGVjdGVkIFNE UCBQRFUgSUQgJTAyeC4iLAogICAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIHBkdV9p ZCk7CiAgICAgICAgIGVyciA9IFNEUF9JTlZBTElEX1NZTlRBWDsKICAgICAgICAgYnJlYWs7CmRp ZmYgLS1naXQgYS9ody9jaGFyL2V4eW5vczQyMTBfdWFydC5jIGIvaHcvY2hhci9leHlub3M0MjEw X3VhcnQuYwppbmRleCAzOTU3ZTc4YWJmLi5hMzg4ZjAxYTIzIDEwMDY0NAotLS0gYS9ody9jaGFy L2V4eW5vczQyMTBfdWFydC5jCisrKyBiL2h3L2NoYXIvZXh5bm9zNDIxMF91YXJ0LmMKQEAgLTI5 Niw3ICsyOTYsNyBAQCBzdGF0aWMgdm9pZCBleHlub3M0MjEwX3VhcnRfdXBkYXRlX2lycShFeHlu b3M0MjEwVWFydFN0YXRlICpzKQogICAgICAgICBxZW11X2lycV9yYWlzZShzLT5pcnEpOwogCiAj aWYgREVCVUdfSVJRCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiVUFSVCVkOiBJUlEgaGFzIGJl ZW4gcmFpc2VkOiAlMDh4XG4iLAorICAgICAgICBlcnJvcl9yZXBvcnQoIlVBUlQlZDogSVJRIGhh cyBiZWVuIHJhaXNlZDogJTA4eCIsCiAgICAgICAgICAgICAgICAgcy0+Y2hhbm5lbCwgcy0+cmVn W0lfKFVJTlRQKV0pOwogI2VuZGlmCiAKQEAgLTM4OCw3ICszODgsNyBAQCBzdGF0aWMgdm9pZCBl eHlub3M0MjEwX3VhcnRfd3JpdGUodm9pZCAqb3BhcXVlLCBod2FkZHIgb2Zmc2V0LAogICAgICAg ICAgICAgICogcWVtdV9jaHJfZmVfd3JpdGUgYW5kIGJhY2tncm91bmQgSS9PIGNhbGxiYWNrcyAq LwogICAgICAgICAgICAgcWVtdV9jaHJfZmVfd3JpdGVfYWxsKCZzLT5jaHIsICZjaCwgMSk7CiAj aWYgREVCVUdfVHhfREFUQQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlYyIsIGNoKTsK KyAgICAgICAgICAgIGVycm9yX3JlcG9ydCgiJWMiLCBjaCk7CiAjZW5kaWYKICAgICAgICAgICAg IHMtPnJlZ1tJXyhVVFJTVEFUKV0gfD0gVVRSU1RBVF9UUkFOU01JVFRFUl9FTVBUWSB8CiAgICAg ICAgICAgICAgICAgICAgIFVUUlNUQVRfVHhfQlVGRkVSX0VNUFRZOwpAQCAtNDAwLDcgKzQwMCw3 IEBAIHN0YXRpYyB2b2lkIGV4eW5vczQyMTBfdWFydF93cml0ZSh2b2lkICpvcGFxdWUsIGh3YWRk ciBvZmZzZXQsCiAgICAgY2FzZSBVSU5UUDoKICAgICAgICAgcy0+cmVnW0lfKFVJTlRQKV0gJj0g fnZhbDsKICAgICAgICAgcy0+cmVnW0lfKFVJTlRTUCldICY9IH52YWw7Ci0gICAgICAgIFBSSU5U X0RFQlVHKCJVQVJUJWQ6IFVJTlRQIFslMDR4XSBoYXZlIGJlZW4gY2xlYXJlZDogJTA4eFxuIiwK KyAgICAgICAgUFJJTlRfREVCVUcoIlVBUlQlZDogVUlOVFAgWyUwNHhdIGhhdmUgYmVlbiBjbGVh cmVkOiAlMDh4IiwKICAgICAgICAgICAgICAgICAgICAgcy0+Y2hhbm5lbCwgb2Zmc2V0LCBzLT5y ZWdbSV8oVUlOVFApXSk7CiAgICAgICAgIGV4eW5vczQyMTBfdWFydF91cGRhdGVfaXJxKHMpOwog ICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL2h3L2NoYXIvbWNmX3VhcnQuYyBiL2h3L2NoYXIv bWNmX3VhcnQuYwppbmRleCA1NmZhNDAyYjU4Li4xNGNiMDUxYmU5IDEwMDY0NAotLS0gYS9ody9j aGFyL21jZl91YXJ0LmMKKysrIGIvaHcvY2hhci9tY2ZfdWFydC5jCkBAIC02LDYgKzYsNyBAQAog ICogVGhpcyBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKICAqLwogI2luY2x1ZGUgInFl bXUvb3NkZXAuaCIKKyNpbmNsdWRlICJxZW11L2Vycm9yLXJlcG9ydC5oIgogI2luY2x1ZGUgImh3 L2h3LmgiCiAjaW5jbHVkZSAiaHcvc3lzYnVzLmgiCiAjaW5jbHVkZSAiaHcvbTY4ay9tY2YuaCIK QEAgLTE3NCw3ICsxNzUsNyBAQCBzdGF0aWMgdm9pZCBtY2ZfZG9fY29tbWFuZChtY2ZfdWFydF9z dGF0ZSAqcywgdWludDhfdCBjbWQpCiAgICAgICAgIG1jZl91YXJ0X2RvX3R4KHMpOwogICAgICAg ICBicmVhazsKICAgICBjYXNlIDM6IC8qIFJlc2VydmVkLiAgKi8KLSAgICAgICAgZnByaW50Zihz dGRlcnIsICJtY2ZfdWFydDogQmFkIFRYIGNvbW1hbmRcbiIpOworICAgICAgICBlcnJvcl9yZXBv cnQoIm1jZl91YXJ0OiBCYWQgVFggY29tbWFuZCIpOwogICAgICAgICBicmVhazsKICAgICB9CiAK QEAgLTE4OSw3ICsxOTAsNyBAQCBzdGF0aWMgdm9pZCBtY2ZfZG9fY29tbWFuZChtY2ZfdWFydF9z dGF0ZSAqcywgdWludDhfdCBjbWQpCiAgICAgICAgIHMtPnJ4X2VuYWJsZWQgPSAwOwogICAgICAg ICBicmVhazsKICAgICBjYXNlIDM6IC8qIFJlc2VydmVkLiAgKi8KLSAgICAgICAgZnByaW50Zihz dGRlcnIsICJtY2ZfdWFydDogQmFkIFJYIGNvbW1hbmRcbiIpOworICAgICAgICBlcnJvcl9yZXBv cnQoIm1jZl91YXJ0OiBCYWQgUlggY29tbWFuZCIpOwogICAgICAgICBicmVhazsKICAgICB9CiB9 CmRpZmYgLS1naXQgYS9ody9jaGFyL3NoX3NlcmlhbC5jIGIvaHcvY2hhci9zaF9zZXJpYWwuYwpp bmRleCA4MzViNTM3OGEwLi43YmIzZjNjNzBiIDEwMDY0NAotLS0gYS9ody9jaGFyL3NoX3Nlcmlh bC5jCisrKyBiL2h3L2NoYXIvc2hfc2VyaWFsLmMKQEAgLTI1LDYgKzI1LDcgQEAKICAqIFRIRSBT T0ZUV0FSRS4KICAqLwogI2luY2x1ZGUgInFlbXUvb3NkZXAuaCIKKyNpbmNsdWRlICJxZW11L2Vy cm9yLXJlcG9ydC5oIgogI2luY2x1ZGUgImh3L2h3LmgiCiAjaW5jbHVkZSAiaHcvc2g0L3NoLmgi CiAjaW5jbHVkZSAiY2hhcmRldi9jaGFyLWZlLmgiCkBAIC0xOTAsOCArMTkxLDggQEAgc3RhdGlj IHZvaWQgc2hfc2VyaWFsX3dyaXRlKHZvaWQgKm9wYXF1ZSwgaHdhZGRyIG9mZnMsCiAgICAgICAg IH0KICAgICB9CiAKLSAgICBmcHJpbnRmKHN0ZGVyciwgInNoX3NlcmlhbDogdW5zdXBwb3J0ZWQg d3JpdGUgdG8gMHglMDIiCi0gICAgICAgICAgICBIV0FERFJfUFJJeCAiXG4iLCBvZmZzKTsKKyAg ICBlcnJvcl9yZXBvcnQoInNoX3NlcmlhbDogdW5zdXBwb3J0ZWQgd3JpdGUgdG8gMHglMDIiCisg ICAgICAgICAgICAgICAgIEhXQUREUl9QUkl4ICIiLCBvZmZzKTsKICAgICBhYm9ydCgpOwogfQog CkBAIC0yOTAsOCArMjkxLDggQEAgc3RhdGljIHVpbnQ2NF90IHNoX3NlcmlhbF9yZWFkKHZvaWQg Km9wYXF1ZSwgaHdhZGRyIG9mZnMsCiAjZW5kaWYKIAogICAgIGlmIChyZXQgJiB+KCgxIDw8IDE2 KSAtIDEpKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAic2hfc2VyaWFsOiB1bnN1cHBvcnRl ZCByZWFkIGZyb20gMHglMDIiCi0gICAgICAgICAgICAgICAgSFdBRERSX1BSSXggIlxuIiwgb2Zm cyk7CisgICAgICAgIGVycm9yX3JlcG9ydCgic2hfc2VyaWFsOiB1bnN1cHBvcnRlZCByZWFkIGZy b20gMHglMDIiCisgICAgICAgICAgICAgICAgICAgICBIV0FERFJfUFJJeCAiIiwgb2Zmcyk7CiAg ICAgICAgIGFib3J0KCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9ody9jb3JlL2xvYWRlci5jIGIv aHcvY29yZS9sb2FkZXIuYwppbmRleCA0NTkzMDYxNDQ1Li45NWJkY2JiZTM2IDEwMDY0NAotLS0g YS9ody9jb3JlL2xvYWRlci5jCisrKyBiL2h3L2NvcmUvbG9hZGVyLmMKQEAgLTQzLDYgKzQzLDcg QEAKICAqLwogCiAjaW5jbHVkZSAicWVtdS9vc2RlcC5oIgorI2luY2x1ZGUgInFlbXUvZXJyb3It cmVwb3J0LmgiCiAjaW5jbHVkZSAicWFwaS9lcnJvci5oIgogI2luY2x1ZGUgImh3L2h3LmgiCiAj aW5jbHVkZSAiZGlzYXMvZGlzYXMuaCIKQEAgLTgyLDcgKzgzLDcgQEAgaW50IGxvYWRfaW1hZ2Uo Y29uc3QgY2hhciAqZmlsZW5hbWUsIHVpbnQ4X3QgKmFkZHIpCiAgICAgICAgIHJldHVybiAtMTsK ICAgICBzaXplID0gbHNlZWsoZmQsIDAsIFNFRUtfRU5EKTsKICAgICBpZiAoc2l6ZSA9PSAtMSkg ewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImZpbGUgJS0yMHM6IGdldCBzaXplIGVycm9yOiAl c1xuIiwKKyAgICAgICAgZXJyb3JfcmVwb3J0KCJmaWxlICUtMjBzOiBnZXQgc2l6ZSBlcnJvcjog JXMiLAogICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOwogICAgICAg ICBjbG9zZShmZCk7CiAgICAgICAgIHJldHVybiAtMTsKQEAgLTYyMyw3ICs2MjQsNyBAQCBzdGF0 aWMgaW50IGxvYWRfdWJvb3RfaW1hZ2UoY29uc3QgY2hhciAqZmlsZW5hbWUsIGh3YWRkciAqZXAs IGh3YWRkciAqbG9hZGFkZHIsCiAgICAgICAgIGdvdG8gb3V0OwogCiAgICAgaWYgKGhkci0+aWhf dHlwZSAhPSBpbWFnZV90eXBlKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiV3JvbmcgaW1h Z2UgdHlwZSAlZCwgZXhwZWN0ZWQgJWRcbiIsIGhkci0+aWhfdHlwZSwKKyAgICAgICAgZXJyb3Jf cmVwb3J0KCJXcm9uZyBpbWFnZSB0eXBlICVkLCBleHBlY3RlZCAlZCIsIGhkci0+aWhfdHlwZSwK ICAgICAgICAgICAgICAgICBpbWFnZV90eXBlKTsKICAgICAgICAgZ290byBvdXQ7CiAgICAgfQpA QCAtNjcwLDE0ICs2NzEsMTQgQEAgc3RhdGljIGludCBsb2FkX3Vib290X2ltYWdlKGNvbnN0IGNo YXIgKmZpbGVuYW1lLCBod2FkZHIgKmVwLCBod2FkZHIgKmxvYWRhZGRyLAogICAgICAgICBhZGRy ZXNzID0gKmxvYWRhZGRyOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBm cHJpbnRmKHN0ZGVyciwgIlVuc3VwcG9ydGVkIHUtYm9vdCBpbWFnZSB0eXBlICVkXG4iLCBoZHIt PmloX3R5cGUpOworICAgICAgICBlcnJvcl9yZXBvcnQoIlVuc3VwcG9ydGVkIHUtYm9vdCBpbWFn ZSB0eXBlICVkIiwgaGRyLT5paF90eXBlKTsKICAgICAgICAgZ290byBvdXQ7CiAgICAgfQogCiAg ICAgZGF0YSA9IGdfbWFsbG9jKGhkci0+aWhfc2l6ZSk7CiAKICAgICBpZiAocmVhZChmZCwgZGF0 YSwgaGRyLT5paF9zaXplKSAhPSBoZHItPmloX3NpemUpIHsKLSAgICAgICAgZnByaW50ZihzdGRl cnIsICJFcnJvciByZWFkaW5nIGZpbGVcbiIpOworICAgICAgICBlcnJvcl9yZXBvcnQoIkVycm9y IHJlYWRpbmcgZmlsZSIpOwogICAgICAgICBnb3RvIG91dDsKICAgICB9CiAKQEAgLTY5Myw3ICs2 OTQsNyBAQCBzdGF0aWMgaW50IGxvYWRfdWJvb3RfaW1hZ2UoY29uc3QgY2hhciAqZmlsZW5hbWUs IGh3YWRkciAqZXAsIGh3YWRkciAqbG9hZGFkZHIsCiAgICAgICAgIGJ5dGVzID0gZ3VuemlwKGRh dGEsIG1heF9ieXRlcywgY29tcHJlc3NlZF9kYXRhLCBoZHItPmloX3NpemUpOwogICAgICAgICBn X2ZyZWUoY29tcHJlc3NlZF9kYXRhKTsKICAgICAgICAgaWYgKGJ5dGVzIDwgMCkgewotICAgICAg ICAgICAgZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gZGVjb21wcmVzcyBnemlwcGVkIGltYWdl IVxuIik7CisgICAgICAgICAgICBlcnJvcl9yZXBvcnQoIlVuYWJsZSB0byBkZWNvbXByZXNzIGd6 aXBwZWQgaW1hZ2UhIik7CiAgICAgICAgICAgICBnb3RvIG91dDsKICAgICAgICAgfQogICAgICAg ICBoZHItPmloX3NpemUgPSBieXRlczsKQEAgLTc2Myw3ICs3NjQsNyBAQCBpbnQgbG9hZF9pbWFn ZV9nemlwcGVkX2J1ZmZlcihjb25zdCBjaGFyICpmaWxlbmFtZSwgdWludDY0X3QgbWF4X3N6LAog ICAgIGRhdGEgPSBnX21hbGxvYyhtYXhfc3opOwogICAgIGJ5dGVzID0gZ3VuemlwKGRhdGEsIG1h eF9zeiwgY29tcHJlc3NlZF9kYXRhLCBsZW4pOwogICAgIGlmIChieXRlcyA8IDApIHsKLSAgICAg ICAgZnByaW50ZihzdGRlcnIsICIlczogdW5hYmxlIHRvIGRlY29tcHJlc3MgZ3ppcHBlZCBrZXJu ZWwgZmlsZVxuIiwKKyAgICAgICAgZXJyb3JfcmVwb3J0KCIlczogdW5hYmxlIHRvIGRlY29tcHJl c3MgZ3ppcHBlZCBrZXJuZWwgZmlsZSIsCiAgICAgICAgICAgICAgICAgZmlsZW5hbWUpOwogICAg ICAgICBnb3RvIG91dDsKICAgICB9CkBAIC04OTMsOCArODk0LDggQEAgaW50IHJvbV9hZGRfZmls ZShjb25zdCBjaGFyICpmaWxlLCBjb25zdCBjaGFyICpmd19kaXIsCiAgICAgY2hhciBkZXZwYXRo WzEwMF07CiAKICAgICBpZiAoYXMgJiYgbXIpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJT cGVjaWZ5aW5nIGFuIEFkZHJlc3MgU3BhY2UgYW5kIE1lbW9yeSBSZWdpb24gaXMgIiBcCi0gICAg ICAgICAgICAgICAgIm5vdCB2YWxpZCB3aGVuIGxvYWRpbmcgYSByb21cbiIpOworICAgICAgICBl cnJvcl9yZXBvcnQoIlNwZWNpZnlpbmcgYW4gQWRkcmVzcyBTcGFjZSBhbmQgTWVtb3J5IFJlZ2lv biBpcyAiIFwKKyAgICAgICAgICAgICAgICAgICAgICJub3QgdmFsaWQgd2hlbiBsb2FkaW5nIGEg cm9tIik7CiAgICAgICAgIC8qIFdlIGhhdmVuJ3QgYWxsb2NhdGVkIGFueXRoaW5nIHNvIHdlIGRv bid0IG5lZWQgYW55IGNsZWFudXAgKi8KICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTkw OSw3ICs5MTAsNyBAQCBpbnQgcm9tX2FkZF9maWxlKGNvbnN0IGNoYXIgKmZpbGUsIGNvbnN0IGNo YXIgKmZ3X2RpciwKIAogICAgIGZkID0gb3Blbihyb20tPnBhdGgsIE9fUkRPTkxZIHwgT19CSU5B UlkpOwogICAgIGlmIChmZCA9PSAtMSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxk IG5vdCBvcGVuIG9wdGlvbiByb20gJyVzJzogJXNcbiIsCisgICAgICAgIGVycm9yX3JlcG9ydCgi Q291bGQgbm90IG9wZW4gb3B0aW9uIHJvbSAnJXMnOiAlcyIsCiAgICAgICAgICAgICAgICAgcm9t LT5wYXRoLCBzdHJlcnJvcihlcnJubykpOwogICAgICAgICBnb3RvIGVycjsKICAgICB9CkBAIC05 MjEsNyArOTIyLDcgQEAgaW50IHJvbV9hZGRfZmlsZShjb25zdCBjaGFyICpmaWxlLCBjb25zdCBj aGFyICpmd19kaXIsCiAgICAgcm9tLT5hZGRyICAgICA9IGFkZHI7CiAgICAgcm9tLT5yb21zaXpl ICA9IGxzZWVrKGZkLCAwLCBTRUVLX0VORCk7CiAgICAgaWYgKHJvbS0+cm9tc2l6ZSA9PSAtMSkg ewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInJvbTogZmlsZSAlLTIwczogZ2V0IHNpemUgZXJy b3I6ICVzXG4iLAorICAgICAgICBlcnJvcl9yZXBvcnQoInJvbTogZmlsZSAlLTIwczogZ2V0IHNp emUgZXJyb3I6ICVzIiwKICAgICAgICAgICAgICAgICByb20tPm5hbWUsIHN0cmVycm9yKGVycm5v KSk7CiAgICAgICAgIGdvdG8gZXJyOwogICAgIH0KQEAgLTkzMSw3ICs5MzIsNyBAQCBpbnQgcm9t X2FkZF9maWxlKGNvbnN0IGNoYXIgKmZpbGUsIGNvbnN0IGNoYXIgKmZ3X2RpciwKICAgICBsc2Vl ayhmZCwgMCwgU0VFS19TRVQpOwogICAgIHJjID0gcmVhZChmZCwgcm9tLT5kYXRhLCByb20tPmRh dGFzaXplKTsKICAgICBpZiAocmMgIT0gcm9tLT5kYXRhc2l6ZSkgewotICAgICAgICBmcHJpbnRm KHN0ZGVyciwgInJvbTogZmlsZSAlLTIwczogcmVhZCBlcnJvcjogcmM9JWQgKGV4cGVjdGVkICV6 ZClcbiIsCisgICAgICAgIGVycm9yX3JlcG9ydCgicm9tOiBmaWxlICUtMjBzOiByZWFkIGVycm9y OiByYz0lZCAoZXhwZWN0ZWQgJXpkKSIsCiAgICAgICAgICAgICAgICAgcm9tLT5uYW1lLCByYywg cm9tLT5kYXRhc2l6ZSk7CiAgICAgICAgIGdvdG8gZXJyOwogICAgIH0KQEAgLTExMDUsMTAgKzEx MDYsMTAgQEAgaW50IHJvbV9jaGVja19hbmRfcmVnaXN0ZXJfcmVzZXQodm9pZCkKICAgICAgICAg ICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGlmICgoYWRkciA+IHJvbS0+YWRkcikg JiYgKGFzID09IHJvbS0+YXMpKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInJvbTog cmVxdWVzdGVkIHJlZ2lvbnMgb3ZlcmxhcCAiCi0gICAgICAgICAgICAgICAgICAgICIocm9tICVz LiBmcmVlPTB4IiBUQVJHRVRfRk1UX3BseAotICAgICAgICAgICAgICAgICAgICAiLCBhZGRyPTB4 IiBUQVJHRVRfRk1UX3BseCAiKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgcm9tLT5uYW1lLCBh ZGRyLCByb20tPmFkZHIpOworICAgICAgICAgICAgZXJyb3JfcmVwb3J0KCJyb206IHJlcXVlc3Rl ZCByZWdpb25zIG92ZXJsYXAgIgorICAgICAgICAgICAgICAgICAgICAgICAgICIocm9tICVzLiBm cmVlPTB4IiBUQVJHRVRfRk1UX3BseAorICAgICAgICAgICAgICAgICAgICAgICAgICIsIGFkZHI9 MHgiIFRBUkdFVF9GTVRfcGx4ICIpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICByb20tPm5h bWUsIGFkZHIsIHJvbS0+YWRkcik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0K ICAgICAgICAgYWRkciAgPSByb20tPmFkZHI7CmRpZmYgLS1naXQgYS9ody9jb3JlL3B0aW1lci5j IGIvaHcvY29yZS9wdGltZXIuYwppbmRleCA3MjIxYzY4YTk4Li41MTRlMTc3ZGUyIDEwMDY0NAot LS0gYS9ody9jb3JlL3B0aW1lci5jCisrKyBiL2h3L2NvcmUvcHRpbWVyLmMKQEAgLTYsNiArNiw3 IEBACiAgKiBUaGlzIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBMR1BMLgogICovCiAj aW5jbHVkZSAicWVtdS9vc2RlcC5oIgorI2luY2x1ZGUgInFlbXUvZXJyb3ItcmVwb3J0LmgiCiAj aW5jbHVkZSAiaHcvaHcuaCIKICNpbmNsdWRlICJxZW11L3RpbWVyLmgiCiAjaW5jbHVkZSAiaHcv cHRpbWVyLmgiCkBAIC01Niw3ICs1Nyw3IEBAIHN0YXRpYyB2b2lkIHB0aW1lcl9yZWxvYWQocHRp bWVyX3N0YXRlICpzLCBpbnQgZGVsdGFfYWRqdXN0KQogCiAgICAgaWYgKHMtPnBlcmlvZCA9PSAw KSB7CiAgICAgICAgIGlmICghcXRlc3RfZW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBmcHJpbnRm KHN0ZGVyciwgIlRpbWVyIHdpdGggcGVyaW9kIHplcm8sIGRpc2FibGluZ1xuIik7CisgICAgICAg ICAgICBlcnJvcl9yZXBvcnQoIlRpbWVyIHdpdGggcGVyaW9kIHplcm8sIGRpc2FibGluZyIpOwog ICAgICAgICB9CiAgICAgICAgIHRpbWVyX2RlbChzLT50aW1lcik7CiAgICAgICAgIHMtPmVuYWJs ZWQgPSAwOwpAQCAtODksNyArOTAsNyBAQCBzdGF0aWMgdm9pZCBwdGltZXJfcmVsb2FkKHB0aW1l cl9zdGF0ZSAqcywgaW50IGRlbHRhX2FkanVzdCkKIAogICAgIGlmIChkZWx0YSA9PSAwKSB7CiAg ICAgICAgIGlmICghcXRlc3RfZW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVy ciwgIlRpbWVyIHdpdGggZGVsdGEgemVybywgZGlzYWJsaW5nXG4iKTsKKyAgICAgICAgICAgIGVy cm9yX3JlcG9ydCgiVGltZXIgd2l0aCBkZWx0YSB6ZXJvLCBkaXNhYmxpbmciKTsKICAgICAgICAg fQogICAgICAgICB0aW1lcl9kZWwocy0+dGltZXIpOwogICAgICAgICBzLT5lbmFibGVkID0gMDsK QEAgLTI2Myw3ICsyNjQsNyBAQCB2b2lkIHB0aW1lcl9ydW4ocHRpbWVyX3N0YXRlICpzLCBpbnQg b25lc2hvdCkKIAogICAgIGlmICh3YXNfZGlzYWJsZWQgJiYgcy0+cGVyaW9kID09IDApIHsKICAg ICAgICAgaWYgKCFxdGVzdF9lbmFibGVkKCkpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJy LCAiVGltZXIgd2l0aCBwZXJpb2QgemVybywgZGlzYWJsaW5nXG4iKTsKKyAgICAgICAgICAgIGVy cm9yX3JlcG9ydCgiVGltZXIgd2l0aCBwZXJpb2QgemVybywgZGlzYWJsaW5nIik7CiAgICAgICAg IH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL2h3L2NyaXMvYXhpc19kZXY4 OC5jIGIvaHcvY3Jpcy9heGlzX2Rldjg4LmMKaW5kZXggNWViNTUyYmNlMi4uZDEyMTgzNmI2OSAx MDA2NDQKLS0tIGEvaHcvY3Jpcy9heGlzX2Rldjg4LmMKKysrIGIvaHcvY3Jpcy9heGlzX2Rldjg4 LmMKQEAgLTIzLDYgKzIzLDcgQEAKICAqLwogCiAjaW5jbHVkZSAicWVtdS9vc2RlcC5oIgorI2lu Y2x1ZGUgInFlbXUvZXJyb3ItcmVwb3J0LmgiCiAjaW5jbHVkZSAicWFwaS9lcnJvci5oIgogI2lu Y2x1ZGUgInFlbXUtY29tbW9uLmgiCiAjaW5jbHVkZSAiY3B1LmgiCkBAIC0zNDksNyArMzUwLDcg QEAgdm9pZCBheGlzZGV2ODhfaW5pdChNYWNoaW5lU3RhdGUgKm1hY2hpbmUpCiAgICAgICAgIGxp LmNtZGxpbmUgPSBrZXJuZWxfY21kbGluZTsKICAgICAgICAgY3Jpc19sb2FkX2ltYWdlKGNwdSwg JmxpKTsKICAgICB9IGVsc2UgaWYgKCFxdGVzdF9lbmFibGVkKCkpIHsKLSAgICAgICAgZnByaW50 ZihzdGRlcnIsICJLZXJuZWwgaW1hZ2UgbXVzdCBiZSBzcGVjaWZpZWRcbiIpOworICAgICAgICBl cnJvcl9yZXBvcnQoIktlcm5lbCBpbWFnZSBtdXN0IGJlIHNwZWNpZmllZCIpOwogICAgICAgICBl eGl0KDEpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2h3L2NyaXMvYm9vdC5jIGIvaHcvY3Jpcy9i b290LmMKaW5kZXggZjg5NmVkN2Y4Ni4uZjE5OWExM2E4MiAxMDA2NDQKLS0tIGEvaHcvY3Jpcy9i b290LmMKKysrIGIvaHcvY3Jpcy9ib290LmMKQEAgLTIzLDYgKzIzLDcgQEAKICAqLwogCiAjaW5j bHVkZSAicWVtdS9vc2RlcC5oIgorI2luY2x1ZGUgInFlbXUvZXJyb3ItcmVwb3J0LmgiCiAjaW5j bHVkZSAicWVtdS1jb21tb24uaCIKICNpbmNsdWRlICJjcHUuaCIKICNpbmNsdWRlICJody9ody5o IgpAQCAtODYsMTQgKzg3LDE0IEBAIHZvaWQgY3Jpc19sb2FkX2ltYWdlKENSSVNDUFUgKmNwdSwg c3RydWN0IGNyaXNfbG9hZF9pbmZvICpsaSkKICAgICB9CiAKICAgICBpZiAoaW1hZ2Vfc2l6ZSA8 IDApIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJxZW11OiBjb3VsZCBub3QgbG9hZCBrZXJu ZWwgJyVzJ1xuIiwKKyAgICAgICAgZXJyb3JfcmVwb3J0KCJxZW11OiBjb3VsZCBub3QgbG9hZCBr ZXJuZWwgJyVzJyIsCiAgICAgICAgICAgICAgICAgbGktPmltYWdlX2ZpbGVuYW1lKTsKICAgICAg ICAgZXhpdCgxKTsKICAgICB9CiAKICAgICBpZiAobGktPmNtZGxpbmUgJiYgKGtjbWRsaW5lX2xl biA9IHN0cmxlbihsaS0+Y21kbGluZSkpKSB7CiAgICAgICAgIGlmIChrY21kbGluZV9sZW4gPiAy NTYpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVG9vIGxvbmcgQ1JJUyBrZXJuZWwg Y21kbGluZSAobWF4IDI1NilcbiIpOworICAgICAgICAgICAgZXJyb3JfcmVwb3J0KCJUb28gbG9u ZyBDUklTIGtlcm5lbCBjbWRsaW5lIChtYXggMjU2KSIpOwogICAgICAgICAgICAgZXhpdCgxKTsK ICAgICAgICAgfQogICAgICAgICBwc3RyY3B5X3RhcmdwaHlzKCJjbWRsaW5lIiwgMHg0MDAwMDAw MCwgMjU2LCBsaS0+Y21kbGluZSk7CmRpZmYgLS1naXQgYS9ody9kaXNwbGF5L2JsaXp6YXJkLmMg Yi9ody9kaXNwbGF5L2JsaXp6YXJkLmMKaW5kZXggMjkxYWJlNmZjYS4uMGQxMmUwNzhjNCAxMDA2 NDQKLS0tIGEvaHcvZGlzcGxheS9ibGl6emFyZC5jCisrKyBiL2h3L2Rpc3BsYXkvYmxpenphcmQu YwpAQCAtNDc0LDcgKzQ3NCw3IEBAIHN0YXRpYyB1aW50MTZfdCBibGl6emFyZF9yZWdfcmVhZCh2 b2lkICpvcGFxdWUsIHVpbnQ4X3QgcmVnKQogICAgICAgICByZXR1cm4gcy0+Z3Bpb19wZG93bjsK IAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IHVua25vd24gcmVn aXN0ZXIgJTAyeFxuIiwgX19mdW5jX18sIHJlZyk7CisgICAgICAgIGVycm9yX3JlcG9ydCgiJXM6 IHVua25vd24gcmVnaXN0ZXIgJTAyeCIsIF9fZnVuY19fLCByZWcpOwogICAgICAgICByZXR1cm4g MDsKICAgICB9CiB9CkBAIC01MDEsNyArNTAxLDcgQEAgc3RhdGljIHZvaWQgYmxpenphcmRfcmVn X3dyaXRlKHZvaWQgKm9wYXF1ZSwgdWludDhfdCByZWcsIHVpbnQxNl90IHZhbHVlKQogICAgIGNh c2UgMHgwYzoJLyogUExMIE1vZGUgQ29udHJvbCAwICovCiAgICAgICAgIHMtPnBsbF9tb2RlID0g dmFsdWUgJiAweDc3OwogICAgICAgICBpZiAoKHZhbHVlICYgMykgPT0gMCB8fCAodmFsdWUgJiAz KSA9PSAzKQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogd3JvbmcgUExMIENvbnRy b2wgYml0cyAoJWkpXG4iLAorICAgICAgICAgICAgZXJyb3JfcmVwb3J0KCIlczogd3JvbmcgUExM IENvbnRyb2wgYml0cyAoJWkpIiwKICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIHZhbHVl ICYgMyk7CiAgICAgICAgIGJyZWFrOwogCkBAIC01NDEsNyArNTQxLDcgQEAgc3RhdGljIHZvaWQg YmxpenphcmRfcmVnX3dyaXRlKHZvaWQgKm9wYXF1ZSwgdWludDhfdCByZWcsIHVpbnQxNl90IHZh bHVlKQogICAgIGNhc2UgMHgyODoJLyogTENEIFBhbmVsIENvbmZpZ3VyYXRpb24gKi8KICAgICAg ICAgcy0+bGNkX2NvbmZpZyA9IHZhbHVlICYgMHhmZjsKICAgICAgICAgaWYgKHZhbHVlICYgKDEg PDwgNykpCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBkYXRhIHN3YXAgbm90IHN1 cHBvcnRlZCFcbiIsIF9fZnVuY19fKTsKKyAgICAgICAgICAgIGVycm9yX3JlcG9ydCgiJXM6IGRh dGEgc3dhcCBub3Qgc3VwcG9ydGVkISIsIF9fZnVuY19fKTsKICAgICAgICAgYnJlYWs7CiAKICAg ICBjYXNlIDB4MmE6CS8qIExDRCBIb3Jpem9udGFsIERpc3BsYXkgV2lkdGggKi8KQEAgLTU4NSw3 ICs1ODUsNyBAQCBzdGF0aWMgdm9pZCBibGl6emFyZF9yZWdfd3JpdGUodm9pZCAqb3BhcXVlLCB1 aW50OF90IHJlZywgdWludDE2X3QgdmFsdWUpCiAgICAgY2FzZSAweDQwOgkvKiBIaWdoLXNwZWVk IFNlcmlhbCBJbnRlcmZhY2UgVHggQ29uZmlndXJhdGlvbiBQb3J0IDEgKi8KICAgICAgICAgcy0+ aHNzaV9jb25maWdbMV0gPSB2YWx1ZTsKICAgICAgICAgaWYgKCgodmFsdWUgPj4gNCkgJiAzKSA9 PSAzKQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogSWxsZWdhbCBhY3RpdmUtZGF0 YS1saW5rcyB2YWx1ZVxuIiwKKyAgICAgICAgICAgIGVycm9yX3JlcG9ydCgiJXM6IElsbGVnYWwg YWN0aXZlLWRhdGEtbGlua3MgdmFsdWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f ZnVuY19fKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAweDQyOgkvKiBIaWdoLXNwZWVkIFNl cmlhbCBJbnRlcmZhY2UgVHggTW9kZSAqLwpAQCAtNjQxLDcgKzY0MSw3IEBAIHN0YXRpYyB2b2lk IGJsaXp6YXJkX3JlZ193cml0ZSh2b2lkICpvcGFxdWUsIHVpbnQ4X3QgcmVnLCB1aW50MTZfdCB2 YWx1ZSkKICAgICAgICAgcy0+ZW5hYmxlID0gdmFsdWUgJiAxOwogICAgICAgICBzLT5ibGFuayA9 ICh2YWx1ZSA+PiAxKSAmIDE7CiAgICAgICAgIGlmICh2YWx1ZSAmICgxIDw8IDQpKQotICAgICAg ICAgICAgZnByaW50ZihzdGRlcnIsICIlczogTWFjcm92aXNpb24gZW5hYmxlIGF0dGVtcHQhXG4i LCBfX2Z1bmNfXyk7CisgICAgICAgICAgICBlcnJvcl9yZXBvcnQoIiVzOiBNYWNyb3Zpc2lvbiBl bmFibGUgYXR0ZW1wdCEiLCBfX2Z1bmNfXyk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSAw eDZhOgkvKiBTcGVjaWFsIEVmZmVjdHMgKi8KQEAgLTcxNyw3ICs3MTcsNyBAQCBzdGF0aWMgdm9p ZCBibGl6emFyZF9yZWdfd3JpdGUodm9pZCAqb3BhcXVlLCB1aW50OF90IHJlZywgdWludDE2X3Qg dmFsdWUpCiAgICAgICAgIHMtPmlmb3JtYXQgPSB2YWx1ZSAmIDB4ZjsKICAgICAgICAgcy0+YnBw ID0gYmxpenphcmRfaWZvcm1hdF9icHBbcy0+aWZvcm1hdF07CiAgICAgICAgIGlmICghcy0+YnBw KQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogSWxsZWdhbCBvciB1bnN1cHBvcnRl ZCBpbnB1dCBmb3JtYXQgJXhcbiIsCisgICAgICAgICAgICBlcnJvcl9yZXBvcnQoIiVzOiBJbGxl Z2FsIG9yIHVuc3VwcG9ydGVkIGlucHV0IGZvcm1hdCAleCIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19mdW5jX18sIHMtPmlmb3JtYXQpOwogICAgICAgICBicmVhazsKICAgICBjYXNl IDB4OGU6CS8qIERhdGEgU291cmNlIFNlbGVjdCAqLwpAQCAtNzI5LDcgKzcyOSw3IEBAIHN0YXRp YyB2b2lkIGJsaXp6YXJkX3JlZ193cml0ZSh2b2lkICpvcGFxdWUsIHVpbnQ4X3QgcmVnLCB1aW50 MTZfdCB2YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5p eVsxXSAhPSBzLT5veVsxXSkpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAhKChzLT5peFsx XSAtIHMtPml4WzBdKSAmIChzLT5peVsxXSAtIHMtPml5WzBdKSAmCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIChzLT5veFsxXSAtIHMtPm94WzBdKSAmIChzLT5veVsxXSAtIHMtPm95WzBdKSAm IDEpKQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogSWxsZWdhbCBpbnB1dC9vdXRw dXQgd2luZG93IHBvc2l0aW9uc1xuIiwKKyAgICAgICAgICAgIGVycm9yX3JlcG9ydCgiJXM6IEls bGVnYWwgaW5wdXQvb3V0cHV0IHdpbmRvdyBwb3NpdGlvbnMiLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fZnVuY19fKTsKIAogICAgICAgICBibGl6emFyZF90cmFuc2Zlcl9zZXR1cChz KTsKQEAgLTc4Myw4ICs3ODMsOCBAQCBzdGF0aWMgdm9pZCBibGl6emFyZF9yZWdfd3JpdGUodm9p ZCAqb3BhcXVlLCB1aW50OF90IHJlZywgdWludDE2X3QgdmFsdWUpCiAgICAgY2FzZSAweGU2Ogkv KiBQb3dlci1zYXZlICovCiAgICAgICAgIHMtPnBtID0gdmFsdWUgJiAweDgzOwogICAgICAgICBp ZiAodmFsdWUgJiBzLT5tb2RlICYgMSkKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6 IFRoZSBkaXNwbGF5IG11c3QgYmUgZGlzYWJsZWQgYmVmb3JlIGVudGVyaW5nICIKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiU3RhbmRieSBNb2RlXG4iLCBfX2Z1bmNfXyk7CisgICAgICAg ICAgICBlcnJvcl9yZXBvcnQoIiVzOiBUaGUgZGlzcGxheSBtdXN0IGJlIGRpc2FibGVkIGJlZm9y ZSBlbnRlcmluZyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIlN0YW5kYnkgTW9kZSIsIF9f ZnVuY19fKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAweGU4OgkvKiBOb24tZGlzcGxheSBQ ZXJpb2QgQ29udHJvbCAvIFN0YXR1cyAqLwogICAgICAgICBzLT5zdGF0dXMgPSB2YWx1ZSAmIDB4 MWI7CkBAIC04MTUsNyArODE1LDcgQEAgc3RhdGljIHZvaWQgYmxpenphcmRfcmVnX3dyaXRlKHZv aWQgKm9wYXF1ZSwgdWludDhfdCByZWcsIHVpbnQxNl90IHZhbHVlKQogICAgICAgICBicmVhazsK IAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IHVua25vd24gcmVn aXN0ZXIgJTAyeFxuIiwgX19mdW5jX18sIHJlZyk7CisgICAgICAgIGVycm9yX3JlcG9ydCgiJXM6 IHVua25vd24gcmVnaXN0ZXIgJTAyeCIsIF9fZnVuY19fLCByZWcpOwogICAgICAgICBicmVhazsK ICAgICB9CiB9CmRpZmYgLS1naXQgYS9ody9kaXNwbGF5L29tYXBfZHNzLmMgYi9ody9kaXNwbGF5 L29tYXBfZHNzLmMKaW5kZXggNjAxZjE3OGZkZC4uNTJkNmU3NTNkMyAxMDA2NDQKLS0tIGEvaHcv ZGlzcGxheS9vbWFwX2Rzcy5jCisrKyBiL2h3L2Rpc3BsYXkvb21hcF9kc3MuYwpAQCAtNDA2LDEw ICs0MDYsMTAgQEAgc3RhdGljIHZvaWQgb21hcF9kaXNjX3dyaXRlKHZvaWQgKm9wYXF1ZSwgaHdh ZGRyIGFkZHIsCiAgICAgICAgIHMtPmxjZC5lbmFibGUgPSAodmFsdWUgPj4gMCkgJiAxOwogICAg ICAgICBpZiAodmFsdWUgJiAoMSA8PCAxMikpCQkJLyogT1ZFUkxBWV9PUFRJTUlaQVRJT04gKi8K ICAgICAgICAgICAgIGlmICghKChzLT5kaXNwYy5sWzFdLmF0dHIgfCBzLT5kaXNwYy5sWzJdLmF0 dHIpICYgMSkpIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBPdmVybGF5 IE9wdGltaXphdGlvbiB3aGVuIG5vIG92ZXJsYXkgIgotICAgICAgICAgICAgICAgICAgICAgICAg InJlZ2lvbiBlZmZlY3RpdmVseSBleGlzdHMgbGVhZHMgdG8gIgotICAgICAgICAgICAgICAgICAg ICAgICAgInVucHJlZGljdGFibGUgYmVoYXZpb3VyIVxuIiwgX19mdW5jX18pOwotICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgIGVycm9yX3JlcG9ydCgiJXM6IE92ZXJsYXkgT3B0aW1pemF0 aW9uIHdoZW4gbm8gb3ZlcmxheSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWdp b24gZWZmZWN0aXZlbHkgZXhpc3RzIGxlYWRzIHRvICIKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgInVucHJlZGljdGFibGUgYmVoYXZpb3VyISIsIF9fZnVuY19fKTsKKyAgICAgICAgICAg fQogICAgICAgICBpZiAodmFsdWUgJiAoMSA8PCA2KSkgewkJCQkvKiBHT0RJR0lUQUwgKi8KICAg ICAgICAgICAgIC8qIFhYWDogU2hhZG93ZWQgZmllbGRzIGFyZToKICAgICAgICAgICAgICAqIHMt PmRpc3BjLmNvbmZpZwpAQCAtNTI1LDggKzUyNSw4IEBAIHN0YXRpYyB2b2lkIG9tYXBfZGlzY193 cml0ZSh2b2lkICpvcGFxdWUsIGh3YWRkciBhZGRyLAogICAgIGNhc2UgMHgwYTA6CS8qIERJU1BD X0dGWF9BVFRSSUJVVEVTICovCiAgICAgICAgIHMtPmRpc3BjLmxbMF0uYXR0ciA9IHZhbHVlICYg MHg3ZmY7CiAgICAgICAgIGlmICh2YWx1ZSAmICgzIDw8IDkpKQotICAgICAgICAgICAgZnByaW50 ZihzdGRlcnIsICIlczogQmlnLWVuZGlhbiBwaXhlbCBmb3JtYXQgbm90IHN1cHBvcnRlZFxuIiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXyk7CisgICAgICAgICAgICBlcnJv cl9yZXBvcnQoIiVzOiBCaWctZW5kaWFuIHBpeGVsIGZvcm1hdCBub3Qgc3VwcG9ydGVkIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXyk7CiAgICAgICAgIHMtPmRpc3BjLmxbMF0u ZW5hYmxlID0gdmFsdWUgJiAxOwogICAgICAgICBzLT5kaXNwYy5sWzBdLmJwcCA9ICh2YWx1ZSA+ PiAxKSAmIDB4ZjsKICAgICAgICAgcy0+ZGlzcGMuaW52YWxpZGF0ZSA9IDE7CkBAIC02MTcsNyAr NjE3LDcgQEAgc3RhdGljIHZvaWQgb21hcF9yZmJpX3RyYW5zZmVyX3N0YXJ0KHN0cnVjdCBvbWFw X2Rzc19zICpzKQogICAgIGlmIChzLT5yZmJpLmNvbnRyb2wgJiAoMSA8PCAxKSkgewkJCQkvKiBC WVBBU1MgKi8KICAgICAgICAgLyogVE9ETzogaW4gbm9uLUJ5cGFzcyBtb2RlIHdlIHByb2JhYmx5 IG5lZWQgdG8ganVzdCBhc3NlcnQgdGhlCiAgICAgICAgICAqIERSUSBhbmQgd2FpdCBmb3IgRE1B IHRvIHdyaXRlIHRoZSBwaXhlbHMuICAqLwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBC eXBhc3MgbW9kZSB1bmltcGxlbWVudGVkXG4iLCBfX2Z1bmNfXyk7CisgICAgICAgIGVycm9yX3Jl cG9ydCgiJXM6IEJ5cGFzcyBtb2RlIHVuaW1wbGVtZW50ZWQiLCBfX2Z1bmNfXyk7CiAgICAgICAg IHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2h3L2Rpc3BsYXkvcGwxMTAuYyBiL2h3L2Rp c3BsYXkvcGwxMTAuYwppbmRleCA4YzdkY2M2ZjBhLi5iOGI3OTAzZDM2IDEwMDY0NAotLS0gYS9o dy9kaXNwbGF5L3BsMTEwLmMKKysrIGIvaHcvZGlzcGxheS9wbDExMC5jCkBAIC0xNzQsNyArMTc0 LDcgQEAgc3RhdGljIHZvaWQgcGwxMTBfdXBkYXRlX2Rpc3BsYXkodm9pZCAqb3BhcXVlKQogICAg ICAgICBkZXN0X3dpZHRoID0gNDsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAg ICAgZnByaW50ZihzdGRlcnIsICJwbDExMDogQmFkIGNvbG9yIGRlcHRoXG4iKTsKKyAgICAgICAg ZXJyb3JfcmVwb3J0KCJwbDExMDogQmFkIGNvbG9yIGRlcHRoIik7CiAgICAgICAgIGV4aXQoMSk7 CiAgICAgfQogICAgIGlmIChzLT5jciAmIFBMMTEwX0NSX0JHUikKZGlmZiAtLWdpdCBhL2h3L2Rp c3BsYXkvcHhhMnh4X2xjZC5jIGIvaHcvZGlzcGxheS9weGEyeHhfbGNkLmMKaW5kZXggYjgzZjgw NzUzYS4uYWUzYTM2NTg0OSAxMDA2NDQKLS0tIGEvaHcvZGlzcGxheS9weGEyeHhfbGNkLmMKKysr IGIvaHcvZGlzcGxheS9weGEyeHhfbGNkLmMKQEAgLTEwNTAsNyArMTA1MCw3IEBAIFBYQTJ4eExD RFN0YXRlICpweGEyeHhfbGNkY19pbml0KE1lbW9yeVJlZ2lvbiAqc3lzbWVtLAogICAgICAgICBz LT5kZXN0X3dpZHRoID0gNDsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAg ZnByaW50ZihzdGRlcnIsICIlczogQmFkIGNvbG9yIGRlcHRoXG4iLCBfX2Z1bmNfXyk7CisgICAg ICAgIGVycm9yX3JlcG9ydCgiJXM6IEJhZCBjb2xvciBkZXB0aCIsIF9fZnVuY19fKTsKICAgICAg ICAgZXhpdCgxKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2h3L2Rpc3BsYXkvcXhsLXJlbmRlci5j IGIvaHcvZGlzcGxheS9xeGwtcmVuZGVyLmMKaW5kZXggZTdhYzRmODc4OS4uMGNkMDcwMjhhNCAx MDA2NDQKLS0tIGEvaHcvZGlzcGxheS9xeGwtcmVuZGVyLmMKKysrIGIvaHcvZGlzcGxheS9xeGwt cmVuZGVyLmMKQEAgLTc4LDcgKzc4LDcgQEAgdm9pZCBxeGxfcmVuZGVyX3Jlc2l6ZShQQ0lRWExE ZXZpY2UgKnF4bCkKICAgICAgICAgcXhsLT5ndWVzdF9wcmltYXJ5LmJpdHNfcHAgPSAzMjsKICAg ICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczog dW5oYW5kbGVkIGZvcm1hdDogJXhcbiIsIF9fZnVuY19fLAorICAgICAgICBlcnJvcl9yZXBvcnQo IiVzOiB1bmhhbmRsZWQgZm9ybWF0OiAleCIsIF9fZnVuY19fLAogICAgICAgICAgICAgICAgIHF4 bC0+Z3Vlc3RfcHJpbWFyeS5zdXJmYWNlLmZvcm1hdCk7CiAgICAgICAgIHF4bC0+Z3Vlc3RfcHJp bWFyeS5ieXRlc19wcCA9IDQ7CiAgICAgICAgIHF4bC0+Z3Vlc3RfcHJpbWFyeS5iaXRzX3BwID0g MzI7CkBAIC0yNDcsNyArMjQ3LDcgQEAgc3RhdGljIFFFTVVDdXJzb3IgKnF4bF9jdXJzb3IoUENJ UVhMRGV2aWNlICpxeGwsIFFYTEN1cnNvciAqY3Vyc29yLAogICAgICAgICB9CiAgICAgICAgIGJy ZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IG5vdCBpbXBs ZW1lbnRlZDogdHlwZSAlZFxuIiwKKyAgICAgICAgZXJyb3JfcmVwb3J0KCIlczogbm90IGltcGxl bWVudGVkOiB0eXBlICVkIiwKICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgY3Vyc29yLT5oZWFk ZXIudHlwZSk7CiAgICAgICAgIGdvdG8gZmFpbDsKICAgICB9CkBAIC0yNzUsOSArMjc1LDggQEAg aW50IHF4bF9yZW5kZXJfY3Vyc29yKFBDSVFYTERldmljZSAqcXhsLCBRWExDb21tYW5kRXh0ICpl eHQpCiAgICAgfQogCiAgICAgaWYgKHF4bC0+ZGVidWcgPiAxICYmIGNtZC0+dHlwZSAhPSBRWExf Q1VSU09SX01PVkUpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcyIsIF9fZnVuY19fKTsK KyAgICAgICAgZXJyb3JfcmVwb3J0KCIlcyIsIF9fZnVuY19fKTsKICAgICAgICAgcXhsX2xvZ19j bWRfY3Vyc29yKHF4bCwgY21kLCBleHQtPmdyb3VwX2lkKTsKLSAgICAgICAgZnByaW50ZihzdGRl cnIsICJcbiIpOwogICAgIH0KICAgICBzd2l0Y2ggKGNtZC0+dHlwZSkgewogICAgIGNhc2UgUVhM X0NVUlNPUl9TRVQ6CmRpZmYgLS1naXQgYS9ody9kaXNwbGF5L3F4bC5jIGIvaHcvZGlzcGxheS9x eGwuYwppbmRleCBhZTM2NzdmZDFlLi4wMTYzYTE4YmJiIDEwMDY0NAotLS0gYS9ody9kaXNwbGF5 L3F4bC5jCisrKyBiL2h3L2Rpc3BsYXkvcXhsLmMKQEAgLTg3NSw3ICs4NzUsNyBAQCBzdGF0aWMg dm9pZCBpbnRlcmZhY2Vfbm90aWZ5X3VwZGF0ZShRWExJbnN0YW5jZSAqc2luLCB1aW50MzJfdCB1 cGRhdGVfaWQpCiAgICAgICogUHJvYmFibHkgd2FzIGF0IHNvbWUgZWFybGllciB2ZXJzaW9uIHRo YXQgaXMgcHJpb3IgdG8gZ2l0IHN0YXJ0ICgyMDA5KSwKICAgICAgKiBhbmQgaXMgc3RpbGwgZ3Vl c3QgdHJpZ2VycmFibGUuCiAgICAgICovCi0gICAgZnByaW50ZihzdGRlcnIsICIlczogZGVwcmVj YXRlZFxuIiwgX19mdW5jX18pOworICAgIGVycm9yX3JlcG9ydCgiJXM6IGRlcHJlY2F0ZWQiLCBf X2Z1bmNfXyk7CiB9CiAKIC8qIGNhbGxlZCBmcm9tIHNwaWNlIHNlcnZlciB0aHJlYWQgY29udGV4 dCBvbmx5ICovCkBAIC05MDUsNyArOTA1LDcgQEAgc3RhdGljIHZvaWQgaW50ZXJmYWNlX2FzeW5j X2NvbXBsZXRlX2lvKFBDSVFYTERldmljZSAqcXhsLCBRWExDb29raWUgKmNvb2tpZSkKIAogICAg IHRyYWNlX3F4bF9pbnRlcmZhY2VfYXN5bmNfY29tcGxldGVfaW8ocXhsLT5pZCwgY3VycmVudF9h c3luYywgY29va2llKTsKICAgICBpZiAoIWNvb2tpZSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVy ciwgInF4bDogJXM6IGVycm9yLCBjb29raWUgaXMgTlVMTFxuIiwgX19mdW5jX18pOworICAgICAg ICBlcnJvcl9yZXBvcnQoInF4bDogJXM6IGVycm9yLCBjb29raWUgaXMgTlVMTCIsIF9fZnVuY19f KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoY29va2llICYmIGN1cnJlbnRfYXN5 bmMgIT0gY29va2llLT5pbykgewpAQCAtOTMwLDcgKzkzMCw3IEBAIHN0YXRpYyB2b2lkIGludGVy ZmFjZV9hc3luY19jb21wbGV0ZV9pbyhQQ0lRWExEZXZpY2UgKnF4bCwgUVhMQ29va2llICpjb29r aWUpCiAgICAgICAgIHF4bF9zcGljZV9kZXN0cm95X3N1cmZhY2Vfd2FpdF9jb21wbGV0ZShxeGws IGNvb2tpZS0+dS5zdXJmYWNlX2lkKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAg ICAgICAgZnByaW50ZihzdGRlcnIsICJxeGw6ICVzOiB1bmV4cGVjdGVkIGN1cnJlbnRfYXN5bmMg JWRcbiIsIF9fZnVuY19fLAorICAgICAgICBlcnJvcl9yZXBvcnQoInF4bDogJXM6IHVuZXhwZWN0 ZWQgY3VycmVudF9hc3luYyAlZCIsIF9fZnVuY19fLAogICAgICAgICAgICAgICAgIGN1cnJlbnRf YXN5bmMpOwogICAgIH0KICAgICBxeGxfc2VuZF9ldmVudHMocXhsLCBRWExfSU5URVJSVVBUX0lP X0NNRCk7CkBAIC05OTgsNyArOTk4LDcgQEAgc3RhdGljIHZvaWQgaW50ZXJmYWNlX2FzeW5jX2Nv bXBsZXRlKFFYTEluc3RhbmNlICpzaW4sIHVpbnQ2NF90IGNvb2tpZV90b2tlbikKICAgICBjYXNl IFFYTF9DT09LSUVfVFlQRV9QT1NUX0xPQURfTU9OSVRPUlNfQ09ORklHOgogICAgICAgICBicmVh azsKICAgICBkZWZhdWx0OgotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInF4bDogJXM6IHVuZXhw ZWN0ZWQgY29va2llIHR5cGUgJWRcbiIsCisgICAgICAgIGVycm9yX3JlcG9ydCgicXhsOiAlczog dW5leHBlY3RlZCBjb29raWUgdHlwZSAlZCIsCiAgICAgICAgICAgICAgICAgX19mdW5jX18sIGNv b2tpZS0+dHlwZSk7CiAgICAgICAgIGdfZnJlZShjb29raWUpOwogICAgIH0KQEAgLTE4NzUsNyAr MTg3NSw3IEBAIHN0YXRpYyB2b2lkIHF4bF9zZW5kX2V2ZW50cyhQQ0lRWExEZXZpY2UgKmQsIHVp bnQzMl90IGV2ZW50cykKICAgICB0cmFjZV9xeGxfc2VuZF9ldmVudHMoZC0+aWQsIGV2ZW50cyk7 CiAgICAgaWYgKCFxZW11X3NwaWNlX2Rpc3BsYXlfaXNfcnVubmluZygmZC0+c3NkKSkgewogICAg ICAgICAvKiBzcGljZS1zZXJ2ZXIgdHJhY2tzIGd1ZXN0IHJ1bm5pbmcgc3RhdGUgYW5kIHNob3Vs ZCBub3QgZG8gdGhpcyAqLwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBzcGljZS1zZXJ2 ZXIgYnVnOiBndWVzdCBzdG9wcGVkLCBpZ25vcmluZ1xuIiwKKyAgICAgICAgZXJyb3JfcmVwb3J0 KCIlczogc3BpY2Utc2VydmVyIGJ1ZzogZ3Vlc3Qgc3RvcHBlZCwgaWdub3JpbmciLAogICAgICAg ICAgICAgICAgIF9fZnVuY19fKTsKICAgICAgICAgdHJhY2VfcXhsX3NlbmRfZXZlbnRzX3ZtX3N0 b3BwZWQoZC0+aWQsIGV2ZW50cyk7CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL2h3L2Rp c3BsYXkvdGM2MzkzeGIuYyBiL2h3L2Rpc3BsYXkvdGM2MzkzeGIuYwppbmRleCA3OWYxNjE3NDBh Li44YjcwOGE4NThiIDEwMDY0NAotLS0gYS9ody9kaXNwbGF5L3RjNjM5M3hiLmMKKysrIGIvaHcv ZGlzcGxheS90YzYzOTN4Yi5jCkBAIC0xNTksNyArMTU5LDcgQEAgdm9pZCB0YzYzOTN4Yl9ncGlv X291dF9zZXQoVEM2MzkzeGJTdGF0ZSAqcywgaW50IGxpbmUsCiAgICAgICAgICAgICAgICAgICAg IHFlbXVfaXJxIGhhbmRsZXIpCiB7CiAgICAgaWYgKGxpbmUgPj0gVEM2MzkzWEJfR1BJT1MpIHsK LSAgICAgICAgZnByaW50ZihzdGRlcnIsICJUQzYzOTN4Yjogbm8gR1BJTyBwaW4gJWRcbiIsIGxp bmUpOworICAgICAgICBlcnJvcl9yZXBvcnQoIlRDNjM5M3hiOiBubyBHUElPIHBpbiAlZCIsIGxp bmUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xOTAsNyArMTkwLDcgQEAgc3RhdGlj IHZvaWQgdGM2MzkzeGJfbDN2KHZvaWQgKm9wYXF1ZSwgaW50IGxpbmUsIGludCBsZXZlbCkKIHsK ICAgICBUQzYzOTN4YlN0YXRlICpzID0gb3BhcXVlOwogICAgIHMtPmJsYW5rID0gIWxldmVsOwot ICAgIGZwcmludGYoc3RkZXJyLCAiTDNWOiAlZFxuIiwgbGV2ZWwpOworICAgIGVycm9yX3JlcG9y dCgiTDNWOiAlZCIsIGxldmVsKTsKIH0KIAogc3RhdGljIHZvaWQgdGM2MzkzeGJfc3ViX2lycSh2 b2lkICpvcGFxdWUsIGludCBsaW5lLCBpbnQgbGV2ZWwpIHsKQEAgLTI1Nyw3ICsyNTcsNyBAQCBz dGF0aWMgdWludDMyX3QgdGM2MzkzeGJfc2NyX3JlYWRiKFRDNjM5M3hiU3RhdGUgKnMsIGh3YWRk ciBhZGRyKQogICAgICAgICBTQ1JfUkVHX0IoQ09ORklHKTsKICAgICAgICAgU0NSX1JFR19CKERF QlVHKTsKICAgICB9Ci0gICAgZnByaW50ZihzdGRlcnIsICJ0YzYzOTN4Yl9zY3I6IHVuaGFuZGxl ZCByZWFkIGF0ICUwOHhcbiIsICh1aW50MzJfdCkgYWRkcik7CisgICAgZXJyb3JfcmVwb3J0KCJ0 YzYzOTN4Yl9zY3I6IHVuaGFuZGxlZCByZWFkIGF0ICUwOHgiLCAodWludDMyX3QpIGFkZHIpOwog ICAgIHJldHVybiAwOwogfQogI3VuZGVmIFNDUl9SRUdfQgpAQCAtMzE4LDggKzMxOCw4IEBAIHN0 YXRpYyB2b2lkIHRjNjM5M3hiX3Njcl93cml0ZWIoVEM2MzkzeGJTdGF0ZSAqcywgaHdhZGRyIGFk ZHIsIHVpbnQzMl90IHZhbHVlKQogICAgICAgICBTQ1JfUkVHX0IoQ09ORklHKTsKICAgICAgICAg U0NSX1JFR19CKERFQlVHKTsKICAgICB9Ci0gICAgZnByaW50ZihzdGRlcnIsICJ0YzYzOTN4Yl9z Y3I6IHVuaGFuZGxlZCB3cml0ZSBhdCAlMDh4OiAlMDJ4XG4iLAotCQkJCQkodWludDMyX3QpIGFk ZHIsIHZhbHVlICYgMHhmZik7CisgICAgZXJyb3JfcmVwb3J0KCJ0YzYzOTN4Yl9zY3I6IHVuaGFu ZGxlZCB3cml0ZSBhdCAlMDh4OiAlMDJ4IiwKKyAgICAgICAgICAgICAgICAgKHVpbnQzMl90KSBh ZGRyLCB2YWx1ZSAmIDB4ZmYpOwogfQogI3VuZGVmIFNDUl9SRUdfQgogI3VuZGVmIFNDUl9SRUdf VwpAQCAtMzQxLDcgKzM0MSw3IEBAIHN0YXRpYyB1aW50MzJfdCB0YzYzOTN4Yl9uYW5kX2NmZ19y ZWFkYihUQzYzOTN4YlN0YXRlICpzLCBod2FkZHIgYWRkcikgewogICAgICAgICBjYXNlIE5BTkRf Q0ZHX0JBU0UgKyAzOgogICAgICAgICAgICAgcmV0dXJuIHMtPm5hbmRfcGh5cyA+PiAoYWRkciAt IE5BTkRfQ0ZHX0JBU0UpOwogICAgIH0KLSAgICBmcHJpbnRmKHN0ZGVyciwgInRjNjM5M3hiX25h bmRfY2ZnOiB1bmhhbmRsZWQgcmVhZCBhdCAlMDh4XG4iLCAodWludDMyX3QpIGFkZHIpOworICAg IGVycm9yX3JlcG9ydCgidGM2MzkzeGJfbmFuZF9jZmc6IHVuaGFuZGxlZCByZWFkIGF0ICUwOHgi LCAodWludDMyX3QpIGFkZHIpOwogICAgIHJldHVybiAwOwogfQogc3RhdGljIHZvaWQgdGM2Mzkz eGJfbmFuZF9jZmdfd3JpdGViKFRDNjM5M3hiU3RhdGUgKnMsIGh3YWRkciBhZGRyLCB1aW50MzJf dCB2YWx1ZSkgewpAQCAtMzU3LDcgKzM1Nyw3IEBAIHN0YXRpYyB2b2lkIHRjNjM5M3hiX25hbmRf Y2ZnX3dyaXRlYihUQzYzOTN4YlN0YXRlICpzLCBod2FkZHIgYWRkciwgdWludDMyX3QgdmFsCiAg ICAgICAgICAgICBzLT5uYW5kX3BoeXMgfD0gKHZhbHVlICYgMHhmZikgPDwgKChhZGRyIC0gTkFO RF9DRkdfQkFTRSkgKiA4KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgZnByaW50 ZihzdGRlcnIsICJ0YzYzOTN4Yl9uYW5kX2NmZzogdW5oYW5kbGVkIHdyaXRlIGF0ICUwOHg6ICUw MnhcbiIsCisgICAgZXJyb3JfcmVwb3J0KCJ0YzYzOTN4Yl9uYW5kX2NmZzogdW5oYW5kbGVkIHdy aXRlIGF0ICUwOHg6ICUwMngiLAogCQkJCQkodWludDMyX3QpIGFkZHIsIHZhbHVlICYgMHhmZik7 CiB9CiAKQEAgLTM3NywxMiArMzc3LDE0IEBAIHN0YXRpYyB1aW50MzJfdCB0YzYzOTN4Yl9uYW5k X3JlYWRiKFRDNjM5M3hiU3RhdGUgKnMsIGh3YWRkciBhZGRyKSB7CiAgICAgICAgIGNhc2UgTkFO RF9JTVI6CiAgICAgICAgICAgICByZXR1cm4gcy0+bmFuZC5pbXI7CiAgICAgfQotICAgIGZwcmlu dGYoc3RkZXJyLCAidGM2MzkzeGJfbmFuZDogdW5oYW5kbGVkIHJlYWQgYXQgJTA4eFxuIiwgKHVp bnQzMl90KSBhZGRyKTsKKyAgICBlcnJvcl9yZXBvcnQoInRjNjM5M3hiX25hbmQ6IHVuaGFuZGxl ZCByZWFkIGF0ICUwOHgiLCAodWludDMyX3QpIGFkZHIpOwogICAgIHJldHVybiAwOwogfQotc3Rh dGljIHZvaWQgdGM2MzkzeGJfbmFuZF93cml0ZWIoVEM2MzkzeGJTdGF0ZSAqcywgaHdhZGRyIGFk ZHIsIHVpbnQzMl90IHZhbHVlKSB7Ci0vLyAgICBmcHJpbnRmKHN0ZGVyciwgInRjNjM5M3hiX25h bmQ6IHdyaXRlIGF0ICUwOHg6ICUwMnhcbiIsCi0vLwkJCQkJKHVpbnQzMl90KSBhZGRyLCB2YWx1 ZSAmIDB4ZmYpOworc3RhdGljIHZvaWQgdGM2MzkzeGJfbmFuZF93cml0ZWIoVEM2MzkzeGJTdGF0 ZSAqcywgaHdhZGRyIGFkZHIsIHVpbnQzMl90IHZhbHVlKQoreworICAgIC8qIGVycm9yX3JlcG9y dCgidGM2MzkzeGJfbmFuZDogd3JpdGUgYXQgJTA4eDogJTAyeCIsCisgICAgICogICAgICAgICAg ICAgICh1aW50MzJfdCkgYWRkciwgdmFsdWUgJiAweGZmKTsKKyAgICAgKi8KICAgICBzd2l0Y2gg KGFkZHIpIHsKICAgICAgICAgY2FzZSBOQU5EX0RBVEEgKyAwOgogICAgICAgICBjYXNlIE5BTkRf REFUQSArIDE6CkBAIC00MjAsNyArNDIyLDcgQEAgc3RhdGljIHZvaWQgdGM2MzkzeGJfbmFuZF93 cml0ZWIoVEM2MzkzeGJTdGF0ZSAqcywgaHdhZGRyIGFkZHIsIHVpbnQzMl90IHZhbHVlKQogICAg ICAgICAgICAgdGM2MzkzeGJfbmFuZF9pcnEocyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg fQotICAgIGZwcmludGYoc3RkZXJyLCAidGM2MzkzeGJfbmFuZDogdW5oYW5kbGVkIHdyaXRlIGF0 ICUwOHg6ICUwMnhcbiIsCisgICAgZXJyb3JfcmVwb3J0KCJ0YzYzOTN4Yl9uYW5kOiB1bmhhbmRs ZWQgd3JpdGUgYXQgJTA4eDogJTAyeCIsCiAJCQkJCSh1aW50MzJfdCkgYWRkciwgdmFsdWUgJiAw eGZmKTsKIH0KIApAQCAtNTIyLDEzICs1MjQsMTUgQEAgc3RhdGljIHVpbnQ2NF90IHRjNjM5M3hi X3JlYWRiKHZvaWQgKm9wYXF1ZSwgaHdhZGRyIGFkZHIsCiAgICAgfTsKIAogICAgIGlmICgoYWRk ciAmfjB4ZmYpID09IHMtPm5hbmRfcGh5cyAmJiBzLT5uYW5kX2VuYWJsZSkgewotLy8gICAgICAg IHJldHVybiB0YzYzOTN4Yl9uYW5kX3JlYWRiKHMsIGFkZHIgJiAweGZmKTsKKyAgICAgICAgLyog cmV0dXJuIHRjNjM5M3hiX25hbmRfcmVhZGIocywgYWRkciAmIDB4ZmYpOyAqLwogICAgICAgICB1 aW50OF90IGQgPSB0YzYzOTN4Yl9uYW5kX3JlYWRiKHMsIGFkZHIgJiAweGZmKTsKLS8vICAgICAg ICBmcHJpbnRmKHN0ZGVyciwgInRjNjM5M3hiX25hbmQ6IHJlYWQgYXQgJTA4eDogJTAyaGh4XG4i LCAodWludDMyX3QpIGFkZHIsIGQpOworICAgICAgICAvKiBlcnJvcl9yZXBvcnQoInRjNjM5M3hi X25hbmQ6IHJlYWQgYXQgJTA4eDogJTAyaGh4IiwKKyAgICAgICAgICogICAgICAgICAgICAgICh1 aW50MzJfdCkgYWRkciwgZCk7CisgICAgICAgICAqLwogICAgICAgICByZXR1cm4gZDsKICAgICB9 CiAKLS8vICAgIGZwcmludGYoc3RkZXJyLCAidGM2MzkzeGI6IHVuaGFuZGxlZCByZWFkIGF0ICUw OHhcbiIsICh1aW50MzJfdCkgYWRkcik7CisgICAgLyogZXJyb3JfcmVwb3J0KCJ0YzYzOTN4Yjog dW5oYW5kbGVkIHJlYWQgYXQgJTA4eCIsICh1aW50MzJfdCkgYWRkcik7ICovCiAgICAgcmV0dXJu IDA7CiB9CiAKQEAgLTU0OCw3ICs1NTIsNyBAQCBzdGF0aWMgdm9pZCB0YzYzOTN4Yl93cml0ZWIo dm9pZCAqb3BhcXVlLCBod2FkZHIgYWRkciwKICAgICBpZiAoKGFkZHIgJn4weGZmKSA9PSBzLT5u YW5kX3BoeXMgJiYgcy0+bmFuZF9lbmFibGUpCiAgICAgICAgIHRjNjM5M3hiX25hbmRfd3JpdGVi KHMsIGFkZHIgJiAweGZmLCB2YWx1ZSk7CiAgICAgZWxzZQotICAgICAgICBmcHJpbnRmKHN0ZGVy ciwgInRjNjM5M3hiOiB1bmhhbmRsZWQgd3JpdGUgYXQgJTA4eDogJTAyeFxuIiwKKyAgICAgICAg ZXJyb3JfcmVwb3J0KCJ0YzYzOTN4YjogdW5oYW5kbGVkIHdyaXRlIGF0ICUwOHg6ICUwMngiLAog ICAgICAgICAgICAgICAgICh1aW50MzJfdCkgYWRkciwgKGludCl2YWx1ZSAmIDB4ZmYpOwogfQog CmRpZmYgLS1naXQgYS9ody9kaXNwbGF5L3ZpcnRpby1ncHUtM2QuYyBiL2h3L2Rpc3BsYXkvdmly dGlvLWdwdS0zZC5jCmluZGV4IDhjMTA2YTY2MmQuLjg4YmMxYzg0YTYgMTAwNjQ0Ci0tLSBhL2h3 L2Rpc3BsYXkvdmlydGlvLWdwdS0zZC5jCisrKyBiL2h3L2Rpc3BsYXkvdmlydGlvLWdwdS0zZC5j CkBAIC00NzMsNyArNDczLDcgQEAgdm9pZCB2aXJ0aW9fZ3B1X3ZpcmdsX3Byb2Nlc3NfY21kKFZp cnRJT0dQVSAqZywKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoY21kLT5lcnJvcikg ewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBjdHJsIDB4JXgsIGVycm9yIDB4JXhcbiIs IF9fZnVuY19fLAorICAgICAgICBlcnJvcl9yZXBvcnQoIiVzOiBjdHJsIDB4JXgsIGVycm9yIDB4 JXgiLCBfX2Z1bmNfXywKICAgICAgICAgICAgICAgICBjbWQtPmNtZF9oZHIudHlwZSwgY21kLT5l cnJvcik7CiAgICAgICAgIHZpcnRpb19ncHVfY3RybF9yZXNwb25zZV9ub2RhdGEoZywgY21kLCBj bWQtPmVycm9yKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNTU2LDcgKzU1Niw3IEBAIHN0YXRpYyB2 b2lkIHZpcnRpb19ncHVfcHJpbnRfc3RhdHModm9pZCAqb3BhcXVlKQogICAgIFZpcnRJT0dQVSAq ZyA9IG9wYXF1ZTsKIAogICAgIGlmIChnLT5zdGF0cy5yZXF1ZXN0cykgewotICAgICAgICBmcHJp bnRmKHN0ZGVyciwgInN0YXRzOiB2cSByZXEgJTRkLCAlM2QgLS0gM0QgJTRkICglNWQpXG4iLAor ICAgICAgICBlcnJvcl9yZXBvcnQoInN0YXRzOiB2cSByZXEgJTRkLCAlM2QgLS0gM0QgJTRkICgl NWQpIiwKICAgICAgICAgICAgICAgICBnLT5zdGF0cy5yZXF1ZXN0cywKICAgICAgICAgICAgICAg ICBnLT5zdGF0cy5tYXhfaW5mbGlnaHQsCiAgICAgICAgICAgICAgICAgZy0+c3RhdHMucmVxXzNk LApkaWZmIC0tZ2l0IGEvaHcvZGlzcGxheS92bXdhcmVfdmdhLmMgYi9ody9kaXNwbGF5L3Ztd2Fy ZV92Z2EuYwppbmRleCA0YTY0YjQxMjU5Li40NGQ0MjVlMWY2IDEwMDY0NAotLS0gYS9ody9kaXNw bGF5L3Ztd2FyZV92Z2EuYworKysgYi9ody9kaXNwbGF5L3Ztd2FyZV92Z2EuYwpAQCAtMjkzLDQ1 ICsyOTMsNDUgQEAgc3RhdGljIGlubGluZSBib29sIHZtc3ZnYV92ZXJpZnlfcmVjdChEaXNwbGF5 U3VyZmFjZSAqc3VyZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpCiB7CiAgICAgaWYgKHggPCAwKSB7Ci0gICAgICAg IGZwcmludGYoc3RkZXJyLCAiJXM6IHggd2FzIDwgMCAoJWQpXG4iLCBuYW1lLCB4KTsKKyAgICAg ICAgZXJyb3JfcmVwb3J0KCIlczogeCB3YXMgPCAwICglZCkiLCBuYW1lLCB4KTsKICAgICAgICAg cmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBpZiAoeCA+IFNWR0FfTUFYX1dJRFRIKSB7Ci0gICAg ICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IHggd2FzID4gJWQgKCVkKVxuIiwgbmFtZSwgU1ZHQV9N QVhfV0lEVEgsIHgpOworICAgICAgICBlcnJvcl9yZXBvcnQoIiVzOiB4IHdhcyA+ICVkICglZCki LCBuYW1lLCBTVkdBX01BWF9XSURUSCwgeCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9 CiAgICAgaWYgKHcgPCAwKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IHcgd2FzIDwg MCAoJWQpXG4iLCBuYW1lLCB3KTsKKyAgICAgICAgZXJyb3JfcmVwb3J0KCIlczogdyB3YXMgPCAw ICglZCkiLCBuYW1lLCB3KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBpZiAo dyA+IFNWR0FfTUFYX1dJRFRIKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IHcgd2Fz ID4gJWQgKCVkKVxuIiwgbmFtZSwgU1ZHQV9NQVhfV0lEVEgsIHcpOworICAgICAgICBlcnJvcl9y ZXBvcnQoIiVzOiB3IHdhcyA+ICVkICglZCkiLCBuYW1lLCBTVkdBX01BWF9XSURUSCwgdyk7CiAg ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYgKHggKyB3ID4gc3VyZmFjZV93aWR0 aChzdXJmYWNlKSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiB3aWR0aCB3YXMgPiAl ZCAoeDogJWQsIHc6ICVkKVxuIiwKKyAgICAgICAgZXJyb3JfcmVwb3J0KCIlczogd2lkdGggd2Fz ID4gJWQgKHg6ICVkLCB3OiAlZCkiLAogICAgICAgICAgICAgICAgIG5hbWUsIHN1cmZhY2Vfd2lk dGgoc3VyZmFjZSksIHgsIHcpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAg aWYgKHkgPCAwKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IHkgd2FzIDwgMCAoJWQp XG4iLCBuYW1lLCB5KTsKKyAgICAgICAgZXJyb3JfcmVwb3J0KCIlczogeSB3YXMgPCAwICglZCki LCBuYW1lLCB5KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBpZiAoeSA+IFNW R0FfTUFYX0hFSUdIVCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiB5IHdhcyA+ICVk ICglZClcbiIsIG5hbWUsIFNWR0FfTUFYX0hFSUdIVCwgeSk7CisgICAgICAgIGVycm9yX3JlcG9y dCgiJXM6IHkgd2FzID4gJWQgKCVkKSIsIG5hbWUsIFNWR0FfTUFYX0hFSUdIVCwgeSk7CiAgICAg ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYgKGggPCAwKSB7Ci0gICAgICAgIGZwcmlu dGYoc3RkZXJyLCAiJXM6IGggd2FzIDwgMCAoJWQpXG4iLCBuYW1lLCBoKTsKKyAgICAgICAgZXJy b3JfcmVwb3J0KCIlczogaCB3YXMgPCAwICglZCkiLCBuYW1lLCBoKTsKICAgICAgICAgcmV0dXJu IGZhbHNlOwogICAgIH0KICAgICBpZiAoaCA+IFNWR0FfTUFYX0hFSUdIVCkgewotICAgICAgICBm cHJpbnRmKHN0ZGVyciwgIiVzOiBoIHdhcyA+ICVkICglZClcbiIsIG5hbWUsIFNWR0FfTUFYX0hF SUdIVCwgaCk7CisgICAgICAgIGVycm9yX3JlcG9ydCgiJXM6IGggd2FzID4gJWQgKCVkKSIsIG5h bWUsIFNWR0FfTUFYX0hFSUdIVCwgaCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAg ICAgaWYgKHkgKyBoID4gc3VyZmFjZV9oZWlnaHQoc3VyZmFjZSkpIHsKLSAgICAgICAgZnByaW50 ZihzdGRlcnIsICIlczogdXBkYXRlIGhlaWdodCA+ICVkICh5OiAlZCwgaDogJWQpXG4iLAorICAg ICAgICBlcnJvcl9yZXBvcnQoIiVzOiB1cGRhdGUgaGVpZ2h0ID4gJWQgKHk6ICVkLCBoOiAlZCki LAogICAgICAgICAgICAgICAgIG5hbWUsIHN1cmZhY2VfaGVpZ2h0KHN1cmZhY2UpLCB5LCBoKTsK ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTUyOSw3ICs1MjksNyBAQCBzdGF0aWMg aW5saW5lIHZvaWQgdm1zdmdhX2N1cnNvcl9kZWZpbmUoc3RydWN0IHZtc3ZnYV9zdGF0ZV9zICpz LAogI2VuZGlmCiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIGZwcmludGYo c3RkZXJyLCAiJXM6IHVuaGFuZGxlZCBicHAgJWQsIHVzaW5nIGZhbGxiYWNrIGN1cnNvclxuIiwK KyAgICAgICAgZXJyb3JfcmVwb3J0KCIlczogdW5oYW5kbGVkIGJwcCAlZCwgdXNpbmcgZmFsbGJh Y2sgY3Vyc29yIiwKICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgYy0+YnBwKTsKICAgICAgICAg Y3Vyc29yX3B1dChxYyk7CiAgICAgICAgIHFjID0gY3Vyc29yX2J1aWx0aW5fbGVmdF9wdHIoKTsK ZGlmZiAtLWdpdCBhL2h3L2RtYS9vbWFwX2RtYS5jIGIvaHcvZG1hL29tYXBfZG1hLmMKaW5kZXgg YWJkMThjNjdlYS4uNWQ3ZmUwNmQ5OCAxMDA2NDQKLS0tIGEvaHcvZG1hL29tYXBfZG1hLmMKKysr IGIvaHcvZG1hL29tYXBfZG1hLmMKQEAgLTE4LDYgKzE4LDcgQEAKICAqIHdpdGggdGhpcyBwcm9n cmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAgKi8KICNp bmNsdWRlICJxZW11L29zZGVwLmgiCisjaW5jbHVkZSAicWVtdS9lcnJvci1yZXBvcnQuaCIKICNp bmNsdWRlICJxZW11LWNvbW1vbi5oIgogI2luY2x1ZGUgInFlbXUvdGltZXIuaCIKICNpbmNsdWRl ICJody9hcm0vb21hcC5oIgpAQCAtMTg5OCwxMyArMTg5OSwxMyBAQCBzdGF0aWMgdm9pZCBvbWFw X2RtYTRfd3JpdGUodm9pZCAqb3BhcXVlLCBod2FkZHIgYWRkciwKICAgICAgICAgICAgIG9tYXBf ZG1hX3Jlc2V0KHMtPmRtYSk7CiAgICAgICAgIHMtPm9jcCA9IHZhbHVlICYgMHgzMzIxOwogICAg ICAgICBpZiAoKChzLT5vY3AgPj4gMTIpICYgMykgPT0gMykJCQkJLyogTUlETEVNT0RFICovCi0g ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBpbnZhbGlkIERNQSBwb3dlciBtb2RlXG4i LCBfX2Z1bmNfXyk7CisgICAgICAgICAgICBlcnJvcl9yZXBvcnQoIiVzOiBpbnZhbGlkIERNQSBw b3dlciBtb2RlIiwgX19mdW5jX18pOwogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIDB4Nzg6 CS8qIERNQTRfR0NSICovCiAgICAgICAgIHMtPmdjciA9IHZhbHVlICYgMHgwMGZmMDBmZjsKIAlp ZiAoKHZhbHVlICYgMHhmZikgPT0gMHgwMCkJCS8qIE1BWF9DSEFOTkVMX0ZJRk9fREVQVEggKi8K LSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IHdyb25nIEZJRk8gZGVwdGggaW4gR0NS XG4iLCBfX2Z1bmNfXyk7CisgICAgICAgICAgICBlcnJvcl9yZXBvcnQoIiVzOiB3cm9uZyBGSUZP IGRlcHRoIGluIEdDUiIsIF9fZnVuY19fKTsKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSAw eDgwIC4uLiAweGZmZjoKQEAgLTE5MzQsOCArMTkzNSw4IEBAIHN0YXRpYyB2b2lkIG9tYXBfZG1h NF93cml0ZSh2b2lkICpvcGFxdWUsIGh3YWRkciBhZGRyLAogICAgICAgICBjaC0+YnVmX2Rpc2Fi bGUgPSAodmFsdWUgPj4gMjUpICYgMTsKICAgICAgICAgY2gtPnNyY19zeW5jID0gKHZhbHVlID4+ IDI0KSAmIDE7CS8qIFhYWCBGb3IgQ2FtRE1BIG11c3QgYmUgMSAqLwogICAgICAgICBpZiAoY2gt PmJ1Zl9kaXNhYmxlICYmICFjaC0+c3JjX3N5bmMpCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVy ciwgIiVzOiBCdWZmZXJpbmcgZGlzYWJsZSBpcyBub3QgYWxsb3dlZCBpbiAiCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgImRlc3RpbmF0aW9uIHN5bmNocm9uaXNlZCBtb2RlXG4iLCBfX2Z1 bmNfXyk7CisgICAgICAgICAgICBlcnJvcl9yZXBvcnQoIiVzOiBCdWZmZXJpbmcgZGlzYWJsZSBp cyBub3QgYWxsb3dlZCBpbiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgImRlc3RpbmF0aW9u IHN5bmNocm9uaXNlZCBtb2RlIiwgX19mdW5jX18pOwogICAgICAgICBjaC0+cHJlZmV0Y2ggPSAo dmFsdWUgPj4gMjMpICYgMTsKICAgICAgICAgY2gtPmJzID0gKHZhbHVlID4+IDE4KSAmIDE7CiAg ICAgICAgIGNoLT50cmFuc3BhcmVudF9jb3B5ID0gKHZhbHVlID4+IDE3KSAmIDE7CkBAIC0xOTQ2 LDggKzE5NDcsOCBAQCBzdGF0aWMgdm9pZCBvbWFwX2RtYTRfd3JpdGUodm9pZCAqb3BhcXVlLCBo d2FkZHIgYWRkciwKICAgICAgICAgY2gtPnByaW9yaXR5ID0gKHZhbHVlICYgMHgwMDQwKSA+PiA2 OwogICAgICAgICBjaC0+ZnMgPSAodmFsdWUgJiAweDAwMjApID4+IDU7CiAgICAgICAgIGlmIChj aC0+ZnMgJiYgY2gtPmJzICYmIGNoLT5tb2RlWzBdICYmIGNoLT5tb2RlWzFdKQotICAgICAgICAg ICAgZnByaW50ZihzdGRlcnIsICIlczogRm9yIGEgcGFja2V0IHRyYW5zZmVyIGF0IGxlYXN0IG9u ZSBwb3J0ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVzdCBiZSBjb25zdGFudC1h ZGRyZXNzZWRcbiIsIF9fZnVuY19fKTsKKyAgICAgICAgICAgIGVycm9yX3JlcG9ydCgiJXM6IEZv ciBhIHBhY2tldCB0cmFuc2ZlciBhdCBsZWFzdCBvbmUgcG9ydCAiCisgICAgICAgICAgICAgICAg ICAgICAgICAgIm11c3QgYmUgY29uc3RhbnQtYWRkcmVzc2VkIiwgX19mdW5jX18pOwogICAgICAg ICBjaC0+c3luYyA9ICh2YWx1ZSAmIDB4MDAxZikgfCAoKHZhbHVlID4+IDE0KSAmIDB4MDA2MCk7 CiAgICAgICAgIC8qIFhYWCBtdXN0IGJlIDB4MDEgZm9yIENhbURNQSAqLwogCkBAIC0xOTc3LDgg KzE5NzgsOCBAQCBzdGF0aWMgdm9pZCBvbWFwX2RtYTRfd3JpdGUodm9pZCAqb3BhcXVlLCBod2Fk ZHIgYWRkciwKICAgICAgICAgY2gtPmVuZGlhblsxXSA9KHZhbHVlID4+IDE5KSAmIDE7CiAgICAg ICAgIGNoLT5lbmRpYW5fbG9ja1sxXSA9KHZhbHVlID4+IDE4KSAmIDE7CiAgICAgICAgIGlmIChj aC0+ZW5kaWFuWzBdICE9IGNoLT5lbmRpYW5bMV0pCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVy ciwgIiVzOiBETUEgZW5kaWFubmVzcyBjb252ZXJzaW9uIGVuYWJsZSBhdHRlbXB0XG4iLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fKTsKKyAgICAgICAgICAgIGVycm9yX3Jl cG9ydCgiJXM6IERNQSBlbmRpYW5uZXNzIGNvbnZlcnNpb24gZW5hYmxlIGF0dGVtcHQiLAorICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXyk7CiAgICAgICAgIGNoLT53cml0ZV9tb2Rl ID0gKHZhbHVlID4+IDE2KSAmIDM7CiAgICAgICAgIGNoLT5idXJzdFsxXSA9ICh2YWx1ZSAmIDB4 YzAwMCkgPj4gMTQ7CiAgICAgICAgIGNoLT5wYWNrWzFdID0gKHZhbHVlICYgMHgyMDAwKSA+PiAx MzsKQEAgLTE5ODYsMTIgKzE5ODcsMTMgQEAgc3RhdGljIHZvaWQgb21hcF9kbWE0X3dyaXRlKHZv aWQgKm9wYXF1ZSwgaHdhZGRyIGFkZHIsCiAgICAgICAgIGNoLT5idXJzdFswXSA9ICh2YWx1ZSAm IDB4MDE4MCkgPj4gNzsKICAgICAgICAgY2gtPnBhY2tbMF0gPSAodmFsdWUgJiAweDAwNDApID4+ IDY7CiAgICAgICAgIGNoLT50cmFuc2xhdGVbMF0gPSAodmFsdWUgJiAweDAwM2MpID4+IDI7Ci0g ICAgICAgIGlmIChjaC0+dHJhbnNsYXRlWzBdIHwgY2gtPnRyYW5zbGF0ZVsxXSkKLSAgICAgICAg ICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGJhZCBNUmVxQWRkcmVzc1RyYW5zbGF0ZSBzaWRlYmFu ZCBzaWduYWxcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18pOworICAg ICAgICBpZiAoY2gtPnRyYW5zbGF0ZVswXSB8IGNoLT50cmFuc2xhdGVbMV0pIHsKKyAgICAgICAg ICAgIGVycm9yX3JlcG9ydCgiJXM6IGJhZCBNUmVxQWRkcmVzc1RyYW5zbGF0ZSBzaWRlYmFuZCBz aWduYWwiLAorICAgICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fKTsKKyAgICAgICAgfQog ICAgICAgICBjaC0+ZGF0YV90eXBlID0gMSA8PCAodmFsdWUgJiAzKTsKICAgICAgICAgaWYgKCh2 YWx1ZSAmIDMpID09IDMpIHsKLSAgICAgICAgICAgIHByaW50ZigiJXM6IGJhZCBkYXRhX3R5cGUg Zm9yIERNQSBjaGFubmVsXG4iLCBfX2Z1bmNfXyk7CisgICAgICAgICAgICBlcnJvcl9yZXBvcnQo IiVzOiBiYWQgZGF0YV90eXBlIGZvciBETUEgY2hhbm5lbCIsIF9fZnVuY19fKTsKICAgICAgICAg ICAgIGNoLT5kYXRhX3R5cGUgPj49IDE7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CmRpZmYg LS1naXQgYS9ody9kbWEvc29jX2RtYS5jIGIvaHcvZG1hL3NvY19kbWEuYwppbmRleCA5YmI0OTli ZjljLi43MzM5YTNlYzk1IDEwMDY0NAotLS0gYS9ody9kbWEvc29jX2RtYS5jCisrKyBiL2h3L2Rt YS9zb2NfZG1hLmMKQEAgLTE4LDYgKzE4LDcgQEAKICAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBu b3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAgKi8KICNpbmNsdWRlICJx ZW11L29zZGVwLmgiCisjaW5jbHVkZSAicWVtdS9lcnJvci1yZXBvcnQuaCIKICNpbmNsdWRlICJx ZW11LWNvbW1vbi5oIgogI2luY2x1ZGUgInFlbXUvdGltZXIuaCIKICNpbmNsdWRlICJody9hcm0v c29jX2RtYS5oIgpAQCAtMjcwLDExICsyNzEsMTEgQEAgdm9pZCBzb2NfZG1hX3BvcnRfYWRkX2Zp Zm8oc3RydWN0IHNvY19kbWFfcyAqc29jLCBod2FkZHIgdmlydF9iYXNlLAogICAgICAgICBpZiAo ZW50cnktPnR5cGUgPT0gc29jX2RtYV9wb3J0X21lbSkgewogICAgICAgICAgICAgaWYgKGVudHJ5 LT5hZGRyIDw9IHZpcnRfYmFzZSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5 LT5hZGRyICsgZW50cnktPnUubWVtLnNpemUgPiB2aXJ0X2Jhc2UpIHsKLSAgICAgICAgICAgICAg ICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBGSUZPIGF0ICUiUFJJeDY0Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICIgY29sbGlkZXMgd2l0aCBSQU0gcmVnaW9uIGF0ICUiUFJJeDY0Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItJSJQUkl4NjQgIlxuIiwgX19mdW5jX18s Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpcnRfYmFzZSwgZW50cnktPmFkZHIs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbnRyeS0+YWRkciArIGVudHJ5LT51 Lm1lbS5zaXplKSk7CisgICAgICAgICAgICAgICAgZXJyb3JfcmVwb3J0KCIlczogRklGTyBhdCAl IlBSSXg2NAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGNvbGxpZGVzIHdpdGggUkFN IHJlZ2lvbiBhdCAlIlBSSXg2NAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLSUiUFJJ eDY0ICIiLCBfX2Z1bmNfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlydF9iYXNl LCBlbnRyeS0+YWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVudHJ5LT5hZGRy ICsgZW50cnktPnUubWVtLnNpemUpKTsKICAgICAgICAgICAgICAgICBleGl0KC0xKTsKICAgICAg ICAgICAgIH0KIApAQCAtMjg0LDkgKzI4NSw5IEBAIHZvaWQgc29jX2RtYV9wb3J0X2FkZF9maWZv KHN0cnVjdCBzb2NfZG1hX3MgKnNvYywgaHdhZGRyIHZpcnRfYmFzZSwKICAgICAgICAgICAgIHdo aWxlIChlbnRyeSA8IGRtYS0+bWVtbWFwICsgZG1hLT5tZW1tYXBfc2l6ZSAmJgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGVudHJ5LT5hZGRyIDw9IHZpcnRfYmFzZSkgewogICAgICAgICAg ICAgICAgIGlmIChlbnRyeS0+YWRkciA9PSB2aXJ0X2Jhc2UgJiYgZW50cnktPnUuZmlmby5vdXQg PT0gb3V0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IEZJRk8g YXQgJSJQUkl4NjQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgY29sbGlk ZXMgRklGTyBhdCAlIlBSSXg2NCAiXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19mdW5jX18sIHZpcnRfYmFzZSwgZW50cnktPmFkZHIpOworICAgICAgICAgICAgICAg ICAgICBlcnJvcl9yZXBvcnQoIiVzOiBGSUZPIGF0ICUiUFJJeDY0CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiIGNvbGxpZGVzIEZJRk8gYXQgJSJQUkl4NjQgIiIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgdmlydF9iYXNlLCBlbnRyeS0+YWRk cik7CiAgICAgICAgICAgICAgICAgICAgIGV4aXQoLTEpOwogICAgICAgICAgICAgICAgIH0KIApA QCAtMzIxLDExICszMjIsMTEgQEAgdm9pZCBzb2NfZG1hX3BvcnRfYWRkX21lbShzdHJ1Y3Qgc29j X2RtYV9zICpzb2MsIHVpbnQ4X3QgKnBoeXNfYmFzZSwKICAgICAgICAgICAgIGlmICgoZW50cnkt PmFkZHIgPj0gdmlydF9iYXNlICYmIGVudHJ5LT5hZGRyIDwgdmlydF9iYXNlICsgc2l6ZSkgfHwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZW50cnktPmFkZHIgPD0gdmlydF9iYXNlICYm CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5hZGRyICsgZW50cnktPnUubWVt LnNpemUgPiB2aXJ0X2Jhc2UpKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIl czogUkFNIGF0ICUiUFJJeDY0ICItJSJQUkl4NjQKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIiBjb2xsaWRlcyB3aXRoIFJBTSByZWdpb24gYXQgJSJQUkl4NjQKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIi0lIlBSSXg2NCAiXG4iLCBfX2Z1bmNfXywKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdmlydF9iYXNlLCB2aXJ0X2Jhc2UgKyBzaXplLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+YWRkciwgZW50cnktPmFkZHIgKyBl bnRyeS0+dS5tZW0uc2l6ZSk7CisgICAgICAgICAgICAgICAgZXJyb3JfcmVwb3J0KCIlczogUkFN IGF0ICUiUFJJeDY0ICItJSJQUkl4NjQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBj b2xsaWRlcyB3aXRoIFJBTSByZWdpb24gYXQgJSJQUkl4NjQKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIi0lIlBSSXg2NCAiIiwgX19mdW5jX18sCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZpcnRfYmFzZSwgdmlydF9iYXNlICsgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZW50cnktPmFkZHIsIGVudHJ5LT5hZGRyICsgZW50cnktPnUubWVtLnNpemUpOwog ICAgICAgICAgICAgICAgIGV4aXQoLTEpOwogICAgICAgICAgICAgfQogCkBAIC0zMzQsMTEgKzMz NSwxMSBAQCB2b2lkIHNvY19kbWFfcG9ydF9hZGRfbWVtKHN0cnVjdCBzb2NfZG1hX3MgKnNvYywg dWludDhfdCAqcGh5c19iYXNlLAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKGVu dHJ5LT5hZGRyID49IHZpcnRfYmFzZSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVu dHJ5LT5hZGRyIDwgdmlydF9iYXNlICsgc2l6ZSkgewotICAgICAgICAgICAgICAgIGZwcmludGYo c3RkZXJyLCAiJXM6IFJBTSBhdCAlIlBSSXg2NCAiLSUiUFJJeDY0Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICIgY29sbGlkZXMgd2l0aCBGSUZPIGF0ICUiUFJJeDY0Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJcbiIsIF9fZnVuY19fLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB2aXJ0X2Jhc2UsIHZpcnRfYmFzZSArIHNpemUsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5hZGRyKTsKKyAgICAgICAgICAgICAgICBlcnJv cl9yZXBvcnQoIiVzOiBSQU0gYXQgJSJQUkl4NjQgIi0lIlBSSXg2NAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiIGNvbGxpZGVzIHdpdGggRklGTyBhdCAlIlBSSXg2NAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiIiwgX19mdW5jX18sCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZpcnRfYmFzZSwgdmlydF9iYXNlICsgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZW50cnktPmFkZHIpOwogICAgICAgICAgICAgICAgIGV4aXQoLTEpOwogICAgICAg ICAgICAgfQogCmRpZmYgLS1naXQgYS9ody9ncGlvL29tYXBfZ3Bpby5jIGIvaHcvZ3Bpby9vbWFw X2dwaW8uYwppbmRleCAwODQ3MjE5M2I1Li41N2FhMmU1NGY1IDEwMDY0NAotLS0gYS9ody9ncGlv L29tYXBfZ3Bpby5jCisrKyBiL2h3L2dwaW8vb21hcF9ncGlvLmMKQEAgLTM5OSw3ICszOTksNyBA QCBzdGF0aWMgdm9pZCBvbWFwMl9ncGlvX21vZHVsZV93cml0ZSh2b2lkICpvcGFxdWUsIGh3YWRk ciBhZGRyLAogCiAgICAgY2FzZSAweDEwOgkvKiBHUElPX1NZU0NPTkZJRyAqLwogICAgICAgICBp ZiAoKCh2YWx1ZSA+PiAzKSAmIDMpID09IDMpCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg IiVzOiBiYWQgSURMRU1PREUgdmFsdWVcbiIsIF9fZnVuY19fKTsKKyAgICAgICAgICAgIGVycm9y X3JlcG9ydCgiJXM6IGJhZCBJRExFTU9ERSB2YWx1ZSIsIF9fZnVuY19fKTsKICAgICAgICAgaWYg KHZhbHVlICYgMikKICAgICAgICAgICAgIG9tYXAyX2dwaW9fbW9kdWxlX3Jlc2V0KHMpOwogICAg ICAgICBzLT5jb25maWdbMF0gPSB2YWx1ZSAmIDB4MWQ7CmRpZmYgLS1naXQgYS9ody9pMmMvb21h cF9pMmMuYyBiL2h3L2kyYy9vbWFwX2kyYy5jCmluZGV4IDI2ZTNlNWViZjYuLmM4OTY2NGYzNDIg MTAwNjQ0Ci0tLSBhL2h3L2kyYy9vbWFwX2kyYy5jCisrKyBiL2h3L2kyYy9vbWFwX2kyYy5jCkBA IC0zNDAsMTMgKzM0MCwxMyBAQCBzdGF0aWMgdm9pZCBvbWFwX2kyY193cml0ZSh2b2lkICpvcGFx dWUsIGh3YWRkciBhZGRyLAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg aWYgKCh2YWx1ZSAmICgxIDw8IDE1KSkgJiYgISh2YWx1ZSAmICgxIDw8IDEwKSkpIHsJLyogTVNU ICovCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBJXjJDIHNsYXZlIG1vZGUgbm90 IHN1cHBvcnRlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXyk7Cisg ICAgICAgICAgICBlcnJvcl9yZXBvcnQoIiVzOiBJXjJDIHNsYXZlIG1vZGUgbm90IHN1cHBvcnRl ZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18pOwogICAgICAgICAgICAgYnJl YWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCh2YWx1ZSAmICgxIDw8IDE1KSkgJiYgdmFsdWUg JiAoMSA8PCA4KSkgewkJLyogWEEgKi8KLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6 IDEwLWJpdCBhZGRyZXNzaW5nIG1vZGUgbm90IHN1cHBvcnRlZFxuIiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2Z1bmNfXyk7CisgICAgICAgICAgICBlcnJvcl9yZXBvcnQoIiVzOiAx MC1iaXQgYWRkcmVzc2luZyBtb2RlIG5vdCBzdXBwb3J0ZWQiLAorICAgICAgICAgICAgICAgICAg ICAgICAgIF9fZnVuY19fKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg IGlmICgodmFsdWUgJiAoMSA8PCAxNSkpICYmIHZhbHVlICYgKDEgPDwgMCkpIHsJCS8qIFNUVCAq LwpAQCAtMzkzLDcgKzM5Myw3IEBAIHN0YXRpYyB2b2lkIG9tYXBfaTJjX3dyaXRlKHZvaWQgKm9w YXF1ZSwgaHdhZGRyIGFkZHIsCiAgICAgICAgICAgICAgICAgb21hcF9pMmNfaW50ZXJydXB0c191 cGRhdGUocyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIGlmICh2YWx1ZSAmICgxIDw8IDE1KSkJ CQkJCS8qIFNUX0VOICovCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBTeXN0ZW0g VGVzdCBub3Qgc3VwcG9ydGVkXG4iLCBfX2Z1bmNfXyk7CisgICAgICAgICAgICBlcnJvcl9yZXBv cnQoIiVzOiBTeXN0ZW0gVGVzdCBub3Qgc3VwcG9ydGVkIiwgX19mdW5jX18pOwogICAgICAgICBi cmVhazsKIAogICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQgYS9ody9pMzg2L2t2bS9hcGljLmMgYi9o dy9pMzg2L2t2bS9hcGljLmMKaW5kZXggMWRmNmQyNjgxNi4uZTkwYTFiOWIzYiAxMDA2NDQKLS0t IGEvaHcvaTM4Ni9rdm0vYXBpYy5jCisrKyBiL2h3L2kzODYva3ZtL2FwaWMuYwpAQCAtMTAsNiAr MTAsNyBAQAogICogU2VlIHRoZSBDT1BZSU5HIGZpbGUgaW4gdGhlIHRvcC1sZXZlbCBkaXJlY3Rv cnkuCiAgKi8KICNpbmNsdWRlICJxZW11L29zZGVwLmgiCisjaW5jbHVkZSAicWVtdS9lcnJvci1y ZXBvcnQuaCIKICNpbmNsdWRlICJxZW11LWNvbW1vbi5oIgogI2luY2x1ZGUgImNwdS5oIgogI2lu Y2x1ZGUgImh3L2kzODYvYXBpY19pbnRlcm5hbC5oIgpAQCAtMTI4LDcgKzEyOSw3IEBAIHN0YXRp YyB2b2lkIGt2bV9hcGljX3ZhcGljX2Jhc2VfdXBkYXRlKEFQSUNDb21tb25TdGF0ZSAqcykKIAog ICAgIHJldCA9IGt2bV92Y3B1X2lvY3RsKENQVShzLT5jcHUpLCBLVk1fU0VUX1ZBUElDX0FERFIs ICZ2YXBpZF9hZGRyKTsKICAgICBpZiAocmV0IDwgMCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVy ciwgIktWTTogc2V0dGluZyBWQVBJQyBhZGRyZXNzIGZhaWxlZCAoJXMpXG4iLAorICAgICAgICBl cnJvcl9yZXBvcnQoIktWTTogc2V0dGluZyBWQVBJQyBhZGRyZXNzIGZhaWxlZCAoJXMpIiwKICAg ICAgICAgICAgICAgICBzdHJlcnJvcigtcmV0KSk7CiAgICAgICAgIGFib3J0KCk7CiAgICAgfQpA QCAtMTQ1LDcgKzE0Niw3IEBAIHN0YXRpYyB2b2lkIGt2bV9hcGljX3B1dChDUFVTdGF0ZSAqY3Ms IHJ1bl9vbl9jcHVfZGF0YSBkYXRhKQogCiAgICAgcmV0ID0ga3ZtX3ZjcHVfaW9jdGwoQ1BVKHMt PmNwdSksIEtWTV9TRVRfTEFQSUMsICZrYXBpYyk7CiAgICAgaWYgKHJldCA8IDApIHsKLSAgICAg ICAgZnByaW50ZihzdGRlcnIsICJLVk1fU0VUX0xBUElDIGZhaWxlZDogJXNcbiIsIHN0cmVycm9y KHJldCkpOworICAgICAgICBlcnJvcl9yZXBvcnQoIktWTV9TRVRfTEFQSUMgZmFpbGVkOiAlcyIs IHN0cmVycm9yKHJldCkpOwogICAgICAgICBhYm9ydCgpOwogICAgIH0KIH0KQEAgLTE2Nyw3ICsx NjgsNyBAQCBzdGF0aWMgdm9pZCBkb19pbmplY3RfZXh0ZXJuYWxfbm1pKENQVVN0YXRlICpjcHUs IHJ1bl9vbl9jcHVfZGF0YSBkYXRhKQogICAgIGlmICghKGx2dCAmIEFQSUNfTFZUX01BU0tFRCkg JiYgKChsdnQgPj4gOCkgJiA3KSA9PSBBUElDX0RNX05NSSkgewogICAgICAgICByZXQgPSBrdm1f dmNwdV9pb2N0bChjcHUsIEtWTV9OTUkpOwogICAgICAgICBpZiAocmV0IDwgMCkgewotICAgICAg ICAgICAgZnByaW50ZihzdGRlcnIsICJLVk06IGluamVjdGlvbiBmYWlsZWQsIE5NSSBsb3N0ICgl cylcbiIsCisgICAgICAgICAgICBlcnJvcl9yZXBvcnQoIktWTTogaW5qZWN0aW9uIGZhaWxlZCwg Tk1JIGxvc3QgKCVzKSIsCiAgICAgICAgICAgICAgICAgICAgIHN0cmVycm9yKC1yZXQpKTsKICAg ICAgICAgfQogICAgIH0KQEAgLTE4NCw3ICsxODUsNyBAQCBzdGF0aWMgdm9pZCBrdm1fc2VuZF9t c2koTVNJTWVzc2FnZSAqbXNnKQogCiAgICAgcmV0ID0ga3ZtX2lycWNoaXBfc2VuZF9tc2koa3Zt X3N0YXRlLCAqbXNnKTsKICAgICBpZiAocmV0IDwgMCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVy ciwgIktWTTogaW5qZWN0aW9uIGZhaWxlZCwgTVNJIGxvc3QgKCVzKVxuIiwKKyAgICAgICAgZXJy b3JfcmVwb3J0KCJLVk06IGluamVjdGlvbiBmYWlsZWQsIE1TSSBsb3N0ICglcykiLAogICAgICAg ICAgICAgICAgIHN0cmVycm9yKC1yZXQpKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9ody9pMzg2 L2t2bS9jbG9jay5jIGIvaHcvaTM4Ni9rdm0vY2xvY2suYwppbmRleCAzNjNkMWI1NzQzLi5lMDVj MTU4N2NlIDEwMDY0NAotLS0gYS9ody9pMzg2L2t2bS9jbG9jay5jCisrKyBiL2h3L2kzODYva3Zt L2Nsb2NrLmMKQEAgLTE0LDYgKzE0LDcgQEAKICAqLwogCiAjaW5jbHVkZSAicWVtdS9vc2RlcC5o IgorI2luY2x1ZGUgInFlbXUvZXJyb3ItcmVwb3J0LmgiCiAjaW5jbHVkZSAicWVtdS1jb21tb24u aCIKICNpbmNsdWRlICJjcHUuaCIKICNpbmNsdWRlICJxZW11L2hvc3QtdXRpbHMuaCIKQEAgLTk5 LDcgKzEwMCw3IEBAIHN0YXRpYyB2b2lkIGt2bV91cGRhdGVfY2xvY2soS1ZNQ2xvY2tTdGF0ZSAq cykKIAogICAgIHJldCA9IGt2bV92bV9pb2N0bChrdm1fc3RhdGUsIEtWTV9HRVRfQ0xPQ0ssICZk YXRhKTsKICAgICBpZiAocmV0IDwgMCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIktWTV9H RVRfQ0xPQ0sgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IocmV0KSk7CisgICAgICAgIGVycm9yX3Jl cG9ydCgiS1ZNX0dFVF9DTE9DSyBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IocmV0KSk7CiAgICAgICAg ICAgICAgICAgYWJvcnQoKTsKICAgICB9CiAgICAgcy0+Y2xvY2sgPSBkYXRhLmNsb2NrOwpAQCAt MTc0LDcgKzE3NSw3IEBAIHN0YXRpYyB2b2lkIGt2bWNsb2NrX3ZtX3N0YXRlX2NoYW5nZSh2b2lk ICpvcGFxdWUsIGludCBydW5uaW5nLAogICAgICAgICBkYXRhLmNsb2NrID0gcy0+Y2xvY2s7CiAg ICAgICAgIHJldCA9IGt2bV92bV9pb2N0bChrdm1fc3RhdGUsIEtWTV9TRVRfQ0xPQ0ssICZkYXRh KTsKICAgICAgICAgaWYgKHJldCA8IDApIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAi S1ZNX1NFVF9DTE9DSyBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihyZXQpKTsKKyAgICAgICAgICAg IGVycm9yX3JlcG9ydCgiS1ZNX1NFVF9DTE9DSyBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IocmV0KSk7 CiAgICAgICAgICAgICBhYm9ydCgpOwogICAgICAgICB9CiAKQEAgLTE4NSw3ICsxODYsNyBAQCBz dGF0aWMgdm9pZCBrdm1jbG9ja192bV9zdGF0ZV9jaGFuZ2Uodm9pZCAqb3BhcXVlLCBpbnQgcnVu bmluZywKICAgICAgICAgICAgIHJldCA9IGt2bV92Y3B1X2lvY3RsKGNwdSwgS1ZNX0tWTUNMT0NL X0NUUkwsIDApOwogICAgICAgICAgICAgaWYgKHJldCkgewogICAgICAgICAgICAgICAgIGlmIChy ZXQgIT0gLUVJTlZBTCkgewotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVz OiAlc1xuIiwgX19mdW5jX18sIHN0cmVycm9yKC1yZXQpKTsKKyAgICAgICAgICAgICAgICAgICAg ZXJyb3JfcmVwb3J0KCIlczogJXMiLCBfX2Z1bmNfXywgc3RyZXJyb3IoLXJldCkpOwogICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CmRpZmYg LS1naXQgYS9ody9pMzg2L2t2bS9pODI1NC5jIGIvaHcvaTM4Ni9rdm0vaTgyNTQuYwppbmRleCA1 MjFhNTg0OThhLi4yN2YyNGIxMDkwIDEwMDY0NAotLS0gYS9ody9pMzg2L2t2bS9pODI1NC5jCisr KyBiL2h3L2kzODYva3ZtL2k4MjU0LmMKQEAgLTI0LDYgKzI0LDcgQEAKICAqLwogCiAjaW5jbHVk ZSAicWVtdS9vc2RlcC5oIgorI2luY2x1ZGUgInFlbXUvZXJyb3ItcmVwb3J0LmgiCiAjaW5jbHVk ZSA8bGludXgva3ZtLmg+CiAjaW5jbHVkZSAicWFwaS9lcnJvci5oIgogI2luY2x1ZGUgInFlbXUv dGltZXIuaCIKQEAgLTEwMSw3ICsxMDIsNyBAQCBzdGF0aWMgdm9pZCBrdm1fcGl0X2dldChQSVRD b21tb25TdGF0ZSAqcGl0KQogICAgIGlmIChrdm1faGFzX3BpdF9zdGF0ZTIoKSkgewogICAgICAg ICByZXQgPSBrdm1fdm1faW9jdGwoa3ZtX3N0YXRlLCBLVk1fR0VUX1BJVDIsICZrcGl0KTsKICAg ICAgICAgaWYgKHJldCA8IDApIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiS1ZNX0dF VF9QSVQyIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKHJldCkpOworICAgICAgICAgICAgZXJyb3Jf cmVwb3J0KCJLVk1fR0VUX1BJVDIgZmFpbGVkOiAlcyIsIHN0cmVycm9yKHJldCkpOwogICAgICAg ICAgICAgYWJvcnQoKTsKICAgICAgICAgfQogICAgICAgICBwaXQtPmNoYW5uZWxzWzBdLmlycV9k aXNhYmxlZCA9IGtwaXQuZmxhZ3MgJiBLVk1fUElUX0ZMQUdTX0hQRVRfTEVHQUNZOwpAQCAtMTEy LDcgKzExMyw3IEBAIHN0YXRpYyB2b2lkIGt2bV9waXRfZ2V0KFBJVENvbW1vblN0YXRlICpwaXQp CiAgICAgICAgICAqLwogICAgICAgICByZXQgPSBrdm1fdm1faW9jdGwoa3ZtX3N0YXRlLCBLVk1f R0VUX1BJVCwgJmtwaXQpOwogICAgICAgICBpZiAocmV0IDwgMCkgewotICAgICAgICAgICAgZnBy aW50ZihzdGRlcnIsICJLVk1fR0VUX1BJVCBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihyZXQpKTsK KyAgICAgICAgICAgIGVycm9yX3JlcG9ydCgiS1ZNX0dFVF9QSVQgZmFpbGVkOiAlcyIsIHN0cmVy cm9yKHJldCkpOwogICAgICAgICAgICAgYWJvcnQoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTE3 NSw3ICsxNzYsNyBAQCBzdGF0aWMgdm9pZCBrdm1fcGl0X3B1dChQSVRDb21tb25TdGF0ZSAqcGl0 KQogICAgICAgICAgICAgICAgICAgICAgICBrdm1faGFzX3BpdF9zdGF0ZTIoKSA/IEtWTV9TRVRf UElUMiA6IEtWTV9TRVRfUElULAogICAgICAgICAgICAgICAgICAgICAgICAma3BpdCk7CiAgICAg aWYgKHJldCA8IDApIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcyBmYWlsZWQ6ICVzXG4i LAorICAgICAgICBlcnJvcl9yZXBvcnQoIiVzIGZhaWxlZDogJXMiLAogICAgICAgICAgICAgICAg IGt2bV9oYXNfcGl0X3N0YXRlMigpID8gIktWTV9TRVRfUElUMiIgOiAiS1ZNX1NFVF9QSVQiLAog ICAgICAgICAgICAgICAgIHN0cmVycm9yKHJldCkpOwogICAgICAgICBhYm9ydCgpOwpkaWZmIC0t Z2l0IGEvaHcvaTM4Ni9rdm0vaTgyNTkuYyBiL2h3L2kzODYva3ZtL2k4MjU5LmMKaW5kZXggMTFk MWI3MjZiNi4uNzcwYTkzNDU1MiAxMDA2NDQKLS0tIGEvaHcvaTM4Ni9rdm0vaTgyNTkuYworKysg Yi9ody9pMzg2L2t2bS9pODI1OS5jCkBAIC0xMCw2ICsxMCw3IEBACiAgKiBTZWUgdGhlIENPUFlJ TkcgZmlsZSBpbiB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeS4KICAqLwogI2luY2x1ZGUgInFlbXUv b3NkZXAuaCIKKyNpbmNsdWRlICJxZW11L2Vycm9yLXJlcG9ydC5oIgogI2luY2x1ZGUgImh3L2lz YS9pODI1OV9pbnRlcm5hbC5oIgogI2luY2x1ZGUgImh3L2kzODYvYXBpY19pbnRlcm5hbC5oIgog I2luY2x1ZGUgInN5c2VtdS9rdm0uaCIKQEAgLTM5LDcgKzQwLDcgQEAgc3RhdGljIHZvaWQga3Zt X3BpY19nZXQoUElDQ29tbW9uU3RhdGUgKnMpCiAgICAgY2hpcC5jaGlwX2lkID0gcy0+bWFzdGVy ID8gS1ZNX0lSUUNISVBfUElDX01BU1RFUiA6IEtWTV9JUlFDSElQX1BJQ19TTEFWRTsKICAgICBy ZXQgPSBrdm1fdm1faW9jdGwoa3ZtX3N0YXRlLCBLVk1fR0VUX0lSUUNISVAsICZjaGlwKTsKICAg ICBpZiAocmV0IDwgMCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIktWTV9HRVRfSVJRQ0hJ UCBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihyZXQpKTsKKyAgICAgICAgZXJyb3JfcmVwb3J0KCJL Vk1fR0VUX0lSUUNISVAgZmFpbGVkOiAlcyIsIHN0cmVycm9yKHJldCkpOwogICAgICAgICBhYm9y dCgpOwogICAgIH0KIApAQCAtOTIsNyArOTMsNyBAQCBzdGF0aWMgdm9pZCBrdm1fcGljX3B1dChQ SUNDb21tb25TdGF0ZSAqcykKIAogICAgIHJldCA9IGt2bV92bV9pb2N0bChrdm1fc3RhdGUsIEtW TV9TRVRfSVJRQ0hJUCwgJmNoaXApOwogICAgIGlmIChyZXQgPCAwKSB7Ci0gICAgICAgIGZwcmlu dGYoc3RkZXJyLCAiS1ZNX1NFVF9JUlFDSElQIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKHJldCkp OworICAgICAgICBlcnJvcl9yZXBvcnQoIktWTV9TRVRfSVJRQ0hJUCBmYWlsZWQ6ICVzIiwgc3Ry ZXJyb3IocmV0KSk7CiAgICAgICAgIGFib3J0KCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvaHcv aTM4Ni9rdm0vaW9hcGljLmMgYi9ody9pMzg2L2t2bS9pb2FwaWMuYwppbmRleCA5OGNhNDgwNzky Li5hMzFiY2QyNjU4IDEwMDY0NAotLS0gYS9ody9pMzg2L2t2bS9pb2FwaWMuYworKysgYi9ody9p Mzg2L2t2bS9pb2FwaWMuYwpAQCAtMTEsNiArMTEsNyBAQAogICovCiAKICNpbmNsdWRlICJxZW11 L29zZGVwLmgiCisjaW5jbHVkZSAicWVtdS9lcnJvci1yZXBvcnQuaCIKICNpbmNsdWRlICJtb25p dG9yL21vbml0b3IuaCIKICNpbmNsdWRlICJody9pMzg2L3BjLmgiCiAjaW5jbHVkZSAiaHcvaTM4 Ni9pb2FwaWNfaW50ZXJuYWwuaCIKQEAgLTc0LDcgKzc1LDcgQEAgc3RhdGljIHZvaWQga3ZtX2lv YXBpY19nZXQoSU9BUElDQ29tbW9uU3RhdGUgKnMpCiAgICAgY2hpcC5jaGlwX2lkID0gS1ZNX0lS UUNISVBfSU9BUElDOwogICAgIHJldCA9IGt2bV92bV9pb2N0bChrdm1fc3RhdGUsIEtWTV9HRVRf SVJRQ0hJUCwgJmNoaXApOwogICAgIGlmIChyZXQgPCAwKSB7Ci0gICAgICAgIGZwcmludGYoc3Rk ZXJyLCAiS1ZNX0dFVF9JUlFDSElQIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKHJldCkpOworICAg ICAgICBlcnJvcl9yZXBvcnQoIktWTV9HRVRfSVJRQ0hJUCBmYWlsZWQ6ICVzIiwgc3RyZXJyb3Io cmV0KSk7CiAgICAgICAgIGFib3J0KCk7CiAgICAgfQogCkBAIC0xMDcsNyArMTA4LDcgQEAgc3Rh dGljIHZvaWQga3ZtX2lvYXBpY19wdXQoSU9BUElDQ29tbW9uU3RhdGUgKnMpCiAKICAgICByZXQg PSBrdm1fdm1faW9jdGwoa3ZtX3N0YXRlLCBLVk1fU0VUX0lSUUNISVAsICZjaGlwKTsKICAgICBp ZiAocmV0IDwgMCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIktWTV9HRVRfSVJRQ0hJUCBm YWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihyZXQpKTsKKyAgICAgICAgZXJyb3JfcmVwb3J0KCJLVk1f R0VUX0lSUUNISVAgZmFpbGVkOiAlcyIsIHN0cmVycm9yKHJldCkpOwogICAgICAgICBhYm9ydCgp OwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2h3L2kzODYvbXVsdGlib290LmMgYi9ody9pMzg2L211 bHRpYm9vdC5jCmluZGV4IGM3YjcwYzkxZDUuLmQyOTdhODhmOWQgMTAwNjQ0Ci0tLSBhL2h3L2kz ODYvbXVsdGlib290LmMKKysrIGIvaHcvaTM4Ni9tdWx0aWJvb3QuYwpAQCAtMjMsNiArMjMsNyBA QAogICovCiAKICNpbmNsdWRlICJxZW11L29zZGVwLmgiCisjaW5jbHVkZSAicWVtdS9lcnJvci1y ZXBvcnQuaCIKICNpbmNsdWRlICJxZW11LWNvbW1vbi5oIgogI2luY2x1ZGUgImNwdS5oIgogI2lu Y2x1ZGUgImh3L2h3LmgiCkBAIC0xODQsNyArMTg1LDcgQEAgaW50IGxvYWRfbXVsdGlib290KEZX Q2ZnU3RhdGUgKmZ3X2NmZywKICAgICBtZW1zZXQoJm1icywgMCwgc2l6ZW9mKG1icykpOwogCiAg ICAgaWYgKGZsYWdzICYgMHgwMDAwMDAwNCkgeyAvKiBNVUxUSUJPT1RfSEVBREVSX0hBU19WQkUg Ki8KLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJxZW11OiBtdWx0aWJvb3Qga25vd3MgVkJFLiB3 ZSBkb24ndC5cbiIpOworICAgICAgICBlcnJvcl9yZXBvcnQoInFlbXU6IG11bHRpYm9vdCBrbm93 cyBWQkUuIHdlIGRvbid0LiIpOwogICAgIH0KICAgICBpZiAoIShmbGFncyAmIDB4MDAwMTAwMDAp KSB7IC8qIE1VTFRJQk9PVF9IRUFERVJfSEFTX0FERFIgKi8KICAgICAgICAgdWludDY0X3QgZWxm X2VudHJ5OwpAQCAtMTkzLDcgKzE5NCw3IEBAIGludCBsb2FkX211bHRpYm9vdChGV0NmZ1N0YXRl ICpmd19jZmcsCiAgICAgICAgIGZjbG9zZShmKTsKIAogICAgICAgICBpZiAoKChzdHJ1Y3QgZWxm NjRfaGRyKiloZWFkZXIpLT5lX21hY2hpbmUgPT0gRU1fWDg2XzY0KSB7Ci0gICAgICAgICAgICBm cHJpbnRmKHN0ZGVyciwgIkNhbm5vdCBsb2FkIHg4Ni02NCBpbWFnZSwgZ2l2ZSBhIDMyYml0IG9u ZS5cbiIpOworICAgICAgICAgICAgZXJyb3JfcmVwb3J0KCJDYW5ub3QgbG9hZCB4ODYtNjQgaW1h Z2UsIGdpdmUgYSAzMmJpdCBvbmUuIik7CiAgICAgICAgICAgICBleGl0KDEpOwogICAgICAgICB9 CiAKQEAgLTIwMSw3ICsyMDIsNyBAQCBpbnQgbG9hZF9tdWx0aWJvb3QoRldDZmdTdGF0ZSAqZndf Y2ZnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlbGZfbG93LCAmZWxmX2hpZ2gs IDAsIEkzODZfRUxGX01BQ0hJTkUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwg MCk7CiAgICAgICAgIGlmIChrZXJuZWxfc2l6ZSA8IDApIHsKLSAgICAgICAgICAgIGZwcmludGYo c3RkZXJyLCAiRXJyb3Igd2hpbGUgbG9hZGluZyBlbGYga2VybmVsXG4iKTsKKyAgICAgICAgICAg IGVycm9yX3JlcG9ydCgiRXJyb3Igd2hpbGUgbG9hZGluZyBlbGYga2VybmVsIik7CiAgICAgICAg ICAgICBleGl0KDEpOwogICAgICAgICB9CiAgICAgICAgIG1oX2xvYWRfYWRkciA9IGVsZl9sb3c7 CkBAIC0yMTAsNyArMjExLDcgQEAgaW50IGxvYWRfbXVsdGlib290KEZXQ2ZnU3RhdGUgKmZ3X2Nm ZywKIAogICAgICAgICBtYnMubWJfYnVmID0gZ19tYWxsb2MobWJfa2VybmVsX3NpemUpOwogICAg ICAgICBpZiAocm9tX2NvcHkobWJzLm1iX2J1ZiwgbWhfbG9hZF9hZGRyLCBtYl9rZXJuZWxfc2l6 ZSkgIT0gbWJfa2VybmVsX3NpemUpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJy b3Igd2hpbGUgZmV0Y2hpbmcgZWxmIGtlcm5lbCBmcm9tIHJvbVxuIik7CisgICAgICAgICAgICBl cnJvcl9yZXBvcnQoIkVycm9yIHdoaWxlIGZldGNoaW5nIGVsZiBrZXJuZWwgZnJvbSByb20iKTsK ICAgICAgICAgICAgIGV4aXQoMSk7CiAgICAgICAgIH0KIApAQCAtMjI0LDcgKzIyNSw3IEBAIGlu dCBsb2FkX211bHRpYm9vdChGV0NmZ1N0YXRlICpmd19jZmcsCiAKICAgICAgICAgbWhfbG9hZF9h ZGRyID0gbGRsX3AoaGVhZGVyK2krMTYpOwogICAgICAgICBpZiAobWhfaGVhZGVyX2FkZHIgPCBt aF9sb2FkX2FkZHIpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiaW52YWxpZCBtaF9s b2FkX2FkZHIgYWRkcmVzc1xuIik7CisgICAgICAgICAgICBlcnJvcl9yZXBvcnQoImludmFsaWQg bWhfbG9hZF9hZGRyIGFkZHJlc3MiKTsKICAgICAgICAgICAgIGV4aXQoMSk7CiAgICAgICAgIH0K IApAQCAtMjM0LDE5ICsyMzUsMTkgQEAgaW50IGxvYWRfbXVsdGlib290KEZXQ2ZnU3RhdGUgKmZ3 X2NmZywKIAogICAgICAgICBpZiAobWhfbG9hZF9lbmRfYWRkcikgewogICAgICAgICAgICAgaWYg KG1oX2Jzc19lbmRfYWRkciA8IG1oX2xvYWRfYWRkcikgewotICAgICAgICAgICAgICAgIGZwcmlu dGYoc3RkZXJyLCAiaW52YWxpZCBtaF9ic3NfZW5kX2FkZHIgYWRkcmVzc1xuIik7CisgICAgICAg ICAgICAgICAgZXJyb3JfcmVwb3J0KCJpbnZhbGlkIG1oX2Jzc19lbmRfYWRkciBhZGRyZXNzIik7 CiAgICAgICAgICAgICAgICAgZXhpdCgxKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1i X2tlcm5lbF9zaXplID0gbWhfYnNzX2VuZF9hZGRyIC0gbWhfbG9hZF9hZGRyOwogCiAgICAgICAg ICAgICBpZiAobWhfbG9hZF9lbmRfYWRkciA8IG1oX2xvYWRfYWRkcikgewotICAgICAgICAgICAg ICAgIGZwcmludGYoc3RkZXJyLCAiaW52YWxpZCBtaF9sb2FkX2VuZF9hZGRyIGFkZHJlc3NcbiIp OworICAgICAgICAgICAgICAgIGVycm9yX3JlcG9ydCgiaW52YWxpZCBtaF9sb2FkX2VuZF9hZGRy IGFkZHJlc3MiKTsKICAgICAgICAgICAgICAgICBleGl0KDEpOwogICAgICAgICAgICAgfQogICAg ICAgICAgICAgbWJfbG9hZF9zaXplID0gbWhfbG9hZF9lbmRfYWRkciAtIG1oX2xvYWRfYWRkcjsK ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChrZXJuZWxfZmlsZV9zaXplIDwgbWJf a2VybmVsX3RleHRfb2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJp bnZhbGlkIGtlcm5lbF9maWxlX3NpemVcbiIpOworICAgICAgICAgICAgICAgIGVycm9yX3JlcG9y dCgiaW52YWxpZCBrZXJuZWxfZmlsZV9zaXplIik7CiAgICAgICAgICAgICAgICAgZXhpdCgxKTsK ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1iX2tlcm5lbF9zaXplID0ga2VybmVsX2ZpbGVf c2l6ZSAtIG1iX2tlcm5lbF90ZXh0X29mZnNldDsKQEAgLTI2OSw3ICsyNzAsNyBAQCBpbnQgbG9h ZF9tdWx0aWJvb3QoRldDZmdTdGF0ZSAqZndfY2ZnLAogICAgICAgICBtYnMubWJfYnVmID0gZ19t YWxsb2MobWJfa2VybmVsX3NpemUpOwogICAgICAgICBmc2VlayhmLCBtYl9rZXJuZWxfdGV4dF9v ZmZzZXQsIFNFRUtfU0VUKTsKICAgICAgICAgaWYgKGZyZWFkKG1icy5tYl9idWYsIDEsIG1iX2xv YWRfc2l6ZSwgZikgIT0gbWJfbG9hZF9zaXplKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVy ciwgImZyZWFkKCkgZmFpbGVkXG4iKTsKKyAgICAgICAgICAgIGVycm9yX3JlcG9ydCgiZnJlYWQo KSBmYWlsZWQiKTsKICAgICAgICAgICAgIGV4aXQoMSk7CiAgICAgICAgIH0KICAgICAgICAgbWVt c2V0KG1icy5tYl9idWYgKyBtYl9sb2FkX3NpemUsIDAsIG1iX2tlcm5lbF9zaXplIC0gbWJfbG9h ZF9zaXplKTsKQEAgLTMyNiw3ICszMjcsNyBAQCBpbnQgbG9hZF9tdWx0aWJvb3QoRldDZmdTdGF0 ZSAqZndfY2ZnLAogICAgICAgICAgICAgbWJfZGVidWcoIm11bHRpYm9vdCBsb2FkaW5nIG1vZHVs ZTogJXNcbiIsIHRtcGJ1Zik7CiAgICAgICAgICAgICBtYl9tb2RfbGVuZ3RoID0gZ2V0X2ltYWdl X3NpemUodG1wYnVmKTsKICAgICAgICAgICAgIGlmIChtYl9tb2RfbGVuZ3RoIDwgMCkgewotICAg ICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIG9wZW4gZmlsZSAnJXMnXG4i LCB0bXBidWYpOworICAgICAgICAgICAgICAgIGVycm9yX3JlcG9ydCgiRmFpbGVkIHRvIG9wZW4g ZmlsZSAnJXMnIiwgdG1wYnVmKTsKICAgICAgICAgICAgICAgICBleGl0KDEpOwogICAgICAgICAg ICAgfQogCmRpZmYgLS1naXQgYS9ody9pMzg2L3BjLmMgYi9ody9pMzg2L3BjLmMKaW5kZXggMDU5 ODVkNDkyNy4uY2EyNTQyNGMwOSAxMDA2NDQKLS0tIGEvaHcvaTM4Ni9wYy5jCisrKyBiL2h3L2kz ODYvcGMuYwpAQCAtODU2LDE0ICs4NTYsMTQgQEAgc3RhdGljIHZvaWQgbG9hZF9saW51eChQQ01h Y2hpbmVTdGF0ZSAqcGNtcywKICAgICBpZiAoIWYgfHwgIShrZXJuZWxfc2l6ZSA9IGdldF9maWxl X3NpemUoZikpIHx8CiAgICAgICAgIGZyZWFkKGhlYWRlciwgMSwgTUlOKEFSUkFZX1NJWkUoaGVh ZGVyKSwga2VybmVsX3NpemUpLCBmKSAhPQogICAgICAgICBNSU4oQVJSQVlfU0laRShoZWFkZXIp LCBrZXJuZWxfc2l6ZSkpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJxZW11OiBjb3VsZCBu b3QgbG9hZCBrZXJuZWwgJyVzJzogJXNcbiIsCisgICAgICAgIGVycm9yX3JlcG9ydCgicWVtdTog Y291bGQgbm90IGxvYWQga2VybmVsICclcyc6ICVzIiwKICAgICAgICAgICAgICAgICBrZXJuZWxf ZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7CiAgICAgICAgIGV4aXQoMSk7CiAgICAgfQogCiAg ICAgLyoga2VybmVsIHByb3RvY29sIHZlcnNpb24gKi8KICNpZiAwCi0gICAgZnByaW50ZihzdGRl cnIsICJoZWFkZXIgbWFnaWM6ICUjeFxuIiwgbGRsX3AoaGVhZGVyKzB4MjAyKSk7CisgICAgZXJy b3JfcmVwb3J0KCJoZWFkZXIgbWFnaWM6ICUjeCIsIGxkbF9wKGhlYWRlciArIDB4MjAyKSk7CiAj ZW5kaWYKICAgICBpZiAobGRsX3AoaGVhZGVyKzB4MjAyKSA9PSAweDUzNzI2NDQ4KSB7CiAgICAg ICAgIHByb3RvY29sID0gbGR1d19wKGhlYWRlcisweDIwNik7CkBAIC05NjAsMTMgKzk2MCwxMyBA QCBzdGF0aWMgdm9pZCBsb2FkX2xpbnV4KFBDTWFjaGluZVN0YXRlICpwY21zLAogICAgIC8qIGxv YWQgaW5pdHJkICovCiAgICAgaWYgKGluaXRyZF9maWxlbmFtZSkgewogICAgICAgICBpZiAocHJv dG9jb2wgPCAweDIwMCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJxZW11OiBsaW51 eCBrZXJuZWwgdG9vIG9sZCB0byBsb2FkIGEgcmFtIGRpc2tcbiIpOworICAgICAgICAgICAgZXJy b3JfcmVwb3J0KCJxZW11OiBsaW51eCBrZXJuZWwgdG9vIG9sZCB0byBsb2FkIGEgcmFtIGRpc2si KTsKICAgICAgICAgICAgIGV4aXQoMSk7CiAgICAgICAgIH0KIAogICAgICAgICBpbml0cmRfc2l6 ZSA9IGdldF9pbWFnZV9zaXplKGluaXRyZF9maWxlbmFtZSk7CiAgICAgICAgIGlmIChpbml0cmRf c2l6ZSA8IDApIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAicWVtdTogZXJyb3IgcmVh ZGluZyBpbml0cmQgJXM6ICVzXG4iLAorICAgICAgICAgICAgZXJyb3JfcmVwb3J0KCJxZW11OiBl cnJvciByZWFkaW5nIGluaXRyZCAlczogJXMiLAogICAgICAgICAgICAgICAgICAgICBpbml0cmRf ZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7CiAgICAgICAgICAgICBleGl0KDEpOwogICAgICAg ICB9CkBAIC05OTEsNyArOTkxLDcgQEAgc3RhdGljIHZvaWQgbG9hZF9saW51eChQQ01hY2hpbmVT dGF0ZSAqcGNtcywKICAgICB9CiAgICAgc2V0dXBfc2l6ZSA9IChzZXR1cF9zaXplKzEpKjUxMjsK ICAgICBpZiAoc2V0dXBfc2l6ZSA+IGtlcm5lbF9zaXplKSB7Ci0gICAgICAgIGZwcmludGYoc3Rk ZXJyLCAicWVtdTogaW52YWxpZCBrZXJuZWwgaGVhZGVyXG4iKTsKKyAgICAgICAgZXJyb3JfcmVw b3J0KCJxZW11OiBpbnZhbGlkIGtlcm5lbCBoZWFkZXIiKTsKICAgICAgICAgZXhpdCgxKTsKICAg ICB9CiAgICAga2VybmVsX3NpemUgLT0gc2V0dXBfc2l6ZTsKQEAgLTEwMDAsMTEgKzEwMDAsMTEg QEAgc3RhdGljIHZvaWQgbG9hZF9saW51eChQQ01hY2hpbmVTdGF0ZSAqcGNtcywKICAgICBrZXJu ZWwgPSBnX21hbGxvYyhrZXJuZWxfc2l6ZSk7CiAgICAgZnNlZWsoZiwgMCwgU0VFS19TRVQpOwog ICAgIGlmIChmcmVhZChzZXR1cCwgMSwgc2V0dXBfc2l6ZSwgZikgIT0gc2V0dXBfc2l6ZSkgewot ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImZyZWFkKCkgZmFpbGVkXG4iKTsKKyAgICAgICAgZXJy b3JfcmVwb3J0KCJmcmVhZCgpIGZhaWxlZCIpOwogICAgICAgICBleGl0KDEpOwogICAgIH0KICAg ICBpZiAoZnJlYWQoa2VybmVsLCAxLCBrZXJuZWxfc2l6ZSwgZikgIT0ga2VybmVsX3NpemUpIHsK LSAgICAgICAgZnByaW50ZihzdGRlcnIsICJmcmVhZCgpIGZhaWxlZFxuIik7CisgICAgICAgIGVy cm9yX3JlcG9ydCgiZnJlYWQoKSBmYWlsZWQiKTsKICAgICAgICAgZXhpdCgxKTsKICAgICB9CiAg ICAgZmNsb3NlKGYpOwpAQCAtMTAxMiwxMyArMTAxMiwxMyBAQCBzdGF0aWMgdm9pZCBsb2FkX2xp bnV4KFBDTWFjaGluZVN0YXRlICpwY21zLAogICAgIC8qIGFwcGVuZCBkdGIgdG8ga2VybmVsICov CiAgICAgaWYgKGR0Yl9maWxlbmFtZSkgewogICAgICAgICBpZiAocHJvdG9jb2wgPCAweDIwOSkg ewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJxZW11OiBMaW51eCBrZXJuZWwgdG9vIG9s ZCB0byBsb2FkIGEgZHRiXG4iKTsKKyAgICAgICAgICAgIGVycm9yX3JlcG9ydCgicWVtdTogTGlu dXgga2VybmVsIHRvbyBvbGQgdG8gbG9hZCBhIGR0YiIpOwogICAgICAgICAgICAgZXhpdCgxKTsK ICAgICAgICAgfQogCiAgICAgICAgIGR0Yl9zaXplID0gZ2V0X2ltYWdlX3NpemUoZHRiX2ZpbGVu YW1lKTsKICAgICAgICAgaWYgKGR0Yl9zaXplIDw9IDApIHsKLSAgICAgICAgICAgIGZwcmludGYo c3RkZXJyLCAicWVtdTogZXJyb3IgcmVhZGluZyBkdGIgJXM6ICVzXG4iLAorICAgICAgICAgICAg ZXJyb3JfcmVwb3J0KCJxZW11OiBlcnJvciByZWFkaW5nIGR0YiAlczogJXMiLAogICAgICAgICAg ICAgICAgICAgICBkdGJfZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7CiAgICAgICAgICAgICBl eGl0KDEpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9ody9pMzg2L3BjX3BpaXguYyBiL2h3L2kz ODYvcGNfcGlpeC5jCmluZGV4IDlmZjc5YjFmZDkuLjE3OTZkYjFlMzYgMTAwNjQ0Ci0tLSBhL2h3 L2kzODYvcGNfcGlpeC5jCisrKyBiL2h3L2kzODYvcGNfcGlpeC5jCkBAIC0xMDkwLDcgKzEwOTAs NyBAQCB2b2lkIGlnZF9wYXNzdGhyb3VnaF9pc2FfYnJpZGdlX2NyZWF0ZShQQ0lCdXMgKmJ1cywg dWludDE2X3QgZ3B1X2Rldl9pZCkKICAgICAgKiBOb3RlIHRoYXQgdmVuZG9yIGlkIGlzIGFsd2F5 cyBQQ0lfVkVORE9SX0lEX0lOVEVMLgogICAgICAqLwogICAgIGlmICghYnJpZGdlX2Rldikgewot ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInNldCBpZ2QtcGFzc3Rocm91Z2gtaXNhLWJyaWRnZSBm YWlsZWQhXG4iKTsKKyAgICAgICAgZXJyb3JfcmVwb3J0KCJzZXQgaWdkLXBhc3N0aHJvdWdoLWlz YS1icmlkZ2UgZmFpbGVkISIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIHBjaV9jb25m aWdfc2V0X2RldmljZV9pZChicmlkZ2VfZGV2LT5jb25maWcsIHBjaF9kZXZfaWQpOwpkaWZmIC0t Z2l0IGEvaHcvaTM4Ni9wY19zeXNmdy5jIGIvaHcvaTM4Ni9wY19zeXNmdy5jCmluZGV4IDZiMTgz NzQ3ZmMuLmI2YzEwYTUwOWYgMTAwNjQ0Ci0tLSBhL2h3L2kzODYvcGNfc3lzZncuYworKysgYi9o dy9pMzg2L3BjX3N5c2Z3LmMKQEAgLTIwMSw3ICsyMDEsNyBAQCBzdGF0aWMgdm9pZCBvbGRfcGNf c3lzdGVtX3JvbV9pbml0KE1lbW9yeVJlZ2lvbiAqcm9tX21lbW9yeSwgYm9vbCBpc2FwY19yYW1f ZncpCiAgICAgcmV0ID0gcm9tX2FkZF9maWxlX2ZpeGVkKGJpb3NfbmFtZSwgKHVpbnQzMl90KSgt Ymlvc19zaXplKSwgLTEpOwogICAgIGlmIChyZXQgIT0gMCkgewogICAgIGJpb3NfZXJyb3I6Ci0g ICAgICAgIGZwcmludGYoc3RkZXJyLCAicWVtdTogY291bGQgbm90IGxvYWQgUEMgQklPUyAnJXMn XG4iLCBiaW9zX25hbWUpOworICAgICAgICBlcnJvcl9yZXBvcnQoInFlbXU6IGNvdWxkIG5vdCBs b2FkIFBDIEJJT1MgJyVzJyIsIGJpb3NfbmFtZSk7CiAgICAgICAgIGV4aXQoMSk7CiAgICAgfQog ICAgIGdfZnJlZShmaWxlbmFtZSk7CkBAIC0yNDMsNyArMjQzLDggQEAgdm9pZCBwY19zeXN0ZW1f ZmlybXdhcmVfaW5pdChNZW1vcnlSZWdpb24gKnJvbV9tZW1vcnksIGJvb2wgaXNhcGNfcmFtX2Z3 KQogICAgIGlmIChrdm1fZW5hYmxlZCgpICYmICFrdm1fcmVhZG9ubHlfbWVtX2VuYWJsZWQoKSkg ewogICAgICAgICAvKiBPbGRlciBLVk0gY2Fubm90IGV4ZWN1dGUgZnJvbSBkZXZpY2UgbWVtb3J5 LiBTbywgZmxhc2ggbWVtb3J5CiAgICAgICAgICAqIGNhbm5vdCBiZSB1c2VkIHVubGVzcyB0aGUg cmVhZG9ubHkgbWVtb3J5IGt2bSBjYXBhYmlsaXR5IGlzIHByZXNlbnQuICovCi0gICAgICAgIGZw cmludGYoc3RkZXJyLCAicWVtdTogcGZsYXNoIHdpdGgga3ZtIHJlcXVpcmVzIEtWTSByZWFkb25s eSBtZW1vcnkgc3VwcG9ydFxuIik7CisgICAgICAgIGVycm9yX3JlcG9ydCgicWVtdTogcGZsYXNo IHdpdGgga3ZtIHJlcXVpcmVzIEtWTSByZWFkb25seSBtZW1vcnkiCisgICAgICAgICAgICAgICAg ICAgICAiIHN1cHBvcnQiKTsKICAgICAgICAgZXhpdCgxKTsKICAgICB9CiAKZGlmZiAtLWdpdCBh L2h3L2kzODYveGVuL3hlbi1odm0uYyBiL2h3L2kzODYveGVuL3hlbi1odm0uYwppbmRleCBkOWNj ZDVkMGQ2Li5mOGUzZTA1MDdiIDEwMDY0NAotLS0gYS9ody9pMzg2L3hlbi94ZW4taHZtLmMKKysr IGIvaHcvaTM4Ni94ZW4veGVuLWh2bS5jCkBAIC0yNDYsOSArMjQ2LDEwIEBAIHZvaWQgeGVuX3Jh bV9hbGxvYyhyYW1fYWRkcl90IHJhbV9hZGRyLCByYW1fYWRkcl90IHNpemUsIE1lbW9yeVJlZ2lv biAqbXIsCiAKICAgICBpZiAocnVuc3RhdGVfY2hlY2soUlVOX1NUQVRFX0lOTUlHUkFURSkpIHsK ICAgICAgICAgLyogUkFNIGFscmVhZHkgcG9wdWxhdGVkIGluIFhlbiAqLwotICAgICAgICBmcHJp bnRmKHN0ZGVyciwgIiVzOiBkbyBub3QgYWxsb2MgIlJBTV9BRERSX0ZNVAotICAgICAgICAgICAg ICAgICIgYnl0ZXMgb2YgcmFtIGF0ICJSQU1fQUREUl9GTVQiIHdoZW4gcnVuc3RhdGUgaXMgSU5N SUdSQVRFXG4iLAotICAgICAgICAgICAgICAgIF9fZnVuY19fLCBzaXplLCByYW1fYWRkcik7IAor ICAgICAgICBlcnJvcl9yZXBvcnQoIiVzOiBkbyBub3QgYWxsb2MgIlJBTV9BRERSX0ZNVAorICAg ICAgICAgICAgICAgICAgICAgIiBieXRlcyBvZiByYW0gYXQgIlJBTV9BRERSX0ZNVCIgd2hlbiBy dW5zdGF0ZSBpcyAiCisgICAgICAgICAgICAgICAgICAgICAiIElOTUlHUkFURSIsCisgICAgICAg ICAgICAgICAgICAgICBfX2Z1bmNfXywgc2l6ZSwgcmFtX2FkZHIpOwogICAgICAgICByZXR1cm47 CiAgICAgfQogCkBAIC00NDQsOCArNDQ1LDkgQEAgc3RhdGljIGludCB4ZW5fcmVtb3ZlX2Zyb21f cGh5c21hcChYZW5JT1N0YXRlICpzdGF0ZSwKIAogICAgICAgICByYyA9IHhlbl94Y19kb21haW5f YWRkX3RvX3BoeXNtYXAoeGVuX3hjLCB4ZW5fZG9taWQsIFhFTk1BUFNQQUNFX2dtZm4sIGlkeCwg Z3Bmbik7CiAgICAgICAgIGlmIChyYykgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJh ZGRfdG9fcGh5c21hcCBNRk4gJSJQUklfeGVuX3BmbiIgdG8gUEZOICUiCi0gICAgICAgICAgICAg ICAgICAgIFBSSV94ZW5fcGZuIiBmYWlsZWQ6ICVkIChlcnJubzogJWQpXG4iLCBpZHgsIGdwZm4s IHJjLCBlcnJubyk7CisgICAgICAgICAgICBlcnJvcl9yZXBvcnQoImFkZF90b19waHlzbWFwIE1G TiAlIlBSSV94ZW5fcGZuIiB0byBQRk4gJSIKKyAgICAgICAgICAgICAgICAgICAgICAgICBQUklf eGVuX3BmbiIgZmFpbGVkOiAlZCAoZXJybm86ICVkKSIsIGlkeCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICBncGZuLCByYywgZXJybm8pOwogICAgICAgICAgICAgcmV0dXJuIC1yYzsKICAgICAg ICAgfQogICAgIH0KQEAgLTEwOTAsMTEgKzEwOTIsMTEgQEAgc3RhdGljIHZvaWQgY3B1X2hhbmRs ZV9pb3JlcSh2b2lkICpvcGFxdWUpCiAgICAgICAgIHJlcS0+ZGF0YSA9IGNvcHkuZGF0YTsKIAog ICAgICAgICBpZiAocmVxLT5zdGF0ZSAhPSBTVEFURV9JT1JFUV9JTlBST0NFU1MpIHsKLSAgICAg ICAgICAgIGZwcmludGYoc3RkZXJyLCAiQmFkbmVzcyBpbiBJL08gcmVxdWVzdCAuLi4gbm90IGlu IHNlcnZpY2U/ITogIgotICAgICAgICAgICAgICAgICAgICAiJXgsIHB0cjogJXgsIHBvcnQ6ICUi UFJJeDY0IiwgIgotICAgICAgICAgICAgICAgICAgICAiZGF0YTogJSJQUkl4NjQiLCBjb3VudDog JXUsIHNpemU6ICV1LCB0eXBlOiAldVxuIiwKLSAgICAgICAgICAgICAgICAgICAgcmVxLT5zdGF0 ZSwgcmVxLT5kYXRhX2lzX3B0ciwgcmVxLT5hZGRyLAotICAgICAgICAgICAgICAgICAgICByZXEt PmRhdGEsIHJlcS0+Y291bnQsIHJlcS0+c2l6ZSwgcmVxLT50eXBlKTsKKyAgICAgICAgICAgIGVy cm9yX3JlcG9ydCgiQmFkbmVzcyBpbiBJL08gcmVxdWVzdCAuLi4gbm90IGluIHNlcnZpY2U/ITog IgorICAgICAgICAgICAgICAgICAgICAgICAgICIleCwgcHRyOiAleCwgcG9ydDogJSJQUkl4NjQi LCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgImRhdGE6ICUiUFJJeDY0IiwgY291bnQ6ICV1 LCBzaXplOiAldSwgdHlwZTogJXUiLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS0+c3Rh dGUsIHJlcS0+ZGF0YV9pc19wdHIsIHJlcS0+YWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAg ICByZXEtPmRhdGEsIHJlcS0+Y291bnQsIHJlcS0+c2l6ZSwgcmVxLT50eXBlKTsKICAgICAgICAg ICAgIGRlc3Ryb3lfaHZtX2RvbWFpbihmYWxzZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg ICAgIH0KQEAgLTEzOTcsMTYgKzEzOTksMTYgQEAgdm9pZCBkZXN0cm95X2h2bV9kb21haW4oYm9v bCByZWJvb3QpCiAKICAgICB4Y19oYW5kbGUgPSB4Y19pbnRlcmZhY2Vfb3BlbigwLCAwLCAwKTsK ICAgICBpZiAoeGNfaGFuZGxlID09IE5VTEwpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJD YW5ub3QgYWNxdWlyZSB4ZW5jdHJsIGhhbmRsZVxuIik7CisgICAgICAgIGVycm9yX3JlcG9ydCgi Q2Fubm90IGFjcXVpcmUgeGVuY3RybCBoYW5kbGUiKTsKICAgICB9IGVsc2UgewogICAgICAgICBz dHMgPSB4Y19kb21haW5fc2h1dGRvd24oeGNfaGFuZGxlLCB4ZW5fZG9taWQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICByZWJvb3QgPyBTSFVURE9XTl9yZWJvb3QgOiBTSFVURE9X Tl9wb3dlcm9mZik7CiAgICAgICAgIGlmIChzdHMgIT0gMCkgewotICAgICAgICAgICAgZnByaW50 ZihzdGRlcnIsICJ4Y19kb21haW5fc2h1dGRvd24gZmFpbGVkIHRvIGlzc3VlICVzLCAiCi0gICAg ICAgICAgICAgICAgICAgICJzdHMgJWQsICVzXG4iLCByZWJvb3QgPyAicmVib290IiA6ICJwb3dl cm9mZiIsCisgICAgICAgICAgICBlcnJvcl9yZXBvcnQoInhjX2RvbWFpbl9zaHV0ZG93biBmYWls ZWQgdG8gaXNzdWUgJXMsICIKKyAgICAgICAgICAgICAgICAgICAgInN0cyAlZCwgJXMiLCByZWJv b3QgPyAicmVib290IiA6ICJwb3dlcm9mZiIsCiAgICAgICAgICAgICAgICAgICAgIHN0cywgc3Ry ZXJyb3IoZXJybm8pKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZwcmludGYoc3Rk ZXJyLCAiSXNzdWVkIGRvbWFpbiAlZCAlc1xuIiwgeGVuX2RvbWlkLAorICAgICAgICAgICAgZXJy b3JfcmVwb3J0KCJJc3N1ZWQgZG9tYWluICVkICVzIiwgeGVuX2RvbWlkLAogICAgICAgICAgICAg ICAgICAgICByZWJvb3QgPyAicmVib290IiA6ICJwb3dlcm9mZiIpOwogICAgICAgICB9CiAgICAg ICAgIHhjX2ludGVyZmFjZV9jbG9zZSh4Y19oYW5kbGUpOwpAQCAtMTQyNSw3ICsxNDI3LDcgQEAg dm9pZCB4ZW5fc2h1dGRvd25fZmF0YWxfZXJyb3IoY29uc3QgY2hhciAqZm10LCAuLi4pCiAgICAg dmFfc3RhcnQoYXAsIGZtdCk7CiAgICAgdmZwcmludGYoc3RkZXJyLCBmbXQsIGFwKTsKICAgICB2 YV9lbmQoYXApOwotICAgIGZwcmludGYoc3RkZXJyLCAiV2lsbCBkZXN0cm95IHRoZSBkb21haW4u XG4iKTsKKyAgICBlcnJvcl9yZXBvcnQoIldpbGwgZGVzdHJveSB0aGUgZG9tYWluLiIpOwogICAg IC8qIGRlc3Ryb3kgdGhlIGRvbWFpbiAqLwogICAgIHFlbXVfc3lzdGVtX3NodXRkb3duX3JlcXVl c3QoU0hVVERPV05fQ0FVU0VfSE9TVF9FUlJPUik7CiB9CmRpZmYgLS1naXQgYS9ody9pMzg2L3hl bi94ZW4tbWFwY2FjaGUuYyBiL2h3L2kzODYveGVuL3hlbi1tYXBjYWNoZS5jCmluZGV4IGJhYWI5 M2I2MTQuLjQwNjJhZjA5MDAgMTAwNjQ0Ci0tLSBhL2h3L2kzODYveGVuL3hlbi1tYXBjYWNoZS5j CisrKyBiL2h3L2kzODYveGVuL3hlbi1tYXBjYWNoZS5jCkBAIC0zNzcsNyArMzc3LDcgQEAgcmFt X2FkZHJfdCB4ZW5fcmFtX2FkZHJfZnJvbV9tYXBjYWNoZSh2b2lkICpwdHIpCiAgICAgICAgIH0K ICAgICB9CiAgICAgaWYgKCFmb3VuZCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzLCBj b3VsZCBub3QgZmluZCAlcFxuIiwgX19mdW5jX18sIHB0cik7CisgICAgICAgIGVycm9yX3JlcG9y dCgiJXMsIGNvdWxkIG5vdCBmaW5kICVwIiwgX19mdW5jX18sIHB0cik7CiAgICAgICAgIFFUQUlM UV9GT1JFQUNIKHJldmVudHJ5LCAmbWFwY2FjaGUtPmxvY2tlZF9lbnRyaWVzLCBuZXh0KSB7CiAg ICAgICAgICAgICBEUFJJTlRGKCIgICAiVEFSR0VUX0ZNVF9wbHgiIC0+ICVwIGlzIHByZXNlbnRc biIsIHJldmVudHJ5LT5wYWRkcl9pbmRleCwKICAgICAgICAgICAgICAgICAgICAgcmV2ZW50cnkt PnZhZGRyX3JlcSk7CkBAIC00NzcsOSArNDc3LDkgQEAgdm9pZCB4ZW5faW52YWxpZGF0ZV9tYXBf Y2FjaGUodm9pZCkKICAgICAgICAgaWYgKCFyZXZlbnRyeS0+ZG1hKSB7CiAgICAgICAgICAgICBj b250aW51ZTsKICAgICAgICAgfQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkxvY2tlZCBETUEg bWFwcGluZyB3aGlsZSBpbnZhbGlkYXRpbmcgbWFwY2FjaGUhIgotICAgICAgICAgICAgICAgICIg IlRBUkdFVF9GTVRfcGx4IiAtPiAlcCBpcyBwcmVzZW50XG4iLAotICAgICAgICAgICAgICAgIHJl dmVudHJ5LT5wYWRkcl9pbmRleCwgcmV2ZW50cnktPnZhZGRyX3JlcSk7CisgICAgICAgIGVycm9y X3JlcG9ydCgiTG9ja2VkIERNQSBtYXBwaW5nIHdoaWxlIGludmFsaWRhdGluZyBtYXBjYWNoZSEi CisgICAgICAgICAgICAgICAgICAgICAiICJUQVJHRVRfRk1UX3BseCIgLT4gJXAgaXMgcHJlc2Vu dCIsCisgICAgICAgICAgICAgICAgICAgICByZXZlbnRyeS0+cGFkZHJfaW5kZXgsIHJldmVudHJ5 LT52YWRkcl9yZXEpOwogICAgIH0KIAogICAgIGZvciAoaSA9IDA7IGkgPCBtYXBjYWNoZS0+bnJf YnVja2V0czsgaSsrKSB7CkBAIC01NDUsOCArNTQ1LDggQEAgc3RhdGljIHVpbnQ4X3QgKnhlbl9y ZXBsYWNlX2NhY2hlX2VudHJ5X3VubG9ja2VkKGh3YWRkciBvbGRfcGh5c19hZGRyLAogICAgIGFk ZHJlc3NfaW5kZXggID0gbmV3X3BoeXNfYWRkciA+PiBNQ0FDSEVfQlVDS0VUX1NISUZUOwogICAg IGFkZHJlc3Nfb2Zmc2V0ID0gbmV3X3BoeXNfYWRkciAmIChNQ0FDSEVfQlVDS0VUX1NJWkUgLSAx KTsKIAotICAgIGZwcmludGYoc3RkZXJyLCAiUmVwbGFjaW5nIGEgZHVtbXkgbWFwY2FjaGUgZW50 cnkgZm9yICJUQVJHRVRfRk1UX3BseCBcCi0gICAgICAgICAgICAiIHdpdGggIlRBUkdFVF9GTVRf cGx4IlxuIiwgb2xkX3BoeXNfYWRkciwgbmV3X3BoeXNfYWRkcik7CisgICAgZXJyb3JfcmVwb3J0 KCJSZXBsYWNpbmcgYSBkdW1teSBtYXBjYWNoZSBlbnRyeSBmb3IgIlRBUkdFVF9GTVRfcGx4IFwK KyAgICAgICAgICAgICAgICAgIiB3aXRoICJUQVJHRVRfRk1UX3BseCIiLCBvbGRfcGh5c19hZGRy LCBuZXdfcGh5c19hZGRyKTsKIAogICAgIHhlbl9yZW1hcF9idWNrZXQoZW50cnksIGVudHJ5LT52 YWRkcl9iYXNlLAogICAgICAgICAgICAgICAgICAgICAgY2FjaGVfc2l6ZSwgYWRkcmVzc19pbmRl eCwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvaHcvaTM4Ni94ZW4veGVuX2FwaWMuYyBiL2h3L2kzODYv eGVuL3hlbl9hcGljLmMKaW5kZXggNTU3NjllYmE3ZS4uOWUxOWVmOTRhMiAxMDA2NDQKLS0tIGEv aHcvaTM4Ni94ZW4veGVuX2FwaWMuYworKysgYi9ody9pMzg2L3hlbi94ZW5fYXBpYy5jCkBAIC0y NCw3ICsyNCw3IEBAIHN0YXRpYyB2b2lkIHhlbl9hcGljX21lbV93cml0ZSh2b2lkICpvcGFxdWUs IGh3YWRkciBhZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGRh dGEsIHVuc2lnbmVkIHNpemUpCiB7CiAgICAgaWYgKHNpemUgIT0gc2l6ZW9mKHVpbnQzMl90KSkg ewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlhlbjogQVBJQyB3cml0ZSBkYXRhIHNpemUgPSAl ZCwgaW52YWxpZFxuIiwgc2l6ZSk7CisgICAgICAgIGVycm9yX3JlcG9ydCgiWGVuOiBBUElDIHdy aXRlIGRhdGEgc2l6ZSA9ICVkLCBpbnZhbGlkIiwgc2l6ZSk7CiAgICAgICAgIHJldHVybjsKICAg ICB9CiAKZGlmZiAtLWdpdCBhL2h3L2lkZS9haGNpLmMgYi9ody9pZGUvYWhjaS5jCmluZGV4IGMy NWUyOTNkODguLjJlZDAxNTI4NWEgMTAwNjQ0Ci0tLSBhL2h3L2lkZS9haGNpLmMKKysrIGIvaHcv aWRlL2FoY2kuYwpAQCAtNDEwLDggKzQxMCw4IEBAIHN0YXRpYyB2b2lkIGFoY2lfbWVtX3dyaXRl KHZvaWQgKm9wYXF1ZSwgaHdhZGRyIGFkZHIsCiAKICAgICAvKiBPbmx5IGFsaWduZWQgcmVhZHMg YXJlIGFsbG93ZWQgb24gQUhDSSAqLwogICAgIGlmIChhZGRyICYgMykgewotICAgICAgICBmcHJp bnRmKHN0ZGVyciwgImFoY2k6IE1pcy1hbGlnbmVkIHdyaXRlIHRvIGFkZHIgMHgiCi0gICAgICAg ICAgICAgICAgVEFSR0VUX0ZNVF9wbHggIlxuIiwgYWRkcik7CisgICAgICAgIGVycm9yX3JlcG9y dCgiYWhjaTogTWlzLWFsaWduZWQgd3JpdGUgdG8gYWRkciAweCIKKyAgICAgICAgICAgICAgICAg ICAgIFRBUkdFVF9GTVRfcGx4ICIiLCBhZGRyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApA QCAtMTA1Myw3ICsxMDUzLDcgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19uY3FfY29tbWFuZChBSENJ U3RhdGUgKnMsIGludCBwb3J0LCB1aW50OF90ICpjbWRfZmlzLAogICAgIGdfYXNzZXJ0KGlzX25j cShuY3FfZmlzLT5jb21tYW5kKSk7CiAgICAgaWYgKG5jcV90ZnMtPnVzZWQpIHsKICAgICAgICAg LyogZXJyb3IgLSBhbHJlYWR5IGluIHVzZSAqLwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVz OiB0YWcgJWQgYWxyZWFkeSB1c2VkXG4iLCBfX2Z1bmNfXywgdGFnKTsKKyAgICAgICAgZXJyb3Jf cmVwb3J0KCIlczogdGFnICVkIGFscmVhZHkgdXNlZCIsIF9fZnVuY19fLCB0YWcpOwogICAgICAg ICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9ody9pZGUvY29yZS5jIGIvaHcvaWRlL2Nv cmUuYwppbmRleCBkNjNlYjRhNzJlLi5kNDY5MzYxOTNhIDEwMDY0NAotLS0gYS9ody9pZGUvY29y ZS5jCisrKyBiL2h3L2lkZS9jb3JlLmMKQEAgLTI3NjIsNyArMjc2Miw3IEBAIHN0YXRpYyB2b2lk IGlkZV9kcml2ZV9waW9fcHJlX3NhdmUodm9pZCAqb3BhcXVlKQogCiAgICAgaWR4ID0gdHJhbnNm ZXJfZW5kX3RhYmxlX2lkeChzLT5lbmRfdHJhbnNmZXJfZnVuYyk7CiAgICAgaWYgKGlkeCA9PSAt MSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBpbnZhbGlkIGVuZF90cmFuc2Zlcl9m dW5jIGZvciBEUlFfU1RBVFxuIiwKKyAgICAgICAgZXJyb3JfcmVwb3J0KCIlczogaW52YWxpZCBl bmRfdHJhbnNmZXJfZnVuYyBmb3IgRFJRX1NUQVQiLAogICAgICAgICAgICAgICAgICAgICAgICAg X19mdW5jX18pOwogICAgICAgICBzLT5lbmRfdHJhbnNmZXJfZm5faWR4ID0gMjsKICAgICB9IGVs c2UgewpkaWZmIC0tZ2l0IGEvaHcvaW5wdXQvbG04MzJ4LmMgYi9ody9pbnB1dC9sbTgzMnguYwpp bmRleCBkMzk5NTMxMjZiLi5jYWVlZGE0N2YyIDEwMDY0NAotLS0gYS9ody9pbnB1dC9sbTgzMngu YworKysgYi9ody9pbnB1dC9sbTgzMnguYwpAQCAtMjM5LDcgKzIzOSw3IEBAIHN0YXRpYyB1aW50 OF90IGxtX2tiZF9yZWFkKExNODIzS2JkU3RhdGUgKnMsIGludCByZWcsIGludCBieXRlKQogCiAg ICAgZGVmYXVsdDoKICAgICAgICAgbG1fa2JkX2Vycm9yKHMsIEVSUl9DTURVTkspOwotICAgICAg ICBmcHJpbnRmKHN0ZGVyciwgIiVzOiB1bmtub3duIGNvbW1hbmQgJTAyeFxuIiwgX19mdW5jX18s IHJlZyk7CisgICAgICAgIGVycm9yX3JlcG9ydCgiJXM6IHVua25vd24gY29tbWFuZCAlMDJ4Iiwg X19mdW5jX18sIHJlZyk7CiAgICAgICAgIHJldHVybiAweDAwOwogICAgIH0KIApAQCAtMzMwLDcg KzMzMCw3IEBAIHN0YXRpYyB2b2lkIGxtX2tiZF93cml0ZShMTTgyM0tiZFN0YXRlICpzLCBpbnQg cmVnLCBpbnQgYnl0ZSwgdWludDhfdCB2YWx1ZSkKICAgICAgICAgcy0+cmVnID0gTE04MzJ4X0dF TkVSQUxfRVJST1I7CiAgICAgICAgIGlmICgodmFsdWUgJiAzKSAmJiAodmFsdWUgJiAzKSAhPSAz KSB7CiAgICAgICAgICAgICBsbV9rYmRfZXJyb3IocywgRVJSX0JBRFBBUik7Ci0gICAgICAgICAg ICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBpbnZhbGlkIGNsb2NrIHNldHRpbmcgaW4gUkNQV01cbiIs CisgICAgICAgICAgICBlcnJvcl9yZXBvcnQoIiVzOiBpbnZhbGlkIGNsb2NrIHNldHRpbmcgaW4g UkNQV00iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fKTsKICAgICAgICAg fQogICAgICAgICAvKiBUT0RPOiBWYWxpZGF0ZSB0aGF0IHRoZSBjb21tYW5kIGlzIG9ubHkgaXNz dWVkIG9uY2UgKi8KQEAgLTM3OCw3ICszNzgsNyBAQCBzdGF0aWMgdm9pZCBsbV9rYmRfd3JpdGUo TE04MjNLYmRTdGF0ZSAqcywgaW50IHJlZywgaW50IGJ5dGUsIHVpbnQ4X3QgdmFsdWUpCiAgICAg ICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGxtX2tiZF9lcnJvcihzLCBFUlJfQ01E VU5LKTsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogdW5rbm93biBjb21tYW5kICUwMnhc biIsIF9fZnVuY19fLCByZWcpOworICAgICAgICBlcnJvcl9yZXBvcnQoIiVzOiB1bmtub3duIGNv bW1hbmQgJTAyeCIsIF9fZnVuY19fLCByZWcpOwogICAgICAgICBicmVhazsKICAgICB9CiB9CmRp ZmYgLS1naXQgYS9ody9pbnB1dC9wY2tiZC5jIGIvaHcvaW5wdXQvcGNrYmQuYwppbmRleCBjNDc5 ZjgyN2I2Li5mZjRmMDNlNGMzIDEwMDY0NAotLS0gYS9ody9pbnB1dC9wY2tiZC5jCisrKyBiL2h3 L2lucHV0L3Bja2JkLmMKQEAgLTIyLDYgKzIyLDcgQEAKICAqIFRIRSBTT0ZUV0FSRS4KICAqLwog I2luY2x1ZGUgInFlbXUvb3NkZXAuaCIKKyNpbmNsdWRlICJxZW11L2Vycm9yLXJlcG9ydC5oIgog I2luY2x1ZGUgImh3L2h3LmgiCiAjaW5jbHVkZSAiaHcvaXNhL2lzYS5oIgogI2luY2x1ZGUgImh3 L2kzODYvcGMuaCIKQEAgLTMwNyw3ICszMDgsNyBAQCBzdGF0aWMgdm9pZCBrYmRfd3JpdGVfY29t bWFuZCh2b2lkICpvcGFxdWUsIGh3YWRkciBhZGRyLAogICAgICAgICAvKiBpZ25vcmUgdGhhdCAq LwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBmcHJpbnRmKHN0ZGVyciwg InFlbXU6IHVuc3VwcG9ydGVkIGtleWJvYXJkIGNtZD0weCUwMnhcbiIsIChpbnQpdmFsKTsKKyAg ICAgICAgZXJyb3JfcmVwb3J0KCJxZW11OiB1bnN1cHBvcnRlZCBrZXlib2FyZCBjbWQ9MHglMDJ4 IiwgKGludCl2YWwpOwogICAgICAgICBicmVhazsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9ody9p bnB1dC9weGEyeHhfa2V5cGFkLmMgYi9ody9pbnB1dC9weGEyeHhfa2V5cGFkLmMKaW5kZXggOTNk YjllZDI1Yi4uMGE1OTRjMzBmYyAxMDA2NDQKLS0tIGEvaHcvaW5wdXQvcHhhMnh4X2tleXBhZC5j CisrKyBiL2h3L2lucHV0L3B4YTJ4eF9rZXlwYWQuYwpAQCAtMzI2LDcgKzMyNiw3IEBAIHZvaWQg cHhhMjd4X3JlZ2lzdGVyX2tleXBhZChQWEEyeHhLZXlQYWRTdGF0ZSAqa3AsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGtleW1hcCAqbWFwLCBpbnQgc2l6ZSkKIHsK ICAgICBpZighbWFwIHx8IHNpemUgPCAweDgwKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAi JXMgLSBObyBQWEEga2V5cGFkIG1hcCBkZWZpbmVkXG4iLCBfX2Z1bmNfXyk7CisgICAgICAgIGVy cm9yX3JlcG9ydCgiJXMgLSBObyBQWEEga2V5cGFkIG1hcCBkZWZpbmVkIiwgX19mdW5jX18pOwog ICAgICAgICBleGl0KC0xKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2h3L2lucHV0L3RzYzIwMDUu YyBiL2h3L2lucHV0L3RzYzIwMDUuYwppbmRleCA3OTkwOTU0YjZjLi5mNTA1N2U4ZWViIDEwMDY0 NAotLS0gYS9ody9pbnB1dC90c2MyMDA1LmMKKysrIGIvaHcvaW5wdXQvdHNjMjAwNS5jCkBAIC0y MDAsMTcgKzIwMCwxNyBAQCBzdGF0aWMgdm9pZCB0c2MyMDA1X3dyaXRlKFRTQzIwMDVTdGF0ZSAq cywgaW50IHJlZywgdWludDE2X3QgZGF0YSkKICAgICAgICAgcy0+aG9zdF9tb2RlID0gKGRhdGEg Pj4gMTUpICE9IDA7CiAgICAgICAgIGlmIChzLT5lbmFibGVkICE9ICEoZGF0YSAmIDB4NDAwMCkp IHsKICAgICAgICAgICAgIHMtPmVuYWJsZWQgPSAhKGRhdGEgJiAweDQwMDApOwotICAgICAgICAg ICAgZnByaW50ZihzdGRlcnIsICIlczogdG91Y2hzY3JlZW4gc2Vuc2UgJXNhYmxlZFxuIiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgcy0+ZW5hYmxlZCA/ICJlbiIgOiAi ZGlzIik7CisgICAgICAgICAgICBlcnJvcl9yZXBvcnQoIiVzOiB0b3VjaHNjcmVlbiBzZW5zZSAl c2FibGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgcy0+ZW5hYmxlZCA/ ICJlbiIgOiAiZGlzIik7CiAgICAgICAgICAgICBpZiAocy0+YnVzeSAmJiAhcy0+ZW5hYmxlZCkK ICAgICAgICAgICAgICAgICB0aW1lcl9kZWwocy0+dGltZXIpOwogICAgICAgICAgICAgcy0+YnVz eSA9IHMtPmJ1c3kgJiYgcy0+ZW5hYmxlZDsKICAgICAgICAgfQogICAgICAgICBzLT5uZXh0cHJl Y2lzaW9uID0gKGRhdGEgPj4gMTMpICYgMTsKICAgICAgICAgcy0+dGltaW5nWzBdID0gZGF0YSAm IDB4MWZmZjsKLSAgICAgICAgaWYgKChzLT50aW1pbmdbMF0gPj4gMTEpID09IDMpCi0gICAgICAg ICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBpbGxlZ2FsIGNvbnZlcnNpb24gY2xvY2sgc2V0dGlu Z1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXyk7CisgICAgICAgIGlm ICgocy0+dGltaW5nWzBdID4+IDExKSA9PSAzKSB7CisgICAgICAgICAgICBlcnJvcl9yZXBvcnQo IiVzOiBpbGxlZ2FsIGNvbnZlcnNpb24gY2xvY2sgc2V0dGluZyIsIF9fZnVuY19fKTsKKyAgICAg ICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIDB4ZDoJLyogQ0ZSMSAqLwogICAgICAgICBz LT50aW1pbmdbMV0gPSBkYXRhICYgMHhmMDc7CkBAIC0yMjEsOCArMjIxLDcgQEAgc3RhdGljIHZv aWQgdHNjMjAwNV93cml0ZShUU0MyMDA1U3RhdGUgKnMsIGludCByZWcsIHVpbnQxNl90IGRhdGEp CiAgICAgICAgIGJyZWFrOwogCiAgICAgZGVmYXVsdDoKLSAgICAgICAgZnByaW50ZihzdGRlcnIs ICIlczogd3JpdGUgaW50byByZWFkLW9ubHkgcmVnaXN0ZXIgJXhcbiIsCi0gICAgICAgICAgICAg ICAgICAgICAgICBfX2Z1bmNfXywgcmVnKTsKKyAgICAgICAgZXJyb3JfcmVwb3J0KCIlczogd3Jp dGUgaW50byByZWFkLW9ubHkgcmVnaXN0ZXIgJXgiLCBfX2Z1bmNfXywgcmVnKTsKICAgICB9CiB9 CiAKQEAgLTMzNyw4ICszMzYsOCBAQCBzdGF0aWMgdWludDhfdCB0c2MyMDA1X3R4cnhfd29yZCh2 b2lkICpvcGFxdWUsIHVpbnQ4X3QgdmFsdWUpCiAgICAgICAgICAgICAgICAgcy0+bmV4dHByZWNp c2lvbiA9ICh2YWx1ZSA+PiAyKSAmIDE7CiAgICAgICAgICAgICAgICAgaWYgKHMtPmVuYWJsZWQg IT0gISh2YWx1ZSAmIDEpKSB7CiAgICAgICAgICAgICAgICAgICAgIHMtPmVuYWJsZWQgPSAhKHZh bHVlICYgMSk7Ci0gICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IHRvdWNo c2NyZWVuIHNlbnNlICVzYWJsZWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2Z1bmNfXywgcy0+ZW5hYmxlZCA/ICJlbiIgOiAiZGlzIik7CisgICAgICAgICAgICAg ICAgICAgIGVycm9yX3JlcG9ydCgiJXM6IHRvdWNoc2NyZWVuIHNlbnNlICVzYWJsZWQiLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIHMtPmVuYWJsZWQgPyAiZW4i IDogImRpcyIpOwogICAgICAgICAgICAgICAgICAgICBpZiAocy0+YnVzeSAmJiAhcy0+ZW5hYmxl ZCkKICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX2RlbChzLT50aW1lcik7CiAgICAgICAg ICAgICAgICAgICAgIHMtPmJ1c3kgPSBzLT5idXN5ICYmIHMtPmVuYWJsZWQ7CmRpZmYgLS1naXQg YS9ody9pbnB1dC90c2MyMTB4LmMgYi9ody9pbnB1dC90c2MyMTB4LmMKaW5kZXggZDRiMTljMTgy NS4uYzY4NTIyMTg0MiAxMDA2NDQKLS0tIGEvaHcvaW5wdXQvdHNjMjEweC5jCisrKyBiL2h3L2lu cHV0L3RzYzIxMHguYwpAQCAtMzk2LDggKzM5Niw4IEBAIHN0YXRpYyB1aW50MTZfdCB0c2MyMTAy X2RhdGFfcmVnaXN0ZXJfcmVhZChUU0MyMTB4U3RhdGUgKnMsIGludCByZWcpCiAKICAgICBkZWZh dWx0OgogI2lmZGVmIFRTQ19WRVJCT1NFCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAidHNjMjEw Ml9kYXRhX3JlZ2lzdGVyX3JlYWQ6ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICJubyBzdWNo IHJlZ2lzdGVyOiAweCUwMnhcbiIsIHJlZyk7CisgICAgICAgIGVycm9yX3JlcG9ydCgidHNjMjEw Ml9kYXRhX3JlZ2lzdGVyX3JlYWQ6ICIKKyAgICAgICAgICAgICAgICAgICAgICJubyBzdWNoIHJl Z2lzdGVyOiAweCUwMngiLCByZWcpOwogI2VuZGlmCiAgICAgICAgIHJldHVybiAweGZmZmY7CiAg ICAgfQpAQCAtNDQ3LDggKzQ0Nyw4IEBAIHN0YXRpYyB1aW50MTZfdCB0c2MyMTAyX2NvbnRyb2xf cmVnaXN0ZXJfcmVhZCgKICAgICBkZWZhdWx0OgogICAgIGJhZF9yZWc6CiAjaWZkZWYgVFNDX1ZF UkJPU0UKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJ0c2MyMTAyX2NvbnRyb2xfcmVnaXN0ZXJf cmVhZDogIgotICAgICAgICAgICAgICAgICAgICAgICAgIm5vIHN1Y2ggcmVnaXN0ZXI6IDB4JTAy eFxuIiwgcmVnKTsKKyAgICAgICAgZXJyb3JfcmVwb3J0KCJ0c2MyMTAyX2NvbnRyb2xfcmVnaXN0 ZXJfcmVhZDogIgorICAgICAgICAgICAgICAgICAgICAgIm5vIHN1Y2ggcmVnaXN0ZXI6IDB4JTAy eCIsIHJlZyk7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuIDB4ZmZmZjsKICAgICB9CkBAIC01Mjgs OCArNTI4LDggQEAgc3RhdGljIHVpbnQxNl90IHRzYzIxMDJfYXVkaW9fcmVnaXN0ZXJfcmVhZChU U0MyMTB4U3RhdGUgKnMsIGludCByZWcpCiAKICAgICBkZWZhdWx0OgogI2lmZGVmIFRTQ19WRVJC T1NFCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAidHNjMjEwMl9hdWRpb19yZWdpc3Rlcl9yZWFk OiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAibm8gc3VjaCByZWdpc3RlcjogMHglMDJ4XG4i LCByZWcpOworICAgICAgICBlcnJvcl9yZXBvcnQoInRzYzIxMDJfYXVkaW9fcmVnaXN0ZXJfcmVh ZDogIgorICAgICAgICAgICAgICAgICAgICAgIm5vIHN1Y2ggcmVnaXN0ZXI6IDB4JTAyeCIsIHJl Zyk7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuIDB4ZmZmZjsKICAgICB9CkBAIC01NTMsOCArNTUz LDggQEAgc3RhdGljIHZvaWQgdHNjMjEwMl9kYXRhX3JlZ2lzdGVyX3dyaXRlKAogCiAgICAgZGVm YXVsdDoKICNpZmRlZiBUU0NfVkVSQk9TRQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInRzYzIx MDJfZGF0YV9yZWdpc3Rlcl93cml0ZTogIgotICAgICAgICAgICAgICAgICAgICAgICAgIm5vIHN1 Y2ggcmVnaXN0ZXI6IDB4JTAyeFxuIiwgcmVnKTsKKyAgICAgICAgZXJyb3JfcmVwb3J0KCJ0c2My MTAyX2RhdGFfcmVnaXN0ZXJfd3JpdGU6ICIKKyAgICAgICAgICAgICAgICAgICAgICJubyBzdWNo IHJlZ2lzdGVyOiAweCUwMngiLCByZWcpOwogI2VuZGlmCiAgICAgfQogfQpAQCAtNjA2LDggKzYw Niw4IEBAIHN0YXRpYyB2b2lkIHRzYzIxMDJfY29udHJvbF9yZWdpc3Rlcl93cml0ZSgKICAgICAg ICAgICAgIHRzYzIxMHhfcmVzZXQocyk7CiAjaWZkZWYgVFNDX1ZFUkJPU0UKICAgICAgICAgfSBl bHNlIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAidHNjMjEwMl9jb250cm9sX3JlZ2lz dGVyX3dyaXRlOiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIndyb25nIHZhbHVlIHdy aXR0ZW4gaW50byBSRVNFVFxuIik7CisgICAgICAgICAgICBlcnJvcl9yZXBvcnQoInRzYzIxMDJf Y29udHJvbF9yZWdpc3Rlcl93cml0ZTogIgorICAgICAgICAgICAgICAgICAgICAgICAgICJ3cm9u ZyB2YWx1ZSB3cml0dGVuIGludG8gUkVTRVQiKTsKICNlbmRpZgogICAgICAgICB9CiAgICAgICAg IHJldHVybjsKQEAgLTYxNiw4ICs2MTYsOCBAQCBzdGF0aWMgdm9pZCB0c2MyMTAyX2NvbnRyb2xf cmVnaXN0ZXJfd3JpdGUoCiAgICAgICAgIHMtPnRpbWluZyA9IHZhbHVlICYgMHgzZjsKICNpZmRl ZiBUU0NfVkVSQk9TRQogICAgICAgICBpZiAodmFsdWUgJiB+MHgzZikKLSAgICAgICAgICAgIGZw cmludGYoc3RkZXJyLCAidHNjMjEwMl9jb250cm9sX3JlZ2lzdGVyX3dyaXRlOiAiCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgIndyb25nIHZhbHVlIHdyaXR0ZW4gaW50byBDT05GSUdcbiIp OworICAgICAgICAgICAgZXJyb3JfcmVwb3J0KCJ0c2MyMTAyX2NvbnRyb2xfcmVnaXN0ZXJfd3Jp dGU6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAid3JvbmcgdmFsdWUgd3JpdHRlbiBpbnRv IENPTkZJRyIpOwogI2VuZGlmCiAgICAgICAgIHJldHVybjsKIApAQCAtNjM3LDggKzYzNyw4IEBA IHN0YXRpYyB2b2lkIHRzYzIxMDJfY29udHJvbF9yZWdpc3Rlcl93cml0ZSgKICAgICBkZWZhdWx0 OgogICAgIGJhZF9yZWc6CiAjaWZkZWYgVFNDX1ZFUkJPU0UKLSAgICAgICAgZnByaW50ZihzdGRl cnIsICJ0c2MyMTAyX2NvbnRyb2xfcmVnaXN0ZXJfd3JpdGU6ICIKLSAgICAgICAgICAgICAgICAg ICAgICAgICJubyBzdWNoIHJlZ2lzdGVyOiAweCUwMnhcbiIsIHJlZyk7CisgICAgICAgIGVycm9y X3JlcG9ydCgidHNjMjEwMl9jb250cm9sX3JlZ2lzdGVyX3dyaXRlOiAiCisgICAgICAgICAgICAg ICAgICAgICAibm8gc3VjaCByZWdpc3RlcjogMHglMDJ4IiwgcmVnKTsKICNlbmRpZgogICAgIH0K IH0KQEAgLTY1MSw4ICs2NTEsOCBAQCBzdGF0aWMgdm9pZCB0c2MyMTAyX2F1ZGlvX3JlZ2lzdGVy X3dyaXRlKAogICAgICAgICBzLT5hdWRpb19jdHJsMSA9IHZhbHVlICYgMHgwZjNmOwogI2lmZGVm IFRTQ19WRVJCT1NFCiAgICAgICAgIGlmICgodmFsdWUgJiB+MHgwZjNmKSB8fCAoKHZhbHVlICYg NykgIT0gKCh2YWx1ZSA+PiAzKSAmIDcpKSkKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAi dHNjMjEwMl9hdWRpb19yZWdpc3Rlcl93cml0ZTogIgotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJ3cm9uZyB2YWx1ZSB3cml0dGVuIGludG8gQXVkaW8gMVxuIik7CisgICAgICAgICAgICBl cnJvcl9yZXBvcnQoInRzYzIxMDJfYXVkaW9fcmVnaXN0ZXJfd3JpdGU6ICIKKyAgICAgICAgICAg ICAgICAgICAgICAgICAid3JvbmcgdmFsdWUgd3JpdHRlbiBpbnRvIEF1ZGlvIDEiKTsKICNlbmRp ZgogICAgICAgICB0c2MyMTAyX2F1ZGlvX3JhdGVfdXBkYXRlKHMpOwogICAgICAgICB0c2MyMTAy X2F1ZGlvX291dHB1dF91cGRhdGUocyk7CkBAIC02NjEsOCArNjYxLDggQEAgc3RhdGljIHZvaWQg dHNjMjEwMl9hdWRpb19yZWdpc3Rlcl93cml0ZSgKICAgICBjYXNlIDB4MDE6CiAjaWZkZWYgVFND X1ZFUkJPU0UKICAgICAgICAgaWYgKHZhbHVlICE9IDB4ZmYwMCkKLSAgICAgICAgICAgIGZwcmlu dGYoc3RkZXJyLCAidHNjMjEwMl9hdWRpb19yZWdpc3Rlcl93cml0ZTogIgotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJ3cm9uZyB2YWx1ZSB3cml0dGVuIGludG8gcmVnIDB4MDFcbiIpOwor ICAgICAgICAgICAgZXJyb3JfcmVwb3J0KCJ0c2MyMTAyX2F1ZGlvX3JlZ2lzdGVyX3dyaXRlOiAi CisgICAgICAgICAgICAgICAgICAgICAgICAgIndyb25nIHZhbHVlIHdyaXR0ZW4gaW50byByZWcg MHgwMSIpOwogI2VuZGlmCiAgICAgICAgIHJldHVybjsKIApAQCAtNjc0LDggKzY3NCw4IEBAIHN0 YXRpYyB2b2lkIHRzYzIxMDJfYXVkaW9fcmVnaXN0ZXJfd3JpdGUoCiAgICAgY2FzZSAweDAzOgog I2lmZGVmIFRTQ19WRVJCT1NFCiAgICAgICAgIGlmICh2YWx1ZSAhPSAweDhiMDApCi0gICAgICAg ICAgICBmcHJpbnRmKHN0ZGVyciwgInRzYzIxMDJfYXVkaW9fcmVnaXN0ZXJfd3JpdGU6ICIKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAid3JvbmcgdmFsdWUgd3JpdHRlbiBpbnRvIHJlZyAw eDAzXG4iKTsKKyAgICAgICAgICAgIGVycm9yX3JlcG9ydCgidHNjMjEwMl9hdWRpb19yZWdpc3Rl cl93cml0ZTogIgorICAgICAgICAgICAgICAgICAgICAgICAgICJ3cm9uZyB2YWx1ZSB3cml0dGVu IGludG8gcmVnIDB4MDMiKTsKICNlbmRpZgogICAgICAgICByZXR1cm47CiAKQEAgLTY4Myw4ICs2 ODMsOCBAQCBzdGF0aWMgdm9pZCB0c2MyMTAyX2F1ZGlvX3JlZ2lzdGVyX3dyaXRlKAogICAgICAg ICBzLT5hdWRpb19jdHJsMiA9IHZhbHVlICYgMHhmN2YyOwogI2lmZGVmIFRTQ19WRVJCT1NFCiAg ICAgICAgIGlmICh2YWx1ZSAmIH4weGY3ZmQpCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg InRzYzIxMDJfYXVkaW9fcmVnaXN0ZXJfd3JpdGU6ICIKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAid3JvbmcgdmFsdWUgd3JpdHRlbiBpbnRvIEF1ZGlvIDJcbiIpOworICAgICAgICAgICAg ZXJyb3JfcmVwb3J0KCJ0c2MyMTAyX2F1ZGlvX3JlZ2lzdGVyX3dyaXRlOiAiCisgICAgICAgICAg ICAgICAgICAgICAgICAgIndyb25nIHZhbHVlIHdyaXR0ZW4gaW50byBBdWRpbyAyIik7CiAjZW5k aWYKICAgICAgICAgcmV0dXJuOwogCkBAIC02OTUsOCArNjk1LDggQEAgc3RhdGljIHZvaWQgdHNj MjEwMl9hdWRpb19yZWdpc3Rlcl93cml0ZSgKICAgICAgICAgcy0+ZGFjX3Bvd2VyID0gdmFsdWUg JiAweDk1NDM7CiAjaWZkZWYgVFNDX1ZFUkJPU0UKICAgICAgICAgaWYgKCh2YWx1ZSAmIH4weDk1 NDMpICE9IDB4MmFhMCkKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAidHNjMjEwMl9hdWRp b19yZWdpc3Rlcl93cml0ZTogIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3cm9uZyB2 YWx1ZSB3cml0dGVuIGludG8gUG93ZXJcbiIpOworICAgICAgICAgICAgZXJyb3JfcmVwb3J0KCJ0 c2MyMTAyX2F1ZGlvX3JlZ2lzdGVyX3dyaXRlOiAiCisgICAgICAgICAgICAgICAgICAgICAgICAg Indyb25nIHZhbHVlIHdyaXR0ZW4gaW50byBQb3dlciIpOwogI2VuZGlmCiAgICAgICAgIHRzYzIx MDJfYXVkaW9fcmF0ZV91cGRhdGUocyk7CiAgICAgICAgIHRzYzIxMDJfYXVkaW9fb3V0cHV0X3Vw ZGF0ZShzKTsKQEAgLTcwNyw4ICs3MDcsOCBAQCBzdGF0aWMgdm9pZCB0c2MyMTAyX2F1ZGlvX3Jl Z2lzdGVyX3dyaXRlKAogICAgICAgICBzLT5hdWRpb19jdHJsMyB8PSB2YWx1ZSAmIDB4ZjgwMDsK ICNpZmRlZiBUU0NfVkVSQk9TRQogICAgICAgICBpZiAodmFsdWUgJiB+MHhmOGM3KQotICAgICAg ICAgICAgZnByaW50ZihzdGRlcnIsICJ0c2MyMTAyX2F1ZGlvX3JlZ2lzdGVyX3dyaXRlOiAiCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgIndyb25nIHZhbHVlIHdyaXR0ZW4gaW50byBBdWRp byAzXG4iKTsKKyAgICAgICAgICAgIGVycm9yX3JlcG9ydCgidHNjMjEwMl9hdWRpb19yZWdpc3Rl cl93cml0ZTogIgorICAgICAgICAgICAgICAgICAgICAgICAgICJ3cm9uZyB2YWx1ZSB3cml0dGVu IGludG8gQXVkaW8gMyIpOwogI2VuZGlmCiAgICAgICAgIHRzYzIxMDJfYXVkaW9fb3V0cHV0X3Vw ZGF0ZShzKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNzQwLDggKzc0MCw4IEBAIHN0YXRpYyB2b2lk IHRzYzIxMDJfYXVkaW9fcmVnaXN0ZXJfd3JpdGUoCiAgICAgICAgIHMtPnBsbFswXSA9IHZhbHVl ICYgMHhmZmZjOwogI2lmZGVmIFRTQ19WRVJCT1NFCiAgICAgICAgIGlmICh2YWx1ZSAmIH4weGZm ZmMpCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInRzYzIxMDJfYXVkaW9fcmVnaXN0ZXJf d3JpdGU6ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAid3JvbmcgdmFsdWUgd3JpdHRl biBpbnRvIFBMTCAxXG4iKTsKKyAgICAgICAgICAgIGVycm9yX3JlcG9ydCgidHNjMjEwMl9hdWRp b19yZWdpc3Rlcl93cml0ZTogIgorICAgICAgICAgICAgICAgICAgICAgICAgICJ3cm9uZyB2YWx1 ZSB3cml0dGVuIGludG8gUExMIDEiKTsKICNlbmRpZgogICAgICAgICByZXR1cm47CiAKQEAgLTc0 OSw4ICs3NDksOCBAQCBzdGF0aWMgdm9pZCB0c2MyMTAyX2F1ZGlvX3JlZ2lzdGVyX3dyaXRlKAog ICAgICAgICBzLT5wbGxbMV0gPSB2YWx1ZSAmIDB4ZmZmYzsKICNpZmRlZiBUU0NfVkVSQk9TRQog ICAgICAgICBpZiAodmFsdWUgJiB+MHhmZmZjKQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs ICJ0c2MyMTAyX2F1ZGlvX3JlZ2lzdGVyX3dyaXRlOiAiCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgIndyb25nIHZhbHVlIHdyaXR0ZW4gaW50byBQTEwgMlxuIik7CisgICAgICAgICAgICBl cnJvcl9yZXBvcnQoInRzYzIxMDJfYXVkaW9fcmVnaXN0ZXJfd3JpdGU6ICIKKyAgICAgICAgICAg ICAgICAgICAgICAgICAid3JvbmcgdmFsdWUgd3JpdHRlbiBpbnRvIFBMTCAyIik7CiAjZW5kaWYK ICAgICAgICAgcmV0dXJuOwogCkBAIC03NTgsMTUgKzc1OCwxNSBAQCBzdGF0aWMgdm9pZCB0c2My MTAyX2F1ZGlvX3JlZ2lzdGVyX3dyaXRlKAogICAgICAgICBzLT5zb2Z0c3RlcCA9ICEodmFsdWUg JiAweDQwMDApOwogI2lmZGVmIFRTQ19WRVJCT1NFCiAgICAgICAgIGlmICh2YWx1ZSAmIH4weDQw MDApCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInRzYzIxMDJfYXVkaW9fcmVnaXN0ZXJf d3JpdGU6ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAid3JvbmcgdmFsdWUgd3JpdHRl biBpbnRvIEF1ZGlvIDRcbiIpOworICAgICAgICAgICAgZXJyb3JfcmVwb3J0KCJ0c2MyMTAyX2F1 ZGlvX3JlZ2lzdGVyX3dyaXRlOiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIndyb25nIHZh bHVlIHdyaXR0ZW4gaW50byBBdWRpbyA0Iik7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuOwogCiAg ICAgZGVmYXVsdDoKICNpZmRlZiBUU0NfVkVSQk9TRQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwg InRzYzIxMDJfYXVkaW9fcmVnaXN0ZXJfd3JpdGU6ICIKLSAgICAgICAgICAgICAgICAgICAgICAg ICJubyBzdWNoIHJlZ2lzdGVyOiAweCUwMnhcbiIsIHJlZyk7CisgICAgICAgIGVycm9yX3JlcG9y dCgidHNjMjEwMl9hdWRpb19yZWdpc3Rlcl93cml0ZTogIgorICAgICAgICAgICAgICAgICAgICAg Im5vIHN1Y2ggcmVnaXN0ZXI6IDB4JTAyeCIsIHJlZyk7CiAjZW5kaWYKICAgICB9CiB9CkBAIC04 NDcsNyArODQ3LDcgQEAgc3RhdGljIHVpbnQxNl90IHRzYzIxMHhfcmVhZChUU0MyMTB4U3RhdGUg KnMpCiAgICAgdWludDE2X3QgcmV0ID0gMHgwMDAwOwogCiAgICAgaWYgKCFzLT5jb21tYW5kKQot ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInRzYzIxMHhfcmVhZDogU1BJIHVuZGVycnVuIVxuIik7 CisgICAgICAgIGVycm9yX3JlcG9ydCgidHNjMjEweF9yZWFkOiBTUEkgdW5kZXJydW4hIik7CiAK ICAgICBzd2l0Y2ggKHMtPnBhZ2UpIHsKICAgICBjYXNlIFRTQ19EQVRBX1JFR0lTVEVSU19QQUdF OgpAQCAtODg2LDcgKzg4Niw3IEBAIHN0YXRpYyB2b2lkIHRzYzIxMHhfd3JpdGUoVFNDMjEweFN0 YXRlICpzLCB1aW50MTZfdCB2YWx1ZSkKICAgICAgICAgcy0+c3RhdGUgPSB0cnVlOwogICAgIH0g ZWxzZSB7CiAgICAgICAgIGlmIChzLT5jb21tYW5kKQotICAgICAgICAgICAgZnByaW50ZihzdGRl cnIsICJ0c2MyMTB4X3dyaXRlOiBTUEkgb3ZlcnJ1biFcbiIpOworICAgICAgICAgICAgZXJyb3Jf cmVwb3J0KCJ0c2MyMTB4X3dyaXRlOiBTUEkgb3ZlcnJ1biEiKTsKICAgICAgICAgZWxzZQogICAg ICAgICAgICAgc3dpdGNoIChzLT5wYWdlKSB7CiAgICAgICAgICAgICBjYXNlIFRTQ19EQVRBX1JF R0lTVEVSU19QQUdFOgpkaWZmIC0tZ2l0IGEvaHcvaW5wdXQvdmlydGlvLWlucHV0LWhpZC5jIGIv aHcvaW5wdXQvdmlydGlvLWlucHV0LWhpZC5jCmluZGV4IDRkM2FmYzFiMTQuLmJmMWVkN2IxOGUg MTAwNjQ0Ci0tLSBhL2h3L2lucHV0L3ZpcnRpby1pbnB1dC1oaWQuYworKysgYi9ody9pbnB1dC92 aXJ0aW8taW5wdXQtaGlkLmMKQEAgLTIwOCw4ICsyMDgsOCBAQCBzdGF0aWMgdm9pZCB2aXJ0aW9f aW5wdXRfaGFuZGxlX2V2ZW50KERldmljZVN0YXRlICpkZXYsIFFlbXVDb25zb2xlICpzcmMsCiAg ICAgICAgICAgICB2aXJ0aW9faW5wdXRfc2VuZCh2aW5wdXQsICZldmVudCk7CiAgICAgICAgIH0g ZWxzZSB7CiAgICAgICAgICAgICBpZiAoa2V5LT5kb3duKSB7Ci0gICAgICAgICAgICAgICAgZnBy aW50ZihzdGRlcnIsICIlczogdW5tYXBwZWQga2V5OiAlZCBbJXNdXG4iLCBfX2Z1bmNfXywKLSAg ICAgICAgICAgICAgICAgICAgICAgIHFjb2RlLCBRS2V5Q29kZV9zdHIocWNvZGUpKTsKKyAgICAg ICAgICAgICAgICBlcnJvcl9yZXBvcnQoIiVzOiB1bm1hcHBlZCBrZXk6ICVkIFslc10iLCBfX2Z1 bmNfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcWNvZGUsIFFLZXlDb2RlX3N0cihx Y29kZSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMjIy LDkgKzIyMiw5IEBAIHN0YXRpYyB2b2lkIHZpcnRpb19pbnB1dF9oYW5kbGVfZXZlbnQoRGV2aWNl U3RhdGUgKmRldiwgUWVtdUNvbnNvbGUgKnNyYywKICAgICAgICAgICAgIHZpcnRpb19pbnB1dF9z ZW5kKHZpbnB1dCwgJmV2ZW50KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChi dG4tPmRvd24pIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiB1bm1hcHBl ZCBidXR0b246ICVkIFslc11cbiIsIF9fZnVuY19fLAotICAgICAgICAgICAgICAgICAgICAgICAg YnRuLT5idXR0b24sCi0gICAgICAgICAgICAgICAgICAgICAgICBJbnB1dEJ1dHRvbl9zdHIoYnRu LT5idXR0b24pKTsKKyAgICAgICAgICAgICAgICBlcnJvcl9yZXBvcnQoIiVzOiB1bm1hcHBlZCBi dXR0b246ICVkIFslc10iLCBfX2Z1bmNfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YnRuLT5idXR0b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElucHV0QnV0dG9uX3N0 cihidG4tPmJ1dHRvbikpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGJyZWFr OwpAQCAtMzEwLDggKzMxMCw4IEBAIHN0YXRpYyB2b2lkIHZpcnRpb19pbnB1dF9oaWRfaGFuZGxl X3N0YXR1cyhWaXJ0SU9JbnB1dCAqdmlucHV0LAogICAgICAgICBrYmRfcHV0X2xlZHN0YXRlKHZo aWQtPmxlZHN0YXRlKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgZnBy aW50ZihzdGRlcnIsICIlczogdW5rbm93biB0eXBlICVkXG4iLCBfX2Z1bmNfXywKLSAgICAgICAg ICAgICAgICBsZTE2X3RvX2NwdShldmVudC0+dHlwZSkpOworICAgICAgICBlcnJvcl9yZXBvcnQo IiVzOiB1bmtub3duIHR5cGUgJWQiLCBfX2Z1bmNfXywKKyAgICAgICAgICAgICAgICAgICAgIGxl MTZfdG9fY3B1KGV2ZW50LT50eXBlKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KZGlmZiAt LWdpdCBhL2h3L2lucHV0L3ZpcnRpby1pbnB1dC5jIGIvaHcvaW5wdXQvdmlydGlvLWlucHV0LmMK aW5kZXggMGU0MmYwZDAyYy4uZmI1ZmEwYTI4MCAxMDA2NDQKLS0tIGEvaHcvaW5wdXQvdmlydGlv LWlucHV0LmMKKysrIGIvaHcvaW5wdXQvdmlydGlvLWlucHV0LmMKQEAgLTUsNiArNSw3IEBACiAg Ki8KIAogI2luY2x1ZGUgInFlbXUvb3NkZXAuaCIKKyNpbmNsdWRlICJxZW11L2Vycm9yLXJlcG9y dC5oIgogI2luY2x1ZGUgInFhcGkvZXJyb3IuaCIKICNpbmNsdWRlICJxZW11L2lvdi5oIgogI2lu Y2x1ZGUgInRyYWNlLmgiCkBAIC0xMjEsOCArMTIyLDggQEAgdm9pZCB2aXJ0aW9faW5wdXRfYWRk X2NvbmZpZyhWaXJ0SU9JbnB1dCAqdmlucHV0LAogCiAgICAgaWYgKHZpcnRpb19pbnB1dF9maW5k X2NvbmZpZyh2aW5wdXQsIGNvbmZpZy0+c2VsZWN0LCBjb25maWctPnN1YnNlbCkpIHsKICAgICAg ICAgLyogc2hvdWxkIG5vdCBoYXBwZW4gKi8KLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczog ZHVwbGljYXRlIGNvbmZpZzogJWQvJWRcbiIsCi0gICAgICAgICAgICAgICAgX19mdW5jX18sIGNv bmZpZy0+c2VsZWN0LCBjb25maWctPnN1YnNlbCk7CisgICAgICAgIGVycm9yX3JlcG9ydCgiJXM6 IGR1cGxpY2F0ZSBjb25maWc6ICVkLyVkIiwKKyAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19f LCBjb25maWctPnNlbGVjdCwgY29uZmlnLT5zdWJzZWwpOwogICAgICAgICBhYm9ydCgpOwogICAg IH0KIApkaWZmIC0tZ2l0IGEvaHcvaW50Yy9hcm1fZ2ljX2t2bS5jIGIvaHcvaW50Yy9hcm1fZ2lj X2t2bS5jCmluZGV4IGFlMDk1ZDA4YTMuLmE1NDc4ZDNlMjAgMTAwNjQ0Ci0tLSBhL2h3L2ludGMv YXJtX2dpY19rdm0uYworKysgYi9ody9pbnRjL2FybV9naWNfa3ZtLmMKQEAgLTMxNiwxMiArMzE2 LDEyIEBAIHN0YXRpYyB2b2lkIGt2bV9hcm1fZ2ljX3B1dChHSUNTdGF0ZSAqcykKICAgICBudW1f Y3B1ID0gKChyZWcgJiAweGUwKSA+PiA1KSArIDE7CiAKICAgICBpZiAobnVtX2lycSA8IHMtPm51 bV9pcnEpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiUmVzdG9yaW5nICV1IElSUXMs IGJ1dCBrZXJuZWwgc3VwcG9ydHMgbWF4ICVkXG4iLAotICAgICAgICAgICAgICAgICAgICBzLT5u dW1faXJxLCBudW1faXJxKTsKKyAgICAgICAgICAgIGVycm9yX3JlcG9ydCgiUmVzdG9yaW5nICV1 IElSUXMsIGJ1dCBrZXJuZWwgc3VwcG9ydHMgbWF4ICVkIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICBzLT5udW1faXJxLCBudW1faXJxKTsKICAgICAgICAgICAgIGFib3J0KCk7CiAgICAgfSBl bHNlIGlmIChudW1fY3B1ICE9IHMtPm51bV9jcHUpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3Rk ZXJyLCAiUmVzdG9yaW5nICV1IENQVSBpbnRlcmZhY2VzLCBrZXJuZWwgb25seSBoYXMgJWRcbiIs Ci0gICAgICAgICAgICAgICAgICAgIHMtPm51bV9jcHUsIG51bV9jcHUpOworICAgICAgICAgICAg ZXJyb3JfcmVwb3J0KCJSZXN0b3JpbmcgJXUgQ1BVIGludGVyZmFjZXMsIGtlcm5lbCBvbmx5IGhh cyAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgcy0+bnVtX2NwdSwgbnVtX2NwdSk7CiAg ICAgICAgICAgICAvKiBEaWQgd2Ugbm90IGNyZWF0ZSB0aGUgVkNQVXMgaW4gdGhlIGtlcm5lbCB5 ZXQ/ICovCiAgICAgICAgICAgICBhYm9ydCgpOwogICAgIH0KQEAgLTQxMSw4ICs0MTEsOCBAQCBz dGF0aWMgdm9pZCBrdm1fYXJtX2dpY19nZXQoR0lDU3RhdGUgKnMpCiAgICAgcy0+bnVtX2NwdSA9 ICgocmVnICYgMHhlMCkgPj4gNSkgKyAxOwogCiAgICAgaWYgKHMtPm51bV9pcnEgPiBHSUNfTUFY SVJRKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlRvbyBtYW55IElSUXMgcmVwb3J0 ZWQgZnJvbSB0aGUga2VybmVsOiAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgcy0+bnVtX2ly cSk7CisgICAgICAgICAgICBlcnJvcl9yZXBvcnQoIlRvbyBtYW55IElSUXMgcmVwb3J0ZWQgZnJv bSB0aGUga2VybmVsOiAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgcy0+bnVtX2lycSk7 CiAgICAgICAgICAgICBhYm9ydCgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvaHcvaW50Yy9vbWFw X2ludGMuYyBiL2h3L2ludGMvb21hcF9pbnRjLmMKaW5kZXggNjg0NGMxYWE4My4uN2ZjMjM5NzE1 YSAxMDA2NDQKLS0tIGEvaHcvaW50Yy9vbWFwX2ludGMuYworKysgYi9ody9pbnRjL29tYXBfaW50 Yy5jCkBAIC01MzksOCArNTM5LDggQEAgc3RhdGljIHZvaWQgb21hcDJfaW50aF93cml0ZSh2b2lk ICpvcGFxdWUsIGh3YWRkciBhZGRyLAogICAgICAgICAvKiBUT0RPOiBNYWtlIGEgYml0bWFwIChv ciBzaXplb2YoY2hhciltYXApIG9mIGFjY2VzcyBwcml2aWxlZ2VzCiAgICAgICAgICAqIGZvciBl dmVyeSByZWdpc3Rlciwgc2VlIENoYXB0ZXIgMyBhbmQgNCBmb3IgcHJpdmlsZWdlZCBtb2RlLiAg Ki8KICAgICAgICAgaWYgKHZhbHVlICYgMSkKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAi JXM6IHByb3RlY3Rpb24gbW9kZSBlbmFibGUgYXR0ZW1wdFxuIiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2Z1bmNfXyk7CisgICAgICAgICAgICBlcnJvcl9yZXBvcnQoIiVzOiBwcm90 ZWN0aW9uIG1vZGUgZW5hYmxlIGF0dGVtcHQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBf X2Z1bmNfXyk7CiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgMHg1MDoJLyogSU5UQ19JRExF ICovCmRpZmYgLS1naXQgYS9ody9pbnRjL29wZW5waWMuYyBiL2h3L2ludGMvb3BlbnBpYy5jCmlu ZGV4IDlkZDI4NWI5MjMuLmRmYWVmYmY1NzUgMTAwNjQ0Ci0tLSBhL2h3L2ludGMvb3BlbnBpYy5j CisrKyBiL2h3L2ludGMvb3BlbnBpYy5jCkBAIC0zNCw2ICszNCw3IEBACiAgKgogICovCiAjaW5j bHVkZSAicWVtdS9vc2RlcC5oIgorI2luY2x1ZGUgInFlbXUvZXJyb3ItcmVwb3J0LmgiCiAjaW5j bHVkZSAiaHcvaHcuaCIKICNpbmNsdWRlICJody9wcGMvbWFjLmgiCiAjaW5jbHVkZSAiaHcvcGNp L3BjaS5oIgpAQCAtMTYyLDcgKzE2Myw3IEBAIHN0YXRpYyBpbnQgaW50dGd0X3RvX291dHB1dChp bnQgaW50dGd0KQogICAgICAgICB9CiAgICAgfQogCi0gICAgZnByaW50ZihzdGRlcnIsICIlczog dW5zdXBwb3J0ZWQgaW50dGd0ICVkXG4iLCBfX2Z1bmNfXywgaW50dGd0KTsKKyAgICBlcnJvcl9y ZXBvcnQoIiVzOiB1bnN1cHBvcnRlZCBpbnR0Z3QgJWQiLCBfX2Z1bmNfXywgaW50dGd0KTsKICAg ICByZXR1cm4gT1BFTlBJQ19PVVRQVVRfSU5UOwogfQogCkBAIC01MzQsNyArNTM1LDcgQEAgc3Rh dGljIHZvaWQgb3BlbnBpY19zZXRfaXJxKHZvaWQgKm9wYXF1ZSwgaW50IG5fSVJRLCBpbnQgbGV2 ZWwpCiAgICAgSVJRU291cmNlICpzcmM7CiAKICAgICBpZiAobl9JUlEgPj0gT1BFTlBJQ19NQVhf SVJRKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IElSUSAlZCBvdXQgb2YgcmFuZ2Vc biIsIF9fZnVuY19fLCBuX0lSUSk7CisgICAgICAgIGVycm9yX3JlcG9ydCgiJXM6IElSUSAlZCBv dXQgb2YgcmFuZ2UiLCBfX2Z1bmNfXywgbl9JUlEpOwogICAgICAgICBhYm9ydCgpOwogICAgIH0K IApAQCAtMTIwOCw3ICsxMjA5LDcgQEAgc3RhdGljIHVpbnQzMl90IG9wZW5waWNfaWFjayhPcGVu UElDU3RhdGUgKm9wcCwgSVJRRGVzdCAqZHN0LCBpbnQgY3B1KQogICAgIHNyYyA9ICZvcHAtPnNy Y1tpcnFdOwogICAgIGlmICghKHNyYy0+aXZwciAmIElWUFJfQUNUSVZJVFlfTUFTSykgfHwKICAg ICAgICAgICAgICEoSVZQUl9QUklPUklUWShzcmMtPml2cHIpID4gZHN0LT5jdHByKSkgewotICAg ICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBiYWQgcmFpc2VkIElSUSAlZCBjdHByICVkIGl2cHIg MHglMDh4XG4iLAorICAgICAgICBlcnJvcl9yZXBvcnQoIiVzOiBiYWQgcmFpc2VkIElSUSAlZCBj dHByICVkIGl2cHIgMHglMDh4IiwKICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgaXJxLCBkc3Qt PmN0cHIsIHNyYy0+aXZwcik7CiAgICAgICAgIG9wZW5waWNfdXBkYXRlX2lycShvcHAsIGlycSk7 CiAgICAgICAgIHJldHZhbCA9IG9wcC0+c3B2ZTsKZGlmZiAtLWdpdCBhL2h3L2ludGMvb3BlbnBp Y19rdm0uYyBiL2h3L2ludGMvb3BlbnBpY19rdm0uYwppbmRleCBmYTgzNDIwMjU0Li42MGM3ODRh ZTg2IDEwMDY0NAotLS0gYS9ody9pbnRjL29wZW5waWNfa3ZtLmMKKysrIGIvaHcvaW50Yy9vcGVu cGljX2t2bS5jCkBAIC0xNTAsOCArMTUwLDggQEAgc3RhdGljIHZvaWQga3ZtX29wZW5waWNfcmVn aW9uX2FkZChNZW1vcnlMaXN0ZW5lciAqbGlzdGVuZXIsCiAKICAgICByZXQgPSBpb2N0bChvcHAt PmZkLCBLVk1fU0VUX0RFVklDRV9BVFRSLCAmYXR0cik7CiAgICAgaWYgKHJldCA8IDApIHsKLSAg ICAgICAgZnByaW50ZihzdGRlcnIsICIlczogJXMgJSIgUFJJeDY0ICJcbiIsIF9fZnVuY19fLAot ICAgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSwgcmVnX2Jhc2UpOworICAgICAgICBlcnJv cl9yZXBvcnQoIiVzOiAlcyAlIiBQUkl4NjQgIiIsIF9fZnVuY19fLAorICAgICAgICAgICAgICAg ICAgICAgc3RyZXJyb3IoZXJybm8pLCByZWdfYmFzZSk7CiAgICAgfQogfQogCkBAIC0xODQsOCAr MTg0LDggQEAgc3RhdGljIHZvaWQga3ZtX29wZW5waWNfcmVnaW9uX2RlbChNZW1vcnlMaXN0ZW5l ciAqbGlzdGVuZXIsCiAKICAgICByZXQgPSBpb2N0bChvcHAtPmZkLCBLVk1fU0VUX0RFVklDRV9B VFRSLCAmYXR0cik7CiAgICAgaWYgKHJldCA8IDApIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIs ICIlczogJXMgJSIgUFJJeDY0ICJcbiIsIF9fZnVuY19fLAotICAgICAgICAgICAgICAgIHN0cmVy cm9yKGVycm5vKSwgcmVnX2Jhc2UpOworICAgICAgICBlcnJvcl9yZXBvcnQoIiVzOiAlcyAlIiBQ Ukl4NjQgIiIsIF9fZnVuY19fLAorICAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8p LCByZWdfYmFzZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9ody9pbnRjL3MzOTBfZmxpY19r dm0uYyBiL2h3L2ludGMvczM5MF9mbGljX2t2bS5jCmluZGV4IDdlYWQxN2FjM2UuLjM3NzRiMWEy ZjAgMTAwNjQ0Ci0tLSBhL2h3L2ludGMvczM5MF9mbGljX2t2bS5jCisrKyBiL2h3L2ludGMvczM5 MF9mbGljX2t2bS5jCkBAIC04Myw3ICs4Myw3IEBAIHN0YXRpYyB2b2lkIGZsaWNfZW5hYmxlX3Bm YXVsdChLVk1TMzkwRkxJQ1N0YXRlICpmbGljKQogICAgIHJjID0gaW9jdGwoZmxpYy0+ZmQsIEtW TV9TRVRfREVWSUNFX0FUVFIsICZhdHRyKTsKIAogICAgIGlmIChyYykgewotICAgICAgICBmcHJp bnRmKHN0ZGVyciwgImZsaWM6IGNvdWxkbid0IGVuYWJsZSBwZmF1bHRcbiIpOworICAgICAgICBl cnJvcl9yZXBvcnQoImZsaWM6IGNvdWxkbid0IGVuYWJsZSBwZmF1bHQiKTsKICAgICB9CiB9CiAK QEAgLTk3LDcgKzk3LDcgQEAgc3RhdGljIHZvaWQgZmxpY19kaXNhYmxlX3dhaXRfcGZhdWx0KEtW TVMzOTBGTElDU3RhdGUgKmZsaWMpCiAgICAgcmMgPSBpb2N0bChmbGljLT5mZCwgS1ZNX1NFVF9E RVZJQ0VfQVRUUiwgJmF0dHIpOwogCiAgICAgaWYgKHJjKSB7Ci0gICAgICAgIGZwcmludGYoc3Rk ZXJyLCAiZmxpYzogY291bGRuJ3QgZGlzYWJsZSBwZmF1bHRcbiIpOworICAgICAgICBlcnJvcl9y ZXBvcnQoImZsaWM6IGNvdWxkbid0IGRpc2FibGUgcGZhdWx0Iik7CiAgICAgfQogfQogCmRpZmYg LS1naXQgYS9ody9pcG1pL2lwbWkuYyBiL2h3L2lwbWkvaXBtaS5jCmluZGV4IGIyN2JhYmQ1MDQu LjgxYzYyOTIwZGUgMTAwNjQ0Ci0tLSBhL2h3L2lwbWkvaXBtaS5jCisrKyBiL2h3L2lwbWkvaXBt aS5jCkBAIC0yMyw2ICsyMyw3IEBACiAgKi8KIAogI2luY2x1ZGUgInFlbXUvb3NkZXAuaCIKKyNp bmNsdWRlICJxZW11L2Vycm9yLXJlcG9ydC5oIgogI2luY2x1ZGUgImh3L2h3LmgiCiAjaW5jbHVk ZSAiaHcvaXBtaS9pcG1pLmgiCiAjaW5jbHVkZSAic3lzZW11L3N5c2VtdS5oIgpkaWZmIC0tZ2l0 IGEvaHcvaXBtaS9pcG1pX2JtY19leHRlcm4uYyBiL2h3L2lwbWkvaXBtaV9ibWNfZXh0ZXJuLmMK aW5kZXggYWJhYjNiYmE0Zi4uOGMwNTM1ZDNkZCAxMDA2NDQKLS0tIGEvaHcvaXBtaS9pcG1pX2Jt Y19leHRlcm4uYworKysgYi9ody9pcG1pL2lwbWlfYm1jX2V4dGVybi5jCkBAIC0yOCw2ICsyOCw3 IEBACiAgKi8KIAogI2luY2x1ZGUgInFlbXUvb3NkZXAuaCIKKyNpbmNsdWRlICJxZW11L2Vycm9y LXJlcG9ydC5oIgogI2luY2x1ZGUgInFhcGkvZXJyb3IuaCIKICNpbmNsdWRlICJxZW11L3RpbWVy LmgiCiAjaW5jbHVkZSAiY2hhcmRldi9jaGFyLWZlLmgiCkBAIC0xOTQsOCArMTk1LDggQEAgc3Rh dGljIHZvaWQgaXBtaV9ibWNfZXh0ZXJuX2hhbmRsZV9jb21tYW5kKElQTUlCbWMgKmIsCiAKICAg ICBpZiAoaWJlLT5vdXRsZW4pIHsKICAgICAgICAgLyogV2UgYWxyZWFkeSBoYXZlIGEgY29tbWFu ZCBxdWV1ZWQuICBTaG91bGRuJ3QgZXZlciBoYXBwZW4uICovCi0gICAgICAgIGZwcmludGYoc3Rk ZXJyLCAiSVBNSSBLQ1M6IEdvdCBjb21tYW5kIHdoZW4gbm90IGZpbmlzaGVkIHdpdGggdGhlIgot ICAgICAgICAgICAgICAgICIgcHJldmlvdXMgY29tbWFuZFxuIik7CisgICAgICAgIGVycm9yX3Jl cG9ydCgiSVBNSSBLQ1M6IEdvdCBjb21tYW5kIHdoZW4gbm90IGZpbmlzaGVkIHdpdGggdGhlIgor ICAgICAgICAgICAgICAgICAgICAgIiBwcmV2aW91cyBjb21tYW5kIik7CiAgICAgICAgIGFib3J0 KCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9ody9pc2EvaXNhLWJ1cy5jIGIvaHcvaXNhL2lzYS1i dXMuYwppbmRleCAzNDhlMGVhYjlkLi4wZjJlNDI2ZDAyIDEwMDY0NAotLS0gYS9ody9pc2EvaXNh LWJ1cy5jCisrKyBiL2h3L2lzYS9pc2EtYnVzLmMKQEAgLTE3LDYgKzE3LDcgQEAKICAqIExpY2Vu c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5v cmcvbGljZW5zZXMvPi4KICAqLwogI2luY2x1ZGUgInFlbXUvb3NkZXAuaCIKKyNpbmNsdWRlICJx ZW11L2Vycm9yLXJlcG9ydC5oIgogI2luY2x1ZGUgInFhcGkvZXJyb3IuaCIKICNpbmNsdWRlICJo dy9ody5oIgogI2luY2x1ZGUgIm1vbml0b3IvbW9uaXRvci5oIgpAQCAtMTg2LDE1ICsxODcsMTUg QEAgSVNBRGV2aWNlICppc2FfdmdhX2luaXQoSVNBQnVzICpidXMpCiAgICAgY2FzZSBWR0FfQ0lS UlVTOgogICAgICAgICByZXR1cm4gaXNhX2NyZWF0ZV9zaW1wbGUoYnVzLCAiaXNhLWNpcnJ1cy12 Z2EiKTsKICAgICBjYXNlIFZHQV9RWEw6Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IHF4 bDogbm8gUENJIGJ1c1xuIiwgX19mdW5jX18pOworICAgICAgICBlcnJvcl9yZXBvcnQoIiVzOiBx eGw6IG5vIFBDSSBidXMiLCBfX2Z1bmNfXyk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGNh c2UgVkdBX1NURDoKICAgICAgICAgcmV0dXJuIGlzYV9jcmVhdGVfc2ltcGxlKGJ1cywgImlzYS12 Z2EiKTsKICAgICBjYXNlIFZHQV9WTVdBUkU6Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6 IHZtd2FyZV92Z2E6IG5vIFBDSSBidXNcbiIsIF9fZnVuY19fKTsKKyAgICAgICAgZXJyb3JfcmVw b3J0KCIlczogdm13YXJlX3ZnYTogbm8gUENJIGJ1cyIsIF9fZnVuY19fKTsKICAgICAgICAgcmV0 dXJuIE5VTEw7CiAgICAgY2FzZSBWR0FfVklSVElPOgotICAgICAgICBmcHJpbnRmKHN0ZGVyciwg IiVzOiB2aXJ0aW8tdmdhOiBubyBQQ0kgYnVzXG4iLCBfX2Z1bmNfXyk7CisgICAgICAgIGVycm9y X3JlcG9ydCgiJXM6IHZpcnRpby12Z2E6IG5vIFBDSSBidXMiLCBfX2Z1bmNfXyk7CiAgICAgICAg IHJldHVybiBOVUxMOwogICAgIGNhc2UgVkdBX05PTkU6CiAgICAgZGVmYXVsdDoKZGlmZiAtLWdp dCBhL2h3L2xtMzIvbG0zMl9ib2FyZHMuYyBiL2h3L2xtMzIvbG0zMl9ib2FyZHMuYwppbmRleCBi MGJiM2VmNThhLi5kNzM5YWNmNDc2IDEwMDY0NAotLS0gYS9ody9sbTMyL2xtMzJfYm9hcmRzLmMK KysrIGIvaHcvbG0zMi9sbTMyX2JvYXJkcy5jCkBAIC0xOCw2ICsxOCw3IEBACiAgKi8KIAogI2lu Y2x1ZGUgInFlbXUvb3NkZXAuaCIKKyNpbmNsdWRlICJxZW11L2Vycm9yLXJlcG9ydC5oIgogI2lu Y2x1ZGUgInFlbXUtY29tbW9uLmgiCiAjaW5jbHVkZSAiY3B1LmgiCiAjaW5jbHVkZSAiaHcvc3lz YnVzLmgiCkBAIC0xNTIsNyArMTUzLDcgQEAgc3RhdGljIHZvaWQgbG0zMl9ldnJfaW5pdChNYWNo aW5lU3RhdGUgKm1hY2hpbmUpCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoa2VybmVsX3NpemUg PCAwKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInFlbXU6IGNvdWxkIG5vdCBsb2Fk IGtlcm5lbCAnJXMnXG4iLAorICAgICAgICAgICAgZXJyb3JfcmVwb3J0KCJxZW11OiBjb3VsZCBu b3QgbG9hZCBrZXJuZWwgJyVzJyIsCiAgICAgICAgICAgICAgICAgICAgIGtlcm5lbF9maWxlbmFt ZSk7CiAgICAgICAgICAgICBleGl0KDEpOwogICAgICAgICB9CkBAIC0yNTAsNyArMjUxLDcgQEAg c3RhdGljIHZvaWQgbG0zMl91Y2xpbnV4X2luaXQoTWFjaGluZVN0YXRlICptYWNoaW5lKQogICAg ICAgICB9CiAKICAgICAgICAgaWYgKGtlcm5lbF9zaXplIDwgMCkgewotICAgICAgICAgICAgZnBy aW50ZihzdGRlcnIsICJxZW11OiBjb3VsZCBub3QgbG9hZCBrZXJuZWwgJyVzJ1xuIiwKKyAgICAg ICAgICAgIGVycm9yX3JlcG9ydCgicWVtdTogY291bGQgbm90IGxvYWQga2VybmVsICclcyciLAog ICAgICAgICAgICAgICAgICAgICBrZXJuZWxfZmlsZW5hbWUpOwogICAgICAgICAgICAgZXhpdCgx KTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvaHcvbG0zMi9taWxreW1pc3QuYyBiL2h3L2xtMzIv bWlsa3ltaXN0LmMKaW5kZXggNGRiNGQyZDUzMy4uY2FhNmNmNGUwZiAxMDA2NDQKLS0tIGEvaHcv bG0zMi9taWxreW1pc3QuYworKysgYi9ody9sbTMyL21pbGt5bWlzdC5jCkBAIC0xOCw2ICsxOCw3 IEBACiAgKi8KIAogI2luY2x1ZGUgInFlbXUvb3NkZXAuaCIKKyNpbmNsdWRlICJxZW11L2Vycm9y LXJlcG9ydC5oIgogI2luY2x1ZGUgInFlbXUtY29tbW9uLmgiCiAjaW5jbHVkZSAiY3B1LmgiCiAj aW5jbHVkZSAiaHcvc3lzYnVzLmgiCkBAIC0xNDksNyArMTUwLDcgQEAgbWlsa3ltaXN0X2luaXQo TWFjaGluZVN0YXRlICptYWNoaW5lKQogCiAgICAgLyogaWYgbm8ga2VybmVsIGlzIGdpdmVuIG5v IHZhbGlkIGJpb3Mgcm9tIGlzIGEgZmF0YWwgZXJyb3IgKi8KICAgICBpZiAoIWtlcm5lbF9maWxl bmFtZSAmJiAhZGluZm8gJiYgIWJpb3NfZmlsZW5hbWUgJiYgIXF0ZXN0X2VuYWJsZWQoKSkgewot ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInFlbXU6IGNvdWxkIG5vdCBsb2FkIE1pbGt5bWlzdCBP bmUgYmlvcyAnJXMnXG4iLAorICAgICAgICBlcnJvcl9yZXBvcnQoInFlbXU6IGNvdWxkIG5vdCBs b2FkIE1pbGt5bWlzdCBPbmUgYmlvcyAnJXMnIiwKICAgICAgICAgICAgICAgICBiaW9zX25hbWUp OwogICAgICAgICBleGl0KDEpOwogICAgIH0KQEAgLTE4OCw3ICsxODksNyBAQCBtaWxreW1pc3Rf aW5pdChNYWNoaW5lU3RhdGUgKm1hY2hpbmUpCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoa2Vy bmVsX3NpemUgPCAwKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInFlbXU6IGNvdWxk IG5vdCBsb2FkIGtlcm5lbCAnJXMnXG4iLAorICAgICAgICAgICAgZXJyb3JfcmVwb3J0KCJxZW11 OiBjb3VsZCBub3QgbG9hZCBrZXJuZWwgJyVzJyIsCiAgICAgICAgICAgICAgICAgICAgIGtlcm5l bF9maWxlbmFtZSk7CiAgICAgICAgICAgICBleGl0KDEpOwogICAgICAgICB9CmRpZmYgLS1naXQg YS9ody9tNjhrL2FuNTIwNi5jIGIvaHcvbTY4ay9hbjUyMDYuYwppbmRleCA5MDAyYzQ2MGU1Li5i ZGFiNjIwYTAyIDEwMDY0NAotLS0gYS9ody9tNjhrL2FuNTIwNi5jCisrKyBiL2h3L202OGsvYW41 MjA2LmMKQEAgLTY2LDcgKzY2LDcgQEAgc3RhdGljIHZvaWQgYW41MjA2X2luaXQoTWFjaGluZVN0 YXRlICptYWNoaW5lKQogICAgICAgICBpZiAocXRlc3RfZW5hYmxlZCgpKSB7CiAgICAgICAgICAg ICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJLZXJuZWwgaW1h Z2UgbXVzdCBiZSBzcGVjaWZpZWRcbiIpOworICAgICAgICBlcnJvcl9yZXBvcnQoIktlcm5lbCBp bWFnZSBtdXN0IGJlIHNwZWNpZmllZCIpOwogICAgICAgICBleGl0KDEpOwogICAgIH0KIApAQCAt ODMsNyArODMsNyBAQCBzdGF0aWMgdm9pZCBhbjUyMDZfaW5pdChNYWNoaW5lU3RhdGUgKm1hY2hp bmUpCiAgICAgICAgIGVudHJ5ID0gS0VSTkVMX0xPQURfQUREUjsKICAgICB9CiAgICAgaWYgKGtl cm5lbF9zaXplIDwgMCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInFlbXU6IGNvdWxkIG5v dCBsb2FkIGtlcm5lbCAnJXMnXG4iLCBrZXJuZWxfZmlsZW5hbWUpOworICAgICAgICBlcnJvcl9y ZXBvcnQoInFlbXU6IGNvdWxkIG5vdCBsb2FkIGtlcm5lbCAnJXMnIiwga2VybmVsX2ZpbGVuYW1l KTsKICAgICAgICAgZXhpdCgxKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2h3L202OGsvbWNmNTIw Ni5jIGIvaHcvbTY4ay9tY2Y1MjA2LmMKaW5kZXggYjgxOTAxZmRmZC4uZmJmM2YwZjA3NCAxMDA2 NDQKLS0tIGEvaHcvbTY4ay9tY2Y1MjA2LmMKKysrIGIvaHcvbTY4ay9tY2Y1MjA2LmMKQEAgLTYs NiArNiw3IEBACiAgKiBUaGlzIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTAogICovCiAj aW5jbHVkZSAicWVtdS9vc2RlcC5oIgorI2luY2x1ZGUgInFlbXUvZXJyb3ItcmVwb3J0LmgiCiAj aW5jbHVkZSAicWVtdS1jb21tb24uaCIKICNpbmNsdWRlICJjcHUuaCIKICNpbmNsdWRlICJody9o dy5oIgpAQCAtMjIwLDcgKzIyMSw3IEBAIHN0YXRpYyB2b2lkIG01MjA2X21iYXJfdXBkYXRlKG01 MjA2X21iYXJfc3RhdGUgKnMpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBk ZWZhdWx0OgogICAgICAgICAgICAgICAgIC8qIFVua25vd24gdmVjdG9yLiAgKi8KLSAgICAgICAg ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVuaGFuZGxlZCB2ZWN0b3IgZm9yIElSUSAlZFxuIiwg aXJxKTsKKyAgICAgICAgICAgICAgICBlcnJvcl9yZXBvcnQoIlVuaGFuZGxlZCB2ZWN0b3IgZm9y IElSUSAlZCIsIGlycSk7CiAgICAgICAgICAgICAgICAgdmVjdG9yID0gMHhmOwogICAgICAgICAg ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvaHcvbTY4ay9tY2Y1MjA4 LmMgYi9ody9tNjhrL21jZjUyMDguYwppbmRleCBiOWRkZTc1MTA2Li4yZmI1MDM3YjcyIDEwMDY0 NAotLS0gYS9ody9tNjhrL21jZjUyMDguYworKysgYi9ody9tNjhrL21jZjUyMDguYwpAQCAtNiw2 ICs2LDcgQEAKICAqIFRoaXMgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMCiAgKi8KICNp bmNsdWRlICJxZW11L29zZGVwLmgiCisjaW5jbHVkZSAicWVtdS9lcnJvci1yZXBvcnQuaCIKICNp bmNsdWRlICJxYXBpL2Vycm9yLmgiCiAjaW5jbHVkZSAicWVtdS1jb21tb24uaCIKICNpbmNsdWRl ICJjcHUuaCIKQEAgLTI1Nyw3ICsyNTgsNyBAQCBzdGF0aWMgdm9pZCBtY2Y1MjA4ZXZiX2luaXQo TWFjaGluZVN0YXRlICptYWNoaW5lKQogICAgIG1jZjUyMDhfc3lzX2luaXQoYWRkcmVzc19zcGFj ZV9tZW0sIHBpYyk7CiAKICAgICBpZiAobmJfbmljcyA+IDEpIHsKLSAgICAgICAgZnByaW50Zihz dGRlcnIsICJUb28gbWFueSBOSUNzXG4iKTsKKyAgICAgICAgZXJyb3JfcmVwb3J0KCJUb28gbWFu eSBOSUNzIik7CiAgICAgICAgIGV4aXQoMSk7CiAgICAgfQogICAgIGlmIChuZF90YWJsZVswXS51 c2VkKSB7CkBAIC0yOTIsNyArMjkzLDcgQEAgc3RhdGljIHZvaWQgbWNmNTIwOGV2Yl9pbml0KE1h Y2hpbmVTdGF0ZSAqbWFjaGluZSkKICAgICAgICAgaWYgKHF0ZXN0X2VuYWJsZWQoKSkgewogICAg ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiS2Vy bmVsIGltYWdlIG11c3QgYmUgc3BlY2lmaWVkXG4iKTsKKyAgICAgICAgZXJyb3JfcmVwb3J0KCJL ZXJuZWwgaW1hZ2UgbXVzdCBiZSBzcGVjaWZpZWQiKTsKICAgICAgICAgZXhpdCgxKTsKICAgICB9 CiAKQEAgLTMwOSw3ICszMTAsNyBAQCBzdGF0aWMgdm9pZCBtY2Y1MjA4ZXZiX2luaXQoTWFjaGlu ZVN0YXRlICptYWNoaW5lKQogICAgICAgICBlbnRyeSA9IDB4NDAwMDAwMDA7CiAgICAgfQogICAg IGlmIChrZXJuZWxfc2l6ZSA8IDApIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJxZW11OiBj b3VsZCBub3QgbG9hZCBrZXJuZWwgJyVzJ1xuIiwga2VybmVsX2ZpbGVuYW1lKTsKKyAgICAgICAg ZXJyb3JfcmVwb3J0KCJxZW11OiBjb3VsZCBub3QgbG9hZCBrZXJuZWwgJyVzJyIsIGtlcm5lbF9m aWxlbmFtZSk7CiAgICAgICAgIGV4aXQoMSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9ody9taWNy b2JsYXplL2Jvb3QuYyBiL2h3L21pY3JvYmxhemUvYm9vdC5jCmluZGV4IDQ1N2EwOGEyZmUuLjMx NDY2MDUwZGUgMTAwNjQ0Ci0tLSBhL2h3L21pY3JvYmxhemUvYm9vdC5jCisrKyBiL2h3L21pY3Jv YmxhemUvYm9vdC5jCkBAIC04Niw3ICs4Niw3IEBAIHN0YXRpYyBpbnQgbWljcm9ibGF6ZV9sb2Fk X2R0Yihod2FkZHIgYWRkciwKICAgICAgICAgciA9IHFlbXVfZmR0X3NldHByb3Bfc3RyaW5nKGZk dCwgIi9jaG9zZW4iLCAiYm9vdGFyZ3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAga2VybmVsX2NtZGxpbmUpOwogICAgICAgICBpZiAociA8IDApIHsKLSAgICAgICAgICAg IGZwcmludGYoc3RkZXJyLCAiY291bGRuJ3Qgc2V0IC9jaG9zZW4vYm9vdGFyZ3NcbiIpOworICAg ICAgICAgICAgZXJyb3JfcmVwb3J0KCJjb3VsZG4ndCBzZXQgL2Nob3Nlbi9ib290YXJncyIpOwog ICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9ody9taXBzL2Jvc3Rvbi5jIGIvaHcvbWlw cy9ib3N0b24uYwppbmRleCA3NzZlZTI4M2UxLi5lZTgyOTY4ZWE3IDEwMDY0NAotLS0gYS9ody9t aXBzL2Jvc3Rvbi5jCisrKyBiL2h3L21pcHMvYm9zdG9uLmMKQEAgLTM1Myw3ICszNTMsNyBAQCBz dGF0aWMgY29uc3Qgdm9pZCAqYm9zdG9uX2ZkdF9maWx0ZXIodm9pZCAqb3BhcXVlLCBjb25zdCB2 b2lkICpmZHRfb3JpZywKIAogICAgIGVyciA9IGZkdF9vcGVuX2ludG8oZmR0X29yaWcsIGZkdCwg ZmR0X3N6KTsKICAgICBpZiAoZXJyKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAidW5hYmxl IHRvIG9wZW4gRkRUXG4iKTsKKyAgICAgICAgZXJyb3JfcmVwb3J0KCJ1bmFibGUgdG8gb3BlbiBG RFQiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC0zNjEsNyArMzYxLDcgQEAg c3RhdGljIGNvbnN0IHZvaWQgKmJvc3Rvbl9mZHRfZmlsdGVyKHZvaWQgKm9wYXF1ZSwgY29uc3Qg dm9pZCAqZmR0X29yaWcsCiAgICAgICAgICAgICA/IG1hY2hpbmUtPmtlcm5lbF9jbWRsaW5lIDog IiAiOwogICAgIGVyciA9IHFlbXVfZmR0X3NldHByb3Bfc3RyaW5nKGZkdCwgIi9jaG9zZW4iLCAi Ym9vdGFyZ3MiLCBjbWRsaW5lKTsKICAgICBpZiAoZXJyIDwgMCkgewotICAgICAgICBmcHJpbnRm KHN0ZGVyciwgImNvdWxkbid0IHNldCAvY2hvc2VuL2Jvb3RhcmdzXG4iKTsKKyAgICAgICAgZXJy b3JfcmVwb3J0KCJjb3VsZG4ndCBzZXQgL2Nob3Nlbi9ib290YXJncyIpOwogICAgICAgICByZXR1 cm4gTlVMTDsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2h3L21pcHMvbWlwc19mdWxvbmcyZS5jIGIv aHcvbWlwcy9taXBzX2Z1bG9uZzJlLmMKaW5kZXggNzUzMTg2ODBlMS4uMzQ3MTBhNDY2YyAxMDA2 NDQKLS0tIGEvaHcvbWlwcy9taXBzX2Z1bG9uZzJlLmMKKysrIGIvaHcvbWlwcy9taXBzX2Z1bG9u ZzJlLmMKQEAgLTE0Myw3ICsxNDMsNyBAQCBzdGF0aWMgaW50NjRfdCBsb2FkX2tlcm5lbCAoQ1BV TUlQU1N0YXRlICplbnYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5p dHJkX29mZnNldCwgcmFtX3NpemUgLSBpbml0cmRfb2Zmc2V0KTsKICAgICAgICAgfQogICAgICAg ICBpZiAoaW5pdHJkX3NpemUgPT0gKHRhcmdldF91bG9uZykgLTEpIHsKLSAgICAgICAgICAgIGZw cmludGYoc3RkZXJyLCAicWVtdTogY291bGQgbm90IGxvYWQgaW5pdGlhbCByYW0gZGlzayAnJXMn XG4iLAorICAgICAgICAgICAgZXJyb3JfcmVwb3J0KCJxZW11OiBjb3VsZCBub3QgbG9hZCBpbml0 aWFsIHJhbSBkaXNrICclcyciLAogICAgICAgICAgICAgICAgICAgICBsb2FkZXJwYXJhbXMuaW5p dHJkX2ZpbGVuYW1lKTsKICAgICAgICAgICAgIGV4aXQoMSk7CiAgICAgICAgIH0KQEAgLTM0Miw3 ICszNDIsNyBAQCBzdGF0aWMgdm9pZCBtaXBzX2Z1bG9uZzJlX2luaXQoTWFjaGluZVN0YXRlICpt YWNoaW5lKQogCiAgICAgaXNhX2J1cyA9IHZ0ODJjNjg2Yl9pbml0KHBjaV9idXMsIFBDSV9ERVZG TihGVUxPTkcyRV9WSUFfU0xPVCwgMCkpOwogICAgIGlmICghaXNhX2J1cykgewotICAgICAgICBm cHJpbnRmKHN0ZGVyciwgInZ0ODJjNjg2Yl9pbml0IGVycm9yXG4iKTsKKyAgICAgICAgZXJyb3Jf cmVwb3J0KCJ2dDgyYzY4NmJfaW5pdCBlcnJvciIpOwogICAgICAgICBleGl0KDEpOwogICAgIH0K IApkaWZmIC0tZ2l0IGEvaHcvbWlwcy9taXBzX2phenouYyBiL2h3L21pcHMvbWlwc19qYXp6LmMK aW5kZXggN2U2NjI2ZGM4OC4uNmM5MWE5NDBiZSAxMDA2NDQKLS0tIGEvaHcvbWlwcy9taXBzX2ph enouYworKysgYi9ody9taXBzL21pcHNfamF6ei5jCkBAIC0yNzEsMTAgKzI3MSwxMCBAQCBzdGF0 aWMgdm9pZCBtaXBzX2phenpfaW5pdChNYWNoaW5lU3RhdGUgKm1hY2hpbmUsCiAgICAgICAgICAg ICBzeXNidXNfY29ubmVjdF9pcnEoc3lzYnVzLCAwLCBxZGV2X2dldF9ncGlvX2luKHJjNDAzMCwg NCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNfaGVscF9vcHRp b24obmQtPm1vZGVsKSkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJxZW11OiBTdXBw b3J0ZWQgTklDczogZHA4MzkzMlxuIik7CisgICAgICAgICAgICBlcnJvcl9yZXBvcnQoInFlbXU6 IFN1cHBvcnRlZCBOSUNzOiBkcDgzOTMyIik7CiAgICAgICAgICAgICBleGl0KDEpOwogICAgICAg ICB9IGVsc2UgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJxZW11OiBVbnN1cHBvcnRl ZCBOSUM6ICVzXG4iLCBuZC0+bW9kZWwpOworICAgICAgICAgICAgZXJyb3JfcmVwb3J0KCJxZW11 OiBVbnN1cHBvcnRlZCBOSUM6ICVzIiwgbmQtPm1vZGVsKTsKICAgICAgICAgICAgIGV4aXQoMSk7 CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9ody9taXBzL21pcHNfbWFsdGEuYyBiL2h3 L21pcHMvbWlwc19tYWx0YS5jCmluZGV4IDJhZGI5YmNmODkuLmQ0NTdhZGZhNjkgMTAwNjQ0Ci0t LSBhL2h3L21pcHMvbWlwc19tYWx0YS5jCisrKyBiL2h3L21pcHMvbWlwc19tYWx0YS5jCkBAIC04 NTYsOCArODU2LDggQEAgc3RhdGljIGludDY0X3QgbG9hZF9rZXJuZWwgKHZvaWQpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFtX3NpemUgLSBpbml0cmRf b2Zmc2V0KTsKICAgICAgICAgfQogICAgICAgICBpZiAoaW5pdHJkX3NpemUgPT0gKHRhcmdldF91 bG9uZykgLTEpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAicWVtdTogY291bGQgbm90 IGxvYWQgaW5pdGlhbCByYW0gZGlzayAnJXMnXG4iLAotICAgICAgICAgICAgICAgICAgICBsb2Fk ZXJwYXJhbXMuaW5pdHJkX2ZpbGVuYW1lKTsKKyAgICAgICAgICAgIGVycm9yX3JlcG9ydCgicWVt dTogY291bGQgbm90IGxvYWQgaW5pdGlhbCByYW0gZGlzayAnJXMnIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICBsb2FkZXJwYXJhbXMuaW5pdHJkX2ZpbGVuYW1lKTsKICAgICAgICAgICAgIGV4 aXQoMSk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9ody9taXBzL21pcHNfbWlwc3Np bS5jIGIvaHcvbWlwcy9taXBzX21pcHNzaW0uYwppbmRleCBhMDkyMDcyZTJhLi5hM2Q5NDA2NjEw IDEwMDY0NAotLS0gYS9ody9taXBzL21pcHNfbWlwc3NpbS5jCisrKyBiL2h3L21pcHMvbWlwc19t aXBzc2ltLmMKQEAgLTEwMSw4ICsxMDEsOCBAQCBzdGF0aWMgaW50NjRfdCBsb2FkX2tlcm5lbCh2 b2lkKQogICAgICAgICAgICAgICAgIGluaXRyZF9vZmZzZXQsIGxvYWRlcnBhcmFtcy5yYW1fc2l6 ZSAtIGluaXRyZF9vZmZzZXQpOwogICAgICAgICB9CiAgICAgICAgIGlmIChpbml0cmRfc2l6ZSA9 PSAodGFyZ2V0X3Vsb25nKSAtMSkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJxZW11 OiBjb3VsZCBub3QgbG9hZCBpbml0aWFsIHJhbSBkaXNrICclcydcbiIsCi0gICAgICAgICAgICAg ICAgICAgIGxvYWRlcnBhcmFtcy5pbml0cmRfZmlsZW5hbWUpOworICAgICAgICAgICAgZXJyb3Jf cmVwb3J0KCJxZW11OiBjb3VsZCBub3QgbG9hZCBpbml0aWFsIHJhbSBkaXNrICclcyciLAorICAg ICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcnBhcmFtcy5pbml0cmRfZmlsZW5hbWUpOwogICAg ICAgICAgICAgZXhpdCgxKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL2h3L21pcHMv bWlwc19yNGsuYyBiL2h3L21pcHMvbWlwc19yNGsuYwppbmRleCAxMjcyZDRlZjlkLi5lNTRjZTkx OGE3IDEwMDY0NAotLS0gYS9ody9taXBzL21pcHNfcjRrLmMKKysrIGIvaHcvbWlwcy9taXBzX3I0 ay5jCkBAIC0xMjEsOCArMTIxLDggQEAgc3RhdGljIGludDY0X3QgbG9hZF9rZXJuZWwodm9pZCkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW1fc2l6ZSAt IGluaXRyZF9vZmZzZXQpOwogICAgICAgICB9CiAgICAgICAgIGlmIChpbml0cmRfc2l6ZSA9PSAo dGFyZ2V0X3Vsb25nKSAtMSkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJxZW11OiBj b3VsZCBub3QgbG9hZCBpbml0aWFsIHJhbSBkaXNrICclcydcbiIsCi0gICAgICAgICAgICAgICAg ICAgIGxvYWRlcnBhcmFtcy5pbml0cmRfZmlsZW5hbWUpOworICAgICAgICAgICAgZXJyb3JfcmVw b3J0KCJxZW11OiBjb3VsZCBub3QgbG9hZCBpbml0aWFsIHJhbSBkaXNrICclcyciLAorICAgICAg ICAgICAgICAgICAgICAgICAgIGxvYWRlcnBhcmFtcy5pbml0cmRfZmlsZW5hbWUpOwogICAgICAg ICAgICAgZXhpdCgxKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI0Niw3ICsyNDYsNyBAQCB2b2lk IG1pcHNfcjRrX2luaXQoTWFjaGluZVN0YXRlICptYWNoaW5lKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBibGtfYnlfbGVnYWN5X2RpbmZvKGRpbmZvKSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2VjdG9yX2xlbiwgbWlwc19yb20gLyBzZWN0b3JfbGVu LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LCAwLCAwLCAwLCAwLCBiZSkp IHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAicWVtdTogRXJyb3IgcmVnaXN0ZXJpbmcg Zmxhc2ggbWVtb3J5LlxuIik7CisgICAgICAgICAgICBlcnJvcl9yZXBvcnQoInFlbXU6IEVycm9y IHJlZ2lzdGVyaW5nIGZsYXNoIG1lbW9yeS4iKTsKIAl9CiAgICAgfSBlbHNlIGlmICghcXRlc3Rf ZW5hYmxlZCgpKSB7CiAgICAgICAgIC8qIG5vdCBmYXRhbCAqLwpkaWZmIC0tZ2l0IGEvaHcvbWlz Yy9hOXNjdS5jIGIvaHcvbWlzYy9hOXNjdS5jCmluZGV4IDNlOGFkOGNkNzMuLjIxYjhlNDliNmMg MTAwNjQ0Ci0tLSBhL2h3L21pc2MvYTlzY3UuYworKysgYi9ody9taXNjL2E5c2N1LmMKQEAgLTks NiArOSw3IEBACiAgKi8KIAogI2luY2x1ZGUgInFlbXUvb3NkZXAuaCIKKyNpbmNsdWRlICJxZW11 L2Vycm9yLXJlcG9ydC5oIgogI2luY2x1ZGUgImh3L21pc2MvYTlzY3UuaCIKIAogc3RhdGljIHVp bnQ2NF90IGE5X3NjdV9yZWFkKHZvaWQgKm9wYXF1ZSwgaHdhZGRyIG9mZnNldCwKQEAgLTU5LDcg KzYwLDcgQEAgc3RhdGljIHZvaWQgYTlfc2N1X3dyaXRlKHZvaWQgKm9wYXF1ZSwgaHdhZGRyIG9m ZnNldCwKICAgICAgICAgbWFzayA9IDB4ZmZmZmZmZmY7CiAgICAgICAgIGJyZWFrOwogICAgIGRl ZmF1bHQ6Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBzaXplICV1IGluIHdyaXRl IHRvIGE5IHNjdSByZWdpc3RlciAleFxuIiwKKyAgICAgICAgZXJyb3JfcmVwb3J0KCJJbnZhbGlk IHNpemUgJXUgaW4gd3JpdGUgdG8gYTkgc2N1IHJlZ2lzdGVyICV4IiwKICAgICAgICAgICAgICAg ICBzaXplLCAodW5zaWduZWQpb2Zmc2V0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAt LWdpdCBhL2h3L21pc2Mvb21hcF9ncG1jLmMgYi9ody9taXNjL29tYXBfZ3BtYy5jCmluZGV4IDg0 ZjllNGM2MTIuLmUzYjMwZTkwZWEgMTAwNjQ0Ci0tLSBhL2h3L21pc2Mvb21hcF9ncG1jLmMKKysr IGIvaHcvbWlzYy9vbWFwX2dwbWMuYwpAQCAtMTksNiArMTksNyBAQAogICogd2l0aCB0aGlzIHBy b2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KICAqLwog I2luY2x1ZGUgInFlbXUvb3NkZXAuaCIKKyNpbmNsdWRlICJxZW11L2Vycm9yLXJlcG9ydC5oIgog I2luY2x1ZGUgImh3L2h3LmgiCiAjaW5jbHVkZSAiaHcvYmxvY2svZmxhc2guaCIKICNpbmNsdWRl ICJody9hcm0vb21hcC5oIgpAQCAtNDA4LDcgKzQwOSw3IEBAIHN0YXRpYyB2b2lkIG9tYXBfZ3Bt Y19jc19tYXAoc3RydWN0IG9tYXBfZ3BtY19zICpzLCBpbnQgY3MpCiAgICAgLyogVE9ETzogY2hl Y2sgZm9yIG92ZXJsYXBwaW5nIHJlZ2lvbnMgYW5kIHJlcG9ydCBhY2Nlc3MgZXJyb3JzICovCiAg ICAgaWYgKG1hc2sgIT0gMHg4ICYmIG1hc2sgIT0gMHhjICYmIG1hc2sgIT0gMHhlICYmIG1hc2sg IT0gMHhmCiAgICAgICAgICAmJiAhKHMtPmFjY2VwdF8yNTYgJiYgIW1hc2spKSB7Ci0gICAgICAg IGZwcmludGYoc3RkZXJyLCAiJXM6IGludmFsaWQgY2hpcC1zZWxlY3QgbWFzayBhZGRyZXNzICgw eCV4KVxuIiwKKyAgICAgICAgZXJyb3JfcmVwb3J0KCIlczogaW52YWxpZCBjaGlwLXNlbGVjdCBt YXNrIGFkZHJlc3MgKDB4JXgpIiwKICAgICAgICAgICAgICAgICAgX19mdW5jX18sIG1hc2spOwog ICAgIH0KIApAQCAtNjQyLDcgKzY0Myw3IEBAIHN0YXRpYyB2b2lkIG9tYXBfZ3BtY193cml0ZSh2 b2lkICpvcGFxdWUsIGh3YWRkciBhZGRyLAogCiAgICAgY2FzZSAweDAxMDoJLyogR1BNQ19TWVND T05GSUcgKi8KICAgICAgICAgaWYgKCh2YWx1ZSA+PiAzKSA9PSAweDMpCi0gICAgICAgICAgICBm cHJpbnRmKHN0ZGVyciwgIiVzOiBiYWQgU0RSQU0gaWRsZSBtb2RlICUiUFJJaTY0IlxuIiwKKyAg ICAgICAgICAgIGVycm9yX3JlcG9ydCgiJXM6IGJhZCBTRFJBTSBpZGxlIG1vZGUgJSJQUklpNjQi IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgdmFsdWUgPj4gMyk7CiAg ICAgICAgIGlmICh2YWx1ZSAmIDIpCiAgICAgICAgICAgICBvbWFwX2dwbWNfcmVzZXQocyk7CkBA IC04MDYsNyArODA3LDcgQEAgc3RhdGljIHZvaWQgb21hcF9ncG1jX3dyaXRlKHZvaWQgKm9wYXF1 ZSwgaHdhZGRyIGFkZHIsCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMHgyMzA6CS8qIEdQTUNf VEVTVE1PREVfQ1RSTCAqLwogICAgICAgICBpZiAodmFsdWUgJiA3KQotICAgICAgICAgICAgZnBy aW50ZihzdGRlcnIsICIlczogdGVzdCBtb2RlIGVuYWJsZSBhdHRlbXB0XG4iLCBfX2Z1bmNfXyk7 CisgICAgICAgICAgICBlcnJvcl9yZXBvcnQoIiVzOiB0ZXN0IG1vZGUgZW5hYmxlIGF0dGVtcHQi LCBfX2Z1bmNfXyk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgZGVmYXVsdDoKQEAgLTg2NCw3ICs4 NjUsNyBAQCB2b2lkIG9tYXBfZ3BtY19hdHRhY2goc3RydWN0IG9tYXBfZ3BtY19zICpzLCBpbnQg Y3MsIE1lbW9yeVJlZ2lvbiAqaW9tZW0pCiAgICAgYXNzZXJ0KGlvbWVtKTsKIAogICAgIGlmIChj cyA8IDAgfHwgY3MgPj0gOCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBiYWQgY2hp cC1zZWxlY3QgJWlcbiIsIF9fZnVuY19fLCBjcyk7CisgICAgICAgIGVycm9yX3JlcG9ydCgiJXM6 IGJhZCBjaGlwLXNlbGVjdCAlaSIsIF9fZnVuY19fLCBjcyk7CiAgICAgICAgIGV4aXQoLTEpOwog ICAgIH0KICAgICBmID0gJnMtPmNzX2ZpbGVbY3NdOwpAQCAtODgxLDcgKzg4Miw3IEBAIHZvaWQg b21hcF9ncG1jX2F0dGFjaF9uYW5kKHN0cnVjdCBvbWFwX2dwbWNfcyAqcywgaW50IGNzLCBEZXZp Y2VTdGF0ZSAqbmFuZCkKICAgICBhc3NlcnQobmFuZCk7CiAKICAgICBpZiAoY3MgPCAwIHx8IGNz ID49IDgpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogYmFkIGNoaXAtc2VsZWN0ICVp XG4iLCBfX2Z1bmNfXywgY3MpOworICAgICAgICBlcnJvcl9yZXBvcnQoIiVzOiBiYWQgY2hpcC1z ZWxlY3QgJWkiLCBfX2Z1bmNfXywgY3MpOwogICAgICAgICBleGl0KC0xKTsKICAgICB9CiAgICAg ZiA9ICZzLT5jc19maWxlW2NzXTsKZGlmZiAtLWdpdCBhL2h3L21pc2Mvb21hcF9sNC5jIGIvaHcv bWlzYy9vbWFwX2w0LmMKaW5kZXggOTZmYzA1N2I0ZS4uNDdkOWMxMGFlYiAxMDA2NDQKLS0tIGEv aHcvbWlzYy9vbWFwX2w0LmMKKysrIGIvaHcvbWlzYy9vbWFwX2w0LmMKQEAgLTE4LDYgKzE4LDcg QEAKICAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3Jn L2xpY2Vuc2VzLz4uCiAgKi8KICNpbmNsdWRlICJxZW11L29zZGVwLmgiCisjaW5jbHVkZSAicWVt dS9lcnJvci1yZXBvcnQuaCIKICNpbmNsdWRlICJody9ody5oIgogI2luY2x1ZGUgImh3L2FybS9v bWFwLmgiCiAKQEAgLTEyNiw3ICsxMjcsNyBAQCBzdHJ1Y3Qgb21hcF90YXJnZXRfYWdlbnRfcyAq b21hcF9sNHRhX2dldChzdHJ1Y3Qgb21hcF9sNF9zICpidXMsCiAgICAgICAgICAgICBicmVhazsK ICAgICAgICAgfQogICAgIGlmICghdGEpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczog YmFkIHRhcmdldCBhZ2VudCAoJWkpXG4iLCBfX2Z1bmNfXywgY3MpOworICAgICAgICBlcnJvcl9y ZXBvcnQoIiVzOiBiYWQgdGFyZ2V0IGFnZW50ICglaSkiLCBfX2Z1bmNfXywgY3MpOwogICAgICAg ICBleGl0KC0xKTsKICAgICB9CiAKQEAgLTE1MSw3ICsxNTIsNyBAQCBod2FkZHIgb21hcF9sNF9h dHRhY2goc3RydWN0IG9tYXBfdGFyZ2V0X2FnZW50X3MgKnRhLAogICAgIGh3YWRkciBiYXNlOwog CiAgICAgaWYgKHJlZ2lvbiA8IDAgfHwgcmVnaW9uID49IHRhLT5yZWdpb25zKSB7Ci0gICAgICAg IGZwcmludGYoc3RkZXJyLCAiJXM6IGJhZCBpbyByZWdpb24gKCVpKVxuIiwgX19mdW5jX18sIHJl Z2lvbik7CisgICAgICAgIGVycm9yX3JlcG9ydCgiJXM6IGJhZCBpbyByZWdpb24gKCVpKSIsIF9f ZnVuY19fLCByZWdpb24pOwogICAgICAgICBleGl0KC0xKTsKICAgICB9CiAKZGlmZiAtLWdpdCBh L2h3L21pc2Mvb21hcF9zZHJjLmMgYi9ody9taXNjL29tYXBfc2RyYy5jCmluZGV4IDdiMzhjNTU2 OGMuLjNkY2FiYzFlMDAgMTAwNjQ0Ci0tLSBhL2h3L21pc2Mvb21hcF9zZHJjLmMKKysrIGIvaHcv bWlzYy9vbWFwX3NkcmMuYwpAQCAtMTgsNiArMTgsNyBAQAogICogd2l0aCB0aGlzIHByb2dyYW07 IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KICAqLwogI2luY2x1 ZGUgInFlbXUvb3NkZXAuaCIKKyNpbmNsdWRlICJxZW11L2Vycm9yLXJlcG9ydC5oIgogI2luY2x1 ZGUgImh3L2h3LmgiCiAjaW5jbHVkZSAiaHcvYXJtL29tYXAuaCIKIApAQCAtMTA4LDcgKzEwOSw3 IEBAIHN0YXRpYyB2b2lkIG9tYXBfc2RyY193cml0ZSh2b2lkICpvcGFxdWUsIGh3YWRkciBhZGRy LAogCiAgICAgY2FzZSAweDEwOgkvKiBTRFJDX1NZU0NPTkZJRyAqLwogICAgICAgICBpZiAoKHZh bHVlID4+IDMpICE9IDB4MikKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGJhZCBT RFJBTSBpZGxlIG1vZGUgJWlcbiIsCisgICAgICAgICAgICBlcnJvcl9yZXBvcnQoIiVzOiBiYWQg U0RSQU0gaWRsZSBtb2RlICVpIiwKICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sICh1bnNp Z25lZCl2YWx1ZSA+PiAzKTsKICAgICAgICAgaWYgKHZhbHVlICYgMikKICAgICAgICAgICAgIG9t YXBfc2RyY19yZXNldChzKTsKZGlmZiAtLWdpdCBhL2h3L21pc2Mvdm1wb3J0LmMgYi9ody9taXNj L3ZtcG9ydC5jCmluZGV4IDE2NTUwMDIyM2YuLjU1MzY5YmQxODAgMTAwNjQ0Ci0tLSBhL2h3L21p c2Mvdm1wb3J0LmMKKysrIGIvaHcvbWlzYy92bXBvcnQuYwpAQCAtODAsNyArODAsNyBAQCBzdGF0 aWMgdWludDY0X3Qgdm1wb3J0X2lvcG9ydF9yZWFkKHZvaWQgKm9wYXF1ZSwgaHdhZGRyIGFkZHIs CiAgICAgaWYgKCFzLT5mdW5jW2NvbW1hbmRdKQogICAgIHsKICNpZmRlZiBWTVBPUlRfREVCVUcK LSAgICAgICAgZnByaW50ZihzdGRlcnIsICJ2bXBvcnQ6IHVua25vd24gY29tbWFuZCAleFxuIiwg Y29tbWFuZCk7CisgICAgICAgIGVycm9yX3JlcG9ydCgidm1wb3J0OiB1bmtub3duIGNvbW1hbmQg JXgiLCBjb21tYW5kKTsKICNlbmRpZgogICAgICAgICByZXR1cm4gZWF4OwogICAgIH0KZGlmZiAt LWdpdCBhL2h3L21veGllL21veGllc2ltLmMgYi9ody9tb3hpZS9tb3hpZXNpbS5jCmluZGV4IDVl YThkZDNhOTMuLjU5MTZmODZjNjggMTAwNjQ0Ci0tLSBhL2h3L21veGllL21veGllc2ltLmMKKysr IGIvaHcvbW94aWUvbW94aWVzaW0uYwpAQCAtMjUsNiArMjUsNyBAQAogICogVEhFIFNPRlRXQVJF LgogICovCiAjaW5jbHVkZSAicWVtdS9vc2RlcC5oIgorI2luY2x1ZGUgInFlbXUvZXJyb3ItcmVw b3J0LmgiCiAjaW5jbHVkZSAicWFwaS9lcnJvci5oIgogI2luY2x1ZGUgInFlbXUtY29tbW9uLmgi CiAjaW5jbHVkZSAiY3B1LmgiCkBAIC02MSw3ICs2Miw3IEBAIHN0YXRpYyB2b2lkIGxvYWRfa2Vy bmVsKE1veGllQ1BVICpjcHUsIExvYWRlclBhcmFtcyAqbG9hZGVyX3BhcmFtcykKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDAsIDApOwogCiAgICAgaWYgKGtlcm5lbF9zaXplIDw9IDApIHsK LSAgICAgICAgZnByaW50ZihzdGRlcnIsICJxZW11OiBjb3VsZCBub3QgbG9hZCBrZXJuZWwgJyVz J1xuIiwKKyAgICAgICAgZXJyb3JfcmVwb3J0KCJxZW11OiBjb3VsZCBub3QgbG9hZCBrZXJuZWwg JyVzJyIsCiAgICAgICAgICAgICAgICAgbG9hZGVyX3BhcmFtcy0+a2VybmVsX2ZpbGVuYW1lKTsK ICAgICAgICAgZXhpdCgxKTsKICAgICB9CkBAIC04NSw4ICs4Niw4IEBAIHN0YXRpYyB2b2lkIGxv YWRfa2VybmVsKE1veGllQ1BVICpjcHUsIExvYWRlclBhcmFtcyAqbG9hZGVyX3BhcmFtcykKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW1fc2l6ZSk7CiAg ICAgICAgIH0KICAgICAgICAgaWYgKGluaXRyZF9zaXplID09ICh0YXJnZXRfdWxvbmcpLTEpIHsK LSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAicWVtdTogY291bGQgbm90IGxvYWQgaW5pdGlh bCByYW0gZGlzayAnJXMnXG4iLAotICAgICAgICAgICAgICAgICAgICBsb2FkZXJfcGFyYW1zLT5p bml0cmRfZmlsZW5hbWUpOworICAgICAgICAgICAgZXJyb3JfcmVwb3J0KCJxZW11OiBjb3VsZCBu b3QgbG9hZCBpbml0aWFsIHJhbSBkaXNrICclcyciLAorICAgICAgICAgICAgICAgICAgICAgICAg IGxvYWRlcl9wYXJhbXMtPmluaXRyZF9maWxlbmFtZSk7CiAgICAgICAgICAgICBleGl0KDEpOwog ICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvaHcvbmV0L2ZzbF9ldHNlYy9ldHNlYy5jIGIv aHcvbmV0L2ZzbF9ldHNlYy9ldHNlYy5jCmluZGV4IDlkYTE5MzI5NzAuLjk2NWVmZmEzMTQgMTAw NjQ0Ci0tLSBhL2h3L25ldC9mc2xfZXRzZWMvZXRzZWMuYworKysgYi9ody9uZXQvZnNsX2V0c2Vj L2V0c2VjLmMKQEAgLTM0Nyw3ICszNDcsNyBAQCBzdGF0aWMgc3NpemVfdCBldHNlY19yZWNlaXZl KE5ldENsaWVudFN0YXRlICpuYywKICAgICBlVFNFQyAqZXRzZWMgPSBxZW11X2dldF9uaWNfb3Bh cXVlKG5jKTsKIAogI2lmIGRlZmluZWQoSEVYX0RVTVApCi0gICAgZnByaW50ZihzdGRlcnIsICIl cyByZWNlaXZlIHNpemU6JXpkXG4iLCBuYy0+bmFtZSwgc2l6ZSk7CisgICAgZXJyb3JfcmVwb3J0 KCIlcyByZWNlaXZlIHNpemU6JXpkIiwgbmMtPm5hbWUsIHNpemUpOwogICAgIHFlbXVfaGV4ZHVt cCgodm9pZCAqKWJ1Ziwgc3RkZXJyLCAiIiwgc2l6ZSk7CiAjZW5kaWYKICAgICAvKiBGbHVzaCBp cyB1bm5lY2Vzc2FyeSBhcyBhcmUgYWxyZWFkeSBpbiByZWNlaXZpbmcgcGF0aCAqLwpkaWZmIC0t Z2l0IGEvaHcvbmV0L3BjbmV0LmMgYi9ody9uZXQvcGNuZXQuYwppbmRleCA2NTQ0NTUzNTVmLi41 ZjJiNWZlMDQ2IDEwMDY0NAotLS0gYS9ody9uZXQvcGNuZXQuYworKysgYi9ody9uZXQvcGNuZXQu YwpAQCAtMTA3MCw3ICsxMDcwLDcgQEAgc3NpemVfdCBwY25ldF9yZWNlaXZlKE5ldENsaWVudFN0 YXRlICpuYywgY29uc3QgdWludDhfdCAqYnVmLCBzaXplX3Qgc2l6ZV8pCiAgICAgICAgICAgICBp ZiAoIXMtPmxvb3B0ZXN0KSB7CiAgICAgICAgICAgICAgICAgaWYgKHNpemUgPiA0MDkyKSB7CiAj aWZkZWYgUENORVRfREVCVUdfUk1ECi0gICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJy LCAicGNuZXQ6IHRydW5jYXRlcyByeCBwYWNrZXQuXG4iKTsKKyAgICAgICAgICAgICAgICAgICAg ZXJyb3JfcmVwb3J0KCJwY25ldDogdHJ1bmNhdGVzIHJ4IHBhY2tldC4iKTsKICNlbmRpZgogICAg ICAgICAgICAgICAgICAgICBzaXplID0gNDA5MjsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1n aXQgYS9ody9uZXQvc21jOTFjMTExLmMgYi9ody9uZXQvc21jOTFjMTExLmMKaW5kZXggM2IxNmRj ZjVhMS4uYWU0MGZkNmU2ZSAxMDA2NDQKLS0tIGEvaHcvbmV0L3NtYzkxYzExMS5jCisrKyBiL2h3 L25ldC9zbWM5MWMxMTEuYwpAQCAtOCw2ICs4LDcgQEAKICAqLwogCiAjaW5jbHVkZSAicWVtdS9v c2RlcC5oIgorI2luY2x1ZGUgInFlbXUvZXJyb3ItcmVwb3J0LmgiCiAjaW5jbHVkZSAiaHcvc3lz YnVzLmgiCiAjaW5jbHVkZSAibmV0L25ldC5oIgogI2luY2x1ZGUgImh3L2RldmljZXMuaCIKQEAg LTM2Miw5ICszNjMsOSBAQCBzdGF0aWMgdm9pZCBzbWM5MWMxMTFfd3JpdGViKHZvaWQgKm9wYXF1 ZSwgaHdhZGRyIG9mZnNldCwKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSAxMjog LyogQ29udHJvbCAqLwogICAgICAgICAgICAgaWYgKHZhbHVlICYgMSkKLSAgICAgICAgICAgICAg ICBmcHJpbnRmKHN0ZGVyciwgInNtYzkxYzExMTpFRVBST00gc3RvcmUgbm90IGltcGxlbWVudGVk XG4iKTsKKyAgICAgICAgICAgICAgICBlcnJvcl9yZXBvcnQoInNtYzkxYzExMTpFRVBST00gc3Rv cmUgbm90IGltcGxlbWVudGVkIik7CiAgICAgICAgICAgICBpZiAodmFsdWUgJiAyKQotICAgICAg ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAic21jOTFjMTExOkVFUFJPTSByZWxvYWQgbm90IGlt cGxlbWVudGVkXG4iKTsKKyAgICAgICAgICAgICAgICBlcnJvcl9yZXBvcnQoInNtYzkxYzExMTpF RVBST00gcmVsb2FkIG5vdCBpbXBsZW1lbnRlZCIpOwogICAgICAgICAgICAgdmFsdWUgJj0gfjM7 CiAgICAgICAgICAgICBTRVRfTE9XKGN0ciwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuOwpk aWZmIC0tZ2l0IGEvaHcvbmV0L3Zob3N0X25ldC5jIGIvaHcvbmV0L3Zob3N0X25ldC5jCmluZGV4 IGUwMzdkYjYzYTMuLjM3ZDBjY2U1NjAgMTAwNjQ0Ci0tLSBhL2h3L25ldC92aG9zdF9uZXQuYwor KysgYi9ody9uZXQvdmhvc3RfbmV0LmMKQEAgLTEzNSw3ICsxMzUsNyBAQCBzdGF0aWMgaW50IHZo b3N0X25ldF9nZXRfZmQoTmV0Q2xpZW50U3RhdGUgKmJhY2tlbmQpCiAgICAgY2FzZSBORVRfQ0xJ RU5UX0RSSVZFUl9UQVA6CiAgICAgICAgIHJldHVybiB0YXBfZ2V0X2ZkKGJhY2tlbmQpOwogICAg IGRlZmF1bHQ6Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAidmhvc3QtbmV0IHJlcXVpcmVzIHRh cCBiYWNrZW5kXG4iKTsKKyAgICAgICAgZXJyb3JfcmVwb3J0KCJ2aG9zdC1uZXQgcmVxdWlyZXMg dGFwIGJhY2tlbmQiKTsKICAgICAgICAgcmV0dXJuIC1FQkFERkQ7CiAgICAgfQogfQpAQCAtMTQ4 LDcgKzE0OCw3IEBAIHN0cnVjdCB2aG9zdF9uZXQgKnZob3N0X25ldF9pbml0KFZob3N0TmV0T3B0 aW9ucyAqb3B0aW9ucykKICAgICB1aW50NjRfdCBmZWF0dXJlcyA9IDA7CiAKICAgICBpZiAoIW9w dGlvbnMtPm5ldF9iYWNrZW5kKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAidmhvc3QtbmV0 IHJlcXVpcmVzIG5ldCBiYWNrZW5kIHRvIGJlIHNldHVwXG4iKTsKKyAgICAgICAgZXJyb3JfcmVw b3J0KCJ2aG9zdC1uZXQgcmVxdWlyZXMgbmV0IGJhY2tlbmQgdG8gYmUgc2V0dXAiKTsKICAgICAg ICAgZ290byBmYWlsOwogICAgIH0KICAgICBuZXQtPm5jID0gb3B0aW9ucy0+bmV0X2JhY2tlbmQ7 CkBAIC0xODYsOCArMTg2LDggQEAgc3RydWN0IHZob3N0X25ldCAqdmhvc3RfbmV0X2luaXQoVmhv c3ROZXRPcHRpb25zICpvcHRpb25zKQogICAgICAgICAgICAgbmV0LT5kZXYuZmVhdHVyZXMgJj0g figxVUxMIDw8IFZJUlRJT19ORVRfRl9NUkdfUlhCVUYpOwogICAgICAgICB9CiAgICAgICAgIGlm ICh+bmV0LT5kZXYuZmVhdHVyZXMgJiBuZXQtPmRldi5iYWNrZW5kX2ZlYXR1cmVzKSB7Ci0gICAg ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInZob3N0IGxhY2tzIGZlYXR1cmUgbWFzayAlIiBQUkl1 NjQKLSAgICAgICAgICAgICAgICAgICAiIGZvciBiYWNrZW5kXG4iLAorICAgICAgICAgICAgZXJy b3JfcmVwb3J0KCJ2aG9zdCBsYWNrcyBmZWF0dXJlIG1hc2sgJSIgUFJJdTY0CisgICAgICAgICAg ICAgICAgICAgIiBmb3IgYmFja2VuZCIsCiAgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90KSh+ bmV0LT5kZXYuZmVhdHVyZXMgJiBuZXQtPmRldi5iYWNrZW5kX2ZlYXR1cmVzKSk7CiAgICAgICAg ICAgICBnb3RvIGZhaWw7CiAgICAgICAgIH0KQEAgLTE5Nyw4ICsxOTcsOCBAQCBzdHJ1Y3Qgdmhv c3RfbmV0ICp2aG9zdF9uZXRfaW5pdChWaG9zdE5ldE9wdGlvbnMgKm9wdGlvbnMpCiAgICAgaWYg KG5ldC0+bmMtPmluZm8tPnR5cGUgPT0gTkVUX0NMSUVOVF9EUklWRVJfVkhPU1RfVVNFUikgewog ICAgICAgICBmZWF0dXJlcyA9IHZob3N0X3VzZXJfZ2V0X2Fja2VkX2ZlYXR1cmVzKG5ldC0+bmMp OwogICAgICAgICBpZiAofm5ldC0+ZGV2LmZlYXR1cmVzICYgZmVhdHVyZXMpIHsKLSAgICAgICAg ICAgIGZwcmludGYoc3RkZXJyLCAidmhvc3QgbGFja3MgZmVhdHVyZSBtYXNrICUiIFBSSXU2NAot ICAgICAgICAgICAgICAgICAgICAiIGZvciBiYWNrZW5kXG4iLAorICAgICAgICAgICAgZXJyb3Jf cmVwb3J0KCJ2aG9zdCBsYWNrcyBmZWF0dXJlIG1hc2sgJSIgUFJJdTY0CisgICAgICAgICAgICAg ICAgICAgICIgZm9yIGJhY2tlbmQiLAogICAgICAgICAgICAgICAgICAgICAodWludDY0X3QpKH5u ZXQtPmRldi5mZWF0dXJlcyAmIGZlYXR1cmVzKSk7CiAgICAgICAgICAgICBnb3RvIGZhaWw7CiAg ICAgICAgIH0KQEAgLTM0OSw3ICszNDksNyBAQCBlcnJfc3RhcnQ6CiAgICAgfQogICAgIGUgPSBr LT5zZXRfZ3Vlc3Rfbm90aWZpZXJzKHFidXMtPnBhcmVudCwgdG90YWxfcXVldWVzICogMiwgZmFs c2UpOwogICAgIGlmIChlIDwgMCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInZob3N0IGd1 ZXN0IG5vdGlmaWVyIGNsZWFudXAgZmFpbGVkOiAlZFxuIiwgZSk7CisgICAgICAgIGVycm9yX3Jl cG9ydCgidmhvc3QgZ3Vlc3Qgbm90aWZpZXIgY2xlYW51cCBmYWlsZWQ6ICVkIiwgZSk7CiAgICAg ICAgIGZmbHVzaChzdGRlcnIpOwogICAgIH0KIGVycjoKQEAgLTM3MCw3ICszNzAsNyBAQCB2b2lk IHZob3N0X25ldF9zdG9wKFZpcnRJT0RldmljZSAqZGV2LCBOZXRDbGllbnRTdGF0ZSAqbmNzLAog CiAgICAgciA9IGstPnNldF9ndWVzdF9ub3RpZmllcnMocWJ1cy0+cGFyZW50LCB0b3RhbF9xdWV1 ZXMgKiAyLCBmYWxzZSk7CiAgICAgaWYgKHIgPCAwKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJy LCAidmhvc3QgZ3Vlc3Qgbm90aWZpZXIgY2xlYW51cCBmYWlsZWQ6ICVkXG4iLCByKTsKKyAgICAg ICAgZXJyb3JfcmVwb3J0KCJ2aG9zdCBndWVzdCBub3RpZmllciBjbGVhbnVwIGZhaWxlZDogJWQi LCByKTsKICAgICAgICAgZmZsdXNoKHN0ZGVycik7CiAgICAgfQogICAgIGFzc2VydChyID49IDAp OwpkaWZmIC0tZ2l0IGEvaHcvbmlvczIvYm9vdC5jIGIvaHcvbmlvczIvYm9vdC5jCmluZGV4IDJi MzFmNWI4NDQuLmM4OTZlODAwN2IgMTAwNjQ0Ci0tLSBhL2h3L25pb3MyL2Jvb3QuYworKysgYi9o dy9uaW9zMi9ib290LmMKQEAgLTk2LDcgKzk2LDcgQEAgc3RhdGljIGludCBuaW9zMl9sb2FkX2R0 YihzdHJ1Y3QgbmlvczJfYm9vdF9pbmZvIGJpLCBjb25zdCB1aW50MzJfdCByYW1zaXplLAogICAg ICAgICByID0gcWVtdV9mZHRfc2V0cHJvcF9zdHJpbmcoZmR0LCAiL2Nob3NlbiIsICJib290YXJn cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXJuZWxfY21kbGluZSk7 CiAgICAgICAgIGlmIChyIDwgMCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJjb3Vs ZG4ndCBzZXQgL2Nob3Nlbi9ib290YXJnc1xuIik7CisgICAgICAgICAgICBlcnJvcl9yZXBvcnQo ImNvdWxkbid0IHNldCAvY2hvc2VuL2Jvb3RhcmdzIik7CiAgICAgICAgIH0KICAgICB9CiAKZGlm ZiAtLWdpdCBhL2h3L252cmFtL2VlcHJvbTkzeHguYyBiL2h3L252cmFtL2VlcHJvbTkzeHguYwpp bmRleCAyZmQwZTNjMjlmLi41Y2FkMDMxZWJhIDEwMDY0NAotLS0gYS9ody9udnJhbS9lZXByb205 M3h4LmMKKysrIGIvaHcvbnZyYW0vZWVwcm9tOTN4eC5jCkBAIC0zNiw2ICszNiw3IEBACiAgKi8K IAogI2luY2x1ZGUgInFlbXUvb3NkZXAuaCIKKyNpbmNsdWRlICJxZW11L2Vycm9yLXJlcG9ydC5o IgogI2luY2x1ZGUgImh3L2h3LmgiCiAjaW5jbHVkZSAiaHcvbnZyYW0vZWVwcm9tOTN4eC5oIgog CkBAIC0xMDUsOCArMTA2LDggQEAgc3RhdGljIGludCBnZXRfdWludDE2X2Zyb21fdWludDgoUUVN VUZpbGUgKmYsIHZvaWQgKnB2LCBzaXplX3Qgc2l6ZSwKIHN0YXRpYyBpbnQgcHV0X3VudXNlZChR RU1VRmlsZSAqZiwgdm9pZCAqcHYsIHNpemVfdCBzaXplLCBWTVN0YXRlRmllbGQgKmZpZWxkLAog ICAgICAgICAgICAgICAgICAgICAgIFFKU09OICp2bWRlc2MpCiB7Ci0gICAgZnByaW50ZihzdGRl cnIsICJ1aW50MTZfZnJvbV91aW50OCBpcyB1c2VkIG9ubHkgZm9yIGJhY2t3YXJkcyBjb21wYXRp YmlsaXR5LlxuIik7Ci0gICAgZnByaW50ZihzdGRlcnIsICJOZXZlciBzaG91bGQgYmUgdXNlZCB0 byB3cml0ZSBhIG5ldyBzdGF0ZS5cbiIpOworICAgIGVycm9yX3JlcG9ydCgidWludDE2X2Zyb21f dWludDggaXMgdXNlZCBvbmx5IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4iKTsKKyAgICBl cnJvcl9yZXBvcnQoIk5ldmVyIHNob3VsZCBiZSB1c2VkIHRvIHdyaXRlIGEgbmV3IHN0YXRlLiIp OwogICAgIGV4aXQoMCk7CiAKICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2h3L252cmFtL2Z3 X2NmZy5jIGIvaHcvbnZyYW0vZndfY2ZnLmMKaW5kZXggZTNiZDYyNmI4Yy4uY2Y5YTgxNmMwZSAx MDA2NDQKLS0tIGEvaHcvbnZyYW0vZndfY2ZnLmMKKysrIGIvaHcvbnZyYW0vZndfY2ZnLmMKQEAg LTUxNSw4ICs1MTUsOCBAQCBzdGF0aWMgaW50IGdldF91aW50MzJfYXNfdWludDE2KFFFTVVGaWxl ICpmLCB2b2lkICpwdiwgc2l6ZV90IHNpemUsCiBzdGF0aWMgaW50IHB1dF91bnVzZWQoUUVNVUZp bGUgKmYsIHZvaWQgKnB2LCBzaXplX3Qgc2l6ZSwgVk1TdGF0ZUZpZWxkICpmaWVsZCwKICAgICAg ICAgICAgICAgICAgICAgICBRSlNPTiAqdm1kZXNjKQogewotICAgIGZwcmludGYoc3RkZXJyLCAi dWludDMyX2FzX3VpbnQxNiBpcyBvbmx5IHVzZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHku XG4iKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIlRoaXMgZnVuY3Rpb25zIHNob3VsZG4ndCBiZSBj YWxsZWQuXG4iKTsKKyAgICBlcnJvcl9yZXBvcnQoInVpbnQzMl9hc191aW50MTYgaXMgb25seSB1 c2VkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiIpOworICAgIGVycm9yX3JlcG9ydCgiVGhp cyBmdW5jdGlvbnMgc2hvdWxkbid0IGJlIGNhbGxlZC4iKTsKIAogICAgIHJldHVybiAwOwogfQpk aWZmIC0tZ2l0IGEvaHcvb3BlbnJpc2Mvb3BlbnJpc2Nfc2ltLmMgYi9ody9vcGVucmlzYy9vcGVu cmlzY19zaW0uYwppbmRleCA4NmJmMjg0OWM0Li40NGE2ZDExNWRkIDEwMDY0NAotLS0gYS9ody9v cGVucmlzYy9vcGVucmlzY19zaW0uYworKysgYi9ody9vcGVucmlzYy9vcGVucmlzY19zaW0uYwpA QCAtMTksNiArMTksNyBAQAogICovCiAKICNpbmNsdWRlICJxZW11L29zZGVwLmgiCisjaW5jbHVk ZSAicWVtdS9lcnJvci1yZXBvcnQuaCIKICNpbmNsdWRlICJxYXBpL2Vycm9yLmgiCiAjaW5jbHVk ZSAicWVtdS1jb21tb24uaCIKICNpbmNsdWRlICJjcHUuaCIKQEAgLTg3LDcgKzg4LDcgQEAgc3Rh dGljIHZvaWQgY3B1X29wZW5yaXNjX2xvYWRfa2VybmVsKHJhbV9hZGRyX3QgcmFtX3NpemUsCiAg ICAgICAgIH0KIAogICAgICAgICBpZiAoa2VybmVsX3NpemUgPCAwKSB7Ci0gICAgICAgICAgICBm cHJpbnRmKHN0ZGVyciwgIlFFTVU6IGNvdWxkbid0IGxvYWQgdGhlIGtlcm5lbCAnJXMnXG4iLAor ICAgICAgICAgICAgZXJyb3JfcmVwb3J0KCJRRU1VOiBjb3VsZG4ndCBsb2FkIHRoZSBrZXJuZWwg JyVzJyIsCiAgICAgICAgICAgICAgICAgICAgIGtlcm5lbF9maWxlbmFtZSk7CiAgICAgICAgICAg ICBleGl0KDEpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9ody9wY2ktaG9zdC9ib25pdG8uYyBi L2h3L3BjaS1ob3N0L2Jvbml0by5jCmluZGV4IDE3NjdkMmFmNjEuLjQ4ZmVmODZjMDUgMTAwNjQ0 Ci0tLSBhL2h3L3BjaS1ob3N0L2Jvbml0by5jCisrKyBiL2h3L3BjaS1ob3N0L2Jvbml0by5jCkBA IC0zOCw3ICszOCw3IEBACiAgKi8KIAogI2luY2x1ZGUgInFlbXUvb3NkZXAuaCIKLQorI2luY2x1 ZGUgInFlbXUvZXJyb3ItcmVwb3J0LmgiCiAjaW5jbHVkZSAiaHcvaHcuaCIKICNpbmNsdWRlICJo dy9wY2kvcGNpLmgiCiAjaW5jbHVkZSAiaHcvaTM4Ni9wYy5oIgpAQCAtNDQ5LDggKzQ0OSw4IEBA IHN0YXRpYyB1aW50MzJfdCBib25pdG9fc2JyaWRnZV9wY2lhZGRyKHZvaWQgKm9wYXF1ZSwgaHdh ZGRyIGFkZHIpCiAgICAgcmVnbm8gPSAoY2ZnYWRkciAmIEJPTklUT19QQ0lDT05GX1JFR19NQVNL KSA+PiBCT05JVE9fUENJQ09ORl9SRUdfT0ZGU0VUOwogCiAgICAgaWYgKGlkc2VsID09IDApIHsK LSAgICAgICAgZnByaW50ZihzdGRlcnIsICJlcnJvciBpbiBib25pdG8gcGNpIGNvbmZpZyBhZGRy ZXNzICIgVEFSR0VUX0ZNVF9wbHgKLSAgICAgICAgICAgICIscGNpbWFwX2NmZz0leFxuIiwgYWRk ciwgcy0+cmVnc1tCT05JVE9fUENJTUFQX0NGR10pOworICAgICAgICBlcnJvcl9yZXBvcnQoImVy cm9yIGluIGJvbml0byBwY2kgY29uZmlnIGFkZHJlc3MgIiBUQVJHRVRfRk1UX3BseAorICAgICAg ICAgICAgIixwY2ltYXBfY2ZnPSV4IiwgYWRkciwgcy0+cmVnc1tCT05JVE9fUENJTUFQX0NGR10p OwogICAgICAgICBleGl0KDEpOwogICAgIH0KICAgICBwY2lhZGRyID0gUENJX0FERFIocGNpX2J1 c19udW0ocGhiLT5idXMpLCBkZXZubywgZnVubm8sIHJlZ25vKTsKZGlmZiAtLWdpdCBhL2h3L3Bj aS9wY2kuYyBiL2h3L3BjaS9wY2kuYwppbmRleCAxZTZmYjg4ZWJhLi4xYzgzOTVkMzE5IDEwMDY0 NAotLS0gYS9ody9wY2kvcGNpLmMKKysrIGIvaHcvcGNpL3BjaS5jCkBAIC01MTUsNyArNTE1LDcg QEAgc3RhdGljIGludCBnZXRfcGNpX2lycV9zdGF0ZShRRU1VRmlsZSAqZiwgdm9pZCAqcHYsIHNp emVfdCBzaXplLAogICAgIGZvciAoaSA9IDA7IGkgPCBQQ0lfTlVNX1BJTlM7ICsraSkgewogICAg ICAgICBpcnFfc3RhdGVbaV0gPSBxZW11X2dldF9iZTMyKGYpOwogICAgICAgICBpZiAoaXJxX3N0 YXRlW2ldICE9IDB4MSAmJiBpcnFfc3RhdGVbaV0gIT0gMCkgewotICAgICAgICAgICAgZnByaW50 ZihzdGRlcnIsICJpcnEgc3RhdGUgJWQ6IG11c3QgYmUgMCBvciAxLlxuIiwKKyAgICAgICAgICAg IGVycm9yX3JlcG9ydCgiaXJxIHN0YXRlICVkOiBtdXN0IGJlIDAgb3IgMS4iLAogICAgICAgICAg ICAgICAgICAgICBpcnFfc3RhdGVbaV0pOwogICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CiAg ICAgICAgIH0KQEAgLTY3OCw3ICs2NzgsNyBAQCBzdGF0aWMgUENJQnVzICpwY2lfZ2V0X2J1c19k ZXZmbihpbnQgKmRldmZucCwgUENJQnVzICpyb290LAogICAgIHVuc2lnbmVkIHNsb3Q7CiAKICAg ICBpZiAoIXJvb3QpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJObyBwcmltYXJ5IFBDSSBi dXNcbiIpOworICAgICAgICBlcnJvcl9yZXBvcnQoIk5vIHByaW1hcnkgUENJIGJ1cyIpOwogICAg ICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKQEAgLTY5NCw3ICs2OTQsNyBAQCBzdGF0aWMgUENJ QnVzICpwY2lfZ2V0X2J1c19kZXZmbihpbnQgKmRldmZucCwgUENJQnVzICpyb290LAogICAgIH0K IAogICAgIGlmIChkb20gIT0gMCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk5vIHN1cHBv cnQgZm9yIG5vbi16ZXJvIFBDSSBkb21haW5zXG4iKTsKKyAgICAgICAgZXJyb3JfcmVwb3J0KCJO byBzdXBwb3J0IGZvciBub24temVybyBQQ0kgZG9tYWlucyIpOwogICAgICAgICByZXR1cm4gTlVM TDsKICAgICB9CiAKQEAgLTExMTgsOCArMTExOCw4IEBAIHZvaWQgcGNpX3JlZ2lzdGVyX2JhcihQ Q0lEZXZpY2UgKnBjaV9kZXYsIGludCByZWdpb25fbnVtLAogICAgIGFzc2VydChyZWdpb25fbnVt ID49IDApOwogICAgIGFzc2VydChyZWdpb25fbnVtIDwgUENJX05VTV9SRUdJT05TKTsKICAgICBp ZiAoc2l6ZSAmIChzaXplLTEpKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IFBD SSByZWdpb24gc2l6ZSBtdXN0IGJlIHBvdzIgIgotICAgICAgICAgICAgICAgICAgICAidHlwZT0w eCV4LCBzaXplPTB4JSJGTVRfUENJQlVTIlxuIiwgdHlwZSwgc2l6ZSk7CisgICAgICAgIGVycm9y X3JlcG9ydCgiRVJST1I6IFBDSSByZWdpb24gc2l6ZSBtdXN0IGJlIHBvdzIgIgorICAgICAgICAg ICAgICAgICAgICAidHlwZT0weCV4LCBzaXplPTB4JSJGTVRfUENJQlVTIiIsIHR5cGUsIHNpemUp OwogICAgICAgICBleGl0KDEpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvaHcvcHBjL2U1MDAuYyBi L2h3L3BwYy9lNTAwLmMKaW5kZXggZGIwZTQ5YWI4Zi4uOGE1MzUwMTYxZiAxMDA2NDQKLS0tIGEv aHcvcHBjL2U1MDAuYworKysgYi9ody9wcGMvZTUwMC5jCkBAIC0zMzMsMTMgKzMzMywxMyBAQCBz dGF0aWMgaW50IHBwY2U1MDBfbG9hZF9kZXZpY2VfdHJlZShNYWNoaW5lU3RhdGUgKm1hY2hpbmUs CiAgICAgICAgIHJldCA9IHFlbXVfZmR0X3NldHByb3BfY2VsbChmZHQsICIvY2hvc2VuIiwgImxp bnV4LGluaXRyZC1zdGFydCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bml0cmRfYmFzZSk7CiAgICAgICAgIGlmIChyZXQgPCAwKSB7Ci0gICAgICAgICAgICBmcHJpbnRm KHN0ZGVyciwgImNvdWxkbid0IHNldCAvY2hvc2VuL2xpbnV4LGluaXRyZC1zdGFydFxuIik7Cisg ICAgICAgICAgICBlcnJvcl9yZXBvcnQoImNvdWxkbid0IHNldCAvY2hvc2VuL2xpbnV4LGluaXRy ZC1zdGFydCIpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0ID0gcWVtdV9mZHRfc2V0cHJvcF9j ZWxsKGZkdCwgIi9jaG9zZW4iLCAibGludXgsaW5pdHJkLWVuZCIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoaW5pdHJkX2Jhc2UgKyBpbml0cmRfc2l6ZSkpOwogICAgICAg ICBpZiAocmV0IDwgMCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJjb3VsZG4ndCBz ZXQgL2Nob3Nlbi9saW51eCxpbml0cmQtZW5kXG4iKTsKKyAgICAgICAgICAgIGVycm9yX3JlcG9y dCgiY291bGRuJ3Qgc2V0IC9jaG9zZW4vbGludXgsaW5pdHJkLWVuZCIpOwogICAgICAgICB9CiAK ICAgICB9CkBAIC0zNTMsNyArMzUzLDcgQEAgc3RhdGljIGludCBwcGNlNTAwX2xvYWRfZGV2aWNl X3RyZWUoTWFjaGluZVN0YXRlICptYWNoaW5lLAogICAgIHJldCA9IHFlbXVfZmR0X3NldHByb3Bf c3RyaW5nKGZkdCwgIi9jaG9zZW4iLCAiYm9vdGFyZ3MiLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBtYWNoaW5lLT5rZXJuZWxfY21kbGluZSk7CiAgICAgaWYgKHJldCA8 IDApCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiY291bGRuJ3Qgc2V0IC9jaG9zZW4vYm9vdGFy Z3NcbiIpOworICAgICAgICBlcnJvcl9yZXBvcnQoImNvdWxkbid0IHNldCAvY2hvc2VuL2Jvb3Rh cmdzIik7CiAKICAgICBpZiAoa3ZtX2VuYWJsZWQoKSkgewogICAgICAgICAvKiBSZWFkIG91dCBo b3N0J3MgZnJlcXVlbmNpZXMgKi8KQEAgLTcyMCw3ICs3MjAsNyBAQCBzdGF0aWMgRGV2aWNlU3Rh dGUgKnBwY2U1MDBfaW5pdF9tcGljX2t2bShQUENFNTAwUGFyYW1zICpwYXJhbXMsCiAKICAgICBD UFVfRk9SRUFDSChjcykgewogICAgICAgICBpZiAoa3ZtX29wZW5waWNfY29ubmVjdF92Y3B1KGRl diwgY3MpKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBmYWlsZWQgdG8gY29u bmVjdCB2Y3B1IHRvIGlycWNoaXBcbiIsCisgICAgICAgICAgICBlcnJvcl9yZXBvcnQoIiVzOiBm YWlsZWQgdG8gY29ubmVjdCB2Y3B1IHRvIGlycWNoaXAiLAogICAgICAgICAgICAgICAgICAgICBf X2Z1bmNfXyk7CiAgICAgICAgICAgICBhYm9ydCgpOwogICAgICAgICB9CkBAIC04MjEsNyArODIx LDcgQEAgdm9pZCBwcGNlNTAwX2luaXQoTWFjaGluZVN0YXRlICptYWNoaW5lLCBQUENFNTAwUGFy YW1zICpwYXJhbXMpCiAgICAgICAgIGNzID0gQ1BVKGNwdSk7CiAKICAgICAgICAgaWYgKGVudi0+ bW11X21vZGVsICE9IFBPV0VSUENfTU1VX0JPT0tFMjA2KSB7Ci0gICAgICAgICAgICBmcHJpbnRm KHN0ZGVyciwgIk1NVSBtb2RlbCAlaSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgbWFjaGluZS5cbiIs CisgICAgICAgICAgICBlcnJvcl9yZXBvcnQoIk1NVSBtb2RlbCAlaSBub3Qgc3VwcG9ydGVkIGJ5 IHRoaXMgbWFjaGluZS4iLAogICAgICAgICAgICAgICAgIGVudi0+bW11X21vZGVsKTsKICAgICAg ICAgICAgIGV4aXQoMSk7CiAgICAgICAgIH0KQEAgLTk2Nyw3ICs5NjcsNyBAQCB2b2lkIHBwY2U1 MDBfaW5pdChNYWNoaW5lU3RhdGUgKm1hY2hpbmUsIFBQQ0U1MDBQYXJhbXMgKnBhcmFtcykKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cl9iYXNlLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFtX3NpemUgLSBjdXJfYmFzZSk7 CiAgICAgICAgIGlmIChrZXJuZWxfc2l6ZSA8IDApIHsKLSAgICAgICAgICAgIGZwcmludGYoc3Rk ZXJyLCAicWVtdTogY291bGQgbm90IGxvYWQga2VybmVsICclcydcbiIsCisgICAgICAgICAgICBl cnJvcl9yZXBvcnQoInFlbXU6IGNvdWxkIG5vdCBsb2FkIGtlcm5lbCAnJXMnIiwKICAgICAgICAg ICAgICAgICAgICAgbWFjaGluZS0+a2VybmVsX2ZpbGVuYW1lKTsKICAgICAgICAgICAgIGV4aXQo MSk7CiAgICAgICAgIH0KQEAgLTk4Miw4ICs5ODIsOCBAQCB2b2lkIHBwY2U1MDBfaW5pdChNYWNo aW5lU3RhdGUgKm1hY2hpbmUsIFBQQ0U1MDBQYXJhbXMgKnBhcmFtcykKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbV9zaXplIC0gaW5pdHJkX2Jhc2UpOwogCiAg ICAgICAgIGlmIChpbml0cmRfc2l6ZSA8IDApIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJy LCAicWVtdTogY291bGQgbm90IGxvYWQgaW5pdGlhbCByYW0gZGlzayAnJXMnXG4iLAotICAgICAg ICAgICAgICAgICAgICBtYWNoaW5lLT5pbml0cmRfZmlsZW5hbWUpOworICAgICAgICAgICAgZXJy b3JfcmVwb3J0KCJxZW11OiBjb3VsZCBub3QgbG9hZCBpbml0aWFsIHJhbSBkaXNrICclcyciLAor ICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUtPmluaXRyZF9maWxlbmFtZSk7CiAgICAg ICAgICAgICBleGl0KDEpOwogICAgICAgICB9CiAKQEAgLTEwMjQsNyArMTAyNCw3IEBAIHZvaWQg cHBjZTUwMF9pbml0KE1hY2hpbmVTdGF0ZSAqbWFjaGluZSwgUFBDRTUwMFBhcmFtcyAqcGFyYW1z KQogICAgICAgICBrZXJuZWxfc2l6ZSA9IGxvYWRfdWltYWdlKGZpbGVuYW1lLCAmYmlvc19lbnRy eSwgJmxvYWRhZGRyLCBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5V TEwsIE5VTEwpOwogICAgICAgICBpZiAoa2VybmVsX3NpemUgPCAwKSB7Ci0gICAgICAgICAgICBm cHJpbnRmKHN0ZGVyciwgInFlbXU6IGNvdWxkIG5vdCBsb2FkIGZpcm13YXJlICclcydcbiIsIGZp bGVuYW1lKTsKKyAgICAgICAgICAgIGVycm9yX3JlcG9ydCgicWVtdTogY291bGQgbm90IGxvYWQg ZmlybXdhcmUgJyVzJyIsIGZpbGVuYW1lKTsKICAgICAgICAgICAgIGV4aXQoMSk7CiAgICAgICAg IH0KICAgICB9CkBAIC0xMDM3LDcgKzEwMzcsNyBAQCB2b2lkIHBwY2U1MDBfaW5pdChNYWNoaW5l U3RhdGUgKm1hY2hpbmUsIFBQQ0U1MDBQYXJhbXMgKnBhcmFtcykKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGluaXRyZF9iYXNlLCBpbml0cmRfc2l6ZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlcm5lbF9iYXNlLCBrZXJuZWxfc2l6ZSk7 CiAgICAgaWYgKGR0X3NpemUgPCAwKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiY291bGRu J3QgbG9hZCBkZXZpY2UgdHJlZVxuIik7CisgICAgICAgIGVycm9yX3JlcG9ydCgiY291bGRuJ3Qg bG9hZCBkZXZpY2UgdHJlZSIpOwogICAgICAgICBleGl0KDEpOwogICAgIH0KICAgICBhc3NlcnQo ZHRfc2l6ZSA8IERUQl9NQVhfU0laRSk7CmRpZmYgLS1naXQgYS9ody9wcGMvbWFjX25ld3dvcmxk LmMgYi9ody9wcGMvbWFjX25ld3dvcmxkLmMKaW5kZXggMzNiNDZjYjUwYi4uYzBlZGYyMjM1MiAx MDA2NDQKLS0tIGEvaHcvcHBjL21hY19uZXd3b3JsZC5jCisrKyBiL2h3L3BwYy9tYWNfbmV3d29y bGQuYwpAQCAtMjgzLDcgKzI4Myw3IEBAIHN0YXRpYyB2b2lkIHBwY19jb3JlOTlfaW5pdChNYWNo aW5lU3RhdGUgKm1hY2hpbmUpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYg KHBwY19ib290X2RldmljZSA9PSAnXDAnKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg Ik5vIHZhbGlkIGJvb3QgZGV2aWNlIGZvciBNYWM5OSBtYWNoaW5lXG4iKTsKKyAgICAgICAgICAg IGVycm9yX3JlcG9ydCgiTm8gdmFsaWQgYm9vdCBkZXZpY2UgZm9yIE1hYzk5IG1hY2hpbmUiKTsK ICAgICAgICAgICAgIGV4aXQoMSk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9ody9w cGMvbWFjX29sZHdvcmxkLmMgYi9ody9wcGMvbWFjX29sZHdvcmxkLmMKaW5kZXggMTkzYjkwNDdk OS4uMDJmMDM2NTBhZiAxMDA2NDQKLS0tIGEvaHcvcHBjL21hY19vbGR3b3JsZC5jCisrKyBiL2h3 L3BwYy9tYWNfb2xkd29ybGQuYwpAQCAtMjI2LDcgKzIyNiw3IEBAIHN0YXRpYyB2b2lkIHBwY19o ZWF0aHJvd19pbml0KE1hY2hpbmVTdGF0ZSAqbWFjaGluZSkKICNlbmRpZgogICAgICAgICB9CiAg ICAgICAgIGlmIChwcGNfYm9vdF9kZXZpY2UgPT0gJ1wwJykgewotICAgICAgICAgICAgZnByaW50 ZihzdGRlcnIsICJObyB2YWxpZCBib290IGRldmljZSBmb3IgRzMgQmVpZ2UgbWFjaGluZVxuIik7 CisgICAgICAgICAgICBlcnJvcl9yZXBvcnQoIk5vIHZhbGlkIGJvb3QgZGV2aWNlIGZvciBHMyBC ZWlnZSBtYWNoaW5lIik7CiAgICAgICAgICAgICBleGl0KDEpOwogICAgICAgICB9CiAgICAgfQpk aWZmIC0tZ2l0IGEvaHcvcHBjL21wYzg1NDRfZ3V0cy5jIGIvaHcvcHBjL21wYzg1NDRfZ3V0cy5j CmluZGV4IGNlMTI1NGI1ZDQuLjNhMmM0OWUzZmQgMTAwNjQ0Ci0tLSBhL2h3L3BwYy9tcGM4NTQ0 X2d1dHMuYworKysgYi9ody9wcGMvbXBjODU0NF9ndXRzLmMKQEAgLTE4LDYgKzE4LDcgQEAKICAq LwogCiAjaW5jbHVkZSAicWVtdS9vc2RlcC5oIgorI2luY2x1ZGUgInFlbXUvZXJyb3ItcmVwb3J0 LmgiCiAjaW5jbHVkZSAicWVtdS1jb21tb24uaCIKICNpbmNsdWRlICJjcHUuaCIKICNpbmNsdWRl ICJody9ody5oIgpAQCAtODMsNyArODQsNyBAQCBzdGF0aWMgdWludDY0X3QgbXBjODU0NF9ndXRz X3JlYWQodm9pZCAqb3BhcXVlLCBod2FkZHIgYWRkciwKICAgICAgICAgdmFsdWUgPSBlbnYtPnNw cltTUFJfRTUwMF9TVlJdOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBm cHJpbnRmKHN0ZGVyciwgImd1dHM6IFVua25vd24gcmVnaXN0ZXIgcmVhZDogJXhcbiIsIChpbnQp YWRkcik7CisgICAgICAgIGVycm9yX3JlcG9ydCgiZ3V0czogVW5rbm93biByZWdpc3RlciByZWFk OiAleCIsIChpbnQpYWRkcik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMTAyLDcgKzEw Myw3IEBAIHN0YXRpYyB2b2lkIG1wYzg1NDRfZ3V0c193cml0ZSh2b2lkICpvcGFxdWUsIGh3YWRk ciBhZGRyLAogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAg IGZwcmludGYoc3RkZXJyLCAiZ3V0czogVW5rbm93biByZWdpc3RlciB3cml0ZTogJXggPSAleFxu IiwKKyAgICAgICAgZXJyb3JfcmVwb3J0KCJndXRzOiBVbmtub3duIHJlZ2lzdGVyIHdyaXRlOiAl eCA9ICV4IiwKICAgICAgICAgICAgICAgICAoaW50KWFkZHIsICh1bnNpZ25lZCl2YWx1ZSk7CiAg ICAgICAgIGJyZWFrOwogICAgIH0KZGlmZiAtLWdpdCBhL2h3L3BwYy9wcGM0MDVfYm9hcmRzLmMg Yi9ody9wcGMvcHBjNDA1X2JvYXJkcy5jCmluZGV4IGU5MmRiMmM2NmEuLjBhMzFhMWMxMTYgMTAw NjQ0Ci0tLSBhL2h3L3BwYy9wcGM0MDVfYm9hcmRzLmMKKysrIGIvaHcvcHBjL3BwYzQwNV9ib2Fy ZHMuYwpAQCAtMzI0LDcgKzMyNCw3IEBAIHN0YXRpYyB2b2lkIHJlZjQwNWVwX2luaXQoTWFjaGlu ZVN0YXRlICptYWNoaW5lKQogICAgICAgICBrZXJuZWxfc2l6ZSA9IGxvYWRfaW1hZ2VfdGFyZ3Bo eXMoa2VybmVsX2ZpbGVuYW1lLCBrZXJuZWxfYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJhbV9zaXplIC0ga2VybmVsX2Jhc2UpOwogICAgICAgICBpZiAo a2VybmVsX3NpemUgPCAwKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInFlbXU6IGNv dWxkIG5vdCBsb2FkIGtlcm5lbCAnJXMnXG4iLAorICAgICAgICAgICAgZXJyb3JfcmVwb3J0KCJx ZW11OiBjb3VsZCBub3QgbG9hZCBrZXJuZWwgJyVzJyIsCiAgICAgICAgICAgICAgICAgICAgIGtl cm5lbF9maWxlbmFtZSk7CiAgICAgICAgICAgICBleGl0KDEpOwogICAgICAgICB9CkBAIC0zMzYs OCArMzM2LDggQEAgc3RhdGljIHZvaWQgcmVmNDA1ZXBfaW5pdChNYWNoaW5lU3RhdGUgKm1hY2hp bmUpCiAgICAgICAgICAgICBpbml0cmRfc2l6ZSA9IGxvYWRfaW1hZ2VfdGFyZ3BoeXMoaW5pdHJk X2ZpbGVuYW1lLCBpbml0cmRfYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICByYW1fc2l6ZSAtIGluaXRyZF9iYXNlKTsKICAgICAgICAgICAgIGlmIChp bml0cmRfc2l6ZSA8IDApIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInFlbXU6 IGNvdWxkIG5vdCBsb2FkIGluaXRpYWwgcmFtIGRpc2sgJyVzJ1xuIiwKLSAgICAgICAgICAgICAg ICAgICAgICAgIGluaXRyZF9maWxlbmFtZSk7CisgICAgICAgICAgICAgICAgZXJyb3JfcmVwb3J0 KCJxZW11OiBjb3VsZCBub3QgbG9hZCBpbml0aWFsIHJhbSBkaXNrICclcyciLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbml0cmRfZmlsZW5hbWUpOwogICAgICAgICAgICAgICAgIGV4 aXQoMSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CkBAIC02MDcsNyArNjA3LDcg QEAgc3RhdGljIHZvaWQgdGFpaHVfNDA1ZXBfaW5pdChNYWNoaW5lU3RhdGUgKm1hY2hpbmUpCiAg ICAgICAgIGtlcm5lbF9zaXplID0gbG9hZF9pbWFnZV90YXJncGh5cyhrZXJuZWxfZmlsZW5hbWUs IGtlcm5lbF9iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cmFtX3NpemUgLSBrZXJuZWxfYmFzZSk7CiAgICAgICAgIGlmIChrZXJuZWxfc2l6ZSA8IDApIHsK LSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAicWVtdTogY291bGQgbm90IGxvYWQga2VybmVs ICclcydcbiIsCisgICAgICAgICAgICBlcnJvcl9yZXBvcnQoInFlbXU6IGNvdWxkIG5vdCBsb2Fk IGtlcm5lbCAnJXMnIiwKICAgICAgICAgICAgICAgICAgICAga2VybmVsX2ZpbGVuYW1lKTsKICAg ICAgICAgICAgIGV4aXQoMSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2h3L3BwYy9wcGM0NDBf YmFtYm9vLmMgYi9ody9wcGMvcHBjNDQwX2JhbWJvby5jCmluZGV4IGY5MmQ0N2YyOGQuLjc3Yjc0 ZGZlOWUgMTAwNjQ0Ci0tLSBhL2h3L3BwYy9wcGM0NDBfYmFtYm9vLmMKKysrIGIvaHcvcHBjL3Bw YzQ0MF9iYW1ib28uYwpAQCAtMTIsNiArMTIsNyBAQAogICovCiAKICNpbmNsdWRlICJxZW11L29z ZGVwLmgiCisjaW5jbHVkZSAicWVtdS9lcnJvci1yZXBvcnQuaCIKICNpbmNsdWRlICJxZW11LWNv bW1vbi5oIgogI2luY2x1ZGUgIm5ldC9uZXQuaCIKICNpbmNsdWRlICJody9ody5oIgpAQCAtODAs MjIgKzgxLDIyIEBAIHN0YXRpYyBpbnQgYmFtYm9vX2xvYWRfZGV2aWNlX3RyZWUoaHdhZGRyIGFk ZHIsCiAgICAgcmV0ID0gcWVtdV9mZHRfc2V0cHJvcChmZHQsICIvbWVtb3J5IiwgInJlZyIsIG1l bV9yZWdfcHJvcGVydHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobWVtX3Jl Z19wcm9wZXJ0eSkpOwogICAgIGlmIChyZXQgPCAwKQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwg ImNvdWxkbid0IHNldCAvbWVtb3J5L3JlZ1xuIik7CisgICAgICAgIGVycm9yX3JlcG9ydCgiY291 bGRuJ3Qgc2V0IC9tZW1vcnkvcmVnIik7CiAKICAgICByZXQgPSBxZW11X2ZkdF9zZXRwcm9wX2Nl bGwoZmR0LCAiL2Nob3NlbiIsICJsaW51eCxpbml0cmQtc3RhcnQiLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbml0cmRfYmFzZSk7CiAgICAgaWYgKHJldCA8IDApCi0gICAgICAg IGZwcmludGYoc3RkZXJyLCAiY291bGRuJ3Qgc2V0IC9jaG9zZW4vbGludXgsaW5pdHJkLXN0YXJ0 XG4iKTsKKyAgICAgICAgZXJyb3JfcmVwb3J0KCJjb3VsZG4ndCBzZXQgL2Nob3Nlbi9saW51eCxp bml0cmQtc3RhcnQiKTsKIAogICAgIHJldCA9IHFlbXVfZmR0X3NldHByb3BfY2VsbChmZHQsICIv Y2hvc2VuIiwgImxpbnV4LGluaXRyZC1lbmQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoaW5pdHJkX2Jhc2UgKyBpbml0cmRfc2l6ZSkpOwogICAgIGlmIChyZXQgPCAwKQotICAg ICAgICBmcHJpbnRmKHN0ZGVyciwgImNvdWxkbid0IHNldCAvY2hvc2VuL2xpbnV4LGluaXRyZC1l bmRcbiIpOworICAgICAgICBlcnJvcl9yZXBvcnQoImNvdWxkbid0IHNldCAvY2hvc2VuL2xpbnV4 LGluaXRyZC1lbmQiKTsKIAogICAgIHJldCA9IHFlbXVfZmR0X3NldHByb3Bfc3RyaW5nKGZkdCwg Ii9jaG9zZW4iLCAiYm9vdGFyZ3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGtlcm5lbF9jbWRsaW5lKTsKICAgICBpZiAocmV0IDwgMCkKLSAgICAgICAgZnByaW50ZihzdGRl cnIsICJjb3VsZG4ndCBzZXQgL2Nob3Nlbi9ib290YXJnc1xuIik7CisgICAgICAgIGVycm9yX3Jl cG9ydCgiY291bGRuJ3Qgc2V0IC9jaG9zZW4vYm9vdGFyZ3MiKTsKIAogICAgIC8qIENvcHkgZGF0 YSBmcm9tIHRoZSBob3N0IGRldmljZSB0cmVlIGludG8gdGhlIGd1ZXN0LiBTaW5jZSB0aGUgZ3Vl c3QgY2FuCiAgICAgICogZGlyZWN0bHkgYWNjZXNzIHRoZSB0aW1lYmFzZSB3aXRob3V0IGhvc3Qg aW52b2x2ZW1lbnQsIHdlIG11c3QgZXhwb3NlCkBAIC0xOTAsNyArMTkxLDcgQEAgc3RhdGljIHZv aWQgYmFtYm9vX2luaXQoTWFjaGluZVN0YXRlICptYWNoaW5lKQogICAgIGVudiA9ICZjcHUtPmVu djsKIAogICAgIGlmIChlbnYtPm1tdV9tb2RlbCAhPSBQT1dFUlBDX01NVV9CT09LRSkgewotICAg ICAgICBmcHJpbnRmKHN0ZGVyciwgIk1NVSBtb2RlbCAlaSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMg bWFjaGluZS5cbiIsCisgICAgICAgIGVycm9yX3JlcG9ydCgiTU1VIG1vZGVsICVpIG5vdCBzdXBw b3J0ZWQgYnkgdGhpcyBtYWNoaW5lLiIsCiAgICAgICAgICAgICBlbnYtPm1tdV9tb2RlbCk7CiAg ICAgICAgIGV4aXQoMSk7CiAgICAgfQpAQCAtMjI0LDcgKzIyNSw3IEBAIHN0YXRpYyB2b2lkIGJh bWJvb19pbml0KE1hY2hpbmVTdGF0ZSAqbWFjaGluZSkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTlVMTCk7CiAgICAgcGNpYnVzID0gKFBDSUJ1cyAqKXFkZXZfZ2V0X2NoaWxkX2J1 cyhkZXYsICJwY2kuMCIpOwogICAgIGlmICghcGNpYnVzKSB7Ci0gICAgICAgIGZwcmludGYoc3Rk ZXJyLCAiY291bGRuJ3QgY3JlYXRlIFBDSSBjb250cm9sbGVyIVxuIik7CisgICAgICAgIGVycm9y X3JlcG9ydCgiY291bGRuJ3QgY3JlYXRlIFBDSSBjb250cm9sbGVyISIpOwogICAgICAgICBleGl0 KDEpOwogICAgIH0KIApAQCAtMjY1LDcgKzI2Niw3IEBAIHN0YXRpYyB2b2lkIGJhbWJvb19pbml0 KE1hY2hpbmVTdGF0ZSAqbWFjaGluZSkKICAgICAgICAgfQogICAgICAgICAvKiBYWFggdHJ5IGFn YWluIGFzIGJpbmFyeSAqLwogICAgICAgICBpZiAoc3VjY2VzcyA8IDApIHsKLSAgICAgICAgICAg IGZwcmludGYoc3RkZXJyLCAicWVtdTogY291bGQgbm90IGxvYWQga2VybmVsICclcydcbiIsCisg ICAgICAgICAgICBlcnJvcl9yZXBvcnQoInFlbXU6IGNvdWxkIG5vdCBsb2FkIGtlcm5lbCAnJXMn IiwKICAgICAgICAgICAgICAgICAgICAga2VybmVsX2ZpbGVuYW1lKTsKICAgICAgICAgICAgIGV4 aXQoMSk7CiAgICAgICAgIH0KQEAgLTI3Nyw3ICsyNzgsNyBAQCBzdGF0aWMgdm9pZCBiYW1ib29f aW5pdChNYWNoaW5lU3RhdGUgKm1hY2hpbmUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICByYW1fc2l6ZSAtIFJBTURJU0tfQUREUik7CiAKICAgICAgICAgaWYgKGlu aXRyZF9zaXplIDwgMCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJxZW11OiBjb3Vs ZCBub3QgbG9hZCByYW0gZGlzayAnJXMnIGF0ICV4XG4iLAorICAgICAgICAgICAgZXJyb3JfcmVw b3J0KCJxZW11OiBjb3VsZCBub3QgbG9hZCByYW0gZGlzayAnJXMnIGF0ICV4IiwKICAgICAgICAg ICAgICAgICAgICAgaW5pdHJkX2ZpbGVuYW1lLCBSQU1ESVNLX0FERFIpOwogICAgICAgICAgICAg ZXhpdCgxKTsKICAgICAgICAgfQpAQCAtMjg3LDcgKzI4OCw3IEBAIHN0YXRpYyB2b2lkIGJhbWJv b19pbml0KE1hY2hpbmVTdGF0ZSAqbWFjaGluZSkKICAgICBpZiAoa2VybmVsX2ZpbGVuYW1lKSB7 CiAgICAgICAgIGlmIChiYW1ib29fbG9hZF9kZXZpY2VfdHJlZShGRFRfQUREUiwgcmFtX3NpemUs IFJBTURJU0tfQUREUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRy ZF9zaXplLCBrZXJuZWxfY21kbGluZSkgPCAwKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVy ciwgImNvdWxkbid0IGxvYWQgZGV2aWNlIHRyZWVcbiIpOworICAgICAgICAgICAgZXJyb3JfcmVw b3J0KCJjb3VsZG4ndCBsb2FkIGRldmljZSB0cmVlIik7CiAgICAgICAgICAgICBleGl0KDEpOwog ICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvaHcvcHBjL3BwYzR4eF9wY2kuYyBiL2h3L3Bw Yy9wcGM0eHhfcGNpLmMKaW5kZXggNjk1M2Y4YjlhYy4uMGI5MWQyMjI1MyAxMDA2NDQKLS0tIGEv aHcvcHBjL3BwYzR4eF9wY2kuYworKysgYi9ody9wcGMvcHBjNHh4X3BjaS5jCkBAIC0yMCw2ICsy MCw3IEBACiAgKiA0eHggU29Dcywgc3VjaCBhcyB0aGUgNDQwRVAuICovCiAKICNpbmNsdWRlICJx ZW11L29zZGVwLmgiCisjaW5jbHVkZSAicWVtdS9lcnJvci1yZXBvcnQuaCIKICNpbmNsdWRlICJo dy9ody5oIgogI2luY2x1ZGUgImh3L3BwYy9wcGMuaCIKICNpbmNsdWRlICJody9wcGMvcHBjNHh4 LmgiCkBAIC0yNTQsNyArMjU1LDcgQEAgc3RhdGljIHZvaWQgcHBjNHh4X3BjaV9zZXRfaXJxKHZv aWQgKm9wYXF1ZSwgaW50IGlycV9udW0sIGludCBsZXZlbCkKIAogICAgIHRyYWNlX3BwYzR4eF9w Y2lfc2V0X2lycShpcnFfbnVtKTsKICAgICBpZiAoaXJxX251bSA8IDApIHsKLSAgICAgICAgZnBy aW50ZihzdGRlcnIsICIlczogUENJIGlycSAlZFxuIiwgX19mdW5jX18sIGlycV9udW0pOworICAg ICAgICBlcnJvcl9yZXBvcnQoIiVzOiBQQ0kgaXJxICVkIiwgX19mdW5jX18sIGlycV9udW0pOwog ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIHFlbXVfc2V0X2lycShwY2lfaXJxc1tpcnFfbnVt XSwgbGV2ZWwpOwpkaWZmIC0tZ2l0IGEvaHcvcHBjL3ByZXAuYyBiL2h3L3BwYy9wcmVwLmMKaW5k ZXggOTQxMzhhNGU4Yy4uNzU1MWQ1M2ZhNSAxMDA2NDQKLS0tIGEvaHcvcHBjL3ByZXAuYworKysg Yi9ody9wcGMvcHJlcC5jCkBAIC01NzYsNyArNTc2LDcgQEAgc3RhdGljIHZvaWQgcHBjX3ByZXBf aW5pdChNYWNoaW5lU3RhdGUgKm1hY2hpbmUpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg ICAgICAgaWYgKHBwY19ib290X2RldmljZSA9PSAnXDAnKSB7Ci0gICAgICAgICAgICBmcHJpbnRm KHN0ZGVyciwgIk5vIHZhbGlkIGJvb3QgZGV2aWNlIGZvciBNYWM5OSBtYWNoaW5lXG4iKTsKKyAg ICAgICAgICAgIGVycm9yX3JlcG9ydCgiTm8gdmFsaWQgYm9vdCBkZXZpY2UgZm9yIE1hYzk5IG1h Y2hpbmUiKTsKICAgICAgICAgICAgIGV4aXQoMSk7CiAgICAgICAgIH0KICAgICB9CkBAIC01OTcs NyArNTk3LDcgQEAgc3RhdGljIHZvaWQgcHBjX3ByZXBfaW5pdChNYWNoaW5lU3RhdGUgKm1hY2hp bmUpCiAgICAgcWRldl9pbml0X25vZmFpbChkZXYpOwogICAgIHBjaV9idXMgPSAoUENJQnVzICop cWRldl9nZXRfY2hpbGRfYnVzKGRldiwgInBjaS4wIik7CiAgICAgaWYgKHBjaV9idXMgPT0gTlVM TCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkbid0IGNyZWF0ZSBQQ0kgaG9zdCBj b250cm9sbGVyLlxuIik7CisgICAgICAgIGVycm9yX3JlcG9ydCgiQ291bGRuJ3QgY3JlYXRlIFBD SSBob3N0IGNvbnRyb2xsZXIuIik7CiAgICAgICAgIGV4aXQoMSk7CiAgICAgfQogICAgIHN5c2N0 cmwtPmNvbnRpZ3VvdXNfbWFwX2lycSA9IHFkZXZfZ2V0X2dwaW9faW4oZGV2LCAwKTsKZGlmZiAt LWdpdCBhL2h3L3BwYy92aXJ0ZXhfbWw1MDcuYyBiL2h3L3BwYy92aXJ0ZXhfbWw1MDcuYwppbmRl eCBlZDliNDA2ZmQzLi43NjQxNzM3ZjgxIDEwMDY0NAotLS0gYS9ody9wcGMvdmlydGV4X21sNTA3 LmMKKysrIGIvaHcvcHBjL3ZpcnRleF9tbDUwNy5jCkBAIC0xODcsNyArMTg3LDcgQEAgc3RhdGlj IGludCB4aWxpbnhfbG9hZF9kZXZpY2VfdHJlZShod2FkZHIgYWRkciwKIAogICAgIHIgPSBxZW11 X2ZkdF9zZXRwcm9wX3N0cmluZyhmZHQsICIvY2hvc2VuIiwgImJvb3RhcmdzIiwga2VybmVsX2Nt ZGxpbmUpOwogICAgIGlmIChyIDwgMCkKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJjb3VsZG4n dCBzZXQgL2Nob3Nlbi9ib290YXJnc1xuIik7CisgICAgICAgIGVycm9yX3JlcG9ydCgiY291bGRu J3Qgc2V0IC9jaG9zZW4vYm9vdGFyZ3MiKTsKICAgICBjcHVfcGh5c2ljYWxfbWVtb3J5X3dyaXRl KGFkZHIsIGZkdCwgZmR0X3NpemUpOwogICAgIHJldHVybiBmZHRfc2l6ZTsKIH0KQEAgLTIxOSw3 ICsyMTksNyBAQCBzdGF0aWMgdm9pZCB2aXJ0ZXhfaW5pdChNYWNoaW5lU3RhdGUgKm1hY2hpbmUp CiAgICAgZW52ID0gJmNwdS0+ZW52OwogCiAgICAgaWYgKGVudi0+bW11X21vZGVsICE9IFBPV0VS UENfTU1VX0JPT0tFKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiTU1VIG1vZGVsICVpIG5v dCBzdXBwb3J0ZWQgYnkgdGhpcyBtYWNoaW5lLlxuIiwKKyAgICAgICAgZXJyb3JfcmVwb3J0KCJN TVUgbW9kZWwgJWkgbm90IHN1cHBvcnRlZCBieSB0aGlzIG1hY2hpbmUuIiwKICAgICAgICAgICAg IGVudi0+bW11X21vZGVsKTsKICAgICAgICAgZXhpdCgxKTsKICAgICB9CmRpZmYgLS1naXQgYS9o dy9zMzkweC92aXJ0aW8tY2N3LmMgYi9ody9zMzkweC92aXJ0aW8tY2N3LmMKaW5kZXggZmYxYmIx NTM0Yy4uZDNjNDZiYzAxZiAxMDA2NDQKLS0tIGEvaHcvczM5MHgvdmlydGlvLWNjdy5jCisrKyBi L2h3L3MzOTB4L3ZpcnRpby1jY3cuYwpAQCAtNDY2LDcgKzQ2Niw3IEBAIHN0YXRpYyBpbnQgdmly dGlvX2Njd19jYihTdWJjaERldiAqc2NoLCBDQ1cxIGNjdykKICAgICAgICAgICAgICAgICAgKiBw YXNzZXMgdXMgemVyb2VzIGZvciB0aG9zZSB3ZSBkb24ndCBzdXBwb3J0LgogICAgICAgICAgICAg ICAgICAqLwogICAgICAgICAgICAgICAgIGlmIChmZWF0dXJlcy5mZWF0dXJlcykgewotICAgICAg ICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkd1ZXN0IGJ1ZzogZmVhdHVyZXNbJWldPSV4 IChleHBlY3RlZCAwKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JfcmVwb3J0KCJHdWVz dCBidWc6IGZlYXR1cmVzWyVpXT0leCAoZXhwZWN0ZWQgMCkiLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGZlYXR1cmVzLmluZGV4LCBmZWF0dXJlcy5mZWF0dXJlcyk7CiAgICAgICAgICAg ICAgICAgICAgIC8qIFhYWDogZG8gYSB1bml0IGNoZWNrIGhlcmU/ICovCiAgICAgICAgICAgICAg ICAgfQpkaWZmIC0tZ2l0IGEvaHcvc2NzaS9sc2k1M2M4OTVhLmMgYi9ody9zY3NpL2xzaTUzYzg5 NWEuYwppbmRleCAzZTU2YWIyNjdjLi4zZTJiMjRlNjdkIDEwMDY0NAotLS0gYS9ody9zY3NpL2xz aTUzYzg5NWEuYworKysgYi9ody9zY3NpL2xzaTUzYzg5NWEuYwpAQCAtMTQsNyArMTQsNyBAQAog ICovCiAKICNpbmNsdWRlICJxZW11L29zZGVwLmgiCi0KKyNpbmNsdWRlICJxZW11L2Vycm9yLXJl cG9ydC5oIgogI2luY2x1ZGUgImh3L2h3LmgiCiAjaW5jbHVkZSAiaHcvcGNpL3BjaS5oIgogI2lu Y2x1ZGUgImh3L3Njc2kvc2NzaS5oIgpAQCAtMTUwMSw3ICsxNTAxLDcgQEAgYWdhaW46CiAgICAg ICAgICAgIFRoaXMgaXMgYXBwYXJlbnRseSBzdWZmaWNpZW50IHRvIGJlYXQgdGhlIGRyaXZlcnMg aW50byBzdWJtaXNzaW9uLgogICAgICAgICAgKi8KICAgICAgICAgaWYgKCEocy0+c2llbjAgJiBM U0lfU0lTVDBfVURDKSkKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiaW5mLiBsb29wIHdp dGggVURDIG1hc2tlZFxuIik7CisgICAgICAgICAgICBlcnJvcl9yZXBvcnQoImluZi4gbG9vcCB3 aXRoIFVEQyBtYXNrZWQiKTsKICAgICAgICAgbHNpX3NjcmlwdF9zY3NpX2ludGVycnVwdChzLCBM U0lfU0lTVDBfVURDLCAwKTsKICAgICAgICAgbHNpX2Rpc2Nvbm5lY3Qocyk7CiAgICAgfSBlbHNl IGlmIChzLT5pc3RhdDEgJiBMU0lfSVNUQVQxX1NSVU4gJiYgIXMtPndhaXRpbmcpIHsKZGlmZiAt LWdpdCBhL2h3L3Njc2kvc3BhcHJfdnNjc2kuYyBiL2h3L3Njc2kvc3BhcHJfdnNjc2kuYwppbmRl eCAzNjBkYjUzYWM4Li44YzRlYWJjZjNkIDEwMDY0NAotLS0gYS9ody9zY3NpL3NwYXByX3ZzY3Np LmMKKysrIGIvaHcvc2NzaS9zcGFwcl92c2NzaS5jCkBAIC0zMiw2ICszMiw3IEBACiAgKiAgLSBN YXliZSBkbyBhdXRvc2Vuc2UgKFBBUFIgc2VlbXMgdG8gbWFuZGF0ZSBpdCwgbGludXggZG9lc24n dCBjYXJlKQogICovCiAjaW5jbHVkZSAicWVtdS9vc2RlcC5oIgorI2luY2x1ZGUgInFlbXUvZXJy b3ItcmVwb3J0LmgiCiAjaW5jbHVkZSAicWVtdS1jb21tb24uaCIKICNpbmNsdWRlICJjcHUuaCIK ICNpbmNsdWRlICJody9ody5oIgpAQCAtMTc5LDcgKzE4MCw3IEBAIHN0YXRpYyBpbnQgdnNjc2lf c2VuZF9pdShWU0NTSVN0YXRlICpzLCB2c2NzaV9yZXEgKnJlcSwKICAgICByYyA9IHNwYXByX3Zp b19kbWFfd3JpdGUoJnMtPnZkZXYsIHJlcS0+Y3JxLnMuSVVfZGF0YV9wdHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZyZXEtPml1LCBsZW5ndGgpOwogICAgIGlmIChyYykgewotICAg ICAgICBmcHJpbnRmKHN0ZGVyciwgInZzY3NpX3NlbmRfaXU6IERNQSB3cml0ZSBmYWlsdXJlICFc biIpOworICAgICAgICBlcnJvcl9yZXBvcnQoInZzY3NpX3NlbmRfaXU6IERNQSB3cml0ZSBmYWls dXJlICEiKTsKICAgICB9CiAKICAgICByZXEtPmNycS5zLnZhbGlkID0gMHg4MDsKQEAgLTE5Nyw3 ICsxOTgsNyBAQCBzdGF0aWMgaW50IHZzY3NpX3NlbmRfaXUoVlNDU0lTdGF0ZSAqcywgdnNjc2lf cmVxICpyZXEsCiAKICAgICByYzEgPSBzcGFwcl92aW9fc2VuZF9jcnEoJnMtPnZkZXYsIHJlcS0+ Y3JxLnJhdyk7CiAgICAgaWYgKHJjMSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInZzY3Np X3NlbmRfaXU6IEVycm9yIHNlbmRpbmcgcmVzcG9uc2VcbiIpOworICAgICAgICBlcnJvcl9yZXBv cnQoInZzY3NpX3NlbmRfaXU6IEVycm9yIHNlbmRpbmcgcmVzcG9uc2UiKTsKICAgICAgICAgcmV0 dXJuIHJjMTsKICAgICB9CiAKQEAgLTMzMCw3ICszMzEsNyBAQCBzdGF0aWMgaW50IHZzY3NpX2Zl dGNoX2Rlc2MoVlNDU0lTdGF0ZSAqcywgc3RydWN0IHZzY3NpX3JlcSAqcmVxLAogICAgICAgICBi cmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJWU0NT STogICBVbmtub3duIGZvcm1hdCAleFxuIiwgcmVxLT5kbWFfZm10KTsKKyAgICAgICAgZXJyb3Jf cmVwb3J0KCJWU0NTSTogICBVbmtub3duIGZvcm1hdCAleCIsIHJlcS0+ZG1hX2ZtdCk7CiAgICAg ICAgIHJldHVybiAtMTsKICAgICB9CiAKQEAgLTUxOCw3ICs1MTksNyBAQCBzdGF0aWMgdm9pZCB2 c2NzaV90cmFuc2Zlcl9kYXRhKFNDU0lSZXF1ZXN0ICpzcmVxLCB1aW50MzJfdCBsZW4pCiAKICAg ICB0cmFjZV9zcGFwcl92c2NzaV90cmFuc2Zlcl9kYXRhKHNyZXEtPnRhZywgbGVuLCByZXEpOwog ICAgIGlmIChyZXEgPT0gTlVMTCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlZTQ1NJOiBD YW4ndCBmaW5kIHJlcXVlc3QgZm9yIHRhZyAweCV4XG4iLCBzcmVxLT50YWcpOworICAgICAgICBl cnJvcl9yZXBvcnQoIlZTQ1NJOiBDYW4ndCBmaW5kIHJlcXVlc3QgZm9yIHRhZyAweCV4Iiwgc3Jl cS0+dGFnKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTI3LDcgKzUyOCw3IEBAIHN0 YXRpYyB2b2lkIHZzY3NpX3RyYW5zZmVyX2RhdGEoU0NTSVJlcXVlc3QgKnNyZXEsIHVpbnQzMl90 IGxlbikKICAgICAgICAgcmMgPSB2c2NzaV9zcnBfdHJhbnNmZXJfZGF0YShzLCByZXEsIHJlcS0+ d3JpdGluZywgYnVmLCBsZW4pOwogICAgIH0KICAgICBpZiAocmMgPCAwKSB7Ci0gICAgICAgIGZw cmludGYoc3RkZXJyLCAiVlNDU0k6IFJETUEgZXJyb3IgcmM9JWQhXG4iLCByYyk7CisgICAgICAg IGVycm9yX3JlcG9ydCgiVlNDU0k6IFJETUEgZXJyb3IgcmM9JWQhIiwgcmMpOwogICAgICAgICBy ZXEtPmRtYV9lcnJvciA9IHRydWU7CiAgICAgICAgIHNjc2lfcmVxX2NhbmNlbChyZXEtPnNyZXEp OwogICAgICAgICByZXR1cm47CkBAIC01NDcsNyArNTQ4LDcgQEAgc3RhdGljIHZvaWQgdnNjc2lf Y29tbWFuZF9jb21wbGV0ZShTQ1NJUmVxdWVzdCAqc3JlcSwgdWludDMyX3Qgc3RhdHVzLCBzaXpl X3QgcmUKIAogICAgIHRyYWNlX3NwYXByX3ZzY3NpX2NvbW1hbmRfY29tcGxldGUoc3JlcS0+dGFn LCBzdGF0dXMsIHJlcSk7CiAgICAgaWYgKHJlcSA9PSBOVUxMKSB7Ci0gICAgICAgIGZwcmludGYo c3RkZXJyLCAiVlNDU0k6IENhbid0IGZpbmQgcmVxdWVzdCBmb3IgdGFnIDB4JXhcbiIsIHNyZXEt PnRhZyk7CisgICAgICAgIGVycm9yX3JlcG9ydCgiVlNDU0k6IENhbid0IGZpbmQgcmVxdWVzdCBm b3IgdGFnIDB4JXgiLCBzcmVxLT50YWcpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC02 MzksNyArNjQwLDcgQEAgc3RhdGljIHZvaWQgKnZzY3NpX2xvYWRfcmVxdWVzdChRRU1VRmlsZSAq ZiwgU0NTSVJlcXVlc3QgKnNyZXEpCiAgICAgbWVtc2V0KHJlcSwgMCwgc2l6ZW9mKCpyZXEpKTsK ICAgICByYyA9IHZtc3RhdGVfbG9hZF9zdGF0ZShmLCAmdm1zdGF0ZV9zcGFwcl92c2NzaV9yZXEs IHJlcSwgMSk7CiAgICAgaWYgKHJjKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiVlNDU0k6 IGZhaWxlZCBsb2FkaW5nIHJlcXVlc3QgdGFnIyV1XG4iLCBzcmVxLT50YWcpOworICAgICAgICBl cnJvcl9yZXBvcnQoIlZTQ1NJOiBmYWlsZWQgbG9hZGluZyByZXF1ZXN0IHRhZyMldSIsIHNyZXEt PnRhZyk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBhc3NlcnQocmVxLT5hY3Rp dmUpOwpAQCAtODI3LDcgKzgyOCw3IEBAIHN0YXRpYyBpbnQgdnNjc2lfcHJvY2Vzc190c2tfbWdt dChWU0NTSVN0YXRlICpzLCB2c2NzaV9yZXEgKnJlcSkKICAgICB1aW50NjRfdCB0YWcgPSBpdS0+ c3JwLnJzcC50YWc7CiAgICAgdWludDhfdCBzb2xfbm90ID0gaXUtPnNycC5jbWQuc29sX25vdDsK IAotICAgIGZwcmludGYoc3RkZXJyLCAidnNjc2lfcHJvY2Vzc190c2tfbWdtdCAlMDJ4XG4iLAor ICAgIGVycm9yX3JlcG9ydCgidnNjc2lfcHJvY2Vzc190c2tfbWdtdCAlMDJ4IiwKICAgICAgICAg ICAgIGl1LT5zcnAudHNrX21nbXQudHNrX21nbXRfZnVuYyk7CiAKICAgICBkID0gdnNjc2lfZGV2 aWNlX2ZpbmQoJnMtPmJ1cywgYmU2NF90b19jcHUocmVxLT5pdS5zcnAudHNrX21nbXQubHVuKSwg Jmx1bik7CkBAIC05MzIsMTAgKzkzMywxMCBAQCBzdGF0aWMgaW50IHZzY3NpX2hhbmRsZV9zcnBf cmVxKFZTQ1NJU3RhdGUgKnMsIHZzY3NpX3JlcSAqcmVxKQogICAgIGNhc2UgU1JQX0NSRURfUlNQ OgogICAgIGNhc2UgU1JQX0FFUl9SRVE6CiAgICAgY2FzZSBTUlBfQUVSX1JTUDoKLSAgICAgICAg ZnByaW50ZihzdGRlcnIsICJWU0NTSTogVW5zdXBwb3J0ZWQgb3Bjb2RlICUwMnhcbiIsIG9wY29k ZSk7CisgICAgICAgIGVycm9yX3JlcG9ydCgiVlNDU0k6IFVuc3VwcG9ydGVkIG9wY29kZSAlMDJ4 Iiwgb3Bjb2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgZnByaW50 ZihzdGRlcnIsICJWU0NTSTogVW5rbm93biB0eXBlICUwMnhcbiIsIG9wY29kZSk7CisgICAgICAg IGVycm9yX3JlcG9ydCgiVlNDU0k6IFVua25vd24gdHlwZSAlMDJ4Iiwgb3Bjb2RlKTsKICAgICB9 CiAKICAgICByZXR1cm4gZG9uZTsKQEAgLTk1Myw3ICs5NTQsNyBAQCBzdGF0aWMgaW50IHZzY3Np X3NlbmRfYWRhcHRlcl9pbmZvKFZTQ1NJU3RhdGUgKnMsIHZzY3NpX3JlcSAqcmVxKQogICAgIHJj ID0gc3BhcHJfdmlvX2RtYV9yZWFkKCZzLT52ZGV2LCBiZTY0X3RvX2NwdShzaW5mby0+YnVmZmVy KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW5mbywgYmUxNl90b19jcHUoc2luZm8t PmNvbW1vbi5sZW5ndGgpKTsKICAgICBpZiAocmMpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIs ICJ2c2NzaV9zZW5kX2FkYXB0ZXJfaW5mbzogRE1BIHJlYWQgZmFpbHVyZSAhXG4iKTsKKyAgICAg ICAgZXJyb3JfcmVwb3J0KCJ2c2NzaV9zZW5kX2FkYXB0ZXJfaW5mbzogRE1BIHJlYWQgZmFpbHVy ZSAhIik7CiAgICAgfQogI2VuZGlmCiAgICAgbWVtc2V0KCZpbmZvLCAwLCBzaXplb2YoaW5mbykp OwpAQCAtOTY3LDcgKzk2OCw3IEBAIHN0YXRpYyBpbnQgdnNjc2lfc2VuZF9hZGFwdGVyX2luZm8o VlNDU0lTdGF0ZSAqcywgdnNjc2lfcmVxICpyZXEpCiAgICAgcmMgPSBzcGFwcl92aW9fZG1hX3dy aXRlKCZzLT52ZGV2LCBiZTY0X3RvX2NwdShzaW5mby0+YnVmZmVyKSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJmluZm8sIGJlMTZfdG9fY3B1KHNpbmZvLT5jb21tb24ubGVuZ3RoKSk7 CiAgICAgaWYgKHJjKSAgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInZzY3NpX3NlbmRfYWRh cHRlcl9pbmZvOiBETUEgd3JpdGUgZmFpbHVyZSAhXG4iKTsKKyAgICAgICAgZXJyb3JfcmVwb3J0 KCJ2c2NzaV9zZW5kX2FkYXB0ZXJfaW5mbzogRE1BIHdyaXRlIGZhaWx1cmUgISIpOwogICAgIH0K IAogICAgIHNpbmZvLT5jb21tb24uc3RhdHVzID0gcmMgPyBjcHVfdG9fYmUzMigxKSA6IDA7CkBA IC05ODcsNyArOTg4LDcgQEAgc3RhdGljIGludCB2c2NzaV9zZW5kX2NhcGFiaWxpdGllcyhWU0NT SVN0YXRlICpzLCB2c2NzaV9yZXEgKnJlcSkKICAgICByZXFfbGVuID0gbGVuID0gYmUxNl90b19j cHUodmNhcC0+Y29tbW9uLmxlbmd0aCk7CiAgICAgYnVmZmVyID0gYmU2NF90b19jcHUodmNhcC0+ YnVmZmVyKTsKICAgICBpZiAobGVuID4gc2l6ZW9mKGNhcCkpIHsKLSAgICAgICAgZnByaW50Zihz dGRlcnIsICJ2c2NzaV9zZW5kX2NhcGFiaWxpdGllczogY2FwYWJpbGl0aWVzIHNpemUgbWlzbWF0 Y2ggIVxuIik7CisgICAgICAgIGVycm9yX3JlcG9ydCgidnNjc2lfc2VuZF9jYXBhYmlsaXRpZXM6 IGNhcGFiaWxpdGllcyBzaXplIG1pc21hdGNoICEiKTsKIAogICAgICAgICAvKgogICAgICAgICAg KiBKdXN0IHJlYWQgYW5kIHBvcHVsYXRlIHRoZSBzdHJ1Y3R1cmUgdGhhdCBpcyBrbm93bi4KQEAg LTk5Nyw3ICs5OTgsNyBAQCBzdGF0aWMgaW50IHZzY3NpX3NlbmRfY2FwYWJpbGl0aWVzKFZTQ1NJ U3RhdGUgKnMsIHZzY3NpX3JlcSAqcmVxKQogICAgIH0KICAgICByYyA9IHNwYXByX3Zpb19kbWFf cmVhZCgmcy0+dmRldiwgYnVmZmVyLCAmY2FwLCBsZW4pOwogICAgIGlmIChyYykgIHsKLSAgICAg ICAgZnByaW50ZihzdGRlcnIsICJ2c2NzaV9zZW5kX2NhcGFiaWxpdGllczogRE1BIHJlYWQgZmFp bHVyZSAhXG4iKTsKKyAgICAgICAgZXJyb3JfcmVwb3J0KCJ2c2NzaV9zZW5kX2NhcGFiaWxpdGll czogRE1BIHJlYWQgZmFpbHVyZSAhIik7CiAgICAgfQogCiAgICAgLyoKQEAgLTEwMTMsNyArMTAx NCw3IEBAIHN0YXRpYyBpbnQgdnNjc2lfc2VuZF9jYXBhYmlsaXRpZXMoVlNDU0lTdGF0ZSAqcywg dnNjc2lfcmVxICpyZXEpCiAKICAgICByYyA9IHNwYXByX3Zpb19kbWFfd3JpdGUoJnMtPnZkZXYs IGJ1ZmZlciwgJmNhcCwgbGVuKTsKICAgICBpZiAocmMpICB7Ci0gICAgICAgIGZwcmludGYoc3Rk ZXJyLCAidnNjc2lfc2VuZF9jYXBhYmlsaXRpZXM6IERNQSB3cml0ZSBmYWlsdXJlICFcbiIpOwor ICAgICAgICBlcnJvcl9yZXBvcnQoInZzY3NpX3NlbmRfY2FwYWJpbGl0aWVzOiBETUEgd3JpdGUg ZmFpbHVyZSAhIik7CiAgICAgfQogICAgIGlmIChyZXFfbGVuID4gbGVuKSB7CiAgICAgICAgIC8q CkBAIC0xMDM0LDExICsxMDM1LDExIEBAIHN0YXRpYyBpbnQgdnNjc2lfaGFuZGxlX21hZF9yZXEo VlNDU0lTdGF0ZSAqcywgdnNjc2lfcmVxICpyZXEpCiAKICAgICBzd2l0Y2ggKGJlMzJfdG9fY3B1 KG1hZC0+ZW1wdHlfaXUuY29tbW9uLnR5cGUpKSB7CiAgICAgY2FzZSBWSU9TUlBfRU1QVFlfSVVf VFlQRToKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbnN1cHBvcnRlZCBFTVBUWSBNQUQgSVVc biIpOworICAgICAgICBlcnJvcl9yZXBvcnQoIlVuc3VwcG9ydGVkIEVNUFRZIE1BRCBJVSIpOwog ICAgICAgICByZXRsZW4gPSBzaXplb2YobWFkLT5lbXB0eV9pdSk7CiAgICAgICAgIGJyZWFrOwog ICAgIGNhc2UgVklPU1JQX0VSUk9SX0xPR19UWVBFOgotICAgICAgICBmcHJpbnRmKHN0ZGVyciwg IlVuc3VwcG9ydGVkIEVSUk9SIExPRyBNQUQgSVVcbiIpOworICAgICAgICBlcnJvcl9yZXBvcnQo IlVuc3VwcG9ydGVkIEVSUk9SIExPRyBNQUQgSVUiKTsKICAgICAgICAgcmV0bGVuID0gc2l6ZW9m KG1hZC0+ZXJyb3JfbG9nKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBWSU9TUlBfQURBUFRF Ul9JTkZPX1RZUEU6CkBAIC0xMDUzLDcgKzEwNTQsNyBAQCBzdGF0aWMgaW50IHZzY3NpX2hhbmRs ZV9tYWRfcmVxKFZTQ1NJU3RhdGUgKnMsIHZzY3NpX3JlcSAqcmVxKQogICAgICAgICByZXF1ZXN0 X2hhbmRsZWQgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBm cHJpbnRmKHN0ZGVyciwgIlZTQ1NJOiBVbmtub3duIE1BRCB0eXBlICUwMnhcbiIsCisgICAgICAg IGVycm9yX3JlcG9ydCgiVlNDU0k6IFVua25vd24gTUFEIHR5cGUgJTAyeCIsCiAgICAgICAgICAg ICAgICAgYmUzMl90b19jcHUobWFkLT5lbXB0eV9pdS5jb21tb24udHlwZSkpOwogICAgICAgICAv KgogICAgICAgICAgKiBQQVBSKyBzYXlzIHRoYXQgIlRoZSBsZW5ndGggZmllbGQgaXMgc2V0IHRv IHRoZSBsZW5ndGgKQEAgLTEwNzgsNyArMTA3OSw3IEBAIHN0YXRpYyB2b2lkIHZzY3NpX2dvdF9w YXlsb2FkKFZTQ1NJU3RhdGUgKnMsIHZzY3NpX2NycSAqY3JxKQogCiAgICAgcmVxID0gdnNjc2lf Z2V0X3JlcShzKTsKICAgICBpZiAocmVxID09IE5VTEwpIHsKLSAgICAgICAgZnByaW50ZihzdGRl cnIsICJWU0NTSTogRmFpbGVkIHRvIGdldCBhIHJlcXVlc3QgIVxuIik7CisgICAgICAgIGVycm9y X3JlcG9ydCgiVlNDU0k6IEZhaWxlZCB0byBnZXQgYSByZXF1ZXN0ICEiKTsKICAgICAgICAgcmV0 dXJuOwogICAgIH0KIApAQCAtMTA4OCw3ICsxMDg5LDcgQEAgc3RhdGljIHZvaWQgdnNjc2lfZ290 X3BheWxvYWQoVlNDU0lTdGF0ZSAqcywgdnNjc2lfY3JxICpjcnEpCiAgICAgICogb2YgdGhlIHN0 cnVjdHVyZS4KICAgICAgKi8KICAgICBpZiAoY3JxLT5zLklVX2xlbmd0aCA+IHNpemVvZih1bmlv biB2aW9zcnBfaXUpKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiVlNDU0k6IFNSUCBJVSB0 b28gbG9uZyAoJWQgYnl0ZXMpICFcbiIsCisgICAgICAgIGVycm9yX3JlcG9ydCgiVlNDU0k6IFNS UCBJVSB0b28gbG9uZyAoJWQgYnl0ZXMpICEiLAogICAgICAgICAgICAgICAgIGNycS0+cy5JVV9s ZW5ndGgpOwogICAgICAgICB2c2NzaV9wdXRfcmVxKHJlcSk7CiAgICAgICAgIHJldHVybjsKQEAg LTEwOTcsNyArMTA5OCw3IEBAIHN0YXRpYyB2b2lkIHZzY3NpX2dvdF9wYXlsb2FkKFZTQ1NJU3Rh dGUgKnMsIHZzY3NpX2NycSAqY3JxKQogICAgIC8qIFhYWCBIYW5kbGUgZmFpbHVyZSBkaWZmZXJl bnRseSA/ICovCiAgICAgaWYgKHNwYXByX3Zpb19kbWFfcmVhZCgmcy0+dmRldiwgY3JxLT5zLklV X2RhdGFfcHRyLCAmcmVxLT5pdSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNycS0+cy5J VV9sZW5ndGgpKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAidnNjc2lfZ290X3BheWxvYWQ6 IERNQSByZWFkIGZhaWx1cmUgIVxuIik7CisgICAgICAgIGVycm9yX3JlcG9ydCgidnNjc2lfZ290 X3BheWxvYWQ6IERNQSByZWFkIGZhaWx1cmUgISIpOwogICAgICAgICB2c2NzaV9wdXRfcmVxKHJl cSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMTU4LDE2ICsxMTU5LDE2IEBAIHN0YXRp YyBpbnQgdnNjc2lfZG9fY3JxKHN0cnVjdCBWSU9zUEFQUkRldmljZSAqZGV2LCB1aW50OF90ICpj cnFfZGF0YSkKICAgICAgICAgY2FzZSBWSU9TUlBfQUlYX0ZPUk1BVDoKICAgICAgICAgY2FzZSBW SU9TUlBfTElOVVhfRk9STUFUOgogICAgICAgICBjYXNlIFZJT1NSUF9JTkxJTkVfRk9STUFUOgot ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJ2c2NzaV9kb19zcnE6IFVuc3VwcG9ydGVkIHBh eWxvYWQgZm9ybWF0ICUwMnhcbiIsCisgICAgICAgICAgICBlcnJvcl9yZXBvcnQoInZzY3NpX2Rv X3NycTogVW5zdXBwb3J0ZWQgcGF5bG9hZCBmb3JtYXQgJTAyeCIsCiAgICAgICAgICAgICAgICAg ICAgIGNycS5zLmZvcm1hdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoK LSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAidnNjc2lfZG9fc3JxOiBVbmtub3duIHBheWxv YWQgZm9ybWF0ICUwMnhcbiIsCisgICAgICAgICAgICBlcnJvcl9yZXBvcnQoInZzY3NpX2RvX3Ny cTogVW5rbm93biBwYXlsb2FkIGZvcm1hdCAlMDJ4IiwKICAgICAgICAgICAgICAgICAgICAgY3Jx LnMuZm9ybWF0KTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAg ICAgICBmcHJpbnRmKHN0ZGVyciwgInZzY3NpX2RvX2NycTogdW5rbm93biBDUlEgJTAyeCAlMDJ4 IC4uLlxuIiwKKyAgICAgICAgZXJyb3JfcmVwb3J0KCJ2c2NzaV9kb19jcnE6IHVua25vd24gQ1JR ICUwMnggJTAyeCAuLi4iLAogICAgICAgICAgICAgICAgIGNycS5yYXdbMF0sIGNycS5yYXdbMV0p OwogICAgIH07CiAKZGlmZiAtLWdpdCBhL2h3L3Njc2kvdmlydGlvLXNjc2ktZGF0YXBsYW5lLmMg Yi9ody9zY3NpL3ZpcnRpby1zY3NpLWRhdGFwbGFuZS5jCmluZGV4IGFkZDRiM2Y0YTQuLmUwNDcz NjEzMTAgMTAwNjQ0Ci0tLSBhL2h3L3Njc2kvdmlydGlvLXNjc2ktZGF0YXBsYW5lLmMKKysrIGIv aHcvc2NzaS92aXJ0aW8tc2NzaS1kYXRhcGxhbmUuYwpAQCAtOTcsNyArOTcsNyBAQCBzdGF0aWMg aW50IHZpcnRpb19zY3NpX3ZyaW5nX2luaXQoVmlydElPU0NTSSAqcywgVmlydFF1ZXVlICp2cSwg aW50IG4sCiAgICAgLyogU2V0IHVwIHZpcnRxdWV1ZSBub3RpZnkgKi8KICAgICByYyA9IHZpcnRp b19idXNfc2V0X2hvc3Rfbm90aWZpZXIoVklSVElPX0JVUyhxYnVzKSwgbiwgdHJ1ZSk7CiAgICAg aWYgKHJjICE9IDApIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJ2aXJ0aW8tc2NzaTogRmFp bGVkIHRvIHNldCBob3N0IG5vdGlmaWVyICglZClcbiIsCisgICAgICAgIGVycm9yX3JlcG9ydCgi dmlydGlvLXNjc2k6IEZhaWxlZCB0byBzZXQgaG9zdCBub3RpZmllciAoJWQpIiwKICAgICAgICAg ICAgICAgICByYyk7CiAgICAgICAgIHMtPmRhdGFwbGFuZV9mZW5jZWQgPSB0cnVlOwogICAgICAg ICByZXR1cm4gcmM7CkBAIC0xNDEsOCArMTQxLDggQEAgaW50IHZpcnRpb19zY3NpX2RhdGFwbGFu ZV9zdGFydChWaXJ0SU9EZXZpY2UgKnZkZXYpCiAgICAgLyogU2V0IHVwIGd1ZXN0IG5vdGlmaWVy IChpcnEpICovCiAgICAgcmMgPSBrLT5zZXRfZ3Vlc3Rfbm90aWZpZXJzKHFidXMtPnBhcmVudCwg dnMtPmNvbmYubnVtX3F1ZXVlcyArIDIsIHRydWUpOwogICAgIGlmIChyYyAhPSAwKSB7Ci0gICAg ICAgIGZwcmludGYoc3RkZXJyLCAidmlydGlvLXNjc2k6IEZhaWxlZCB0byBzZXQgZ3Vlc3Qgbm90 aWZpZXJzICglZCksICIKLSAgICAgICAgICAgICAgICAiZW5zdXJlIC1lbmFibGUta3ZtIGlzIHNl dFxuIiwgcmMpOworICAgICAgICBlcnJvcl9yZXBvcnQoInZpcnRpby1zY3NpOiBGYWlsZWQgdG8g c2V0IGd1ZXN0IG5vdGlmaWVycyAoJWQpLCAiCisgICAgICAgICAgICAgICAgImVuc3VyZSAtZW5h YmxlLWt2bSBpcyBzZXQiLCByYyk7CiAgICAgICAgIGdvdG8gZmFpbF9ndWVzdF9ub3RpZmllcnM7 CiAgICAgfQogCmRpZmYgLS1naXQgYS9ody9zZC9wbDE4MS5jIGIvaHcvc2QvcGwxODEuYwppbmRl eCA1NWM4MDk4ZWNkLi4yYjg3OGEwYzVlIDEwMDY0NAotLS0gYS9ody9zZC9wbDE4MS5jCisrKyBi L2h3L3NkL3BsMTgxLmMKQEAgLTgsNiArOCw3IEBACiAgKi8KIAogI2luY2x1ZGUgInFlbXUvb3Nk ZXAuaCIKKyNpbmNsdWRlICJxZW11L2Vycm9yLXJlcG9ydC5oIgogI2luY2x1ZGUgInN5c2VtdS9i bG9jay1iYWNrZW5kLmgiCiAjaW5jbHVkZSAic3lzZW11L2Jsb2NrZGV2LmgiCiAjaW5jbHVkZSAi aHcvc3lzYnVzLmgiCkBAIC0xNDYsNyArMTQ3LDcgQEAgc3RhdGljIHZvaWQgcGwxODFfZmlmb19w dXNoKFBMMTgxU3RhdGUgKnMsIHVpbnQzMl90IHZhbHVlKQogICAgIGludCBuOwogCiAgICAgaWYg KHMtPmZpZm9fbGVuID09IFBMMTgxX0ZJRk9fTEVOKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJy LCAicGwxODE6IEZJRk8gb3ZlcmZsb3dcbiIpOworICAgICAgICBlcnJvcl9yZXBvcnQoInBsMTgx OiBGSUZPIG92ZXJmbG93Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbiA9IChzLT5m aWZvX3BvcyArIHMtPmZpZm9fbGVuKSAmIChQTDE4MV9GSUZPX0xFTiAtIDEpOwpAQCAtMTYwLDcg KzE2MSw3IEBAIHN0YXRpYyB1aW50MzJfdCBwbDE4MV9maWZvX3BvcChQTDE4MVN0YXRlICpzKQog ICAgIHVpbnQzMl90IHZhbHVlOwogCiAgICAgaWYgKHMtPmZpZm9fbGVuID09IDApIHsKLSAgICAg ICAgZnByaW50ZihzdGRlcnIsICJwbDE4MTogRklGTyB1bmRlcmZsb3dcbiIpOworICAgICAgICBl cnJvcl9yZXBvcnQoInBsMTgxOiBGSUZPIHVuZGVyZmxvdyIpOwogICAgICAgICByZXR1cm4gMDsK ICAgICB9CiAgICAgdmFsdWUgPSBzLT5maWZvW3MtPmZpZm9fcG9zXTsKZGlmZiAtLWdpdCBhL2h3 L3NkL3NkLmMgYi9ody9zZC9zZC5jCmluZGV4IGJhNDdiZmY0ZGIuLmU0NjdkNzRmYzggMTAwNjQ0 Ci0tLSBhL2h3L3NkL3NkLmMKKysrIGIvaHcvc2Qvc2QuYwpAQCAtNzAwLDcgKzcwMCw3IEBAIHN0 YXRpYyB2b2lkIHNkX2xvY2tfY29tbWFuZChTRFN0YXRlICpzZCkKICAgICAgICAgc2QtPmNhcmRf c3RhdHVzICY9IH5DQVJEX0lTX0xPQ0tFRDsKICAgICAgICAgc2QtPnB3ZF9sZW4gPSAwOwogICAg ICAgICAvKiBFcmFzaW5nIHRoZSBlbnRpcmUgY2FyZCBoZXJlISAqLwotICAgICAgICBmcHJpbnRm KHN0ZGVyciwgIlNEOiBDYXJkIGZvcmNlLWVyYXNlZCBieSBDTUQ0MlxuIik7CisgICAgICAgIGVy cm9yX3JlcG9ydCgiU0Q6IENhcmQgZm9yY2UtZXJhc2VkIGJ5IENNRDQyIik7CiAgICAgICAgIHJl dHVybjsKICAgICB9CiAKQEAgLTEyODIsNyArMTI4Miw3IEBAIHN0YXRpYyBzZF9yc3BfdHlwZV90 IHNkX25vcm1hbF9jb21tYW5kKFNEU3RhdGUgKnNkLAogICAgICAgICByZXR1cm4gc2RfcjE7CiAK ICAgICBjYXNlIDU2OgkvKiBDTUQ1NjogIEdFTl9DTUQgKi8KLSAgICAgICAgZnByaW50ZihzdGRl cnIsICJTRDogR0VOX0NNRCAweCUwOHhcbiIsIHJlcS5hcmcpOworICAgICAgICBlcnJvcl9yZXBv cnQoIlNEOiBHRU5fQ01EIDB4JTA4eCIsIHJlcS5hcmcpOwogCiAgICAgICAgIHN3aXRjaCAoc2Qt PnN0YXRlKSB7CiAgICAgICAgIGNhc2Ugc2RfdHJhbnNmZXJfc3RhdGU6CkBAIC0xNTY1LDEwICsx NTY1LDEwIEBAIHNlbmRfcmVzcG9uc2U6CiAgICAgICAgIGludCBpOwogICAgICAgICBEUFJJTlRG KCJSZXNwb25zZToiKTsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IHJzcGxlbjsgaSsrKQotICAg ICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgJTAyeCIsIHJlc3BvbnNlW2ldKTsKLSAgICAgICAg ZnByaW50ZihzdGRlcnIsICIgc3RhdGUgJWRcbiIsIHNkLT5zdGF0ZSk7CisgICAgICAgICAgICBl cnJvcl9yZXBvcnQoIiAlMDJ4IiwgcmVzcG9uc2VbaV0pOworICAgICAgICBlcnJvcl9yZXBvcnQo IiBzdGF0ZSAlZCIsIHNkLT5zdGF0ZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgRFBSSU5URigi Tm8gcmVzcG9uc2UgJWRcbiIsIHNkLT5zdGF0ZSk7CisgICAgICAgIERQUklOVEYoIk5vIHJlc3Bv bnNlICVkIiwgc2QtPnN0YXRlKTsKICAgICB9CiAjZW5kaWYKIApAQCAtMTU4MCwxNCArMTU4MCwx NCBAQCBzdGF0aWMgdm9pZCBzZF9ibGtfcmVhZChTRFN0YXRlICpzZCwgdWludDY0X3QgYWRkciwg dWludDMyX3QgbGVuKQogICAgIERQUklOVEYoInNkX2Jsa19yZWFkOiBhZGRyID0gMHglMDhsbHgs IGxlbiA9ICVkXG4iLAogICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgYWRkciwgbGVu KTsKICAgICBpZiAoIXNkLT5ibGsgfHwgYmxrX3ByZWFkKHNkLT5ibGssIGFkZHIsIHNkLT5kYXRh LCBsZW4pIDwgMCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInNkX2Jsa19yZWFkOiByZWFk IGVycm9yIG9uIGhvc3Qgc2lkZVxuIik7CisgICAgICAgIGVycm9yX3JlcG9ydCgic2RfYmxrX3Jl YWQ6IHJlYWQgZXJyb3Igb24gaG9zdCBzaWRlIik7CiAgICAgfQogfQogCiBzdGF0aWMgdm9pZCBz ZF9ibGtfd3JpdGUoU0RTdGF0ZSAqc2QsIHVpbnQ2NF90IGFkZHIsIHVpbnQzMl90IGxlbikKIHsK ICAgICBpZiAoIXNkLT5ibGsgfHwgYmxrX3B3cml0ZShzZC0+YmxrLCBhZGRyLCBzZC0+ZGF0YSwg bGVuLCAwKSA8IDApIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJzZF9ibGtfd3JpdGU6IHdy aXRlIGVycm9yIG9uIGhvc3Qgc2lkZVxuIik7CisgICAgICAgIGVycm9yX3JlcG9ydCgic2RfYmxr X3dyaXRlOiB3cml0ZSBlcnJvciBvbiBob3N0IHNpZGUiKTsKICAgICB9CiB9CiAKZGlmZiAtLWdp dCBhL2h3L3NoNC9yMmQuYyBiL2h3L3NoNC9yMmQuYwppbmRleCAxNmI5ZWQyZGIyLi5hMDEwZjU1 OWUyIDEwMDY0NAotLS0gYS9ody9zaDQvcjJkLmMKKysrIGIvaHcvc2g0L3IyZC5jCkBAIC0yNCw2 ICsyNCw3IEBACiAgKi8KIAogI2luY2x1ZGUgInFlbXUvb3NkZXAuaCIKKyNpbmNsdWRlICJxZW11 L2Vycm9yLXJlcG9ydC5oIgogI2luY2x1ZGUgInFhcGkvZXJyb3IuaCIKICNpbmNsdWRlICJxZW11 LWNvbW1vbi5oIgogI2luY2x1ZGUgImNwdS5oIgpAQCAtMzE5LDggKzMyMCw4IEBAIHN0YXRpYyB2 b2lkIHIyZF9pbml0KE1hY2hpbmVTdGF0ZSAqbWFjaGluZSkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFNEUkFNX0JBU0UgKyBMSU5VWF9MT0FEX09GRlNFVCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOSVRSRF9MT0FEX09GRlNF VCAtIExJTlVYX0xPQURfT0ZGU0VUKTsKICAgICAgICAgaWYgKGtlcm5lbF9zaXplIDwgMCkgewot ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAicWVtdTogY291bGQgbm90IGxvYWQga2VybmVsICcl cydcbiIsIGtlcm5lbF9maWxlbmFtZSk7Ci0gICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgICAg IGVycm9yX3JlcG9ydCgicWVtdTogY291bGQgbm90IGxvYWQga2VybmVsICclcyciLCBrZXJuZWxf ZmlsZW5hbWUpOworICAgICAgICAgICAgZXhpdCgxKTsKICAgICAgICAgfQogCiAgICAgICAgIC8q IGluaXRpYWxpemF0aW9uIHdoaWNoIHNob3VsZCBiZSBkb25lIGJ5IGZpcm13YXJlICovCkBAIC0z MzksOCArMzQwLDggQEAgc3RhdGljIHZvaWQgcjJkX2luaXQoTWFjaGluZVN0YXRlICptYWNoaW5l KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RSQU1fU0laRSAt IElOSVRSRF9MT0FEX09GRlNFVCk7CiAKICAgICAgICAgaWYgKGluaXRyZF9zaXplIDwgMCkgewot ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAicWVtdTogY291bGQgbm90IGxvYWQgaW5pdHJkICcl cydcbiIsIGluaXRyZF9maWxlbmFtZSk7Ci0gICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgICAg IGVycm9yX3JlcG9ydCgicWVtdTogY291bGQgbm90IGxvYWQgaW5pdHJkICclcyciLCBpbml0cmRf ZmlsZW5hbWUpOworICAgICAgICAgICAgZXhpdCgxKTsKICAgICAgICAgfQogCiAgICAgICAgIC8q IGluaXRpYWxpemF0aW9uIHdoaWNoIHNob3VsZCBiZSBkb25lIGJ5IGZpcm13YXJlICovCmRpZmYg LS1naXQgYS9ody9zaDQvc2g3NzUwLmMgYi9ody9zaDQvc2g3NzUwLmMKaW5kZXggMTY2ZTRiZDk0 Ny4uNjRmZmM0YzFkMiAxMDA2NDQKLS0tIGEvaHcvc2g0L3NoNzc1MC5jCisrKyBiL2h3L3NoNC9z aDc3NTAuYwpAQCAtMjMsNiArMjMsNyBAQAogICogVEhFIFNPRlRXQVJFLgogICovCiAjaW5jbHVk ZSAicWVtdS9vc2RlcC5oIgorI2luY2x1ZGUgInFlbXUvZXJyb3ItcmVwb3J0LmgiCiAjaW5jbHVk ZSAiaHcvaHcuaCIKICNpbmNsdWRlICJody9zaDQvc2guaCIKICNpbmNsdWRlICJzeXNlbXUvc3lz ZW11LmgiCkBAIC0xNDcsOSArMTQ4LDkgQEAgc3RhdGljIHZvaWQgcG9ydGFfY2hhbmdlZChTSDc3 NTBTdGF0ZSAqIHMsIHVpbnQxNl90IHByZXYpCiAgICAgaW50IGksIHIgPSAwOwogCiAjaWYgMAot ICAgIGZwcmludGYoc3RkZXJyLCAicG9ydGEgY2hhbmdlZCBmcm9tIDB4JTA0eCB0byAweCUwNHhc biIsCisgICAgZXJyb3JfcmVwb3J0KCJwb3J0YSBjaGFuZ2VkIGZyb20gMHglMDR4IHRvIDB4JTA0 eCIsCiAJICAgIHByZXYsIHBvcnRhX2xpbmVzKHMpKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwgInBk dHJhPTB4JTA0eCwgcGN0cmE9MHglMDh4XG4iLCBzLT5wZHRyYSwgcy0+cGN0cmEpOworICAgIGVy cm9yX3JlcG9ydCgicGR0cmE9MHglMDR4LCBwY3RyYT0weCUwOHgiLCBzLT5wZHRyYSwgcy0+cGN0 cmEpOwogI2VuZGlmCiAgICAgY3VycmVudGEgPSBwb3J0YV9saW5lcyhzKTsKICAgICBpZiAoY3Vy cmVudGEgPT0gcHJldikKQEAgLTIwMCwxMyArMjAxLDEzIEBAIHN0YXRpYyB2b2lkIHBvcnRiX2No YW5nZWQoU0g3NzUwU3RhdGUgKiBzLCB1aW50MTZfdCBwcmV2KQogCiBzdGF0aWMgdm9pZCBlcnJv cl9hY2Nlc3MoY29uc3QgY2hhciAqa2luZCwgaHdhZGRyIGFkZHIpCiB7Ci0gICAgZnByaW50Zihz dGRlcnIsICIlcyB0byAlcyAoMHgiIFRBUkdFVF9GTVRfcGx4ICIpIG5vdCBzdXBwb3J0ZWRcbiIs CisgICAgZXJyb3JfcmVwb3J0KCIlcyB0byAlcyAoMHgiIFRBUkdFVF9GTVRfcGx4ICIpIG5vdCBz dXBwb3J0ZWQiLAogCSAgICBraW5kLCByZWduYW1lKGFkZHIpLCBhZGRyKTsKIH0KIAogc3RhdGlj IHZvaWQgaWdub3JlX2FjY2Vzcyhjb25zdCBjaGFyICpraW5kLCBod2FkZHIgYWRkcikKIHsKLSAg ICBmcHJpbnRmKHN0ZGVyciwgIiVzIHRvICVzICgweCIgVEFSR0VUX0ZNVF9wbHggIikgaWdub3Jl ZFxuIiwKKyAgICBlcnJvcl9yZXBvcnQoIiVzIHRvICVzICgweCIgVEFSR0VUX0ZNVF9wbHggIikg aWdub3JlZCIsCiAJICAgIGtpbmQsIHJlZ25hbWUoYWRkciksIGFkZHIpOwogfQogCkBAIC0zMjYs NDcgKzMyNyw0OCBAQCBzdGF0aWMgdm9pZCBzaDc3NTBfbWVtX3dyaXRldyh2b2lkICpvcGFxdWUs IGh3YWRkciBhZGRyLAogICAgIHVpbnQxNl90IHRlbXA7CiAKICAgICBzd2l0Y2ggKGFkZHIpIHsK LQkvKiBTRFJBTSBjb250cm9sbGVyICovCisgICAgLyogU0RSQU0gY29udHJvbGxlciAqLwogICAg IGNhc2UgU0g3NzUwX0JDUjJfQTc6CiAgICAgICAgIHMtPmJjcjIgPSBtZW1fdmFsdWU7CiAgICAg ICAgIHJldHVybjsKICAgICBjYXNlIFNINzc1MF9CQ1IzX0E3OgotCWlmKCFoYXNfYmNyM19hbmRf YmNyNChzKSkKLQkgICAgZXJyb3JfYWNjZXNzKCJ3b3JkIHdyaXRlIiwgYWRkcik7Ci0Jcy0+YmNy MyA9IG1lbV92YWx1ZTsKLQlyZXR1cm47CisgICAgICAgIGlmICghaGFzX2JjcjNfYW5kX2JjcjQo cykpIHsKKyAgICAgICAgICAgIGVycm9yX2FjY2Vzcygid29yZCB3cml0ZSIsIGFkZHIpOworICAg ICAgICB9CisgICAgICAgIHMtPmJjcjMgPSBtZW1fdmFsdWU7CisgICAgICAgIHJldHVybjsKICAg ICBjYXNlIFNINzc1MF9QQ1JfQTc6Ci0Jcy0+cGNyID0gbWVtX3ZhbHVlOwotCXJldHVybjsKKyAg ICAgICAgcy0+cGNyID0gbWVtX3ZhbHVlOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBTSDc3 NTBfUlRDTlRfQTc6CiAgICAgY2FzZSBTSDc3NTBfUlRDT1JfQTc6CiAgICAgY2FzZSBTSDc3NTBf UlRDU1JfQTc6Ci0JaWdub3JlX2FjY2Vzcygid29yZCB3cml0ZSIsIGFkZHIpOwotCXJldHVybjsK LQkvKiBJTyBwb3J0cyAqLworICAgICAgICBpZ25vcmVfYWNjZXNzKCJ3b3JkIHdyaXRlIiwgYWRk cik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgLyogSU8gcG9ydHMgKi8KICAgICBjYXNlIFNI Nzc1MF9QRFRSQV9BNzoKLQl0ZW1wID0gcG9ydGFfbGluZXMocyk7Ci0Jcy0+cGR0cmEgPSBtZW1f dmFsdWU7Ci0JcG9ydGFfY2hhbmdlZChzLCB0ZW1wKTsKLQlyZXR1cm47CisgICAgICAgIHRlbXAg PSBwb3J0YV9saW5lcyhzKTsKKyAgICAgICAgcy0+cGR0cmEgPSBtZW1fdmFsdWU7CisgICAgICAg IHBvcnRhX2NoYW5nZWQocywgdGVtcCk7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIFNINzc1 MF9QRFRSQl9BNzoKLQl0ZW1wID0gcG9ydGJfbGluZXMocyk7Ci0Jcy0+cGR0cmIgPSBtZW1fdmFs dWU7Ci0JcG9ydGJfY2hhbmdlZChzLCB0ZW1wKTsKLQlyZXR1cm47CisgICAgICAgIHRlbXAgPSBw b3J0Yl9saW5lcyhzKTsKKyAgICAgICAgcy0+cGR0cmIgPSBtZW1fdmFsdWU7CisgICAgICAgIHBv cnRiX2NoYW5nZWQocywgdGVtcCk7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIFNINzc1MF9S RkNSX0E3OgotCWZwcmludGYoc3RkZXJyLCAiV3JpdGUgYWNjZXNzIHRvIHJlZnJlc2ggY291bnQg cmVnaXN0ZXJcbiIpOwotCXMtPnJmY3IgPSBtZW1fdmFsdWU7Ci0JcmV0dXJuOworICAgICAgICBl cnJvcl9yZXBvcnQoIldyaXRlIGFjY2VzcyB0byByZWZyZXNoIGNvdW50IHJlZ2lzdGVyIik7Cisg ICAgICAgIHMtPnJmY3IgPSBtZW1fdmFsdWU7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIFNI Nzc1MF9HUElPSUNfQTc6Ci0Jcy0+Z3Bpb2ljID0gbWVtX3ZhbHVlOwotCWlmIChtZW1fdmFsdWUg IT0gMCkgewotCSAgICBmcHJpbnRmKHN0ZGVyciwgIkkvTyBpbnRlcnJ1cHRzIG5vdCBpbXBsZW1l bnRlZFxuIik7CisgICAgICAgIHMtPmdwaW9pYyA9IG1lbV92YWx1ZTsKKyAgICAgICAgaWYgKG1l bV92YWx1ZSAhPSAwKSB7CisgICAgICAgICAgICBlcnJvcl9yZXBvcnQoIkkvTyBpbnRlcnJ1cHRz IG5vdCBpbXBsZW1lbnRlZCIpOwogICAgICAgICAgICAgYWJvcnQoKTsKLQl9Ci0JcmV0dXJuOwor ICAgICAgICB9CisgICAgICAgIHJldHVybjsKICAgICBkZWZhdWx0OgotCWVycm9yX2FjY2Vzcygi d29yZCB3cml0ZSIsIGFkZHIpOworICAgICAgICBlcnJvcl9hY2Nlc3MoIndvcmQgd3JpdGUiLCBh ZGRyKTsKICAgICAgICAgYWJvcnQoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9ody9zcGFyYy9s ZW9uMy5jIGIvaHcvc3BhcmMvbGVvbjMuYwppbmRleCBlYzI4MTZiZjk0Li5kNDM0ZWRlYzkyIDEw MDY0NAotLS0gYS9ody9zcGFyYy9sZW9uMy5jCisrKyBiL2h3L3NwYXJjL2xlb24zLmMKQEAgLTIy LDYgKzIyLDcgQEAKICAqIFRIRSBTT0ZUV0FSRS4KICAqLwogI2luY2x1ZGUgInFlbXUvb3NkZXAu aCIKKyNpbmNsdWRlICJxZW11L2Vycm9yLXJlcG9ydC5oIgogI2luY2x1ZGUgInFhcGkvZXJyb3Iu aCIKICNpbmNsdWRlICJxZW11LWNvbW1vbi5oIgogI2luY2x1ZGUgImNwdS5oIgpAQCAtMTcyLDcg KzE3Myw3IEBAIHN0YXRpYyB2b2lkIGxlb24zX2dlbmVyaWNfaHdfaW5pdChNYWNoaW5lU3RhdGUg Km1hY2hpbmUpCiAgICAgfQogCiAgICAgaWYgKGJpb3Nfc2l6ZSA+IHByb21fc2l6ZSkgewotICAg ICAgICBmcHJpbnRmKHN0ZGVyciwgInFlbXU6IGNvdWxkIG5vdCBsb2FkIHByb20gJyVzJzogZmls ZSB0b28gYmlnXG4iLAorICAgICAgICBlcnJvcl9yZXBvcnQoInFlbXU6IGNvdWxkIG5vdCBsb2Fk IHByb20gJyVzJzogZmlsZSB0b28gYmlnIiwKICAgICAgICAgICAgICAgICBmaWxlbmFtZSk7CiAg ICAgICAgIGV4aXQoMSk7CiAgICAgfQpAQCAtMTgwLDExICsxODEsMTEgQEAgc3RhdGljIHZvaWQg bGVvbjNfZ2VuZXJpY19od19pbml0KE1hY2hpbmVTdGF0ZSAqbWFjaGluZSkKICAgICBpZiAoYmlv c19zaXplID4gMCkgewogICAgICAgICByZXQgPSBsb2FkX2ltYWdlX3RhcmdwaHlzKGZpbGVuYW1l LCAweDAwMDAwMDAwLCBiaW9zX3NpemUpOwogICAgICAgICBpZiAocmV0IDwgMCB8fCByZXQgPiBw cm9tX3NpemUpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAicWVtdTogY291bGQgbm90 IGxvYWQgcHJvbSAnJXMnXG4iLCBmaWxlbmFtZSk7CisgICAgICAgICAgICBlcnJvcl9yZXBvcnQo InFlbXU6IGNvdWxkIG5vdCBsb2FkIHByb20gJyVzJyIsIGZpbGVuYW1lKTsKICAgICAgICAgICAg IGV4aXQoMSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGtlcm5lbF9maWxlbmFtZSA9PSBO VUxMICYmICFxdGVzdF9lbmFibGVkKCkpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJDYW4n dCByZWFkIGJpb3MgaW1hZ2UgJXNcbiIsIGZpbGVuYW1lKTsKKyAgICAgICAgZXJyb3JfcmVwb3J0 KCJDYW4ndCByZWFkIGJpb3MgaW1hZ2UgJXMiLCBmaWxlbmFtZSk7CiAgICAgICAgIGV4aXQoMSk7 CiAgICAgfQogICAgIGdfZnJlZShmaWxlbmFtZSk7CkBAIC0xOTcsNyArMTk4LDcgQEAgc3RhdGlj IHZvaWQgbGVvbjNfZ2VuZXJpY19od19pbml0KE1hY2hpbmVTdGF0ZSAqbWFjaGluZSkKICAgICAg ICAga2VybmVsX3NpemUgPSBsb2FkX2VsZihrZXJuZWxfZmlsZW5hbWUsIE5VTEwsIE5VTEwsICZl bnRyeSwgTlVMTCwgTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC8qIGJp ZyBlbmRpYW4gKi8sIEVNX1NQQVJDLCAwLCAwKTsKICAgICAgICAgaWYgKGtlcm5lbF9zaXplIDwg MCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJxZW11OiBjb3VsZCBub3QgbG9hZCBr ZXJuZWwgJyVzJ1xuIiwKKyAgICAgICAgICAgIGVycm9yX3JlcG9ydCgicWVtdTogY291bGQgbm90 IGxvYWQga2VybmVsICclcyciLAogICAgICAgICAgICAgICAgICAgICBrZXJuZWxfZmlsZW5hbWUp OwogICAgICAgICAgICAgZXhpdCgxKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvaHcvc3BhcmMv c3VuNG0uYyBiL2h3L3NwYXJjL3N1bjRtLmMKaW5kZXggZTFiZGQ0ODI4ZC4uN2EyODEyYWFhNCAx MDA2NDQKLS0tIGEvaHcvc3BhcmMvc3VuNG0uYworKysgYi9ody9zcGFyYy9zdW40bS5jCkBAIC0y NjEsNyArMjYxLDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc3VuNG1fbG9hZF9rZXJuZWwoY29u c3QgY2hhciAqa2VybmVsX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEtFUk5FTF9MT0FEX0FERFIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUkFNX3NpemUgLSBLRVJORUxfTE9BRF9BRERSKTsKICAg ICAgICAgaWYgKGtlcm5lbF9zaXplIDwgMCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs ICJxZW11OiBjb3VsZCBub3QgbG9hZCBrZXJuZWwgJyVzJ1xuIiwKKyAgICAgICAgICAgIGVycm9y X3JlcG9ydCgicWVtdTogY291bGQgbm90IGxvYWQga2VybmVsICclcyciLAogICAgICAgICAgICAg ICAgICAgICBrZXJuZWxfZmlsZW5hbWUpOwogICAgICAgICAgICAgZXhpdCgxKTsKICAgICAgICAg fQpAQCAtMjczLDggKzI3Myw4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHN1bjRtX2xvYWRfa2Vy bmVsKGNvbnN0IGNoYXIgKmtlcm5lbF9maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBJTklUUkRfTE9BRF9BRERSLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTV9zaXplIC0gSU5JVFJEX0xPQURfQURE Uik7CiAgICAgICAgICAgICBpZiAoaW5pdHJkX3NpemUgPCAwKSB7Ci0gICAgICAgICAgICAgICAg ZnByaW50ZihzdGRlcnIsICJxZW11OiBjb3VsZCBub3QgbG9hZCBpbml0aWFsIHJhbSBkaXNrICcl cydcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbml0cmRfZmlsZW5hbWUpOworICAgICAg ICAgICAgICAgIGVycm9yX3JlcG9ydCgicWVtdTogY291bGQgbm90IGxvYWQgaW5pdGlhbCByYW0g ZGlzayAnJXMnIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdHJkX2ZpbGVuYW1l KTsKICAgICAgICAgICAgICAgICBleGl0KDEpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBA IC02ODgsNyArNjg4LDcgQEAgc3RhdGljIHZvaWQgcHJvbV9pbml0KGh3YWRkciBhZGRyLCBjb25z dCBjaGFyICpiaW9zX25hbWUpCiAgICAgICAgIHJldCA9IC0xOwogICAgIH0KICAgICBpZiAocmV0 IDwgMCB8fCByZXQgPiBQUk9NX1NJWkVfTUFYKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAi cWVtdTogY291bGQgbm90IGxvYWQgcHJvbSAnJXMnXG4iLCBiaW9zX25hbWUpOworICAgICAgICBl cnJvcl9yZXBvcnQoInFlbXU6IGNvdWxkIG5vdCBsb2FkIHByb20gJyVzJyIsIGJpb3NfbmFtZSk7 CiAgICAgICAgIGV4aXQoMSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvaHcvc3BhcmM2NC9uaWFn YXJhLmMgYi9ody9zcGFyYzY0L25pYWdhcmEuYwppbmRleCA5YThkNjEwOWQ0Li42MDc5OTIyMGYz IDEwMDY0NAotLS0gYS9ody9zcGFyYzY0L25pYWdhcmEuYworKysgYi9ody9zcGFyYzY0L25pYWdh cmEuYwpAQCAtMTUzLDcgKzE1Myw3IEBAIHN0YXRpYyB2b2lkIG5pYWdhcmFfaW5pdChNYWNoaW5l U3RhdGUgKm1hY2hpbmUpCiAgICAgICAgICAgICBkaW5mby0+aXNfZGVmYXVsdCA9IDE7CiAgICAg ICAgICAgICByb21fYWRkX2ZpbGVfZml4ZWQoYmxrX2JzKGJsayktPmZpbGVuYW1lLCBOSUFHQVJB X1ZESVNLX0JBU0UsIC0xKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZwcmludGYo c3RkZXJyLCAicWVtdTogY291bGQgbm90IGxvYWQgcmFtIGRpc2sgJyVzJ1xuIiwKKyAgICAgICAg ICAgIGVycm9yX3JlcG9ydCgicWVtdTogY291bGQgbm90IGxvYWQgcmFtIGRpc2sgJyVzJyIsCiAg ICAgICAgICAgICAgICAgICAgIGJsa19icyhibGspLT5maWxlbmFtZSk7CiAgICAgICAgICAgICBl eGl0KDEpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9ody9zcGFyYzY0L3N1bjR1LmMgYi9ody9z cGFyYzY0L3N1bjR1LmMKaW5kZXggYzMyODBhYWYzOC4uMDcwZDliOTRmOSAxMDA2NDQKLS0tIGEv aHcvc3BhcmM2NC9zdW40dS5jCisrKyBiL2h3L3NwYXJjNjQvc3VuNHUuYwpAQCAtMjIsNiArMjIs NyBAQAogICogVEhFIFNPRlRXQVJFLgogICovCiAjaW5jbHVkZSAicWVtdS9vc2RlcC5oIgorI2lu Y2x1ZGUgInFlbXUvZXJyb3ItcmVwb3J0LmgiCiAjaW5jbHVkZSAicWFwaS9lcnJvci5oIgogI2lu Y2x1ZGUgInFlbXUtY29tbW9uLmgiCiAjaW5jbHVkZSAiY3B1LmgiCkBAIC0xNjUsNyArMTY2LDcg QEAgc3RhdGljIHVpbnQ2NF90IHN1bjR1X2xvYWRfa2VybmVsKGNvbnN0IGNoYXIgKmtlcm5lbF9m aWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS QU1fc2l6ZSAtIEtFUk5FTF9MT0FEX0FERFIpOwogICAgICAgICB9CiAgICAgICAgIGlmIChrZXJu ZWxfc2l6ZSA8IDApIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAicWVtdTogY291bGQg bm90IGxvYWQga2VybmVsICclcydcbiIsCisgICAgICAgICAgICBlcnJvcl9yZXBvcnQoInFlbXU6 IGNvdWxkIG5vdCBsb2FkIGtlcm5lbCAnJXMnIiwKICAgICAgICAgICAgICAgICAgICAga2VybmVs X2ZpbGVuYW1lKTsKICAgICAgICAgICAgIGV4aXQoMSk7CiAgICAgICAgIH0KQEAgLTE3OCw4ICsx NzksOCBAQCBzdGF0aWMgdWludDY0X3Qgc3VuNHVfbG9hZF9rZXJuZWwoY29uc3QgY2hhciAqa2Vy bmVsX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqaW5pdHJkX2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFJBTV9zaXplIC0gKmluaXRyZF9hZGRyKTsKICAgICAgICAgICAgIGlmICgoaW50 KSppbml0cmRfc2l6ZSA8IDApIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInFl bXU6IGNvdWxkIG5vdCBsb2FkIGluaXRpYWwgcmFtIGRpc2sgJyVzJ1xuIiwKLSAgICAgICAgICAg ICAgICAgICAgICAgIGluaXRyZF9maWxlbmFtZSk7CisgICAgICAgICAgICAgICAgZXJyb3JfcmVw b3J0KCJxZW11OiBjb3VsZCBub3QgbG9hZCBpbml0aWFsIHJhbSBkaXNrICclcyciLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbml0cmRfZmlsZW5hbWUpOwogICAgICAgICAgICAgICAg IGV4aXQoMSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTMyMiw3ICszMjMsNyBAQCBz dGF0aWMgdm9pZCBwcm9tX2luaXQoaHdhZGRyIGFkZHIsIGNvbnN0IGNoYXIgKmJpb3NfbmFtZSkK ICAgICAgICAgcmV0ID0gLTE7CiAgICAgfQogICAgIGlmIChyZXQgPCAwIHx8IHJldCA+IFBST01f U0laRV9NQVgpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJxZW11OiBjb3VsZCBub3QgbG9h ZCBwcm9tICclcydcbiIsIGJpb3NfbmFtZSk7CisgICAgICAgIGVycm9yX3JlcG9ydCgicWVtdTog Y291bGQgbm90IGxvYWQgcHJvbSAnJXMnIiwgYmlvc19uYW1lKTsKICAgICAgICAgZXhpdCgxKTsK ICAgICB9CiB9CmRpZmYgLS1naXQgYS9ody9zc2kvb21hcF9zcGkuYyBiL2h3L3NzaS9vbWFwX3Nw aS5jCmluZGV4IDM0MTYzZTU2NDYuLjk4MjQyZDFlOGIgMTAwNjQ0Ci0tLSBhL2h3L3NzaS9vbWFw X3NwaS5jCisrKyBiL2h3L3NzaS9vbWFwX3NwaS5jCkBAIC0yMCw2ICsyMCw3IEBACiAgKiA1MSBG cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgog ICovCiAjaW5jbHVkZSAicWVtdS9vc2RlcC5oIgorI2luY2x1ZGUgInFlbXUvZXJyb3ItcmVwb3J0 LmgiCiAjaW5jbHVkZSAiaHcvaHcuaCIKICNpbmNsdWRlICJody9hcm0vb21hcC5oIgogCkBAIC0y OTUsOSArMjk2LDkgQEAgc3RhdGljIHZvaWQgb21hcF9tY3NwaV93cml0ZSh2b2lkICpvcGFxdWUs IGh3YWRkciBhZGRyLAogICAgICAgICBpZiAoKHZhbHVlIF4gcy0+Y2hbY2hdLmNvbmZpZykgJiAo MyA8PCAxNCkpCS8qIERNQVIgfCBETUFXICovCiAgICAgICAgICAgICBvbWFwX21jc3BpX2RtYXJl cXVlc3RfdXBkYXRlKHMtPmNoICsgY2gpOwogICAgICAgICBpZiAoKCh2YWx1ZSA+PiAxMikgJiAz KSA9PSAzKQkJCS8qIFRSTSAqLwotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogaW52 YWxpZCBUUk0gdmFsdWUgKDMpXG4iLCBfX2Z1bmNfXyk7CisgICAgICAgICAgICBlcnJvcl9yZXBv cnQoIiVzOiBpbnZhbGlkIFRSTSB2YWx1ZSAoMykiLCBfX2Z1bmNfXyk7CiAgICAgICAgIGlmICgo KHZhbHVlID4+IDcpICYgMHgxZikgPCAzKQkJCS8qIFdMICovCi0gICAgICAgICAgICBmcHJpbnRm KHN0ZGVyciwgIiVzOiBpbnZhbGlkIFdMIHZhbHVlICglIiBQUkl4NjQgIilcbiIsCisgICAgICAg ICAgICBlcnJvcl9yZXBvcnQoIiVzOiBpbnZhbGlkIFdMIHZhbHVlICglIiBQUkl4NjQgIikiLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCAodmFsdWUgPj4gNykgJiAweDFm KTsKICAgICAgICAgcy0+Y2hbY2hdLmNvbmZpZyA9IHZhbHVlICYgMHg3ZmZmZmY7CiAgICAgICAg IGJyZWFrOwpkaWZmIC0tZ2l0IGEvaHcvdGltZXIvb21hcF9ncHRpbWVyLmMgYi9ody90aW1lci9v bWFwX2dwdGltZXIuYwppbmRleCBhZTJkYzk5ODMyLi4wZjA2NDI0MWQzIDEwMDY0NAotLS0gYS9o dy90aW1lci9vbWFwX2dwdGltZXIuYworKysgYi9ody90aW1lci9vbWFwX2dwdGltZXIuYwpAQCAt MTgsNiArMTgsNyBAQAogICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8v d3d3LmdudS5vcmcvbGljZW5zZXMvPi4KICAqLwogI2luY2x1ZGUgInFlbXUvb3NkZXAuaCIKKyNp bmNsdWRlICJxZW11L2Vycm9yLXJlcG9ydC5oIgogI2luY2x1ZGUgImh3L2h3LmgiCiAjaW5jbHVk ZSAicWVtdS90aW1lci5oIgogI2luY2x1ZGUgImh3L2FybS9vbWFwLmgiCkBAIC0zNTYsNyArMzU3 LDcgQEAgc3RhdGljIHZvaWQgb21hcF9ncF90aW1lcl93cml0ZSh2b2lkICpvcGFxdWUsIGh3YWRk ciBhZGRyLAogICAgIGNhc2UgMHgxMDoJLyogVElPQ1BfQ0ZHICovCiAgICAgICAgIHMtPmNvbmZp ZyA9IHZhbHVlICYgMHgzM2Q7CiAgICAgICAgIGlmICgoKHZhbHVlID4+IDMpICYgMykgPT0gMykJ CQkJLyogSURMRU1PREUgKi8KLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGlsbGVn YWwgSURMRU1PREUgdmFsdWUgaW4gVElPQ1BfQ0ZHXG4iLAorICAgICAgICAgICAgZXJyb3JfcmVw b3J0KCIlczogaWxsZWdhbCBJRExFTU9ERSB2YWx1ZSBpbiBUSU9DUF9DRkciLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fZnVuY19fKTsKICAgICAgICAgaWYgKHZhbHVlICYgMikJCQkJ CQkvKiBTT0ZUUkVTRVQgKi8KICAgICAgICAgICAgIG9tYXBfZ3BfdGltZXJfcmVzZXQocyk7CkBA IC0zOTQsMTEgKzM5NSwxMSBAQCBzdGF0aWMgdm9pZCBvbWFwX2dwX3RpbWVyX3dyaXRlKHZvaWQg Km9wYXF1ZSwgaHdhZGRyIGFkZHIsCiAgICAgICAgIHMtPmFyID0gKHZhbHVlID4+IDEpICYgMTsK ICAgICAgICAgcy0+c3QgPSAodmFsdWUgPj4gMCkgJiAxOwogICAgICAgICBpZiAocy0+aW5vdXQg JiYgcy0+dHJpZ2dlciAhPSBncHRfdHJpZ2dlcl9ub25lKQotICAgICAgICAgICAgZnByaW50Zihz dGRlcnIsICIlczogR1AgdGltZXIgcGluIG11c3QgYmUgYW4gb3V0cHV0ICIKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiZm9yIHRoaXMgdHJpZ2dlciBtb2RlXG4iLCBfX2Z1bmNfXyk7Cisg ICAgICAgICAgICBlcnJvcl9yZXBvcnQoIiVzOiBHUCB0aW1lciBwaW4gbXVzdCBiZSBhbiBvdXRw dXQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJmb3IgdGhpcyB0cmlnZ2VyIG1vZGUiLCBf X2Z1bmNfXyk7CiAgICAgICAgIGlmICghcy0+aW5vdXQgJiYgcy0+Y2FwdHVyZSAhPSBncHRfY2Fw dHVyZV9ub25lKQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogR1AgdGltZXIgcGlu IG11c3QgYmUgYW4gaW5wdXQgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb3IgdGhp cyBjYXB0dXJlIG1vZGVcbiIsIF9fZnVuY19fKTsKKyAgICAgICAgICAgIGVycm9yX3JlcG9ydCgi JXM6IEdQIHRpbWVyIHBpbiBtdXN0IGJlIGFuIGlucHV0ICIKKyAgICAgICAgICAgICAgICAgICAg ICAgICAiZm9yIHRoaXMgY2FwdHVyZSBtb2RlIiwgX19mdW5jX18pOwogICAgICAgICBpZiAocy0+ dHJpZ2dlciA9PSBncHRfdHJpZ2dlcl9ub25lKQogICAgICAgICAgICAgb21hcF9ncF90aW1lcl9v dXQocywgcy0+c2Nwd20pOwogICAgICAgICAvKiBUT0RPOiBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0 IG92ZXJmbG93IDMyLWJpdHMgKi8KZGlmZiAtLWdpdCBhL2h3L3RpbWVyL3R3bDkyMjMwLmMgYi9o dy90aW1lci90d2w5MjIzMC5jCmluZGV4IDg3ZTMzNGFmMjQuLjNhZGUwYmE5MjkgMTAwNjQ0Ci0t LSBhL2h3L3RpbWVyL3R3bDkyMjMwLmMKKysrIGIvaHcvdGltZXIvdHdsOTIyMzAuYwpAQCAtNjE0 LDcgKzYxNCw3IEBAIHN0YXRpYyB2b2lkIG1lbmVsYXVzX3dyaXRlKHZvaWQgKm9wYXF1ZSwgdWlu dDhfdCBhZGRyLCB1aW50OF90IHZhbHVlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIHJ0 Y19iYWRuZXNzOgogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs ICIlczogYmFkIFJUQ19VUERBVEUgdmFsdWUgJTAyeFxuIiwKKyAgICAgICAgICAgIGVycm9yX3Jl cG9ydCgiJXM6IGJhZCBSVENfVVBEQVRFIHZhbHVlICUwMngiLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fZnVuY19fLCB2YWx1ZSk7CiAgICAgICAgICAgICBzLT5zdGF0dXMgfD0gMSA8 PCAxMDsJCQkJLyogUlRDRVJSICovCiAgICAgICAgICAgICBtZW5lbGF1c191cGRhdGUocyk7CmRp ZmYgLS1naXQgYS9ody90aW1lci94aWxpbnhfdGltZXIuYyBiL2h3L3RpbWVyL3hpbGlueF90aW1l ci5jCmluZGV4IDU5NDM5YzA1YmUuLmE4MGJiYTg0NmIgMTAwNjQ0Ci0tLSBhL2h3L3RpbWVyL3hp bGlueF90aW1lci5jCisrKyBiL2h3L3RpbWVyL3hpbGlueF90aW1lci5jCkBAIC0xMjcsNyArMTI3 LDcgQEAgdGltZXJfcmVhZCh2b2lkICpvcGFxdWUsIGh3YWRkciBhZGRyLCB1bnNpZ25lZCBpbnQg c2l6ZSkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgfQotICAgIEQoZnByaW50ZihzdGRlcnIs ICIlcyB0aW1lcj0lZCAleD0leFxuIiwgX19mdW5jX18sIHRpbWVyLCBhZGRyICogNCwgcikpOwor ICAgIEQoZXJyb3JfcmVwb3J0KCIlcyB0aW1lcj0lZCAleD0leCIsIF9fZnVuY19fLCB0aW1lciwg YWRkciAqIDQsIHIpKTsKICAgICByZXR1cm4gcjsKIH0KIApAQCAtMTM1LDcgKzEzNSw3IEBAIHN0 YXRpYyB2b2lkIHRpbWVyX2VuYWJsZShzdHJ1Y3QgeGx4X3RpbWVyICp4dCkKIHsKICAgICB1aW50 NjRfdCBjb3VudDsKIAotICAgIEQoZnByaW50ZihzdGRlcnIsICIlcyB0aW1lcj0lZCBkb3duPSVk XG4iLCBfX2Z1bmNfXywKKyAgICBEKGVycm9yX3JlcG9ydCgiJXMgdGltZXI9JWQgZG93bj0lZCIs IF9fZnVuY19fLAogICAgICAgICAgICAgICB4dC0+bnIsIHh0LT5yZWdzW1JfVENTUl0gJiBUQ1NS X1VEVCkpOwogCiAgICAgcHRpbWVyX3N0b3AoeHQtPnB0aW1lcik7CkBAIC0xNjAsNyArMTYwLDcg QEAgdGltZXJfd3JpdGUodm9pZCAqb3BhcXVlLCBod2FkZHIgYWRkciwKICAgICBhZGRyID4+PSAy OwogICAgIHRpbWVyID0gdGltZXJfZnJvbV9hZGRyKGFkZHIpOwogICAgIHh0ID0gJnQtPnRpbWVy c1t0aW1lcl07Ci0gICAgRChmcHJpbnRmKHN0ZGVyciwgIiVzIGFkZHI9JXggdmFsPSV4ICh0aW1l cj0lZCBvZmY9JWQpXG4iLAorICAgIEQoZXJyb3JfcmVwb3J0KCIlcyBhZGRyPSV4IHZhbD0leCAo dGltZXI9JWQgb2ZmPSVkKSIsCiAgICAgICAgICAgICAgX19mdW5jX18sIGFkZHIgKiA0LCB2YWx1 ZSwgdGltZXIsIGFkZHIgJiAzKSk7CiAgICAgLyogRnVydGhlciBkZWNvZGluZyB0byBhZGRyZXNz IGEgc3BlY2lmaWMgdGltZXJzIHJlZy4gICovCiAgICAgYWRkciAmPSAzOwpAQCAtMTk3LDcgKzE5 Nyw3IEBAIHN0YXRpYyB2b2lkIHRpbWVyX2hpdCh2b2lkICpvcGFxdWUpCiB7CiAgICAgc3RydWN0 IHhseF90aW1lciAqeHQgPSBvcGFxdWU7CiAgICAgc3RydWN0IHRpbWVyYmxvY2sgKnQgPSB4dC0+ cGFyZW50OwotICAgIEQoZnByaW50ZihzdGRlcnIsICIlcyAlZFxuIiwgX19mdW5jX18sIHh0LT5u cikpOworICAgIEQoZXJyb3JfcmVwb3J0KCIlcyAlZCIsIF9fZnVuY19fLCB4dC0+bnIpKTsKICAg ICB4dC0+cmVnc1tSX1RDU1JdIHw9IFRDU1JfVElOVDsKIAogICAgIGlmICh4dC0+cmVnc1tSX1RD U1JdICYgVENTUl9BUkhUKQpkaWZmIC0tZ2l0IGEvaHcvdXNiL2NvcmUuYyBiL2h3L3VzYi9jb3Jl LmMKaW5kZXggMjQxYWU2NmIxNS4uOWZmZGVmMDU1YyAxMDA2NDQKLS0tIGEvaHcvdXNiL2NvcmUu YworKysgYi9ody91c2IvY29yZS5jCkBAIC0yNCw2ICsyNCw3IEBACiAgKiBUSEUgU09GVFdBUkUu CiAgKi8KICNpbmNsdWRlICJxZW11L29zZGVwLmgiCisjaW5jbHVkZSAicWVtdS9lcnJvci1yZXBv cnQuaCIKICNpbmNsdWRlICJxZW11LWNvbW1vbi5oIgogI2luY2x1ZGUgImh3L3VzYi5oIgogI2lu Y2x1ZGUgInFlbXUvaW92LmgiCkBAIC01OTksNyArNjAwLDcgQEAgdm9pZCB1c2JfcGFja2V0X2Nv cHkoVVNCUGFja2V0ICpwLCB2b2lkICpwdHIsIHNpemVfdCBieXRlcykKICAgICAgICAgaW92X2Zy b21fYnVmKGlvdi0+aW92LCBpb3YtPm5pb3YsIHAtPmFjdHVhbF9sZW5ndGgsIHB0ciwgYnl0ZXMp OwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBmcHJpbnRmKHN0ZGVyciwg IiVzOiBpbnZhbGlkIHBpZDogJXhcbiIsIF9fZnVuY19fLCBwLT5waWQpOworICAgICAgICBlcnJv cl9yZXBvcnQoIiVzOiBpbnZhbGlkIHBpZDogJXgiLCBfX2Z1bmNfXywgcC0+cGlkKTsKICAgICAg ICAgYWJvcnQoKTsKICAgICB9CiAgICAgcC0+YWN0dWFsX2xlbmd0aCArPSBieXRlczsKQEAgLTY4 MSw3ICs2ODIsNyBAQCB2b2lkIHVzYl9lcF9kdW1wKFVTQkRldmljZSAqZGV2KQogICAgIH07CiAg ICAgaW50IGlmbnVtLCBlcCwgZmlyc3Q7CiAKLSAgICBmcHJpbnRmKHN0ZGVyciwgIkRldmljZSBc IiVzXCIsIGNvbmZpZyAlZFxuIiwKKyAgICBlcnJvcl9yZXBvcnQoIkRldmljZSBcIiVzXCIsIGNv bmZpZyAlZCIsCiAgICAgICAgICAgICBkZXYtPnByb2R1Y3RfZGVzYywgZGV2LT5jb25maWd1cmF0 aW9uKTsKICAgICBmb3IgKGlmbnVtID0gMDsgaWZudW0gPCAxNjsgaWZudW0rKykgewogICAgICAg ICBmaXJzdCA9IDE7CkBAIC02OTAsMTAgKzY5MSwxMCBAQCB2b2lkIHVzYl9lcF9kdW1wKFVTQkRl dmljZSAqZGV2KQogICAgICAgICAgICAgICAgIGRldi0+ZXBfaW5bZXBdLmlmbnVtID09IGlmbnVt KSB7CiAgICAgICAgICAgICAgICAgaWYgKGZpcnN0KSB7CiAgICAgICAgICAgICAgICAgICAgIGZp cnN0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgIEludGVyZmFj ZSAlZCwgYWx0ZXJuYXRpdmUgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgIGVycm9yX3JlcG9y dCgiICBJbnRlcmZhY2UgJWQsIGFsdGVybmF0aXZlICVkIiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpZm51bSwgZGV2LT5hbHRzZXR0aW5nW2lmbnVtXSk7CiAgICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAgIEVuZHBvaW50ICVkLCBJTiwg JXMsICVkIG1heFxuIiwgZXAsCisgICAgICAgICAgICAgICAgZXJyb3JfcmVwb3J0KCIgICAgRW5k cG9pbnQgJWQsIElOLCAlcywgJWQgbWF4IiwgZXAsCiAgICAgICAgICAgICAgICAgICAgICAgICB0 bmFtZVtkZXYtPmVwX2luW2VwXS50eXBlXSwKICAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+ ZXBfaW5bZXBdLm1heF9wYWNrZXRfc2l6ZSk7CiAgICAgICAgICAgICB9CkBAIC03MDEsMTYgKzcw MiwxNiBAQCB2b2lkIHVzYl9lcF9kdW1wKFVTQkRldmljZSAqZGV2KQogICAgICAgICAgICAgICAg IGRldi0+ZXBfb3V0W2VwXS5pZm51bSA9PSBpZm51bSkgewogICAgICAgICAgICAgICAgIGlmIChm aXJzdCkgewogICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IDA7Ci0gICAgICAgICAgICAgICAg ICAgIGZwcmludGYoc3RkZXJyLCAiICBJbnRlcmZhY2UgJWQsIGFsdGVybmF0aXZlICVkXG4iLAor ICAgICAgICAgICAgICAgICAgICBlcnJvcl9yZXBvcnQoIiAgSW50ZXJmYWNlICVkLCBhbHRlcm5h dGl2ZSAlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZudW0sIGRldi0+YWx0c2V0 dGluZ1tpZm51bV0pOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmcHJpbnRm KHN0ZGVyciwgIiAgICBFbmRwb2ludCAlZCwgT1VULCAlcywgJWQgbWF4XG4iLCBlcCwKKyAgICAg ICAgICAgICAgICBlcnJvcl9yZXBvcnQoIiAgICBFbmRwb2ludCAlZCwgT1VULCAlcywgJWQgbWF4 IiwgZXAsCiAgICAgICAgICAgICAgICAgICAgICAgICB0bmFtZVtkZXYtPmVwX291dFtlcF0udHlw ZV0sCiAgICAgICAgICAgICAgICAgICAgICAgICBkZXYtPmVwX291dFtlcF0ubWF4X3BhY2tldF9z aXplKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICBmcHJpbnRmKHN0ZGVy ciwgIi0tXG4iKTsKKyAgICBlcnJvcl9yZXBvcnQoIi0tIik7CiB9CiAKIHN0cnVjdCBVU0JFbmRw b2ludCAqdXNiX2VwX2dldChVU0JEZXZpY2UgKmRldiwgaW50IHBpZCwgaW50IGVwKQpkaWZmIC0t Z2l0IGEvaHcvdXNiL2Rlc2MuYyBiL2h3L3VzYi9kZXNjLmMKaW5kZXggODVjMTVhZGRjNS4uYWZh ZTkxMGY4ZSAxMDA2NDQKLS0tIGEvaHcvdXNiL2Rlc2MuYworKysgYi9ody91c2IvZGVzYy5jCkBA IC0xLDUgKzEsNSBAQAogI2luY2x1ZGUgInFlbXUvb3NkZXAuaCIKLQorI2luY2x1ZGUgInFlbXUv ZXJyb3ItcmVwb3J0LmgiCiAjaW5jbHVkZSAiaHcvdXNiLmgiCiAjaW5jbHVkZSAiaHcvdXNiL2Rl c2MuaCIKICNpbmNsdWRlICJ0cmFjZS5oIgpAQCAtNjg4LDcgKzY4OCw3IEBAIGludCB1c2JfZGVz Y19nZXRfZGVzY3JpcHRvcihVU0JEZXZpY2UgKmRldiwgVVNCUGFja2V0ICpwLAogICAgICAgICBi cmVhazsKIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6ICVkIHVu a25vd24gdHlwZSAlZCAobGVuICV6ZClcbiIsIF9fZnVuY19fLAorICAgICAgICBlcnJvcl9yZXBv cnQoIiVzOiAlZCB1bmtub3duIHR5cGUgJWQgKGxlbiAlemQpIiwgX19mdW5jX18sCiAgICAgICAg ICAgICAgICAgZGV2LT5hZGRyLCB0eXBlLCBsZW4pOwogICAgICAgICBicmVhazsKICAgICB9CmRp ZmYgLS1naXQgYS9ody91c2IvZGV2LWF1ZGlvLmMgYi9ody91c2IvZGV2LWF1ZGlvLmMKaW5kZXgg MzQzMzQ1MjM1Yy4uNDNmYzIwNDY5YSAxMDA2NDQKLS0tIGEvaHcvdXNiL2Rldi1hdWRpby5jCisr KyBiL2h3L3VzYi9kZXYtYXVkaW8uYwpAQCAtMzAsNiArMzAsNyBAQAogICovCiAKICNpbmNsdWRl ICJxZW11L29zZGVwLmgiCisjaW5jbHVkZSAicWVtdS9lcnJvci1yZXBvcnQuaCIKICNpbmNsdWRl ICJxZW11LWNvbW1vbi5oIgogI2luY2x1ZGUgImh3L3VzYi5oIgogI2luY2x1ZGUgImh3L3VzYi9k ZXNjLmgiCkBAIC0zOTgsNyArMzk5LDcgQEAgc3RhdGljIGludCB1c2JfYXVkaW9fc2V0X291dHB1 dF9hbHRzZXQoVVNCQXVkaW9TdGF0ZSAqcywgaW50IGFsdHNldCkKICAgICB9CiAKICAgICBpZiAo cy0+ZGVidWcpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJ1c2ItYXVkaW86IHNldCBpbnRl cmZhY2UgJWRcbiIsIGFsdHNldCk7CisgICAgICAgIGVycm9yX3JlcG9ydCgidXNiLWF1ZGlvOiBz ZXQgaW50ZXJmYWNlICVkIiwgYWx0c2V0KTsKICAgICB9CiAgICAgcy0+b3V0LmFsdHNldCA9IGFs dHNldDsKICAgICByZXR1cm4gMDsKQEAgLTQ3OCw3ICs0NzksNyBAQCBzdGF0aWMgaW50IHVzYl9h dWRpb19zZXRfY29udHJvbChVU0JBdWRpb1N0YXRlICpzLCB1aW50OF90IGF0dHJpYiwKICAgICAg ICAgICAgIHVpbnQxNl90IHZvbCA9IGRhdGFbMF0gKyAoZGF0YVsxXSA8PCA4KTsKIAogICAgICAg ICAgICAgaWYgKHMtPmRlYnVnKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJ1 c2ItYXVkaW86IHZvbCAlMDR4XG4iLCAodWludDE2X3Qpdm9sKTsKKyAgICAgICAgICAgICAgICBl cnJvcl9yZXBvcnQoInVzYi1hdWRpbzogdm9sICUwNHgiLCAodWludDE2X3Qpdm9sKTsKICAgICAg ICAgICAgIH0KIAogICAgICAgICAgICAgdm9sIC09IDB4ODAwMDsKQEAgLTQ5Niw3ICs0OTcsNyBA QCBzdGF0aWMgaW50IHVzYl9hdWRpb19zZXRfY29udHJvbChVU0JBdWRpb1N0YXRlICpzLCB1aW50 OF90IGF0dHJpYiwKIAogICAgIGlmIChzZXRfdm9sKSB7CiAgICAgICAgIGlmIChzLT5kZWJ1Zykg ewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJ1c2ItYXVkaW86IG11dGUgJWQsIGx2b2wg JTNkLCBydm9sICUzZFxuIiwKKyAgICAgICAgICAgIGVycm9yX3JlcG9ydCgidXNiLWF1ZGlvOiBt dXRlICVkLCBsdm9sICUzZCwgcnZvbCAlM2QiLAogICAgICAgICAgICAgICAgICAgICBzLT5vdXQu bXV0ZSwgcy0+b3V0LnZvbFswXSwgcy0+b3V0LnZvbFsxXSk7CiAgICAgICAgIH0KICAgICAgICAg QVVEX3NldF92b2x1bWVfb3V0KHMtPm91dC52b2ljZSwgcy0+b3V0Lm11dGUsCkBAIC01MTQsOCAr NTE1LDggQEAgc3RhdGljIHZvaWQgdXNiX2F1ZGlvX2hhbmRsZV9jb250cm9sKFVTQkRldmljZSAq ZGV2LCBVU0JQYWNrZXQgKnAsCiAgICAgaW50IHJldCA9IDA7CiAKICAgICBpZiAocy0+ZGVidWcp IHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJ1c2ItYXVkaW86IGNvbnRyb2wgdHJhbnNhY3Rp b246ICIKLSAgICAgICAgICAgICAgICAicmVxdWVzdCAweCUwNHggdmFsdWUgMHglMDR4IGluZGV4 IDB4JTA0eCBsZW5ndGggMHglMDR4XG4iLAorICAgICAgICBlcnJvcl9yZXBvcnQoInVzYi1hdWRp bzogY29udHJvbCB0cmFuc2FjdGlvbjogIgorICAgICAgICAgICAgICAgICJyZXF1ZXN0IDB4JTA0 eCB2YWx1ZSAweCUwNHggaW5kZXggMHglMDR4IGxlbmd0aCAweCUwNHgiLAogICAgICAgICAgICAg ICAgIHJlcXVlc3QsIHZhbHVlLCBpbmRleCwgbGVuZ3RoKTsKICAgICB9CiAKQEAgLTUzMyw3ICs1 MzQsNyBAQCBzdGF0aWMgdm9pZCB1c2JfYXVkaW9faGFuZGxlX2NvbnRyb2woVVNCRGV2aWNlICpk ZXYsIFVTQlBhY2tldCAqcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxl bmd0aCwgZGF0YSk7CiAgICAgICAgIGlmIChyZXQgPCAwKSB7CiAgICAgICAgICAgICBpZiAocy0+ ZGVidWcpIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInVzYi1hdWRpbzogZmFp bDogZ2V0IGNvbnRyb2xcbiIpOworICAgICAgICAgICAgICAgIGVycm9yX3JlcG9ydCgidXNiLWF1 ZGlvOiBmYWlsOiBnZXQgY29udHJvbCIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZ290 byBmYWlsOwogICAgICAgICB9CkBAIC01NDgsNyArNTQ5LDcgQEAgc3RhdGljIHZvaWQgdXNiX2F1 ZGlvX2hhbmRsZV9jb250cm9sKFVTQkRldmljZSAqZGV2LCBVU0JQYWNrZXQgKnAsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgsIGRhdGEpOwogICAgICAgICBpZiAo cmV0IDwgMCkgewogICAgICAgICAgICAgaWYgKHMtPmRlYnVnKSB7Ci0gICAgICAgICAgICAgICAg ZnByaW50ZihzdGRlcnIsICJ1c2ItYXVkaW86IGZhaWw6IHNldCBjb250cm9sXG4iKTsKKyAgICAg ICAgICAgICAgICBlcnJvcl9yZXBvcnQoInVzYi1hdWRpbzogZmFpbDogc2V0IGNvbnRyb2wiKTsK ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGdvdG8gZmFpbDsKICAgICAgICAgfQpAQCAtNTU3 LDggKzU1OCw4IEBAIHN0YXRpYyB2b2lkIHVzYl9hdWRpb19oYW5kbGVfY29udHJvbChVU0JEZXZp Y2UgKmRldiwgVVNCUGFja2V0ICpwLAogICAgIGRlZmF1bHQ6CiBmYWlsOgogICAgICAgICBpZiAo cy0+ZGVidWcpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAidXNiLWF1ZGlvOiBmYWls ZWQgY29udHJvbCB0cmFuc2FjdGlvbjogIgotICAgICAgICAgICAgICAgICAgICAicmVxdWVzdCAw eCUwNHggdmFsdWUgMHglMDR4IGluZGV4IDB4JTA0eCBsZW5ndGggMHglMDR4XG4iLAorICAgICAg ICAgICAgZXJyb3JfcmVwb3J0KCJ1c2ItYXVkaW86IGZhaWxlZCBjb250cm9sIHRyYW5zYWN0aW9u OiAiCisgICAgICAgICAgICAgICAgICAgICJyZXF1ZXN0IDB4JTA0eCB2YWx1ZSAweCUwNHggaW5k ZXggMHglMDR4IGxlbmd0aCAweCUwNHgiLAogICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LCB2 YWx1ZSwgaW5kZXgsIGxlbmd0aCk7CiAgICAgICAgIH0KICAgICAgICAgcC0+c3RhdHVzID0gVVNC X1JFVF9TVEFMTDsKQEAgLTU4MSw3ICs1ODIsNyBAQCBzdGF0aWMgdm9pZCB1c2JfYXVkaW9faGFu ZGxlX3Jlc2V0KFVTQkRldmljZSAqZGV2KQogICAgIFVTQkF1ZGlvU3RhdGUgKnMgPSBVU0JfQVVE SU8oZGV2KTsKIAogICAgIGlmIChzLT5kZWJ1ZykgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwg InVzYi1hdWRpbzogcmVzZXRcbiIpOworICAgICAgICBlcnJvcl9yZXBvcnQoInVzYi1hdWRpbzog cmVzZXQiKTsKICAgICB9CiAgICAgdXNiX2F1ZGlvX3NldF9vdXRwdXRfYWx0c2V0KHMsIEFMVFNF VF9PRkYpOwogfQpAQCAtNTk1LDcgKzU5Niw3IEBAIHN0YXRpYyB2b2lkIHVzYl9hdWRpb19oYW5k bGVfZGF0YW91dChVU0JBdWRpb1N0YXRlICpzLCBVU0JQYWNrZXQgKnApCiAKICAgICBzdHJlYW1i dWZfcHV0KCZzLT5vdXQuYnVmLCBwKTsKICAgICBpZiAocC0+YWN0dWFsX2xlbmd0aCA8IHAtPmlv di5zaXplICYmIHMtPmRlYnVnID4gMSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInVzYi1h dWRpbzogb3V0cHV0IG92ZXJydW4gKCV6ZCBieXRlcylcbiIsCisgICAgICAgIGVycm9yX3JlcG9y dCgidXNiLWF1ZGlvOiBvdXRwdXQgb3ZlcnJ1biAoJXpkIGJ5dGVzKSIsCiAgICAgICAgICAgICAg ICAgcC0+aW92LnNpemUgLSBwLT5hY3R1YWxfbGVuZ3RoKTsKICAgICB9CiB9CkBAIC02MTEsOCAr NjEyLDggQEAgc3RhdGljIHZvaWQgdXNiX2F1ZGlvX2hhbmRsZV9kYXRhKFVTQkRldmljZSAqZGV2 LCBVU0JQYWNrZXQgKnApCiAKICAgICBwLT5zdGF0dXMgPSBVU0JfUkVUX1NUQUxMOwogICAgIGlm IChzLT5kZWJ1ZykgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInVzYi1hdWRpbzogZmFpbGVk IGRhdGEgdHJhbnNhY3Rpb246ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICJwaWQgMHgleCBl cCAweCV4IGxlbiAweCV6eFxuIiwKKyAgICAgICAgZXJyb3JfcmVwb3J0KCJ1c2ItYXVkaW86IGZh aWxlZCBkYXRhIHRyYW5zYWN0aW9uOiAiCisgICAgICAgICAgICAgICAgICAgICAgICAicGlkIDB4 JXggZXAgMHgleCBsZW4gMHglengiLAogICAgICAgICAgICAgICAgICAgICAgICAgcC0+cGlkLCBw LT5lcC0+bnIsIHAtPmlvdi5zaXplKTsKICAgICB9CiB9CkBAIC02MjIsNyArNjIzLDcgQEAgc3Rh dGljIHZvaWQgdXNiX2F1ZGlvX3VucmVhbGl6ZShVU0JEZXZpY2UgKmRldiwgRXJyb3IgKiplcnJw KQogICAgIFVTQkF1ZGlvU3RhdGUgKnMgPSBVU0JfQVVESU8oZGV2KTsKIAogICAgIGlmIChzLT5k ZWJ1ZykgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInVzYi1hdWRpbzogZGVzdHJveVxuIik7 CisgICAgICAgIGVycm9yX3JlcG9ydCgidXNiLWF1ZGlvOiBkZXN0cm95Iik7CiAgICAgfQogCiAg ICAgdXNiX2F1ZGlvX3NldF9vdXRwdXRfYWx0c2V0KHMsIEFMVFNFVF9PRkYpOwpkaWZmIC0tZ2l0 IGEvaHcvdXNiL2Rldi1ibHVldG9vdGguYyBiL2h3L3VzYi9kZXYtYmx1ZXRvb3RoLmMKaW5kZXgg MGJiY2VhZWEwYi4uZGZlZjI1OGRjYSAxMDA2NDQKLS0tIGEvaHcvdXNiL2Rldi1ibHVldG9vdGgu YworKysgYi9ody91c2IvZGV2LWJsdWV0b290aC5jCkBAIC0yNzQsMTMgKzI3NCwxMyBAQCBzdGF0 aWMgdm9pZCB1c2JfYnRfZmlmb19lbnF1ZXVlKHN0cnVjdCB1c2JfaGNpX2luX2ZpZm9fcyAqZmlm bywKICAgICBpZiAob2ZmIDw9IERGSUZPX0xFTl9NQVNLKSB7CiAgICAgICAgIGlmIChvZmYgKyBs ZW4gPiBERklGT19MRU5fTUFTSyArIDEgJiYKICAgICAgICAgICAgICAgICAgICAgICAgIChmaWZv LT5kc2l6ZSA9IG9mZiArIGxlbikgPiAoREZJRk9fTEVOX01BU0sgKyAxKSAqIDIpIHsKLSAgICAg ICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGNhbid0IGFsbG9jICVpIGJ5dGVzXG4iLCBfX2Z1 bmNfXywgbGVuKTsKKyAgICAgICAgICAgIGVycm9yX3JlcG9ydCgiJXM6IGNhbid0IGFsbG9jICVp IGJ5dGVzIiwgX19mdW5jX18sIGxlbik7CiAgICAgICAgICAgICBleGl0KC0xKTsKICAgICAgICAg fQogICAgICAgICBidWYgPSBmaWZvLT5kYXRhICsgb2ZmOwogICAgIH0gZWxzZSB7CiAgICAgICAg IGlmIChmaWZvLT5kbGVuID4gZmlmby0+ZHNpemUpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3Rk ZXJyLCAiJXM6IGNhbid0IGFsbG9jICVpIGJ5dGVzXG4iLCBfX2Z1bmNfXywgbGVuKTsKKyAgICAg ICAgICAgIGVycm9yX3JlcG9ydCgiJXM6IGNhbid0IGFsbG9jICVpIGJ5dGVzIiwgX19mdW5jX18s IGxlbik7CiAgICAgICAgICAgICBleGl0KC0xKTsKICAgICAgICAgfQogICAgICAgICBidWYgPSBm aWZvLT5kYXRhICsgb2ZmIC0gZmlmby0+ZHNpemU7CmRpZmYgLS1naXQgYS9ody91c2IvZGV2LW10 cC5jIGIvaHcvdXNiL2Rldi1tdHAuYwppbmRleCA5NGMyZTk0ZjEwLi43ZTE3ODJiOGZjIDEwMDY0 NAotLS0gYS9ody91c2IvZGV2LW10cC5jCisrKyBiL2h3L3VzYi9kZXYtbXRwLmMKQEAgLTEwLDYg KzEwLDcgQEAKICAqLwogCiAjaW5jbHVkZSAicWVtdS9vc2RlcC5oIgorI2luY2x1ZGUgInFlbXUv ZXJyb3ItcmVwb3J0LmgiCiAjaW5jbHVkZSAicWFwaS9lcnJvci5oIgogI2luY2x1ZGUgPHdjaGFy Lmg+CiAjaW5jbHVkZSA8ZGlyZW50Lmg+CkBAIC01NDYsNyArNTQ3LDcgQEAgc3RhdGljIHZvaWQg aW5vdGlmeV93YXRjaGZuKHZvaWQgKmFyZykKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAg ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInVzYi1t dHA6IGZhaWxlZCB0byBwYXJzZSBpbm90aWZ5IGV2ZW50XG4iKTsKKyAgICAgICAgICAgICAgICBl cnJvcl9yZXBvcnQoInVzYi1tdHA6IGZhaWxlZCB0byBwYXJzZSBpbm90aWZ5IGV2ZW50Iik7CiAg ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKQEAgLTYxNyw3ICs2MTgs NyBAQCBzdGF0aWMgdm9pZCB1c2JfbXRwX29iamVjdF9yZWFkZGlyKE1UUFN0YXRlICpzLCBNVFBP YmplY3QgKm8pCiAjaWZkZWYgQ09ORklHX0lOT1RJRlkxCiAgICAgaW50IHdhdGNoZmQgPSB1c2Jf bXRwX2FkZF93YXRjaChzLT5pbm90aWZ5ZmQsIG8tPnBhdGgpOwogICAgIGlmICh3YXRjaGZkID09 IC0xKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAidXNiLW10cDogZmFpbGVkIHRvIGFkZCB3 YXRjaCBmb3IgJXNcbiIsIG8tPnBhdGgpOworICAgICAgICBlcnJvcl9yZXBvcnQoInVzYi1tdHA6 IGZhaWxlZCB0byBhZGQgd2F0Y2ggZm9yICVzIiwgby0+cGF0aCk7CiAgICAgfSBlbHNlIHsKICAg ICAgICAgdHJhY2VfdXNiX210cF9pbm90aWZ5X2V2ZW50KHMtPmRldi5hZGRyLCBvLT5wYXRoLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgIldhdGNoIEFkZGVkIik7CkBA IC0xMTQ0LDcgKzExNDUsNyBAQCBzdGF0aWMgdm9pZCB1c2JfbXRwX2NvbW1hbmQoTVRQU3RhdGUg KnMsIE1UUENvbnRyb2wgKmMpCiAgICAgICAgIHVzYl9tdHBfb2JqZWN0X2FsbG9jKHMsIHMtPm5l eHRfaGFuZGxlKyssIE5VTEwsIHMtPnJvb3QpOwogI2lmZGVmIENPTkZJR19JTk9USUZZMQogICAg ICAgICBpZiAodXNiX210cF9pbm90aWZ5X2luaXQocykpIHsKLSAgICAgICAgICAgIGZwcmludGYo c3RkZXJyLCAidXNiLW10cDogZmlsZSBtb25pdG9yaW5nIGluaXQgZmFpbGVkXG4iKTsKKyAgICAg ICAgICAgIGVycm9yX3JlcG9ydCgidXNiLW10cDogZmlsZSBtb25pdG9yaW5nIGluaXQgZmFpbGVk Iik7CiAgICAgICAgIH0KICNlbmRpZgogICAgICAgICBicmVhazsKQEAgLTEzNDgsNyArMTM0OSw3 IEBAIHN0YXRpYyB2b2lkIHVzYl9tdHBfaGFuZGxlX2NvbnRyb2woVVNCRGV2aWNlICpkZXYsIFVT QlBhY2tldCAqcCwKIHN0YXRpYyB2b2lkIHVzYl9tdHBfY2FuY2VsX3BhY2tldChVU0JEZXZpY2Ug KmRldiwgVVNCUGFja2V0ICpwKQogewogICAgIC8qIHdlIGRvbid0IHVzZSBhc3luYyBwYWNrZXRz LCBzbyB0aGlzIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgKi8KLSAgICBmcHJpbnRmKHN0ZGVyciwg IiVzXG4iLCBfX2Z1bmNfXyk7CisgICAgZXJyb3JfcmVwb3J0KCIlcyIsIF9fZnVuY19fKTsKIH0K IAogc3RhdGljIHZvaWQgdXNiX210cF9oYW5kbGVfZGF0YShVU0JEZXZpY2UgKmRldiwgVVNCUGFj a2V0ICpwKQpkaWZmIC0tZ2l0IGEvaHcvdXNiL2Rldi1uZXR3b3JrLmMgYi9ody91c2IvZGV2LW5l dHdvcmsuYwppbmRleCA4NWZjODFiZjQzLi45ZGQ0YWY1ZTM0IDEwMDY0NAotLS0gYS9ody91c2Iv ZGV2LW5ldHdvcmsuYworKysgYi9ody91c2IvZGV2LW5ldHdvcmsuYwpAQCAtODE1LDcgKzgxNSw3 IEBAIHN0YXRpYyBpbnQgbmRpc19xdWVyeShVU0JOZXRTdGF0ZSAqcywgdWludDMyX3Qgb2lkLAog ICAgICAgICByZXR1cm4gc2l6ZW9mKGxlMzIpOwogCiAgICAgZGVmYXVsdDoKLSAgICAgICAgZnBy aW50ZihzdGRlcnIsICJ1c2JuZXQ6IHVua25vd24gT0lEIDB4JTA4eFxuIiwgb2lkKTsKKyAgICAg ICAgZXJyb3JfcmVwb3J0KCJ1c2JuZXQ6IHVua25vd24gT0lEIDB4JTA4eCIsIG9pZCk7CiAgICAg ICAgIHJldHVybiAwOwogICAgIH0KICAgICByZXR1cm4gLTE7CkBAIC0xMDg0LDkgKzEwODQsOSBA QCBzdGF0aWMgdm9pZCB1c2JfbmV0X2hhbmRsZV9jb250cm9sKFVTQkRldmljZSAqZGV2LCBVU0JQ YWNrZXQgKnAsCiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAg ICAgICAgICAgICAgICBpZiAoIShpICYgMTUpKQogICAgICAgICAgICAgICAgICAgICBmcHJpbnRm KHN0ZGVyciwgIlxuJTA0eDoiLCBpKTsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg IiAlMDJ4IiwgZGF0YVtpXSk7CisgICAgICAgICAgICAgICAgZXJyb3JfcmVwb3J0KCIgJTAyeCIs IGRhdGFbaV0pOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJc blxuIik7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CiAgICAgICAgIH0KICNl bmRpZgogICAgICAgICByZXQgPSBybmRpc19wYXJzZShzLCBkYXRhLCBsZW5ndGgpOwpAQCAtMTEx MSwxNyArMTExMSwxNyBAQCBzdGF0aWMgdm9pZCB1c2JfbmV0X2hhbmRsZV9jb250cm9sKFVTQkRl dmljZSAqZGV2LCBVU0JQYWNrZXQgKnAsCiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcC0+ YWN0dWFsX2xlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgaWYgKCEoaSAmIDE1KSkKICAg ICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbiUwNHg6IiwgaSk7Ci0gICAgICAg ICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgJTAyeCIsIGRhdGFbaV0pOworICAgICAgICAgICAg ICAgIGVycm9yX3JlcG9ydCgiICUwMngiLCBkYXRhW2ldKTsKICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG5cbiIpOworICAgICAgICAgICAgZnByaW50ZihzdGRl cnIsICJcbiIpOwogICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgYnJlYWs7CiAKICAgICBkZWZh dWx0OgogICAgIGZhaWw6Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAidXNibmV0OiBmYWlsZWQg Y29udHJvbCB0cmFuc2FjdGlvbjogIgotICAgICAgICAgICAgICAgICAgICAgICAgInJlcXVlc3Qg MHgleCB2YWx1ZSAweCV4IGluZGV4IDB4JXggbGVuZ3RoIDB4JXhcbiIsCisgICAgICAgIGVycm9y X3JlcG9ydCgidXNibmV0OiBmYWlsZWQgY29udHJvbCB0cmFuc2FjdGlvbjogIgorICAgICAgICAg ICAgICAgICAgICAgICAgInJlcXVlc3QgMHgleCB2YWx1ZSAweCV4IGluZGV4IDB4JXggbGVuZ3Ro IDB4JXgiLAogICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCwgdmFsdWUsIGluZGV4LCBs ZW5ndGgpOwogICAgICAgICBwLT5zdGF0dXMgPSBVU0JfUkVUX1NUQUxMOwogICAgICAgICBicmVh azsKQEAgLTExOTAsNyArMTE5MCw3IEBAIHN0YXRpYyB2b2lkIHVzYl9uZXRfaGFuZGxlX2RhdGFv dXQoVVNCTmV0U3RhdGUgKnMsIFVTQlBhY2tldCAqcCkKICAgICB1aW50MzJfdCBsZW47CiAKICNp ZmRlZiBUUkFGRklDX0RFQlVHCi0gICAgZnByaW50ZihzdGRlcnIsICJ1c2JuZXQ6IGRhdGEgb3V0 IGxlbiAlenVcbiIsIHAtPmlvdi5zaXplKTsKKyAgICBlcnJvcl9yZXBvcnQoInVzYm5ldDogZGF0 YSBvdXQgbGVuICV6dSIsIHAtPmlvdi5zaXplKTsKICAgICBpb3ZfaGV4ZHVtcChwLT5pb3YuaW92 LCBwLT5pb3Yubmlvdiwgc3RkZXJyLCAidXNibmV0IiwgcC0+aW92LnNpemUpOwogI2VuZGlmCiAK QEAgLTEyNjAsOCArMTI2MCw4IEBAIHN0YXRpYyB2b2lkIHVzYl9uZXRfaGFuZGxlX2RhdGEoVVNC RGV2aWNlICpkZXYsIFVTQlBhY2tldCAqcCkKICAgICB9CiAKICAgICBpZiAocC0+c3RhdHVzID09 IFVTQl9SRVRfU1RBTEwpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJ1c2JuZXQ6IGZhaWxl ZCBkYXRhIHRyYW5zYWN0aW9uOiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAicGlkIDB4JXgg ZXAgMHgleCBsZW4gMHglenhcbiIsCisgICAgICAgIGVycm9yX3JlcG9ydCgidXNibmV0OiBmYWls ZWQgZGF0YSB0cmFuc2FjdGlvbjogIgorICAgICAgICAgICAgICAgICAgICAgICAgInBpZCAweCV4 IGVwIDB4JXggbGVuIDB4JXp4IiwKICAgICAgICAgICAgICAgICAgICAgICAgIHAtPnBpZCwgcC0+ ZXAtPm5yLCBwLT5pb3Yuc2l6ZSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvaHcvdXNiL2hjZC1l aGNpLmMgYi9ody91c2IvaGNkLWVoY2kuYwppbmRleCA0NmZkMzBiMDc1Li5kNmM4YTU2YWVjIDEw MDY0NAotLS0gYS9ody91c2IvaGNkLWVoY2kuYworKysgYi9ody91c2IvaGNkLWVoY2kuYwpAQCAt NDE5LDcgKzQxOSw3IEBAIHN0YXRpYyBpbnQgZWhjaV9nZXRfcGlkKEVIQ0lxdGQgKnF0ZCkKICAg ICBjYXNlIDI6CiAgICAgICAgIHJldHVybiBVU0JfVE9LRU5fU0VUVVA7CiAgICAgZGVmYXVsdDoK LSAgICAgICAgZnByaW50ZihzdGRlcnIsICJiYWQgdG9rZW5cbiIpOworICAgICAgICBlcnJvcl9y ZXBvcnQoImJhZCB0b2tlbiIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiB9CkBAIC0xMDMz LDcgKzEwMzMsNyBAQCBzdGF0aWMgdm9pZCBlaGNpX29wcmVnX3dyaXRlKHZvaWQgKnB0ciwgaHdh ZGRyIGFkZHIsCiAKICAgICAgICAgLyogbm90IHN1cHBvcnRpbmcgZHluYW1pYyBmcmFtZSBsaXN0 IHNpemUgYXQgdGhlIG1vbWVudCAqLwogICAgICAgICBpZiAoKHZhbCAmIFVTQkNNRF9GTFMpICYm ICEocy0+dXNiY21kICYgVVNCQ01EX0ZMUykpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJy LCAiYXR0ZW1wdCB0byBzZXQgZnJhbWUgbGlzdCBzaXplIC0tIHZhbHVlICVkXG4iLAorICAgICAg ICAgICAgZXJyb3JfcmVwb3J0KCJhdHRlbXB0IHRvIHNldCBmcmFtZSBsaXN0IHNpemUgLS0gdmFs dWUgJWQiLAogICAgICAgICAgICAgICAgICAgICAoaW50KXZhbCAmIFVTQkNNRF9GTFMpOwogICAg ICAgICAgICAgdmFsICY9IH5VU0JDTURfRkxTOwogICAgICAgICB9CkBAIC0xMTkwLDcgKzExOTAs NyBAQCBzdGF0aWMgaW50IGVoY2lfaW5pdF90cmFuc2ZlcihFSENJUGFja2V0ICpwKQogCiAgICAg d2hpbGUgKGJ5dGVzID4gMCkgewogICAgICAgICBpZiAoY3BhZ2UgPiA0KSB7Ci0gICAgICAgICAg ICBmcHJpbnRmKHN0ZGVyciwgImNwYWdlIG91dCBvZiByYW5nZSAoJWQpXG4iLCBjcGFnZSk7Cisg ICAgICAgICAgICBlcnJvcl9yZXBvcnQoImNwYWdlIG91dCBvZiByYW5nZSAoJWQpIiwgY3BhZ2Up OwogICAgICAgICAgICAgcWVtdV9zZ2xpc3RfZGVzdHJveSgmcC0+c2dsKTsKICAgICAgICAgICAg IHJldHVybiAtMTsKICAgICAgICAgfQpAQCAtMTI5Niw3ICsxMjk2LDcgQEAgc3RhdGljIHZvaWQg ZWhjaV9leGVjdXRlX2NvbXBsZXRlKEVIQ0lRdWV1ZSAqcSkKICAgICAgICAgYnJlYWs7CiAgICAg ZGVmYXVsdDoKICAgICAgICAgLyogc2hvdWxkIG5vdCBiZSB0cmlnZ2VyYWJsZSAqLwotICAgICAg ICBmcHJpbnRmKHN0ZGVyciwgIlVTQiBpbnZhbGlkIHJlc3BvbnNlICVkXG4iLCBwLT5wYWNrZXQu c3RhdHVzKTsKKyAgICAgICAgZXJyb3JfcmVwb3J0KCJVU0IgaW52YWxpZCByZXNwb25zZSAlZCIs IHAtPnBhY2tldC5zdGF0dXMpOwogICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwogICAg ICAgICBicmVhazsKICAgICB9CkBAIC0xMzQ1LDcgKzEzNDUsNyBAQCBzdGF0aWMgaW50IGVoY2lf ZXhlY3V0ZShFSENJUGFja2V0ICpwLCBjb25zdCBjaGFyICphY3Rpb24pCiAgICAgICAgICAgIHAt PmFzeW5jID09IEVIQ0lfQVNZTkNfSU5JVElBTElaRUQpOwogCiAgICAgaWYgKCEocC0+cXRkLnRv a2VuICYgUVREX1RPS0VOX0FDVElWRSkpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJBdHRl bXB0aW5nIHRvIGV4ZWN1dGUgaW5hY3RpdmUgcXRkXG4iKTsKKyAgICAgICAgZXJyb3JfcmVwb3J0 KCJBdHRlbXB0aW5nIHRvIGV4ZWN1dGUgaW5hY3RpdmUgcXRkIik7CiAgICAgICAgIHJldHVybiAt MTsKICAgICB9CiAKQEAgLTEzODMsNyArMTM4Myw3IEBAIHN0YXRpYyBpbnQgZWhjaV9leGVjdXRl KEVIQ0lQYWNrZXQgKnAsIGNvbnN0IGNoYXIgKmFjdGlvbikKICAgICAgICAgICAgIHAtPnBhY2tl dC5hY3R1YWxfbGVuZ3RoKTsKIAogICAgIGlmIChwLT5wYWNrZXQuYWN0dWFsX2xlbmd0aCA+IEJV RkZfU0laRSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInJldCBmcm9tIHVzYl9oYW5kbGVf cGFja2V0ID4gQlVGRl9TSVpFXG4iKTsKKyAgICAgICAgZXJyb3JfcmVwb3J0KCJyZXQgZnJvbSB1 c2JfaGFuZGxlX3BhY2tldCA+IEJVRkZfU0laRSIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAg fQogCkBAIC0xNDYxLDcgKzE0NjEsNyBAQCBzdGF0aWMgaW50IGVoY2lfcHJvY2Vzc19pdGQoRUhD SVN0YXRlICplaGNpLAogICAgICAgICAgICAgY2FzZSBVU0JfUkVUX1NVQ0NFU1M6CiAgICAgICAg ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGZw cmludGYoc3RkZXJyLCAiVW5leHBlY3RlZCBpc28gdXNiIHJlc3VsdDogJWRcbiIsCisgICAgICAg ICAgICAgICAgZXJyb3JfcmVwb3J0KCJVbmV4cGVjdGVkIGlzbyB1c2IgcmVzdWx0OiAlZCIsCiAg ICAgICAgICAgICAgICAgICAgICAgICBlaGNpLT5pcGFja2V0LnN0YXR1cyk7CiAgICAgICAgICAg ICAgICAgLyogRmFsbCB0aHJvdWdoICovCiAgICAgICAgICAgICBjYXNlIFVTQl9SRVRfSU9FUlJP UjoKQEAgLTE1NjQsNyArMTU2NCw3IEBAIHN0YXRpYyBpbnQgZWhjaV9zdGF0ZV9mZXRjaGVudHJ5 KEVIQ0lTdGF0ZSAqZWhjaSwgaW50IGFzeW5jKQogCiAgICAgLyogc2VjdGlvbiA0LjgsIG9ubHkg UUggaW4gYXN5bmMgc2NoZWR1bGUgKi8KICAgICBpZiAoYXN5bmMgJiYgKE5MUFRSX1RZUEVfR0VU KGVudHJ5KSAhPSBOTFBUUl9UWVBFX1FIKSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm5v biBxdWV1ZSBoZWFkIHJlcXVlc3QgaW4gYXN5bmMgc2NoZWR1bGVcbiIpOworICAgICAgICBlcnJv cl9yZXBvcnQoIm5vbiBxdWV1ZSBoZWFkIHJlcXVlc3QgaW4gYXN5bmMgc2NoZWR1bGUiKTsKICAg ICAgICAgcmV0dXJuIC0xOwogICAgIH0KIApAQCAtMTU4Niw4ICsxNTg2LDggQEAgc3RhdGljIGlu dCBlaGNpX3N0YXRlX2ZldGNoZW50cnkoRUhDSVN0YXRlICplaGNpLCBpbnQgYXN5bmMpCiAKICAg ICBkZWZhdWx0OgogICAgICAgICAvKiBUT0RPOiBoYW5kbGUgRlNUTiB0eXBlICovCi0gICAgICAg IGZwcmludGYoc3RkZXJyLCAiRkVUQ0hFTlRSWTogZW50cnkgYXQgJVggaXMgb2YgdHlwZSAlZCAi Ci0gICAgICAgICAgICAgICAgIndoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgeWV0XG4iLCBlbnRyeSwg TkxQVFJfVFlQRV9HRVQoZW50cnkpKTsKKyAgICAgICAgZXJyb3JfcmVwb3J0KCJGRVRDSEVOVFJZ OiBlbnRyeSBhdCAlWCBpcyBvZiB0eXBlICVkICIKKyAgICAgICAgICAgICAgICAid2hpY2ggaXMg bm90IHN1cHBvcnRlZCB5ZXQiLCBlbnRyeSwgTkxQVFJfVFlQRV9HRVQoZW50cnkpKTsKICAgICAg ICAgcmV0dXJuIC0xOwogICAgIH0KIApAQCAtMjA4Niw3ICsyMDg2LDcgQEAgc3RhdGljIHZvaWQg ZWhjaV9hZHZhbmNlX3N0YXRlKEVIQ0lTdGF0ZSAqZWhjaSwgaW50IGFzeW5jKQogICAgICAgICAg ICAgYnJlYWs7CiAKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJy LCAiQmFkIHN0YXRlIVxuIik7CisgICAgICAgICAgICBlcnJvcl9yZXBvcnQoIkJhZCBzdGF0ZSEi KTsKICAgICAgICAgICAgIGFnYWluID0gLTE7CiAgICAgICAgICAgICBnX2Fzc2VydF9ub3RfcmVh Y2hlZCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yMDk0LDcgKzIwOTQsNyBAQCBzdGF0aWMg dm9pZCBlaGNpX2FkdmFuY2Vfc3RhdGUoRUhDSVN0YXRlICplaGNpLCBpbnQgYXN5bmMpCiAKICAg ICAgICAgaWYgKGFnYWluIDwgMCB8fCBpdGRfY291bnQgPiAxNikgewogICAgICAgICAgICAgLyog VE9ETzogbm90aWZ5IGd1ZXN0IChyYWlzZSBIU0UgaXJxPykgKi8KLSAgICAgICAgICAgIGZwcmlu dGYoc3RkZXJyLCAicHJvY2Vzc2luZyBlcnJvciAtIHJlc2V0dGluZyBlaGNpIEhDXG4iKTsKKyAg ICAgICAgICAgIGVycm9yX3JlcG9ydCgicHJvY2Vzc2luZyBlcnJvciAtIHJlc2V0dGluZyBlaGNp IEhDIik7CiAgICAgICAgICAgICBlaGNpX3Jlc2V0KGVoY2kpOwogICAgICAgICAgICAgYWdhaW4g PSAwOwogICAgICAgICB9CkBAIC0yMTUxLDggKzIxNTEsOCBAQCBzdGF0aWMgdm9pZCBlaGNpX2Fk dmFuY2VfYXN5bmNfc3RhdGUoRUhDSVN0YXRlICplaGNpKQogCiAgICAgZGVmYXVsdDoKICAgICAg ICAgLyogdGhpcyBzaG91bGQgb25seSBiZSBkdWUgdG8gYSBkZXZlbG9wZXIgbWlzdGFrZSAqLwot ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImVoY2k6IEJhZCBhc3luY2hyb25vdXMgc3RhdGUgJWQu ICIKLSAgICAgICAgICAgICAgICAiUmVzZXR0aW5nIHRvIGFjdGl2ZVxuIiwgZWhjaS0+YXN0YXRl KTsKKyAgICAgICAgZXJyb3JfcmVwb3J0KCJlaGNpOiBCYWQgYXN5bmNocm9ub3VzIHN0YXRlICVk LiAiCisgICAgICAgICAgICAgICAgIlJlc2V0dGluZyB0byBhY3RpdmUiLCBlaGNpLT5hc3RhdGUp OwogICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOwogICAgIH0KIH0KQEAgLTIyMDEsOCAr MjIwMSw4IEBAIHN0YXRpYyB2b2lkIGVoY2lfYWR2YW5jZV9wZXJpb2RpY19zdGF0ZShFSENJU3Rh dGUgKmVoY2kpCiAKICAgICBkZWZhdWx0OgogICAgICAgICAvKiB0aGlzIHNob3VsZCBvbmx5IGJl IGR1ZSB0byBhIGRldmVsb3BlciBtaXN0YWtlICovCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAi ZWhjaTogQmFkIHBlcmlvZGljIHN0YXRlICVkLiAiCi0gICAgICAgICAgICAgICAgIlJlc2V0dGlu ZyB0byBhY3RpdmVcbiIsIGVoY2ktPnBzdGF0ZSk7CisgICAgICAgIGVycm9yX3JlcG9ydCgiZWhj aTogQmFkIHBlcmlvZGljIHN0YXRlICVkLiAiCisgICAgICAgICAgICAgICAgIlJlc2V0dGluZyB0 byBhY3RpdmUiLCBlaGNpLT5wc3RhdGUpOwogICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgp OwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2h3L3VzYi9oY2QtbXVzYi5jIGIvaHcvdXNiL2hjZC1t dXNiLmMKaW5kZXggZDcwYTkxYTU4Yy4uNDcyOTkyNjEyNCAxMDA2NDQKLS0tIGEvaHcvdXNiL2hj ZC1tdXNiLmMKKysrIGIvaHcvdXNiL2hjZC1tdXNiLmMKQEAgLTI1Myw4ICsyNTMsOCBAQAogLyog I2RlZmluZSBNVVNCX0RFQlVHICovCiAKICNpZmRlZiBNVVNCX0RFQlVHCi0jZGVmaW5lIFRSQUNF KGZtdCwgLi4uKSBmcHJpbnRmKHN0ZGVyciwgIiVzQCVkOiAiIGZtdCAiXG4iLCBfX2Z1bmNfXywg XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0xJTkVfXywgIyNfX1ZBX0FSR1Nf XykKKyNkZWZpbmUgVFJBQ0UoZm10LCAuLi4pIGVycm9yX3JlcG9ydCgiJXNAJWQ6ICIgZm10ICIi LCBfX2Z1bmNfXywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fTElO RV9fLCAjI19fVkFfQVJHU19fKQogI2Vsc2UKICNkZWZpbmUgVFJBQ0UoLi4uKQogI2VuZGlmCmRp ZmYgLS1naXQgYS9ody91c2IvaGNkLXhoY2kuYyBiL2h3L3VzYi9oY2QteGhjaS5jCmluZGV4IGQ3 NWMwODVkOTQuLjZjYzFiZTA5YTIgMTAwNjQ0Ci0tLSBhL2h3L3VzYi9oY2QteGhjaS5jCisrKyBi L2h3L3VzYi9oY2QteGhjaS5jCkBAIC0xOSw2ICsxOSw3IEBACiAgKiBMaWNlbnNlIGFsb25nIHdp dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz Lz4uCiAgKi8KICNpbmNsdWRlICJxZW11L29zZGVwLmgiCisjaW5jbHVkZSAicWVtdS9lcnJvci1y ZXBvcnQuaCIKICNpbmNsdWRlICJody9ody5oIgogI2luY2x1ZGUgInFlbXUvdGltZXIuaCIKICNp bmNsdWRlICJxZW11L3F1ZXVlLmgiCkBAIC0zOSw3ICs0MCw3IEBACiAjZWxzZQogI2RlZmluZSBE UFJJTlRGKC4uLikgZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKLSNkZWZpbmUgRklYTUUoX21zZykg ZG8geyBmcHJpbnRmKHN0ZGVyciwgIkZJWE1FICVzOiVkICVzXG4iLCBcCisjZGVmaW5lIEZJWE1F KF9tc2cpIGRvIHsgZXJyb3JfcmVwb3J0KCJGSVhNRSAlczolZCAlcyIsIFwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBfX0xJTkVfXywgX21zZyk7IGFib3J0KCk7 IH0gd2hpbGUgKDApCiAKICNkZWZpbmUgVFJCX0xJTktfTElNSVQgIDMyCmRpZmYgLS1naXQgYS9o dy91c2IvaG9zdC1sZWdhY3kuYyBiL2h3L3VzYi9ob3N0LWxlZ2FjeS5jCmluZGV4IDNiNTdlMjFi NTIuLmYwYzgxZTUzMDkgMTAwNjQ0Ci0tLSBhL2h3L3VzYi9ob3N0LWxlZ2FjeS5jCisrKyBiL2h3 L3VzYi9ob3N0LWxlZ2FjeS5jCkBAIC04Niw3ICs4Niw3IEBAIHN0YXRpYyBpbnQgcGFyc2VfZmls dGVyKGNvbnN0IGNoYXIgKnNwZWMsIHN0cnVjdCBVU0JBdXRvRmlsdGVyICpmKQogICAgIH0KIAog ICAgIGlmIChpIDwgREVWKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiaHVzYjogaW52YWxp ZCBhdXRvIGZpbHRlciBzcGVjICVzXG4iLCBzcGVjKTsKKyAgICAgICAgZXJyb3JfcmVwb3J0KCJo dXNiOiBpbnZhbGlkIGF1dG8gZmlsdGVyIHNwZWMgJXMiLCBzcGVjKTsKICAgICAgICAgcmV0dXJu IC0xOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvaHcvd2F0Y2hkb2cvd2F0Y2hkb2cuYyBiL2h3L3dh dGNoZG9nL3dhdGNoZG9nLmMKaW5kZXggMGM1YzljZGUxYy4uNzZhZTVkMmZlNSAxMDA2NDQKLS0t IGEvaHcvd2F0Y2hkb2cvd2F0Y2hkb2cuYworKysgYi9ody93YXRjaGRvZy93YXRjaGRvZy5jCkBA IC0yMCw2ICsyMCw3IEBACiAgKi8KIAogI2luY2x1ZGUgInFlbXUvb3NkZXAuaCIKKyNpbmNsdWRl ICJxZW11L2Vycm9yLXJlcG9ydC5oIgogI2luY2x1ZGUgInFlbXUvb3B0aW9uLmgiCiAjaW5jbHVk ZSAicWVtdS9jb25maWctZmlsZS5oIgogI2luY2x1ZGUgInFlbXUvcXVldWUuaCIKQEAgLTUxLDcg KzUyLDcgQEAgaW50IHNlbGVjdF93YXRjaGRvZyhjb25zdCBjaGFyICpwKQogICAgIC8qIC13YXRj aGRvZyA/IGxpc3RzIGF2YWlsYWJsZSBkZXZpY2VzIGFuZCBleGl0cyBjbGVhbmx5LiAqLwogICAg IGlmIChpc19oZWxwX29wdGlvbihwKSkgewogICAgICAgICBRTElTVF9GT1JFQUNIKG1vZGVsLCAm d2F0Y2hkb2dfbGlzdCwgZW50cnkpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXHQl c1x0JXNcbiIsCisgICAgICAgICAgICBlcnJvcl9yZXBvcnQoIlx0JXNcdCVzIiwKICAgICAgICAg ICAgICAgICAgICAgIG1vZGVsLT53ZHRfbmFtZSwgbW9kZWwtPndkdF9kZXNjcmlwdGlvbik7CiAg ICAgICAgIH0KICAgICAgICAgcmV0dXJuIDI7CkBAIC02Nyw5ICs2OCw5IEBAIGludCBzZWxlY3Rf d2F0Y2hkb2coY29uc3QgY2hhciAqcCkKICAgICAgICAgfQogICAgIH0KIAotICAgIGZwcmludGYo c3RkZXJyLCAiVW5rbm93biAtd2F0Y2hkb2cgZGV2aWNlLiBTdXBwb3J0ZWQgZGV2aWNlcyBhcmU6 XG4iKTsKKyAgICBlcnJvcl9yZXBvcnQoIlVua25vd24gLXdhdGNoZG9nIGRldmljZS4gU3VwcG9y dGVkIGRldmljZXMgYXJlOiIpOwogICAgIFFMSVNUX0ZPUkVBQ0gobW9kZWwsICZ3YXRjaGRvZ19s aXN0LCBlbnRyeSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlx0JXNcdCVzXG4iLAorICAg ICAgICBlcnJvcl9yZXBvcnQoIlx0JXNcdCVzIiwKICAgICAgICAgICAgICAgICAgbW9kZWwtPndk dF9uYW1lLCBtb2RlbC0+d2R0X2Rlc2NyaXB0aW9uKTsKICAgICB9CiAgICAgcmV0dXJuIDE7CkBA IC0xMzMsNyArMTM0LDcgQEAgdm9pZCB3YXRjaGRvZ19wZXJmb3JtX2FjdGlvbih2b2lkKQogCiAg ICAgY2FzZSBXRFRfREVCVUc6CiAgICAgICAgIHFhcGlfZXZlbnRfc2VuZF93YXRjaGRvZyhXQVRD SERPR19FWFBJUkFUSU9OX0FDVElPTl9ERUJVRywgJmVycm9yX2Fib3J0KTsKLSAgICAgICAgZnBy aW50ZihzdGRlcnIsICJ3YXRjaGRvZzogdGltZXIgZmlyZWRcbiIpOworICAgICAgICBlcnJvcl9y ZXBvcnQoIndhdGNoZG9nOiB0aW1lciBmaXJlZCIpOwogICAgICAgICBicmVhazsKIAogICAgIGNh c2UgV0RUX05PTkU6CmRpZmYgLS1naXQgYS9ody93YXRjaGRvZy93ZHRfaTYzMDBlc2IuYyBiL2h3 L3dhdGNoZG9nL3dkdF9pNjMwMGVzYi5jCmluZGV4IDQ5YjNjZDE4OGEuLmY1OTZmNzBhM2IgMTAw NjQ0Ci0tLSBhL2h3L3dhdGNoZG9nL3dkdF9pNjMwMGVzYi5jCisrKyBiL2h3L3dhdGNoZG9nL3dk dF9pNjMwMGVzYi5jCkBAIC0yMCw3ICsyMCw3IEBACiAgKi8KIAogI2luY2x1ZGUgInFlbXUvb3Nk ZXAuaCIKLQorI2luY2x1ZGUgInFlbXUvZXJyb3ItcmVwb3J0LmgiCiAjaW5jbHVkZSAicWVtdS1j b21tb24uaCIKICNpbmNsdWRlICJxZW11L3RpbWVyLmgiCiAjaW5jbHVkZSAic3lzZW11L3dhdGNo ZG9nLmgiCkBAIC0xODYsMTAgKzE4NiwxMiBAQCBzdGF0aWMgdm9pZCBpNjMwMGVzYl90aW1lcl9l eHBpcmVkKHZvaWQgKnZwKQogICAgICAgICAvKiBXaGF0IHRvIGRvIGF0IHRoZSBlbmQgb2Ygc3Rh Z2UgMT8gKi8KICAgICAgICAgc3dpdGNoIChkLT5pbnRfdHlwZSkgewogICAgICAgICBjYXNlIElO VF9UWVBFX0lSUToKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiaTYzMDBlc2JfdGltZXJf ZXhwaXJlZDogSSB3b3VsZCBzZW5kIEFQSUMgMSBJTlQgMTAgaGVyZSBpZiBJIGtuZXcgaG93IChY WFgpXG4iKTsKKyAgICAgICAgICAgIGVycm9yX3JlcG9ydCgiaTYzMDBlc2JfdGltZXJfZXhwaXJl ZDogSSB3b3VsZCBzZW5kIEFQSUMgMSBJTlQgMTAiCisgICAgICAgICAgICAgICAgICAgICAgICAg ICJoZXJlIGlmIEkga25ldyBob3cgKFhYWCkiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg ICBjYXNlIElOVF9UWVBFX1NNSToKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiaTYzMDBl c2JfdGltZXJfZXhwaXJlZDogSSB3b3VsZCBzZW5kIFNNSSBoZXJlIGlmIEkga25ldyBob3cgKFhY WClcbiIpOworICAgICAgICAgICAgZXJyb3JfcmVwb3J0KCJpNjMwMGVzYl90aW1lcl9leHBpcmVk OiBJIHdvdWxkIHNlbmQgU01JIGhlcmUgaWYgSSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAi a25ldyBob3cgKFhYWCkiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKZGlmZiAt LWdpdCBhL2h3L3hlbi94ZW4tY29tbW9uLmMgYi9ody94ZW4veGVuLWNvbW1vbi5jCmluZGV4IDYz MmE5MzhkY2MuLmE3YzgyMWNmY2YgMTAwNjQ0Ci0tLSBhL2h3L3hlbi94ZW4tY29tbW9uLmMKKysr IGIvaHcveGVuL3hlbi1jb21tb24uYwpAQCAtNDcsMTkgKzQ3LDE5IEBAIHN0YXRpYyBpbnQgc3Rv cmVfZGV2X2luZm8oaW50IGRvbWlkLCBDaGFyZGV2ICpjcywgY29uc3QgY2hhciAqc3RyaW5nKQog ICAgIC8qIFdlIG5vdyBoYXZlIGV2ZXJ5dGhpbmcgd2UgbmVlZCB0byBzZXQgdGhlIHhlbnN0b3Jl IGVudHJ5LiAqLwogICAgIHhzID0geHNfb3BlbigwKTsKICAgICBpZiAoeHMgPT0gTlVMTCkgewot ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBjb250YWN0IFhlblN0b3JlXG4iKTsK KyAgICAgICAgZXJyb3JfcmVwb3J0KCJDb3VsZCBub3QgY29udGFjdCBYZW5TdG9yZSIpOwogICAg ICAgICBnb3RvIG91dDsKICAgICB9CiAKICAgICBwYXRoID0geHNfZ2V0X2RvbWFpbl9wYXRoKHhz LCBkb21pZCk7CiAgICAgaWYgKHBhdGggPT0gTlVMTCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVy ciwgInhzX2dldF9kb21haW5fcGF0aCgpIGVycm9yXG4iKTsKKyAgICAgICAgZXJyb3JfcmVwb3J0 KCJ4c19nZXRfZG9tYWluX3BhdGgoKSBlcnJvciIpOwogICAgICAgICBnb3RvIG91dDsKICAgICB9 CiAgICAgbmV3cGF0aCA9IHJlYWxsb2MocGF0aCwgKHN0cmxlbihwYXRoKSArIHN0cmxlbihzdHJp bmcpICsKICAgICAgICAgICAgICAgICBzdHJsZW4oIi90dHkiKSArIDEpKTsKICAgICBpZiAobmV3 cGF0aCA9PSBOVUxMKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAicmVhbGxvYyBlcnJvclxu Iik7CisgICAgICAgIGVycm9yX3JlcG9ydCgicmVhbGxvYyBlcnJvciIpOwogICAgICAgICBnb3Rv IG91dDsKICAgICB9CiAgICAgcGF0aCA9IG5ld3BhdGg7CkBAIC05NiwxMyArOTYsMTMgQEAgc3Rh dGljIHZvaWQgeGVuc3RvcmVfcmVjb3JkX2RtX3N0YXRlKHN0cnVjdCB4c19oYW5kbGUgKnhzLCBj b25zdCBjaGFyICpzdGF0ZSkKICAgICBjaGFyIHBhdGhbNTBdOwogCiAgICAgaWYgKHhzID09IE5V TEwpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJ4ZW5zdG9yZSBjb25uZWN0aW9uIG5vdCBp bml0aWFsaXplZFxuIik7CisgICAgICAgIGVycm9yX3JlcG9ydCgieGVuc3RvcmUgY29ubmVjdGlv biBub3QgaW5pdGlhbGl6ZWQiKTsKICAgICAgICAgZXhpdCgxKTsKICAgICB9CiAKICAgICBzbnBy aW50ZihwYXRoLCBzaXplb2YgKHBhdGgpLCAiZGV2aWNlLW1vZGVsLyV1L3N0YXRlIiwgeGVuX2Rv bWlkKTsKICAgICBpZiAoIXhzX3dyaXRlKHhzLCBYQlRfTlVMTCwgcGF0aCwgc3RhdGUsIHN0cmxl bihzdGF0ZSkpKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiZXJyb3IgcmVjb3JkaW5nIGRt IHN0YXRlXG4iKTsKKyAgICAgICAgZXJyb3JfcmVwb3J0KCJlcnJvciByZWNvcmRpbmcgZG0gc3Rh dGUiKTsKICAgICAgICAgZXhpdCgxKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9ody94ZW4veGVu X3B0LmMgYi9ody94ZW4veGVuX3B0LmMKaW5kZXggMzc1ZWZhNjhmNi4uZTg2ZDM4MGQwMiAxMDA2 NDQKLS0tIGEvaHcveGVuL3hlbl9wdC5jCisrKyBiL2h3L3hlbi94ZW5fcHQuYwpAQCAtNzMsNyAr NzMsNyBAQCB2b2lkIHhlbl9wdF9sb2coY29uc3QgUENJRGV2aWNlICpkLCBjb25zdCBjaGFyICpm LCAuLi4pCiAKICAgICB2YV9zdGFydChhcCwgZik7CiAgICAgaWYgKGQpIHsKLSAgICAgICAgZnBy aW50ZihzdGRlcnIsICJbJTAyeDolMDJ4LiVkXSAiLCBwY2lfYnVzX251bShkLT5idXMpLAorICAg ICAgICBlcnJvcl9yZXBvcnQoIlslMDJ4OiUwMnguJWRdICIsIHBjaV9idXNfbnVtKGQtPmJ1cyks CiAgICAgICAgICAgICAgICAgUENJX1NMT1QoZC0+ZGV2Zm4pLCBQQ0lfRlVOQyhkLT5kZXZmbikp OwogICAgIH0KICAgICB2ZnByaW50ZihzdGRlcnIsIGYsIGFwKTsKQEAgLTg3LDcgKzg3LDcgQEAg c3RhdGljIGludCB4ZW5fcHRfcGNpX2NvbmZpZ19hY2Nlc3NfY2hlY2soUENJRGV2aWNlICpkLCB1 aW50MzJfdCBhZGRyLCBpbnQgbGVuKQogICAgIC8qIGNoZWNrIG9mZnNldCByYW5nZSAqLwogICAg IGlmIChhZGRyID4gMHhGRikgewogICAgICAgICBYRU5fUFRfRVJSKGQsICJGYWlsZWQgdG8gYWNj ZXNzIHJlZ2lzdGVyIHdpdGggb2Zmc2V0IGV4Y2VlZGluZyAweEZGLiAiCi0gICAgICAgICAgICAg ICAgICAgIihhZGRyOiAweCUwMngsIGxlbjogJWQpXG4iLCBhZGRyLCBsZW4pOworICAgICAgICAg ICAgICAgICAgICIoYWRkcjogMHglMDJ4LCBsZW46ICVkKSIsIGFkZHIsIGxlbik7CiAgICAgICAg IHJldHVybiAtMTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2h3L3hlbnB2L3hlbl9kb21haW5idWls ZC5jIGIvaHcveGVucHYveGVuX2RvbWFpbmJ1aWxkLmMKaW5kZXggMDI3Zjc2ZmFkMS4uZjU1MTRm ZmVjMiAxMDA2NDQKLS0tIGEvaHcveGVucHYveGVuX2RvbWFpbmJ1aWxkLmMKKysrIGIvaHcveGVu cHYveGVuX2RvbWFpbmJ1aWxkLmMKQEAgLTI1LDIyICsyNSwyMiBAQCBzdGF0aWMgaW50IHhlbnN0 b3JlX2RvbWFpbl9ta2RpcihjaGFyICpwYXRoKQogICAgIGludCBpOwogCiAgICAgaWYgKCF4c19t a2Rpcih4ZW5zdG9yZSwgMCwgcGF0aCkpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczog eHNfbWtkaXIgJXM6IGZhaWxlZFxuIiwgX19mdW5jX18sIHBhdGgpOwotCXJldHVybiAtMTsKKyAg ICAgICAgZXJyb3JfcmVwb3J0KCIlczogeHNfbWtkaXIgJXM6IGZhaWxlZCIsIF9fZnVuY19fLCBw YXRoKTsKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICBpZiAoIXhzX3NldF9wZXJtaXNz aW9ucyh4ZW5zdG9yZSwgMCwgcGF0aCwgcGVybXNfcm8sIDIpKSB7Ci0gICAgICAgIGZwcmludGYo c3RkZXJyLCAiJXM6IHhzX3NldF9wZXJtaXNzaW9ucyBmYWlsZWRcbiIsIF9fZnVuY19fKTsKLQly ZXR1cm4gLTE7CisgICAgICAgIGVycm9yX3JlcG9ydCgiJXM6IHhzX3NldF9wZXJtaXNzaW9ucyBm YWlsZWQiLCBfX2Z1bmNfXyk7CisgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKICAgICBmb3Ig KGkgPSAwOyB3cml0YWJsZVtpXTsgaSsrKSB7CiAgICAgICAgIHNucHJpbnRmKHN1YnBhdGgsIHNp emVvZihzdWJwYXRoKSwgIiVzLyVzIiwgcGF0aCwgd3JpdGFibGVbaV0pOwogICAgICAgICBpZiAo IXhzX21rZGlyKHhlbnN0b3JlLCAwLCBzdWJwYXRoKSkgewotICAgICAgICAgICAgZnByaW50Zihz dGRlcnIsICIlczogeHNfbWtkaXIgJXM6IGZhaWxlZFxuIiwgX19mdW5jX18sIHN1YnBhdGgpOwor ICAgICAgICAgICAgZXJyb3JfcmVwb3J0KCIlczogeHNfbWtkaXIgJXM6IGZhaWxlZCIsIF9fZnVu Y19fLCBzdWJwYXRoKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgICAg ICBpZiAoIXhzX3NldF9wZXJtaXNzaW9ucyh4ZW5zdG9yZSwgMCwgc3VicGF0aCwgcGVybXNfcncs IDIpKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiB4c19zZXRfcGVybWlzc2lv bnMgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisgICAgICAgICAgICBlcnJvcl9yZXBvcnQoIiVzOiB4 c19zZXRfcGVybWlzc2lvbnMgZmFpbGVkIiwgX19mdW5jX18pOwogICAgICAgICAgICAgcmV0dXJu IC0xOwogICAgICAgICB9CiAgICAgfQpAQCAtMjM1LDcgKzIzNSw3IEBAIGludCB4ZW5fZG9tYWlu X2J1aWxkX3B2KGNvbnN0IGNoYXIgKmtlcm5lbCwgY29uc3QgY2hhciAqcmFtZGlzaywKICAgICBt ZW1jcHkodXVpZCwgJnFlbXVfdXVpZCwgc2l6ZW9mKHV1aWQpKTsKICAgICByYyA9IHhlbl9kb21h aW5fY3JlYXRlKHhlbl94Yywgc3NpZHJlZiwgdXVpZCwgZmxhZ3MsICZ4ZW5fZG9taWQpOwogICAg IGlmIChyYyA8IDApIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJ4ZW46IHhjX2RvbWFpbl9j cmVhdGUoKSBmYWlsZWRcbiIpOworICAgICAgICBlcnJvcl9yZXBvcnQoInhlbjogeGNfZG9tYWlu X2NyZWF0ZSgpIGZhaWxlZCIpOwogICAgICAgICBnb3RvIGVycjsKICAgICB9CiAgICAgcWVtdV9s b2coInhlbjogY3JlYXRlZCBkb21haW4gJWRcbiIsIHhlbl9kb21pZCk7CkBAIC0yNDgsMjEgKzI0 OCwyMSBAQCBpbnQgeGVuX2RvbWFpbl9idWlsZF9wdihjb25zdCBjaGFyICprZXJuZWwsIGNvbnN0 IGNoYXIgKnJhbWRpc2ssCiAKICAgICByYyA9IHhjX2RvbWFpbl9tYXhfdmNwdXMoeGVuX3hjLCB4 ZW5fZG9taWQsIHNtcF9jcHVzKTsKICAgICBpZiAocmMgPCAwKSB7Ci0gICAgICAgIGZwcmludGYo c3RkZXJyLCAieGVuOiB4Y19kb21haW5fbWF4X3ZjcHVzKCkgZmFpbGVkXG4iKTsKKyAgICAgICAg ZXJyb3JfcmVwb3J0KCJ4ZW46IHhjX2RvbWFpbl9tYXhfdmNwdXMoKSBmYWlsZWQiKTsKICAgICAg ICAgZ290byBlcnI7CiAgICAgfQogCiAjaWYgMAogICAgIHJjID0geGNfZG9tYWluX3NldGNwdXdl aWdodCh4ZW5feGMsIHhlbl9kb21pZCwgMjU2KTsKICAgICBpZiAocmMgPCAwKSB7Ci0gICAgICAg IGZwcmludGYoc3RkZXJyLCAieGVuOiB4Y19kb21haW5fc2V0Y3B1d2VpZ2h0KCkgZmFpbGVkXG4i KTsKKyAgICAgICAgZXJyb3JfcmVwb3J0KCJ4ZW46IHhjX2RvbWFpbl9zZXRjcHV3ZWlnaHQoKSBm YWlsZWQiKTsKICAgICAgICAgZ290byBlcnI7CiAgICAgfQogI2VuZGlmCiAKICAgICByYyA9IHhj X2RvbWFpbl9zZXRtYXhtZW0oeGVuX3hjLCB4ZW5fZG9taWQsIHJhbV9zaXplID4+IDEwKTsKICAg ICBpZiAocmMgPCAwKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAieGVuOiB4Y19kb21haW5f c2V0bWF4bWVtKCkgZmFpbGVkXG4iKTsKKyAgICAgICAgZXJyb3JfcmVwb3J0KCJ4ZW46IHhjX2Rv bWFpbl9zZXRtYXhtZW0oKSBmYWlsZWQiKTsKICAgICAgICAgZ290byBlcnI7CiAgICAgfQogCkBA IC0yNzUsNyArMjc1LDcgQEAgaW50IHhlbl9kb21haW5fYnVpbGRfcHYoY29uc3QgY2hhciAqa2Vy bmVsLCBjb25zdCBjaGFyICpyYW1kaXNrLAogICAgICAgICAgICAgICAgICAgICAgICAgeGVuc3Rv cmVfcG9ydCwgJnhlbnN0b3JlX21mbiwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGVf cG9ydCwgJmNvbnNvbGVfbWZuKTsKICAgICBpZiAocmMgPCAwKSB7Ci0gICAgICAgIGZwcmludGYo c3RkZXJyLCAieGVuOiB4Y19saW51eF9idWlsZCgpIGZhaWxlZFxuIik7CisgICAgICAgIGVycm9y X3JlcG9ydCgieGVuOiB4Y19saW51eF9idWlsZCgpIGZhaWxlZCIpOwogICAgICAgICBnb3RvIGVy cjsKICAgICB9CiAKQEAgLTI4NSw3ICsyODUsNyBAQCBpbnQgeGVuX2RvbWFpbl9idWlsZF9wdihj b25zdCBjaGFyICprZXJuZWwsIGNvbnN0IGNoYXIgKnJhbWRpc2ssCiAgICAgcWVtdV9sb2coInhl bjogdW5wYXVzaW5nIGRvbWFpbiAlZFxuIiwgeGVuX2RvbWlkKTsKICAgICByYyA9IHhjX2RvbWFp bl91bnBhdXNlKHhlbl94YywgeGVuX2RvbWlkKTsKICAgICBpZiAocmMgPCAwKSB7Ci0gICAgICAg IGZwcmludGYoc3RkZXJyLCAieGVuOiB4Y19kb21haW5fdW5wYXVzZSgpIGZhaWxlZFxuIik7Cisg ICAgICAgIGVycm9yX3JlcG9ydCgieGVuOiB4Y19kb21haW5fdW5wYXVzZSgpIGZhaWxlZCIpOwog ICAgICAgICBnb3RvIGVycjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2h3L3hlbnB2L3hlbl9tYWNo aW5lX3B2LmMgYi9ody94ZW5wdi94ZW5fbWFjaGluZV9wdi5jCmluZGV4IDY5YTUyYTlmOTMuLmFj NDE5ZTE2NGIgMTAwNjQ0Ci0tLSBhL2h3L3hlbnB2L3hlbl9tYWNoaW5lX3B2LmMKKysrIGIvaHcv eGVucHYveGVuX21hY2hpbmVfcHYuYwpAQCAtMzYsNyArMzYsNyBAQCBzdGF0aWMgdm9pZCB4ZW5f aW5pdF9wdihNYWNoaW5lU3RhdGUgKm1hY2hpbmUpCiAKICAgICAvKiBJbml0aWFsaXplIGJhY2tl bmQgY29yZSAmIGRyaXZlcnMgKi8KICAgICBpZiAoeGVuX2JlX2luaXQoKSAhPSAwKSB7Ci0gICAg ICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IHhlbiBiYWNrZW5kIGNvcmUgc2V0dXAgZmFpbGVkXG4i LCBfX2Z1bmNfXyk7CisgICAgICAgIGVycm9yX3JlcG9ydCgiJXM6IHhlbiBiYWNrZW5kIGNvcmUg c2V0dXAgZmFpbGVkIiwgX19mdW5jX18pOwogICAgICAgICBleGl0KDEpOwogICAgIH0KIApAQCAt NTEsMTggKzUxLDE4IEBAIHN0YXRpYyB2b2lkIHhlbl9pbml0X3B2KE1hY2hpbmVTdGF0ZSAqbWFj aGluZSkKICAgICAgICAgY29uc3QgY2hhciAqaW5pdHJkX2ZpbGVuYW1lID0gbWFjaGluZS0+aW5p dHJkX2ZpbGVuYW1lOwogICAgICAgICBpZiAoeGVuX2RvbWFpbl9idWlsZF9wdihrZXJuZWxfZmls ZW5hbWUsIGluaXRyZF9maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg a2VybmVsX2NtZGxpbmUpIDwgMCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJ4ZW4g cHYgZG9tYWluIGNyZWF0aW9uIGZhaWxlZFxuIik7CisgICAgICAgICAgICBlcnJvcl9yZXBvcnQo InhlbiBwdiBkb21haW4gY3JlYXRpb24gZmFpbGVkIik7CiAgICAgICAgICAgICBleGl0KDEpOwog ICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KICNlbmRpZgogICAgIGNhc2UgWEVOX0VN VUxBVEU6Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAieGVuIGVtdWxhdGlvbiBub3QgaW1wbGVt ZW50ZWQgKHlldClcbiIpOworICAgICAgICBlcnJvcl9yZXBvcnQoInhlbiBlbXVsYXRpb24gbm90 IGltcGxlbWVudGVkICh5ZXQpIik7CiAgICAgICAgIGV4aXQoMSk7CiAgICAgICAgIGJyZWFrOwog ICAgIGRlZmF1bHQ6Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAidW5oYW5kbGVkIHhlbl9tb2Rl ICVkXG4iLCB4ZW5fbW9kZSk7CisgICAgICAgIGVycm9yX3JlcG9ydCgidW5oYW5kbGVkIHhlbl9t b2RlICVkIiwgeGVuX21vZGUpOwogICAgICAgICBleGl0KDEpOwogICAgICAgICBicmVhazsKICAg ICB9Ci0tIAoyLjExLjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0 dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK