From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:38258) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1f8BDC-0008Cx-TE for qemu-devel@nongnu.org; Mon, 16 Apr 2018 16:58:57 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1f8BD9-0001qV-Cn for qemu-devel@nongnu.org; Mon, 16 Apr 2018 16:58:54 -0400 MIME-Version: 1.0 In-Reply-To: <20180415234307.28132-15-f4bug@amsat.org> References: <20180415234307.28132-1-f4bug@amsat.org> <20180415234307.28132-15-f4bug@amsat.org> From: Alistair Francis Date: Mon, 16 Apr 2018 13:58:11 -0700 Message-ID: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [Xen-devel] [PATCH v3 14/41] hw/display: Use the BYTE-based definitions List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: =?UTF-8?Q?Philippe_Mathieu=2DDaud=C3=A9?= Cc: QEMU Trivial , Thomas Huth , Stefano Stabellini , "Michael S. Tsirkin" , Alistair Francis , "qemu-devel@nongnu.org Developers" , "open list:Xilinx ZynqMP" , Gerd Hoffmann , "open list:X86" , Anthony Perard , "Edgar E. Iglesias" On Sun, Apr 15, 2018 at 4:42 PM, Philippe Mathieu-Daud=C3=A9 wrote: > It eases code review, unit is explicit. > > Patch generated using: > > $ git grep -E '(1024|2048|4096|8192|(<<|>>).?(10|20|30))' hw/ include/h= w/ > > and modified manually. > > Signed-off-by: Philippe Mathieu-Daud=C3=A9 > Reviewed-by: Gerd Hoffmann Reviewed-by: Alistair Francis Alistair > --- > include/hw/display/xlnx_dp.h | 5 +++-- > hw/display/cirrus_vga.c | 10 +++++----- > hw/display/g364fb.c | 3 ++- > hw/display/qxl.c | 27 ++++++++++++--------------- > hw/display/sm501.c | 2 +- > hw/display/vga-isa-mm.c | 5 +++-- > hw/display/vga.c | 5 +++-- > hw/display/virtio-gpu.c | 4 ++-- > hw/display/vmware_vga.c | 3 ++- > hw/display/xenfb.c | 3 ++- > 10 files changed, 35 insertions(+), 32 deletions(-) > > diff --git a/include/hw/display/xlnx_dp.h b/include/hw/display/xlnx_dp.h > index ee046a5fac..8fb604dee0 100644 > --- a/include/hw/display/xlnx_dp.h > +++ b/include/hw/display/xlnx_dp.h > @@ -29,14 +29,15 @@ > #include "hw/display/dpcd.h" > #include "hw/i2c/i2c-ddc.h" > #include "qemu/fifo8.h" > +#include "qemu/units.h" > #include "hw/dma/xlnx_dpdma.h" > #include "audio/audio.h" > > #ifndef XLNX_DP_H > #define XLNX_DP_H > > -#define AUD_CHBUF_MAX_DEPTH 32768 > -#define MAX_QEMU_BUFFER_SIZE 4096 > +#define AUD_CHBUF_MAX_DEPTH (32 * K_BYTE) > +#define MAX_QEMU_BUFFER_SIZE (4 * K_BYTE) > > #define DP_CORE_REG_ARRAY_SIZE (0x3AF >> 2) > #define DP_AVBUF_REG_ARRAY_SIZE (0x238 >> 2) > diff --git a/hw/display/cirrus_vga.c b/hw/display/cirrus_vga.c > index 138ae961b9..b6d6263297 100644 > --- a/hw/display/cirrus_vga.c > +++ b/hw/display/cirrus_vga.c > @@ -27,6 +27,7 @@ > * available at http://home.worldonline.dk/~finth/ > */ > #include "qemu/osdep.h" > +#include "qemu/units.h" > #include "qapi/error.h" > #include "trace.h" > #include "hw/hw.h" > @@ -2218,7 +2219,7 @@ static inline void cirrus_cursor_compute_yrange(Cir= rusVGAState *s) > uint32_t content; > int y, y_min, y_max; > > - src =3D s->vga.vram_ptr + s->real_vram_size - 16 * 1024; > + src =3D s->vga.vram_ptr + s->real_vram_size - 16 * K_BYTE; > if (s->vga.sr[0x12] & CIRRUS_CURSOR_LARGE) { > src +=3D (s->vga.sr[0x13] & 0x3c) * 256; > y_min =3D 64; > @@ -2347,7 +2348,7 @@ static void cirrus_cursor_draw_line(VGACommonState = *s1, uint8_t *d1, int scr_y) > return; > } > > - src =3D s->vga.vram_ptr + s->real_vram_size - 16 * 1024; > + src =3D s->vga.vram_ptr + s->real_vram_size - 16 * K_BYTE; > if (s->vga.sr[0x12] & CIRRUS_CURSOR_LARGE) { > src +=3D (s->vga.sr[0x13] & 0x3c) * 256; > src +=3D (scr_y - s->vga.hw_cursor_y) * 16; > @@ -2995,8 +2996,7 @@ static void cirrus_init_common(CirrusVGAState *s, O= bject *owner, > > /* I/O handler for LFB */ > memory_region_init_io(&s->cirrus_linear_io, owner, &cirrus_linear_io= _ops, s, > - "cirrus-linear-io", s->vga.vram_size_mb > - * 1024 * 1024); > + "cirrus-linear-io", s->vga.vram_size_mb * M_BY= TE); > memory_region_set_flush_coalesced(&s->cirrus_linear_io); > > /* I/O handler for LFB */ > @@ -3013,7 +3013,7 @@ static void cirrus_init_common(CirrusVGAState *s, O= bject *owner, > memory_region_set_flush_coalesced(&s->cirrus_mmio_io); > > s->real_vram_size =3D > - (s->device_id =3D=3D CIRRUS_ID_CLGD5446) ? 4096 * 1024 : 2048 * = 1024; > + (s->device_id =3D=3D CIRRUS_ID_CLGD5446) ? 4 * M_BYTE : 2 * M_BY= TE; > > /* XXX: s->vga.vram_size must be a power of two */ > s->cirrus_addr_mask =3D s->real_vram_size - 1; > diff --git a/hw/display/g364fb.c b/hw/display/g364fb.c > index 3d75394e77..2e7af33427 100644 > --- a/hw/display/g364fb.c > +++ b/hw/display/g364fb.c > @@ -18,6 +18,7 @@ > */ > > #include "qemu/osdep.h" > +#include "qemu/units.h" > #include "hw/hw.h" > #include "qemu/error-report.h" > #include "ui/console.h" > @@ -511,7 +512,7 @@ static void g364fb_sysbus_reset(DeviceState *d) > > static Property g364fb_sysbus_properties[] =3D { > DEFINE_PROP_UINT32("vram_size", G364SysBusState, g364.vram_size, > - 8 * 1024 * 1024), > + 8 * M_BYTE), > DEFINE_PROP_END_OF_LIST(), > }; > > diff --git a/hw/display/qxl.c b/hw/display/qxl.c > index a71714ccb4..f0340ae355 100644 > --- a/hw/display/qxl.c > +++ b/hw/display/qxl.c > @@ -19,6 +19,7 @@ > */ > > #include "qemu/osdep.h" > +#include "qemu/units.h" > #include > > #include "qapi/error.h" > @@ -2012,11 +2013,11 @@ static void qxl_init_ramsize(PCIQXLDevice *qxl) > if (qxl->vgamem_size_mb > 256) { > qxl->vgamem_size_mb =3D 256; > } > - qxl->vgamem_size =3D qxl->vgamem_size_mb * 1024 * 1024; > + qxl->vgamem_size =3D qxl->vgamem_size_mb * M_BYTE; > > /* vga ram (bar 0, total) */ > if (qxl->ram_size_mb !=3D -1) { > - qxl->vga.vram_size =3D qxl->ram_size_mb * 1024 * 1024; > + qxl->vga.vram_size =3D qxl->ram_size_mb * M_BYTE; > } > if (qxl->vga.vram_size < qxl->vgamem_size * 2) { > qxl->vga.vram_size =3D qxl->vgamem_size * 2; > @@ -2024,7 +2025,7 @@ static void qxl_init_ramsize(PCIQXLDevice *qxl) > > /* vram32 (surfaces, 32bit, bar 1) */ > if (qxl->vram32_size_mb !=3D -1) { > - qxl->vram32_size =3D qxl->vram32_size_mb * 1024 * 1024; > + qxl->vram32_size =3D qxl->vram32_size_mb * M_BYTE; > } > if (qxl->vram32_size < 4096) { > qxl->vram32_size =3D 4096; > @@ -2032,7 +2033,7 @@ static void qxl_init_ramsize(PCIQXLDevice *qxl) > > /* vram (surfaces, 64bit, bar 4+5) */ > if (qxl->vram_size_mb !=3D -1) { > - qxl->vram_size =3D (uint64_t)qxl->vram_size_mb * 1024 * 1024; > + qxl->vram_size =3D (uint64_t)qxl->vram_size_mb * M_BYTE; > } > if (qxl->vram_size < qxl->vram32_size) { > qxl->vram_size =3D qxl->vram32_size; > @@ -2134,13 +2135,10 @@ static void qxl_realize_common(PCIQXLDevice *qxl,= Error **errp) > } > > /* print pci bar details */ > - dprint(qxl, 1, "ram/%s: %d MB [region 0]\n", > - qxl->id =3D=3D 0 ? "pri" : "sec", > - qxl->vga.vram_size / (1024*1024)); > - dprint(qxl, 1, "vram/32: %" PRIx64 "d MB [region 1]\n", > - qxl->vram32_size / (1024*1024)); > - dprint(qxl, 1, "vram/64: %" PRIx64 "d MB %s\n", > - qxl->vram_size / (1024*1024), > + dprint(qxl, 1, "ram/%s: %llu MB [region 0]\n", > + qxl->id =3D=3D 0 ? "pri" : "sec", qxl->vga.vram_size / M_BYTE= ); > + dprint(qxl, 1, "vram/32: %llu MB [region 1]\n", qxl->vram32_size / M= _BYTE); > + dprint(qxl, 1, "vram/64: %llu MB %s\n", qxl->vram_size / M_BYTE, > qxl->vram32_size < qxl->vram_size ? "[region 4]" : "[unmapped= ]"); > > qxl->ssd.qxl.base.sif =3D &qxl_interface.base; > @@ -2167,7 +2165,7 @@ static void qxl_realize_primary(PCIDevice *dev, Err= or **errp) > qxl->id =3D 0; > qxl_init_ramsize(qxl); > vga->vbe_size =3D qxl->vgamem_size; > - vga->vram_size_mb =3D qxl->vga.vram_size >> 20; > + vga->vram_size_mb =3D qxl->vga.vram_size / M_BYTE; > vga_common_init(vga, OBJECT(dev), true); > vga_init(vga, OBJECT(dev), > pci_address_space(dev), pci_address_space_io(dev), false); > @@ -2392,9 +2390,8 @@ static VMStateDescription qxl_vmstate =3D { > > static Property qxl_properties[] =3D { > DEFINE_PROP_UINT32("ram_size", PCIQXLDevice, vga.vram_size, > - 64 * 1024 * 1024), > - DEFINE_PROP_UINT64("vram_size", PCIQXLDevice, vram32_size, > - 64 * 1024 * 1024), > + 64 * M_BYTE), > + DEFINE_PROP_UINT64("vram_size", PCIQXLDevice, vram32_size, 64 * = M_BYTE), > DEFINE_PROP_UINT32("revision", PCIQXLDevice, revision, > QXL_DEFAULT_REVISION), > DEFINE_PROP_UINT32("debug", PCIQXLDevice, debug, 0), > diff --git a/hw/display/sm501.c b/hw/display/sm501.c > index f4bb33c279..0450c2dd25 100644 > --- a/hw/display/sm501.c > +++ b/hw/display/sm501.c > @@ -24,7 +24,7 @@ > */ > > #include "qemu/osdep.h" > -#include "qemu/cutils.h" > +#include "qemu/units.h" > #include "qapi/error.h" > #include "qemu-common.h" > #include "cpu.h" > diff --git a/hw/display/vga-isa-mm.c b/hw/display/vga-isa-mm.c > index e887b45651..e7ef62e434 100644 > --- a/hw/display/vga-isa-mm.c > +++ b/hw/display/vga-isa-mm.c > @@ -22,12 +22,13 @@ > * THE SOFTWARE. > */ > #include "qemu/osdep.h" > +#include "qemu/units.h" > #include "hw/hw.h" > #include "hw/display/vga.h" > #include "vga_int.h" > #include "ui/pixel_ops.h" > > -#define VGA_RAM_SIZE (8192 * 1024) > +#define VGA_RAM_SIZE (8 * M_BYTE) > > typedef struct ISAVGAMMState { > VGACommonState vga; > @@ -130,7 +131,7 @@ int isa_vga_mm_init(hwaddr vram_base, > > s =3D g_malloc0(sizeof(*s)); > > - s->vga.vram_size_mb =3D VGA_RAM_SIZE >> 20; > + s->vga.vram_size_mb =3D VGA_RAM_SIZE / M_BYTE; > vga_common_init(&s->vga, NULL, true); > vga_mm_init(s, vram_base, ctrl_base, it_shift, address_space); > > diff --git a/hw/display/vga.c b/hw/display/vga.c > index 72181330b8..848f8986e7 100644 > --- a/hw/display/vga.c > +++ b/hw/display/vga.c > @@ -22,6 +22,7 @@ > * THE SOFTWARE. > */ > #include "qemu/osdep.h" > +#include "qemu/units.h" > #include "qapi/error.h" > #include "hw/hw.h" > #include "hw/display/vga.h" > @@ -721,7 +722,7 @@ uint32_t vbe_ioport_read_data(void *opaque, uint32_t = addr) > val =3D s->vbe_regs[s->vbe_index]; > } > } else if (s->vbe_index =3D=3D VBE_DISPI_INDEX_VIDEO_MEMORY_64K) { > - val =3D s->vbe_size / (64 * 1024); > + val =3D s->vbe_size / (64 * K_BYTE); > } else { > val =3D 0; > } > @@ -2177,7 +2178,7 @@ void vga_common_init(VGACommonState *s, Object *obj= , bool global_vmstate) > > s->vram_size_mb =3D uint_clamp(s->vram_size_mb, 1, 512); > s->vram_size_mb =3D pow2ceil(s->vram_size_mb); > - s->vram_size =3D s->vram_size_mb << 20; > + s->vram_size =3D s->vram_size_mb * M_BYTE; > > if (!s->vbe_size) { > s->vbe_size =3D s->vram_size; > diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c > index 2dd3c3481a..7bfa61faf4 100644 > --- a/hw/display/virtio-gpu.c > +++ b/hw/display/virtio-gpu.c > @@ -12,6 +12,7 @@ > */ > > #include "qemu/osdep.h" > +#include "qemu/units.h" > #include "qemu-common.h" > #include "qemu/iov.h" > #include "ui/console.h" > @@ -1314,8 +1315,7 @@ static const VMStateDescription vmstate_virtio_gpu = =3D { > > static Property virtio_gpu_properties[] =3D { > DEFINE_PROP_UINT32("max_outputs", VirtIOGPU, conf.max_outputs, 1), > - DEFINE_PROP_SIZE("max_hostmem", VirtIOGPU, conf.max_hostmem, > - 256 * 1024 * 1024), > + DEFINE_PROP_SIZE("max_hostmem", VirtIOGPU, conf.max_hostmem, 256 * M= _BYTE), > #ifdef CONFIG_VIRGL > DEFINE_PROP_BIT("virgl", VirtIOGPU, conf.flags, > VIRTIO_GPU_FLAG_VIRGL_ENABLED, true), > diff --git a/hw/display/vmware_vga.c b/hw/display/vmware_vga.c > index bd3e8b3586..aebba3bfd8 100644 > --- a/hw/display/vmware_vga.c > +++ b/hw/display/vmware_vga.c > @@ -22,6 +22,7 @@ > * THE SOFTWARE. > */ > #include "qemu/osdep.h" > +#include "qemu/units.h" > #include "qapi/error.h" > #include "hw/hw.h" > #include "hw/loader.h" > @@ -565,7 +566,7 @@ static inline int vmsvga_fifo_length(struct vmsvga_st= ate_s *s) > s->fifo_next >=3D SVGA_FIFO_SIZE) { > return 0; > } > - if (s->fifo_max < s->fifo_min + 10 * 1024) { > + if (s->fifo_max < s->fifo_min + 10 * K_BYTE) { > return 0; > } > > diff --git a/hw/display/xenfb.c b/hw/display/xenfb.c > index f5afcc0358..8156fd262f 100644 > --- a/hw/display/xenfb.c > +++ b/hw/display/xenfb.c > @@ -25,6 +25,7 @@ > */ > > #include "qemu/osdep.h" > +#include "qemu/units.h" > > #include "hw/hw.h" > #include "ui/input.h" > @@ -889,7 +890,7 @@ static int fb_initialise(struct XenDevice *xendev) > return rc; > > fb_page =3D fb->c.page; > - rc =3D xenfb_configure_fb(fb, videoram * 1024 * 1024U, > + rc =3D xenfb_configure_fb(fb, videoram * M_BYTE, > fb_page->width, fb_page->height, fb_page->dep= th, > fb_page->mem_length, 0, fb_page->line_length)= ; > if (rc !=3D 0) > -- > 2.17.0 > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xenproject.org > https://lists.xenproject.org/mailman/listinfo/xen-devel From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alistair Francis Subject: Re: [PATCH v3 14/41] hw/display: Use the BYTE-based definitions Date: Mon, 16 Apr 2018 13:58:11 -0700 Message-ID: References: <20180415234307.28132-1-f4bug@amsat.org> <20180415234307.28132-15-f4bug@amsat.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1f8BD4-0005rM-AO for xen-devel@lists.xenproject.org; Mon, 16 Apr 2018 20:58:46 +0000 Received: by mail-lf0-x241.google.com with SMTP id r125-v6so7424539lfe.2 for ; Mon, 16 Apr 2018 13:58:43 -0700 (PDT) In-Reply-To: <20180415234307.28132-15-f4bug@amsat.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: =?UTF-8?Q?Philippe_Mathieu=2DDaud=C3=A9?= Cc: Thomas Huth , Stefano Stabellini , "Michael S. Tsirkin" , QEMU Trivial , Alistair Francis , "qemu-devel@nongnu.org Developers" , "open list:Xilinx ZynqMP" , Gerd Hoffmann , "Edgar E. Iglesias" , Anthony Perard , "open list:X86" List-Id: xen-devel@lists.xenproject.org T24gU3VuLCBBcHIgMTUsIDIwMTggYXQgNDo0MiBQTSwgUGhpbGlwcGUgTWF0aGlldS1EYXVkw6kg PGY0YnVnQGFtc2F0Lm9yZz4gd3JvdGU6Cj4gSXQgZWFzZXMgY29kZSByZXZpZXcsIHVuaXQgaXMg ZXhwbGljaXQuCj4KPiBQYXRjaCBnZW5lcmF0ZWQgdXNpbmc6Cj4KPiAgICQgZ2l0IGdyZXAgLUUg JygxMDI0fDIwNDh8NDA5Nnw4MTkyfCg8PHw+PikuPygxMHwyMHwzMCkpJyBody8gaW5jbHVkZS9o dy8KPgo+IGFuZCBtb2RpZmllZCBtYW51YWxseS4KPgo+IFNpZ25lZC1vZmYtYnk6IFBoaWxpcHBl IE1hdGhpZXUtRGF1ZMOpIDxmNGJ1Z0BhbXNhdC5vcmc+Cj4gUmV2aWV3ZWQtYnk6IEdlcmQgSG9m Zm1hbm4gPGtyYXhlbEByZWRoYXQuY29tPgoKUmV2aWV3ZWQtYnk6IEFsaXN0YWlyIEZyYW5jaXMg PGFsaXN0YWlyLmZyYW5jaXNAd2RjLmNvbT4KCkFsaXN0YWlyCgo+IC0tLQo+ICBpbmNsdWRlL2h3 L2Rpc3BsYXkveGxueF9kcC5oIHwgIDUgKysrLS0KPiAgaHcvZGlzcGxheS9jaXJydXNfdmdhLmMg ICAgICB8IDEwICsrKysrLS0tLS0KPiAgaHcvZGlzcGxheS9nMzY0ZmIuYyAgICAgICAgICB8ICAz ICsrLQo+ICBody9kaXNwbGF5L3F4bC5jICAgICAgICAgICAgIHwgMjcgKysrKysrKysrKysrLS0t LS0tLS0tLS0tLS0tCj4gIGh3L2Rpc3BsYXkvc201MDEuYyAgICAgICAgICAgfCAgMiArLQo+ICBo dy9kaXNwbGF5L3ZnYS1pc2EtbW0uYyAgICAgIHwgIDUgKysrLS0KPiAgaHcvZGlzcGxheS92Z2Eu YyAgICAgICAgICAgICB8ICA1ICsrKy0tCj4gIGh3L2Rpc3BsYXkvdmlydGlvLWdwdS5jICAgICAg fCAgNCArKy0tCj4gIGh3L2Rpc3BsYXkvdm13YXJlX3ZnYS5jICAgICAgfCAgMyArKy0KPiAgaHcv ZGlzcGxheS94ZW5mYi5jICAgICAgICAgICB8ICAzICsrLQo+ICAxMCBmaWxlcyBjaGFuZ2VkLCAz NSBpbnNlcnRpb25zKCspLCAzMiBkZWxldGlvbnMoLSkKPgo+IGRpZmYgLS1naXQgYS9pbmNsdWRl L2h3L2Rpc3BsYXkveGxueF9kcC5oIGIvaW5jbHVkZS9ody9kaXNwbGF5L3hsbnhfZHAuaAo+IGlu ZGV4IGVlMDQ2YTVmYWMuLjhmYjYwNGRlZTAgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9ody9kaXNw bGF5L3hsbnhfZHAuaAo+ICsrKyBiL2luY2x1ZGUvaHcvZGlzcGxheS94bG54X2RwLmgKPiBAQCAt MjksMTQgKzI5LDE1IEBACj4gICNpbmNsdWRlICJody9kaXNwbGF5L2RwY2QuaCIKPiAgI2luY2x1 ZGUgImh3L2kyYy9pMmMtZGRjLmgiCj4gICNpbmNsdWRlICJxZW11L2ZpZm84LmgiCj4gKyNpbmNs dWRlICJxZW11L3VuaXRzLmgiCj4gICNpbmNsdWRlICJody9kbWEveGxueF9kcGRtYS5oIgo+ICAj aW5jbHVkZSAiYXVkaW8vYXVkaW8uaCIKPgo+ICAjaWZuZGVmIFhMTlhfRFBfSAo+ICAjZGVmaW5l IFhMTlhfRFBfSAo+Cj4gLSNkZWZpbmUgQVVEX0NIQlVGX01BWF9ERVBUSCAgICAgICAgICAgICAg ICAgMzI3NjgKPiAtI2RlZmluZSBNQVhfUUVNVV9CVUZGRVJfU0laRSAgICAgICAgICAgICAgICA0 MDk2Cj4gKyNkZWZpbmUgQVVEX0NIQlVGX01BWF9ERVBUSCAgICAgICAgICAgICAgICAgKDMyICog S19CWVRFKQo+ICsjZGVmaW5lIE1BWF9RRU1VX0JVRkZFUl9TSVpFICAgICAgICAgICAgICAgICg0 ICogS19CWVRFKQo+Cj4gICNkZWZpbmUgRFBfQ09SRV9SRUdfQVJSQVlfU0laRSAgICAgICAgICAg ICAgKDB4M0FGID4+IDIpCj4gICNkZWZpbmUgRFBfQVZCVUZfUkVHX0FSUkFZX1NJWkUgICAgICAg ICAgICAgKDB4MjM4ID4+IDIpCj4gZGlmZiAtLWdpdCBhL2h3L2Rpc3BsYXkvY2lycnVzX3ZnYS5j IGIvaHcvZGlzcGxheS9jaXJydXNfdmdhLmMKPiBpbmRleCAxMzhhZTk2MWI5Li5iNmQ2MjYzMjk3 IDEwMDY0NAo+IC0tLSBhL2h3L2Rpc3BsYXkvY2lycnVzX3ZnYS5jCj4gKysrIGIvaHcvZGlzcGxh eS9jaXJydXNfdmdhLmMKPiBAQCAtMjcsNiArMjcsNyBAQAo+ICAgKiAgIGF2YWlsYWJsZSBhdCBo dHRwOi8vaG9tZS53b3JsZG9ubGluZS5kay9+ZmludGgvCj4gICAqLwo+ICAjaW5jbHVkZSAicWVt dS9vc2RlcC5oIgo+ICsjaW5jbHVkZSAicWVtdS91bml0cy5oIgo+ICAjaW5jbHVkZSAicWFwaS9l cnJvci5oIgo+ICAjaW5jbHVkZSAidHJhY2UuaCIKPiAgI2luY2x1ZGUgImh3L2h3LmgiCj4gQEAg LTIyMTgsNyArMjIxOSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjaXJydXNfY3Vyc29yX2NvbXB1 dGVfeXJhbmdlKENpcnJ1c1ZHQVN0YXRlICpzKQo+ICAgICAgdWludDMyX3QgY29udGVudDsKPiAg ICAgIGludCB5LCB5X21pbiwgeV9tYXg7Cj4KPiAtICAgIHNyYyA9IHMtPnZnYS52cmFtX3B0ciAr IHMtPnJlYWxfdnJhbV9zaXplIC0gMTYgKiAxMDI0Owo+ICsgICAgc3JjID0gcy0+dmdhLnZyYW1f cHRyICsgcy0+cmVhbF92cmFtX3NpemUgLSAxNiAqIEtfQllURTsKPiAgICAgIGlmIChzLT52Z2Eu c3JbMHgxMl0gJiBDSVJSVVNfQ1VSU09SX0xBUkdFKSB7Cj4gICAgICAgICAgc3JjICs9IChzLT52 Z2Euc3JbMHgxM10gJiAweDNjKSAqIDI1NjsKPiAgICAgICAgICB5X21pbiA9IDY0Owo+IEBAIC0y MzQ3LDcgKzIzNDgsNyBAQCBzdGF0aWMgdm9pZCBjaXJydXNfY3Vyc29yX2RyYXdfbGluZShWR0FD b21tb25TdGF0ZSAqczEsIHVpbnQ4X3QgKmQxLCBpbnQgc2NyX3kpCj4gICAgICAgICAgcmV0dXJu Owo+ICAgICAgfQo+Cj4gLSAgICBzcmMgPSBzLT52Z2EudnJhbV9wdHIgKyBzLT5yZWFsX3ZyYW1f c2l6ZSAtIDE2ICogMTAyNDsKPiArICAgIHNyYyA9IHMtPnZnYS52cmFtX3B0ciArIHMtPnJlYWxf dnJhbV9zaXplIC0gMTYgKiBLX0JZVEU7Cj4gICAgICBpZiAocy0+dmdhLnNyWzB4MTJdICYgQ0lS UlVTX0NVUlNPUl9MQVJHRSkgewo+ICAgICAgICAgIHNyYyArPSAocy0+dmdhLnNyWzB4MTNdICYg MHgzYykgKiAyNTY7Cj4gICAgICAgICAgc3JjICs9IChzY3JfeSAtIHMtPnZnYS5od19jdXJzb3Jf eSkgKiAxNjsKPiBAQCAtMjk5NSw4ICsyOTk2LDcgQEAgc3RhdGljIHZvaWQgY2lycnVzX2luaXRf Y29tbW9uKENpcnJ1c1ZHQVN0YXRlICpzLCBPYmplY3QgKm93bmVyLAo+Cj4gICAgICAvKiBJL08g aGFuZGxlciBmb3IgTEZCICovCj4gICAgICBtZW1vcnlfcmVnaW9uX2luaXRfaW8oJnMtPmNpcnJ1 c19saW5lYXJfaW8sIG93bmVyLCAmY2lycnVzX2xpbmVhcl9pb19vcHMsIHMsCj4gLSAgICAgICAg ICAgICAgICAgICAgICAgICAgImNpcnJ1cy1saW5lYXItaW8iLCBzLT52Z2EudnJhbV9zaXplX21i Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIDEwMjQg KiAxMDI0KTsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAiY2lycnVzLWxpbmVhci1pbyIs IHMtPnZnYS52cmFtX3NpemVfbWIgKiBNX0JZVEUpOwo+ICAgICAgbWVtb3J5X3JlZ2lvbl9zZXRf Zmx1c2hfY29hbGVzY2VkKCZzLT5jaXJydXNfbGluZWFyX2lvKTsKPgo+ICAgICAgLyogSS9PIGhh bmRsZXIgZm9yIExGQiAqLwo+IEBAIC0zMDEzLDcgKzMwMTMsNyBAQCBzdGF0aWMgdm9pZCBjaXJy dXNfaW5pdF9jb21tb24oQ2lycnVzVkdBU3RhdGUgKnMsIE9iamVjdCAqb3duZXIsCj4gICAgICBt ZW1vcnlfcmVnaW9uX3NldF9mbHVzaF9jb2FsZXNjZWQoJnMtPmNpcnJ1c19tbWlvX2lvKTsKPgo+ ICAgICAgcy0+cmVhbF92cmFtX3NpemUgPQo+IC0gICAgICAgIChzLT5kZXZpY2VfaWQgPT0gQ0lS UlVTX0lEX0NMR0Q1NDQ2KSA/IDQwOTYgKiAxMDI0IDogMjA0OCAqIDEwMjQ7Cj4gKyAgICAgICAg KHMtPmRldmljZV9pZCA9PSBDSVJSVVNfSURfQ0xHRDU0NDYpID8gNCAqIE1fQllURSA6IDIgKiBN X0JZVEU7Cj4KPiAgICAgIC8qIFhYWDogcy0+dmdhLnZyYW1fc2l6ZSBtdXN0IGJlIGEgcG93ZXIg b2YgdHdvICovCj4gICAgICBzLT5jaXJydXNfYWRkcl9tYXNrID0gcy0+cmVhbF92cmFtX3NpemUg LSAxOwo+IGRpZmYgLS1naXQgYS9ody9kaXNwbGF5L2czNjRmYi5jIGIvaHcvZGlzcGxheS9nMzY0 ZmIuYwo+IGluZGV4IDNkNzUzOTRlNzcuLjJlN2FmMzM0MjcgMTAwNjQ0Cj4gLS0tIGEvaHcvZGlz cGxheS9nMzY0ZmIuYwo+ICsrKyBiL2h3L2Rpc3BsYXkvZzM2NGZiLmMKPiBAQCAtMTgsNiArMTgs NyBAQAo+ICAgKi8KPgo+ICAjaW5jbHVkZSAicWVtdS9vc2RlcC5oIgo+ICsjaW5jbHVkZSAicWVt dS91bml0cy5oIgo+ICAjaW5jbHVkZSAiaHcvaHcuaCIKPiAgI2luY2x1ZGUgInFlbXUvZXJyb3It cmVwb3J0LmgiCj4gICNpbmNsdWRlICJ1aS9jb25zb2xlLmgiCj4gQEAgLTUxMSw3ICs1MTIsNyBA QCBzdGF0aWMgdm9pZCBnMzY0ZmJfc3lzYnVzX3Jlc2V0KERldmljZVN0YXRlICpkKQo+Cj4gIHN0 YXRpYyBQcm9wZXJ0eSBnMzY0ZmJfc3lzYnVzX3Byb3BlcnRpZXNbXSA9IHsKPiAgICAgIERFRklO RV9QUk9QX1VJTlQzMigidnJhbV9zaXplIiwgRzM2NFN5c0J1c1N0YXRlLCBnMzY0LnZyYW1fc2l6 ZSwKPiAtICAgIDggKiAxMDI0ICogMTAyNCksCj4gKyAgICAgICAgICAgICAgICAgICAgICAgOCAq IE1fQllURSksCj4gICAgICBERUZJTkVfUFJPUF9FTkRfT0ZfTElTVCgpLAo+ICB9Owo+Cj4gZGlm ZiAtLWdpdCBhL2h3L2Rpc3BsYXkvcXhsLmMgYi9ody9kaXNwbGF5L3F4bC5jCj4gaW5kZXggYTcx NzE0Y2NiNC4uZjAzNDBhZTM1NSAxMDA2NDQKPiAtLS0gYS9ody9kaXNwbGF5L3F4bC5jCj4gKysr IGIvaHcvZGlzcGxheS9xeGwuYwo+IEBAIC0xOSw2ICsxOSw3IEBACj4gICAqLwo+Cj4gICNpbmNs dWRlICJxZW11L29zZGVwLmgiCj4gKyNpbmNsdWRlICJxZW11L3VuaXRzLmgiCj4gICNpbmNsdWRl IDx6bGliLmg+Cj4KPiAgI2luY2x1ZGUgInFhcGkvZXJyb3IuaCIKPiBAQCAtMjAxMiwxMSArMjAx MywxMSBAQCBzdGF0aWMgdm9pZCBxeGxfaW5pdF9yYW1zaXplKFBDSVFYTERldmljZSAqcXhsKQo+ ICAgICAgaWYgKHF4bC0+dmdhbWVtX3NpemVfbWIgPiAyNTYpIHsKPiAgICAgICAgICBxeGwtPnZn YW1lbV9zaXplX21iID0gMjU2Owo+ICAgICAgfQo+IC0gICAgcXhsLT52Z2FtZW1fc2l6ZSA9IHF4 bC0+dmdhbWVtX3NpemVfbWIgKiAxMDI0ICogMTAyNDsKPiArICAgIHF4bC0+dmdhbWVtX3NpemUg PSBxeGwtPnZnYW1lbV9zaXplX21iICogTV9CWVRFOwo+Cj4gICAgICAvKiB2Z2EgcmFtIChiYXIg MCwgdG90YWwpICovCj4gICAgICBpZiAocXhsLT5yYW1fc2l6ZV9tYiAhPSAtMSkgewo+IC0gICAg ICAgIHF4bC0+dmdhLnZyYW1fc2l6ZSA9IHF4bC0+cmFtX3NpemVfbWIgKiAxMDI0ICogMTAyNDsK PiArICAgICAgICBxeGwtPnZnYS52cmFtX3NpemUgPSBxeGwtPnJhbV9zaXplX21iICogTV9CWVRF Owo+ICAgICAgfQo+ICAgICAgaWYgKHF4bC0+dmdhLnZyYW1fc2l6ZSA8IHF4bC0+dmdhbWVtX3Np emUgKiAyKSB7Cj4gICAgICAgICAgcXhsLT52Z2EudnJhbV9zaXplID0gcXhsLT52Z2FtZW1fc2l6 ZSAqIDI7Cj4gQEAgLTIwMjQsNyArMjAyNSw3IEBAIHN0YXRpYyB2b2lkIHF4bF9pbml0X3JhbXNp emUoUENJUVhMRGV2aWNlICpxeGwpCj4KPiAgICAgIC8qIHZyYW0zMiAoc3VyZmFjZXMsIDMyYml0 LCBiYXIgMSkgKi8KPiAgICAgIGlmIChxeGwtPnZyYW0zMl9zaXplX21iICE9IC0xKSB7Cj4gLSAg ICAgICAgcXhsLT52cmFtMzJfc2l6ZSA9IHF4bC0+dnJhbTMyX3NpemVfbWIgKiAxMDI0ICogMTAy NDsKPiArICAgICAgICBxeGwtPnZyYW0zMl9zaXplID0gcXhsLT52cmFtMzJfc2l6ZV9tYiAqIE1f QllURTsKPiAgICAgIH0KPiAgICAgIGlmIChxeGwtPnZyYW0zMl9zaXplIDwgNDA5Nikgewo+ICAg ICAgICAgIHF4bC0+dnJhbTMyX3NpemUgPSA0MDk2Owo+IEBAIC0yMDMyLDcgKzIwMzMsNyBAQCBz dGF0aWMgdm9pZCBxeGxfaW5pdF9yYW1zaXplKFBDSVFYTERldmljZSAqcXhsKQo+Cj4gICAgICAv KiB2cmFtIChzdXJmYWNlcywgNjRiaXQsIGJhciA0KzUpICovCj4gICAgICBpZiAocXhsLT52cmFt X3NpemVfbWIgIT0gLTEpIHsKPiAtICAgICAgICBxeGwtPnZyYW1fc2l6ZSA9ICh1aW50NjRfdClx eGwtPnZyYW1fc2l6ZV9tYiAqIDEwMjQgKiAxMDI0Owo+ICsgICAgICAgIHF4bC0+dnJhbV9zaXpl ID0gKHVpbnQ2NF90KXF4bC0+dnJhbV9zaXplX21iICogTV9CWVRFOwo+ICAgICAgfQo+ICAgICAg aWYgKHF4bC0+dnJhbV9zaXplIDwgcXhsLT52cmFtMzJfc2l6ZSkgewo+ICAgICAgICAgIHF4bC0+ dnJhbV9zaXplID0gcXhsLT52cmFtMzJfc2l6ZTsKPiBAQCAtMjEzNCwxMyArMjEzNSwxMCBAQCBz dGF0aWMgdm9pZCBxeGxfcmVhbGl6ZV9jb21tb24oUENJUVhMRGV2aWNlICpxeGwsIEVycm9yICoq ZXJycCkKPiAgICAgIH0KPgo+ICAgICAgLyogcHJpbnQgcGNpIGJhciBkZXRhaWxzICovCj4gLSAg ICBkcHJpbnQocXhsLCAxLCAicmFtLyVzOiAlZCBNQiBbcmVnaW9uIDBdXG4iLAo+IC0gICAgICAg ICAgIHF4bC0+aWQgPT0gMCA/ICJwcmkiIDogInNlYyIsCj4gLSAgICAgICAgICAgcXhsLT52Z2Eu dnJhbV9zaXplIC8gKDEwMjQqMTAyNCkpOwo+IC0gICAgZHByaW50KHF4bCwgMSwgInZyYW0vMzI6 ICUiIFBSSXg2NCAiZCBNQiBbcmVnaW9uIDFdXG4iLAo+IC0gICAgICAgICAgIHF4bC0+dnJhbTMy X3NpemUgLyAoMTAyNCoxMDI0KSk7Cj4gLSAgICBkcHJpbnQocXhsLCAxLCAidnJhbS82NDogJSIg UFJJeDY0ICJkIE1CICVzXG4iLAo+IC0gICAgICAgICAgIHF4bC0+dnJhbV9zaXplIC8gKDEwMjQq MTAyNCksCj4gKyAgICBkcHJpbnQocXhsLCAxLCAicmFtLyVzOiAlbGx1IE1CIFtyZWdpb24gMF1c biIsCj4gKyAgICAgICAgICAgcXhsLT5pZCA9PSAwID8gInByaSIgOiAic2VjIiwgcXhsLT52Z2Eu dnJhbV9zaXplIC8gTV9CWVRFKTsKPiArICAgIGRwcmludChxeGwsIDEsICJ2cmFtLzMyOiAlbGx1 IE1CIFtyZWdpb24gMV1cbiIsIHF4bC0+dnJhbTMyX3NpemUgLyBNX0JZVEUpOwo+ICsgICAgZHBy aW50KHF4bCwgMSwgInZyYW0vNjQ6ICVsbHUgTUIgJXNcbiIsIHF4bC0+dnJhbV9zaXplIC8gTV9C WVRFLAo+ICAgICAgICAgICAgIHF4bC0+dnJhbTMyX3NpemUgPCBxeGwtPnZyYW1fc2l6ZSA/ICJb cmVnaW9uIDRdIiA6ICJbdW5tYXBwZWRdIik7Cj4KPiAgICAgIHF4bC0+c3NkLnF4bC5iYXNlLnNp ZiA9ICZxeGxfaW50ZXJmYWNlLmJhc2U7Cj4gQEAgLTIxNjcsNyArMjE2NSw3IEBAIHN0YXRpYyB2 b2lkIHF4bF9yZWFsaXplX3ByaW1hcnkoUENJRGV2aWNlICpkZXYsIEVycm9yICoqZXJycCkKPiAg ICAgIHF4bC0+aWQgPSAwOwo+ICAgICAgcXhsX2luaXRfcmFtc2l6ZShxeGwpOwo+ICAgICAgdmdh LT52YmVfc2l6ZSA9IHF4bC0+dmdhbWVtX3NpemU7Cj4gLSAgICB2Z2EtPnZyYW1fc2l6ZV9tYiA9 IHF4bC0+dmdhLnZyYW1fc2l6ZSA+PiAyMDsKPiArICAgIHZnYS0+dnJhbV9zaXplX21iID0gcXhs LT52Z2EudnJhbV9zaXplIC8gTV9CWVRFOwo+ICAgICAgdmdhX2NvbW1vbl9pbml0KHZnYSwgT0JK RUNUKGRldiksIHRydWUpOwo+ICAgICAgdmdhX2luaXQodmdhLCBPQkpFQ1QoZGV2KSwKPiAgICAg ICAgICAgICAgIHBjaV9hZGRyZXNzX3NwYWNlKGRldiksIHBjaV9hZGRyZXNzX3NwYWNlX2lvKGRl diksIGZhbHNlKTsKPiBAQCAtMjM5Miw5ICsyMzkwLDggQEAgc3RhdGljIFZNU3RhdGVEZXNjcmlw dGlvbiBxeGxfdm1zdGF0ZSA9IHsKPgo+ICBzdGF0aWMgUHJvcGVydHkgcXhsX3Byb3BlcnRpZXNb XSA9IHsKPiAgICAgICAgICBERUZJTkVfUFJPUF9VSU5UMzIoInJhbV9zaXplIiwgUENJUVhMRGV2 aWNlLCB2Z2EudnJhbV9zaXplLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICA2NCAqIDEw MjQgKiAxMDI0KSwKPiAtICAgICAgICBERUZJTkVfUFJPUF9VSU5UNjQoInZyYW1fc2l6ZSIsIFBD SVFYTERldmljZSwgdnJhbTMyX3NpemUsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDY0 ICogMTAyNCAqIDEwMjQpLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICA2NCAqIE1fQllU RSksCj4gKyAgICAgICAgREVGSU5FX1BST1BfVUlOVDY0KCJ2cmFtX3NpemUiLCBQQ0lRWExEZXZp Y2UsIHZyYW0zMl9zaXplLCA2NCAqIE1fQllURSksCj4gICAgICAgICAgREVGSU5FX1BST1BfVUlO VDMyKCJyZXZpc2lvbiIsIFBDSVFYTERldmljZSwgcmV2aXNpb24sCj4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFFYTF9ERUZBVUxUX1JFVklTSU9OKSwKPiAgICAgICAgICBERUZJTkVfUFJP UF9VSU5UMzIoImRlYnVnIiwgUENJUVhMRGV2aWNlLCBkZWJ1ZywgMCksCj4gZGlmZiAtLWdpdCBh L2h3L2Rpc3BsYXkvc201MDEuYyBiL2h3L2Rpc3BsYXkvc201MDEuYwo+IGluZGV4IGY0YmIzM2My NzkuLjA0NTBjMmRkMjUgMTAwNjQ0Cj4gLS0tIGEvaHcvZGlzcGxheS9zbTUwMS5jCj4gKysrIGIv aHcvZGlzcGxheS9zbTUwMS5jCj4gQEAgLTI0LDcgKzI0LDcgQEAKPiAgICovCj4KPiAgI2luY2x1 ZGUgInFlbXUvb3NkZXAuaCIKPiAtI2luY2x1ZGUgInFlbXUvY3V0aWxzLmgiCj4gKyNpbmNsdWRl ICJxZW11L3VuaXRzLmgiCj4gICNpbmNsdWRlICJxYXBpL2Vycm9yLmgiCj4gICNpbmNsdWRlICJx ZW11LWNvbW1vbi5oIgo+ICAjaW5jbHVkZSAiY3B1LmgiCj4gZGlmZiAtLWdpdCBhL2h3L2Rpc3Bs YXkvdmdhLWlzYS1tbS5jIGIvaHcvZGlzcGxheS92Z2EtaXNhLW1tLmMKPiBpbmRleCBlODg3YjQ1 NjUxLi5lN2VmNjJlNDM0IDEwMDY0NAo+IC0tLSBhL2h3L2Rpc3BsYXkvdmdhLWlzYS1tbS5jCj4g KysrIGIvaHcvZGlzcGxheS92Z2EtaXNhLW1tLmMKPiBAQCAtMjIsMTIgKzIyLDEzIEBACj4gICAq IFRIRSBTT0ZUV0FSRS4KPiAgICovCj4gICNpbmNsdWRlICJxZW11L29zZGVwLmgiCj4gKyNpbmNs dWRlICJxZW11L3VuaXRzLmgiCj4gICNpbmNsdWRlICJody9ody5oIgo+ICAjaW5jbHVkZSAiaHcv ZGlzcGxheS92Z2EuaCIKPiAgI2luY2x1ZGUgInZnYV9pbnQuaCIKPiAgI2luY2x1ZGUgInVpL3Bp eGVsX29wcy5oIgo+Cj4gLSNkZWZpbmUgVkdBX1JBTV9TSVpFICg4MTkyICogMTAyNCkKPiArI2Rl ZmluZSBWR0FfUkFNX1NJWkUgKDggKiBNX0JZVEUpCj4KPiAgdHlwZWRlZiBzdHJ1Y3QgSVNBVkdB TU1TdGF0ZSB7Cj4gICAgICBWR0FDb21tb25TdGF0ZSB2Z2E7Cj4gQEAgLTEzMCw3ICsxMzEsNyBA QCBpbnQgaXNhX3ZnYV9tbV9pbml0KGh3YWRkciB2cmFtX2Jhc2UsCj4KPiAgICAgIHMgPSBnX21h bGxvYzAoc2l6ZW9mKCpzKSk7Cj4KPiAtICAgIHMtPnZnYS52cmFtX3NpemVfbWIgPSBWR0FfUkFN X1NJWkUgPj4gMjA7Cj4gKyAgICBzLT52Z2EudnJhbV9zaXplX21iID0gVkdBX1JBTV9TSVpFIC8g TV9CWVRFOwo+ICAgICAgdmdhX2NvbW1vbl9pbml0KCZzLT52Z2EsIE5VTEwsIHRydWUpOwo+ICAg ICAgdmdhX21tX2luaXQocywgdnJhbV9iYXNlLCBjdHJsX2Jhc2UsIGl0X3NoaWZ0LCBhZGRyZXNz X3NwYWNlKTsKPgo+IGRpZmYgLS1naXQgYS9ody9kaXNwbGF5L3ZnYS5jIGIvaHcvZGlzcGxheS92 Z2EuYwo+IGluZGV4IDcyMTgxMzMwYjguLjg0OGY4OTg2ZTcgMTAwNjQ0Cj4gLS0tIGEvaHcvZGlz cGxheS92Z2EuYwo+ICsrKyBiL2h3L2Rpc3BsYXkvdmdhLmMKPiBAQCAtMjIsNiArMjIsNyBAQAo+ ICAgKiBUSEUgU09GVFdBUkUuCj4gICAqLwo+ICAjaW5jbHVkZSAicWVtdS9vc2RlcC5oIgo+ICsj aW5jbHVkZSAicWVtdS91bml0cy5oIgo+ICAjaW5jbHVkZSAicWFwaS9lcnJvci5oIgo+ICAjaW5j bHVkZSAiaHcvaHcuaCIKPiAgI2luY2x1ZGUgImh3L2Rpc3BsYXkvdmdhLmgiCj4gQEAgLTcyMSw3 ICs3MjIsNyBAQCB1aW50MzJfdCB2YmVfaW9wb3J0X3JlYWRfZGF0YSh2b2lkICpvcGFxdWUsIHVp bnQzMl90IGFkZHIpCj4gICAgICAgICAgICAgIHZhbCA9IHMtPnZiZV9yZWdzW3MtPnZiZV9pbmRl eF07Cj4gICAgICAgICAgfQo+ICAgICAgfSBlbHNlIGlmIChzLT52YmVfaW5kZXggPT0gVkJFX0RJ U1BJX0lOREVYX1ZJREVPX01FTU9SWV82NEspIHsKPiAtICAgICAgICB2YWwgPSBzLT52YmVfc2l6 ZSAvICg2NCAqIDEwMjQpOwo+ICsgICAgICAgIHZhbCA9IHMtPnZiZV9zaXplIC8gKDY0ICogS19C WVRFKTsKPiAgICAgIH0gZWxzZSB7Cj4gICAgICAgICAgdmFsID0gMDsKPiAgICAgIH0KPiBAQCAt MjE3Nyw3ICsyMTc4LDcgQEAgdm9pZCB2Z2FfY29tbW9uX2luaXQoVkdBQ29tbW9uU3RhdGUgKnMs IE9iamVjdCAqb2JqLCBib29sIGdsb2JhbF92bXN0YXRlKQo+Cj4gICAgICBzLT52cmFtX3NpemVf bWIgPSB1aW50X2NsYW1wKHMtPnZyYW1fc2l6ZV9tYiwgMSwgNTEyKTsKPiAgICAgIHMtPnZyYW1f c2l6ZV9tYiA9IHBvdzJjZWlsKHMtPnZyYW1fc2l6ZV9tYik7Cj4gLSAgICBzLT52cmFtX3NpemUg PSBzLT52cmFtX3NpemVfbWIgPDwgMjA7Cj4gKyAgICBzLT52cmFtX3NpemUgPSBzLT52cmFtX3Np emVfbWIgKiBNX0JZVEU7Cj4KPiAgICAgIGlmICghcy0+dmJlX3NpemUpIHsKPiAgICAgICAgICBz LT52YmVfc2l6ZSA9IHMtPnZyYW1fc2l6ZTsKPiBkaWZmIC0tZ2l0IGEvaHcvZGlzcGxheS92aXJ0 aW8tZ3B1LmMgYi9ody9kaXNwbGF5L3ZpcnRpby1ncHUuYwo+IGluZGV4IDJkZDNjMzQ4MWEuLjdi ZmE2MWZhZjQgMTAwNjQ0Cj4gLS0tIGEvaHcvZGlzcGxheS92aXJ0aW8tZ3B1LmMKPiArKysgYi9o dy9kaXNwbGF5L3ZpcnRpby1ncHUuYwo+IEBAIC0xMiw2ICsxMiw3IEBACj4gICAqLwo+Cj4gICNp bmNsdWRlICJxZW11L29zZGVwLmgiCj4gKyNpbmNsdWRlICJxZW11L3VuaXRzLmgiCj4gICNpbmNs dWRlICJxZW11LWNvbW1vbi5oIgo+ICAjaW5jbHVkZSAicWVtdS9pb3YuaCIKPiAgI2luY2x1ZGUg InVpL2NvbnNvbGUuaCIKPiBAQCAtMTMxNCw4ICsxMzE1LDcgQEAgc3RhdGljIGNvbnN0IFZNU3Rh dGVEZXNjcmlwdGlvbiB2bXN0YXRlX3ZpcnRpb19ncHUgPSB7Cj4KPiAgc3RhdGljIFByb3BlcnR5 IHZpcnRpb19ncHVfcHJvcGVydGllc1tdID0gewo+ICAgICAgREVGSU5FX1BST1BfVUlOVDMyKCJt YXhfb3V0cHV0cyIsIFZpcnRJT0dQVSwgY29uZi5tYXhfb3V0cHV0cywgMSksCj4gLSAgICBERUZJ TkVfUFJPUF9TSVpFKCJtYXhfaG9zdG1lbSIsIFZpcnRJT0dQVSwgY29uZi5tYXhfaG9zdG1lbSwK PiAtICAgICAgICAgICAgICAgICAgICAgMjU2ICogMTAyNCAqIDEwMjQpLAo+ICsgICAgREVGSU5F X1BST1BfU0laRSgibWF4X2hvc3RtZW0iLCBWaXJ0SU9HUFUsIGNvbmYubWF4X2hvc3RtZW0sIDI1 NiAqIE1fQllURSksCj4gICNpZmRlZiBDT05GSUdfVklSR0wKPiAgICAgIERFRklORV9QUk9QX0JJ VCgidmlyZ2wiLCBWaXJ0SU9HUFUsIGNvbmYuZmxhZ3MsCj4gICAgICAgICAgICAgICAgICAgICAg VklSVElPX0dQVV9GTEFHX1ZJUkdMX0VOQUJMRUQsIHRydWUpLAo+IGRpZmYgLS1naXQgYS9ody9k aXNwbGF5L3Ztd2FyZV92Z2EuYyBiL2h3L2Rpc3BsYXkvdm13YXJlX3ZnYS5jCj4gaW5kZXggYmQz ZThiMzU4Ni4uYWViYmEzYmZkOCAxMDA2NDQKPiAtLS0gYS9ody9kaXNwbGF5L3Ztd2FyZV92Z2Eu Ywo+ICsrKyBiL2h3L2Rpc3BsYXkvdm13YXJlX3ZnYS5jCj4gQEAgLTIyLDYgKzIyLDcgQEAKPiAg ICogVEhFIFNPRlRXQVJFLgo+ICAgKi8KPiAgI2luY2x1ZGUgInFlbXUvb3NkZXAuaCIKPiArI2lu Y2x1ZGUgInFlbXUvdW5pdHMuaCIKPiAgI2luY2x1ZGUgInFhcGkvZXJyb3IuaCIKPiAgI2luY2x1 ZGUgImh3L2h3LmgiCj4gICNpbmNsdWRlICJody9sb2FkZXIuaCIKPiBAQCAtNTY1LDcgKzU2Niw3 IEBAIHN0YXRpYyBpbmxpbmUgaW50IHZtc3ZnYV9maWZvX2xlbmd0aChzdHJ1Y3Qgdm1zdmdhX3N0 YXRlX3MgKnMpCj4gICAgICAgICAgcy0+Zmlmb19uZXh0ID49IFNWR0FfRklGT19TSVpFKSB7Cj4g ICAgICAgICAgcmV0dXJuIDA7Cj4gICAgICB9Cj4gLSAgICBpZiAocy0+Zmlmb19tYXggPCBzLT5m aWZvX21pbiArIDEwICogMTAyNCkgewo+ICsgICAgaWYgKHMtPmZpZm9fbWF4IDwgcy0+Zmlmb19t aW4gKyAxMCAqIEtfQllURSkgewo+ICAgICAgICAgIHJldHVybiAwOwo+ICAgICAgfQo+Cj4gZGlm ZiAtLWdpdCBhL2h3L2Rpc3BsYXkveGVuZmIuYyBiL2h3L2Rpc3BsYXkveGVuZmIuYwo+IGluZGV4 IGY1YWZjYzAzNTguLjgxNTZmZDI2MmYgMTAwNjQ0Cj4gLS0tIGEvaHcvZGlzcGxheS94ZW5mYi5j Cj4gKysrIGIvaHcvZGlzcGxheS94ZW5mYi5jCj4gQEAgLTI1LDYgKzI1LDcgQEAKPiAgICovCj4K PiAgI2luY2x1ZGUgInFlbXUvb3NkZXAuaCIKPiArI2luY2x1ZGUgInFlbXUvdW5pdHMuaCIKPgo+ ICAjaW5jbHVkZSAiaHcvaHcuaCIKPiAgI2luY2x1ZGUgInVpL2lucHV0LmgiCj4gQEAgLTg4OSw3 ICs4OTAsNyBAQCBzdGF0aWMgaW50IGZiX2luaXRpYWxpc2Uoc3RydWN0IFhlbkRldmljZSAqeGVu ZGV2KQo+ICAgICAgICAgcmV0dXJuIHJjOwo+Cj4gICAgICBmYl9wYWdlID0gZmItPmMucGFnZTsK PiAtICAgIHJjID0geGVuZmJfY29uZmlndXJlX2ZiKGZiLCB2aWRlb3JhbSAqIDEwMjQgKiAxMDI0 VSwKPiArICAgIHJjID0geGVuZmJfY29uZmlndXJlX2ZiKGZiLCB2aWRlb3JhbSAqIE1fQllURSwK PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmJfcGFnZS0+d2lkdGgsIGZiX3BhZ2UtPmhl aWdodCwgZmJfcGFnZS0+ZGVwdGgsCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZiX3Bh Z2UtPm1lbV9sZW5ndGgsIDAsIGZiX3BhZ2UtPmxpbmVfbGVuZ3RoKTsKPiAgICAgIGlmIChyYyAh PSAwKQo+IC0tCj4gMi4xNy4wCj4KPgo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCj4gWGVuLWRldmVsIG1haWxpbmcgbGlzdAo+IFhlbi1kZXZlbEBsaXN0 cy54ZW5wcm9qZWN0Lm9yZwo+IGh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9s aXN0aW5mby94ZW4tZGV2ZWwKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2pl Y3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4t ZGV2ZWw=