From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 29904 invoked by alias); 7 Jul 2009 02:40:04 -0000 Received: (qmail 29736 invoked by uid 22791); 7 Jul 2009 02:39:31 -0000 X-SWARE-Spam-Status: No, hits=-0.2 required=5.0 tests=AWL,BAYES_40,J_CHICKENPOX_46,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mail-pz0-f203.google.com (HELO mail-pz0-f203.google.com) (209.85.222.203) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 07 Jul 2009 02:39:05 +0000 Received: by pzk41 with SMTP id 41so3953496pzk.12 for ; Mon, 06 Jul 2009 19:39:02 -0700 (PDT) MIME-Version: 1.0 Received: by 10.142.230.3 with SMTP id c3mr883707wfh.166.1246934342601; Mon, 06 Jul 2009 19:39:02 -0700 (PDT) Date: Tue, 07 Jul 2009 02:40:00 -0000 Message-ID: Subject: [RFA/RFC Prec] Add Linux AMD64 process record support second version, (64 bits system call support) 2/3 From: Hui Zhu To: gdb-patches ml , Michael Snyder Content-Type: multipart/mixed; boundary=000e0cd32c8c8c93b5046e1486c9 X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2009-07/txt/msg00172.txt.bz2 --000e0cd32c8c8c93b5046e1486c9 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-length: 118153 The old linux-record.c just support 32 bits system call and some other problem. This patch fix them all. 2009-07-07 Hui Zhu Add process record Linux system call 64 bits support. * linux-record.h (linux_record_tdep): Add size_pointer, size_size_t, size_iovec and arg6. * i386-linux-tdep.c (i386_linux_init_abi): Ditto. (i386_linux_intx80_sysenter_record): Add a check for system call number. * linux-record.c (record_linux_system_call): Make this function support 64 bits. --- i386-linux-tdep.c | 13 linux-record.c | 2558 ++++++++++++++++++++++++++++++------------------------ linux-record.h | 5 3 files changed, 1468 insertions(+), 1108 deletions(-) --- a/i386-linux-tdep.c +++ b/i386-linux-tdep.c @@ -371,8 +371,15 @@ i386_linux_intx80_sysenter_record (struc regcache_raw_read (regcache, I386_EAX_REGNUM, (gdb_byte *)&tmpu32); + if (tmpu32 > 499) + { + printf_unfiltered (_("Process record and replay target doesn't " + "support syscall number %u\n"), tmpu32); + return -1; + } + ret = record_linux_system_call (tmpu32, regcache, - &i386_linux_record_tdep); + &i386_linux_record_tdep); if (ret) return ret; @@ -481,6 +488,7 @@ i386_linux_init_abi (struct gdbarch_info /* Initialize the i386_linux_record_tdep. */ /* These values are the size of the type that will be used in a system call. They are obtained from Linux Kernel source. */ + i386_linux_record_tdep.size_pointer = 4; i386_linux_record_tdep.size__old_kernel_stat = 32; i386_linux_record_tdep.size_tms = 16; i386_linux_record_tdep.size_loff_t = 8; @@ -546,6 +554,8 @@ i386_linux_init_abi (struct gdbarch_info i386_linux_record_tdep.size_serial_struct = 60; i386_linux_record_tdep.size_serial_icounter_struct = 80; i386_linux_record_tdep.size_hayes_esp_config = 12; + i386_linux_record_tdep.size_size_t = 4; + i386_linux_record_tdep.size_iovec = 8; /* These values are the second argument of system call "sys_ioctl". They are obtained from Linux Kernel source. */ @@ -627,6 +637,7 @@ i386_linux_init_abi (struct gdbarch_info i386_linux_record_tdep.arg3 = I386_EDX_REGNUM; i386_linux_record_tdep.arg4 = I386_ESI_REGNUM; i386_linux_record_tdep.arg5 = I386_EDI_REGNUM; + i386_linux_record_tdep.arg6 = I386_EBP_REGNUM; tdep->i386_intx80_record = i386_linux_intx80_sysenter_record; tdep->i386_sysenter_record = i386_linux_intx80_sysenter_record; --- a/linux-record.c +++ b/linux-record.c @@ -19,6 +19,7 @@ #include "defs.h" #include "target.h" +#include "gdbtypes.h" #include "regcache.h" #include "record.h" #include "linux-record.h" @@ -80,6 +81,132 @@ #define RECORD_Q_XGETQSTAT (('5' << 8) + 5) #define RECORD_Q_XGETQUOTA (('3' << 8) + 3) +#define OUTPUT_REG(val, num) phex_nz ((val), \ + TYPE_LENGTH (gdbarch_register_type (get_regcache_arch (regcache), (num)))) + +static int +record_linux_sockaddr (struct regcache *regcache, + struct linux_record_tdep *tdep, ULONGEST addr, + ULONGEST len) +{ + gdb_byte *a; + int addrlen; + struct gdbarch *gdbarch = get_regcache_arch (regcache); + enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); + + if (!addr) + return 0; + + a = alloca (tdep->size_int); + + if (record_arch_list_add_mem ((CORE_ADDR)len, tdep->size_int)) + return -1; + + /* Get the addrlen. */ + if (target_read_memory ((CORE_ADDR)len, a, tdep->size_int)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr = 0x%s len = %d.\n", + phex_nz (len, tdep->size_pointer), + tdep->size_int); + return -1; + } + addrlen = (int)extract_unsigned_integer(a, tdep->size_int, byte_order); + if (addrlen <= 0 || addrlen > tdep->size_sockaddr) + addrlen = tdep->size_sockaddr; + + if (record_arch_list_add_mem ((CORE_ADDR)addr, addrlen)) + return -1; + + return 0; +} + +static int +record_linux_msghdr (struct regcache *regcache, + struct linux_record_tdep *tdep, ULONGEST addr) +{ + gdb_byte *a; + struct gdbarch *gdbarch = get_regcache_arch (regcache); + enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); + + if (!addr) + return 0; + + if (record_arch_list_add_mem ((CORE_ADDR)addr, tdep->size_msghdr)) + return -1; + + a = alloca (tdep->size_msghdr); + if (target_read_memory ((CORE_ADDR)addr, a, tdep->size_msghdr)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr = 0x%s " + "len = %d.\n", + phex_nz (addr, tdep->size_pointer), + tdep->size_msghdr); + return -1; + } + + /* msg_name msg_namelen */ + addr = extract_unsigned_integer (a, tdep->size_pointer, byte_order); + a += tdep->size_pointer; + if (record_arch_list_add_mem ((CORE_ADDR)addr, + (int)extract_unsigned_integer + (a, tdep->size_int, byte_order))) + return -1; + a += tdep->size_int; + + /* msg_iov msg_iovlen */ + addr = extract_unsigned_integer (a, tdep->size_pointer, byte_order); + a += tdep->size_pointer; + if (addr) + { + ULONGEST i; + ULONGEST len = extract_unsigned_integer (a, tdep->size_size_t, + byte_order); + gdb_byte *iov = alloca (tdep->size_iovec); + + for (i = 0; i < len; i++) + { + if (target_read_memory ((CORE_ADDR)addr, iov, tdep->size_iovec)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error " + "reading memory at " + "addr = 0x%s " + "len = %d.\n", + phex_nz (addr,tdep->size_pointer), + tdep->size_iovec); + return -1; + } + if (record_arch_list_add_mem ((CORE_ADDR)extract_unsigned_integer + (iov, tdep->size_pointer, + byte_order), + (int)extract_unsigned_integer + (iov + tdep->size_pointer, + tdep->size_size_t, + byte_order))) + return -1; + addr += tdep->size_iovec; + } + } + a += tdep->size_size_t; + + /* msg_control msg_controllen */ + addr = extract_unsigned_integer (a, tdep->size_pointer, byte_order); + a += tdep->size_pointer; + if (record_arch_list_add_mem ((CORE_ADDR)addr, + (int)extract_unsigned_integer + (a, tdep->size_size_t, byte_order))) + return -1; + + return 0; +} + /* When the architecture process record get a Linux syscall instruction, it will get a Linux syscall number of this architecture and convert it to the Linux syscall number "num" which @@ -94,10 +221,11 @@ int record_linux_system_call (int num, struct regcache *regcache, - struct linux_record_tdep *tdep) + struct linux_record_tdep *tdep) { struct gdbarch *gdbarch = get_regcache_arch (regcache); - uint32_t tmpu32; + enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); + ULONGEST tmpulongest; switch (num) { @@ -108,15 +236,15 @@ record_linux_system_call (int num, struc /* sys_exit */ case 1: { - int q; - target_terminal_ours (); - q = - yquery (_ ("The next instruction is syscall exit. " - "It will make the program exit. " - "Do you want to stop the program?")); - target_terminal_inferior (); - if (q) - return 1; + int q; + target_terminal_ours (); + q = + yquery (_ ("The next instruction is syscall exit. " + "It will make the program exit. " + "Do you want to stop the program?")); + target_terminal_inferior (); + if (q) + return 1; } break; @@ -127,11 +255,11 @@ record_linux_system_call (int num, struc /* sys_read */ case 3: { - uint32_t addr, count; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & addr); - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & count); - if (record_arch_list_add_mem (addr, count)) - return -1; + ULONGEST addr, count; + regcache_raw_read_unsigned (regcache, tdep->arg2, &addr); + regcache_raw_read_unsigned (regcache, tdep->arg3, &count); + if (record_arch_list_add_mem ((CORE_ADDR)addr, (int)count)) + return -1; } break; @@ -171,9 +299,10 @@ record_linux_system_call (int num, struc case 28: /* sys_lstat */ case 84: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size__old_kernel_stat)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size__old_kernel_stat)) + return -1; break; /* sys_lseek */ @@ -194,16 +323,16 @@ record_linux_system_call (int num, struc /* sys_ptrace */ case 26: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (tmpu32 == RECORD_PTRACE_PEEKTEXT - || tmpu32 == RECORD_PTRACE_PEEKDATA - || tmpu32 == RECORD_PTRACE_PEEKUSR) - { - regcache_raw_read (regcache, tdep->arg4, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, 4)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (tmpulongest == RECORD_PTRACE_PEEKTEXT + || tmpulongest == RECORD_PTRACE_PEEKDATA + || tmpulongest == RECORD_PTRACE_PEEKUSR) + { + regcache_raw_read_unsigned (regcache, tdep->arg4, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, 4)) + return -1; + } break; /* sys_alarm */ @@ -240,9 +369,9 @@ record_linux_system_call (int num, struc /* sys_times */ case 43: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_tms)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_tms)) + return -1; break; /* sys_ni_syscall */ @@ -270,149 +399,172 @@ record_linux_system_call (int num, struc /* sys_ioctl */ case 54: /* XXX Need to add a lot of support of other ioctl requests. */ - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (tmpu32 == tdep->ioctl_FIOCLEX || tmpu32 == tdep->ioctl_FIONCLEX - || tmpu32 == tdep->ioctl_FIONBIO || tmpu32 == tdep->ioctl_FIOASYNC - || tmpu32 == tdep->ioctl_TCSETS || tmpu32 == tdep->ioctl_TCSETSW - || tmpu32 == tdep->ioctl_TCSETSF || tmpu32 == tdep->ioctl_TCSETA - || tmpu32 == tdep->ioctl_TCSETAW || tmpu32 == tdep->ioctl_TCSETAF - || tmpu32 == tdep->ioctl_TCSBRK || tmpu32 == tdep->ioctl_TCXONC - || tmpu32 == tdep->ioctl_TCFLSH || tmpu32 == tdep->ioctl_TIOCEXCL - || tmpu32 == tdep->ioctl_TIOCNXCL - || tmpu32 == tdep->ioctl_TIOCSCTTY - || tmpu32 == tdep->ioctl_TIOCSPGRP || tmpu32 == tdep->ioctl_TIOCSTI - || tmpu32 == tdep->ioctl_TIOCSWINSZ - || tmpu32 == tdep->ioctl_TIOCMBIS || tmpu32 == tdep->ioctl_TIOCMBIC - || tmpu32 == tdep->ioctl_TIOCMSET - || tmpu32 == tdep->ioctl_TIOCSSOFTCAR - || tmpu32 == tdep->ioctl_TIOCCONS - || tmpu32 == tdep->ioctl_TIOCSSERIAL - || tmpu32 == tdep->ioctl_TIOCPKT || tmpu32 == tdep->ioctl_TIOCNOTTY - || tmpu32 == tdep->ioctl_TIOCSETD || tmpu32 == tdep->ioctl_TCSBRKP - || tmpu32 == tdep->ioctl_TIOCTTYGSTRUCT - || tmpu32 == tdep->ioctl_TIOCSBRK || tmpu32 == tdep->ioctl_TIOCCBRK - || tmpu32 == tdep->ioctl_TCSETS2 || tmpu32 == tdep->ioctl_TCSETSW2 - || tmpu32 == tdep->ioctl_TCSETSF2 - || tmpu32 == tdep->ioctl_TIOCSPTLCK - || tmpu32 == tdep->ioctl_TIOCSERCONFIG - || tmpu32 == tdep->ioctl_TIOCSERGWILD - || tmpu32 == tdep->ioctl_TIOCSERSWILD - || tmpu32 == tdep->ioctl_TIOCSLCKTRMIOS - || tmpu32 == tdep->ioctl_TIOCSERGETMULTI - || tmpu32 == tdep->ioctl_TIOCSERSETMULTI - || tmpu32 == tdep->ioctl_TIOCMIWAIT - || tmpu32 == tdep->ioctl_TIOCSHAYESESP) - { - /* Nothing to do. */ - } - else if (tmpu32 == tdep->ioctl_TCGETS || tmpu32 == tdep->ioctl_TCGETA - || tmpu32 == tdep->ioctl_TIOCGLCKTRMIOS) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_termios)) - return -1; - } - else if (tmpu32 == tdep->ioctl_TIOCGPGRP - || tmpu32 == tdep->ioctl_TIOCGSID) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_pid_t)) - return -1; - } - else if (tmpu32 == tdep->ioctl_TIOCOUTQ - || tmpu32 == tdep->ioctl_TIOCMGET - || tmpu32 == tdep->ioctl_TIOCGSOFTCAR - || tmpu32 == tdep->ioctl_FIONREAD - || tmpu32 == tdep->ioctl_TIOCINQ - || tmpu32 == tdep->ioctl_TIOCGETD - || tmpu32 == tdep->ioctl_TIOCGPTN - || tmpu32 == tdep->ioctl_TIOCSERGETLSR) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; - } - else if (tmpu32 == tdep->ioctl_TIOCGWINSZ) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_winsize)) - return -1; - } - else if (tmpu32 == tdep->ioctl_TIOCLINUX) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (tmpulongest == tdep->ioctl_FIOCLEX + || tmpulongest == tdep->ioctl_FIONCLEX + || tmpulongest == tdep->ioctl_FIONBIO + || tmpulongest == tdep->ioctl_FIOASYNC + || tmpulongest == tdep->ioctl_TCSETS + || tmpulongest == tdep->ioctl_TCSETSW + || tmpulongest == tdep->ioctl_TCSETSF + || tmpulongest == tdep->ioctl_TCSETA + || tmpulongest == tdep->ioctl_TCSETAW + || tmpulongest == tdep->ioctl_TCSETAF + || tmpulongest == tdep->ioctl_TCSBRK + || tmpulongest == tdep->ioctl_TCXONC + || tmpulongest == tdep->ioctl_TCFLSH + || tmpulongest == tdep->ioctl_TIOCEXCL + || tmpulongest == tdep->ioctl_TIOCNXCL + || tmpulongest == tdep->ioctl_TIOCSCTTY + || tmpulongest == tdep->ioctl_TIOCSPGRP + || tmpulongest == tdep->ioctl_TIOCSTI + || tmpulongest == tdep->ioctl_TIOCSWINSZ + || tmpulongest == tdep->ioctl_TIOCMBIS + || tmpulongest == tdep->ioctl_TIOCMBIC + || tmpulongest == tdep->ioctl_TIOCMSET + || tmpulongest == tdep->ioctl_TIOCSSOFTCAR + || tmpulongest == tdep->ioctl_TIOCCONS + || tmpulongest == tdep->ioctl_TIOCSSERIAL + || tmpulongest == tdep->ioctl_TIOCPKT + || tmpulongest == tdep->ioctl_TIOCNOTTY + || tmpulongest == tdep->ioctl_TIOCSETD + || tmpulongest == tdep->ioctl_TCSBRKP + || tmpulongest == tdep->ioctl_TIOCTTYGSTRUCT + || tmpulongest == tdep->ioctl_TIOCSBRK + || tmpulongest == tdep->ioctl_TIOCCBRK + || tmpulongest == tdep->ioctl_TCSETS2 + || tmpulongest == tdep->ioctl_TCSETSW2 + || tmpulongest == tdep->ioctl_TCSETSF2 + || tmpulongest == tdep->ioctl_TIOCSPTLCK + || tmpulongest == tdep->ioctl_TIOCSERCONFIG + || tmpulongest == tdep->ioctl_TIOCSERGWILD + || tmpulongest == tdep->ioctl_TIOCSERSWILD + || tmpulongest == tdep->ioctl_TIOCSLCKTRMIOS + || tmpulongest == tdep->ioctl_TIOCSERGETMULTI + || tmpulongest == tdep->ioctl_TIOCSERSETMULTI + || tmpulongest == tdep->ioctl_TIOCMIWAIT + || tmpulongest == tdep->ioctl_TIOCSHAYESESP) + { + /* Nothing to do. */ + } + else if (tmpulongest == tdep->ioctl_TCGETS + || tmpulongest == tdep->ioctl_TCGETA + || tmpulongest == tdep->ioctl_TIOCGLCKTRMIOS) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_termios)) + return -1; + } + else if (tmpulongest == tdep->ioctl_TIOCGPGRP + || tmpulongest == tdep->ioctl_TIOCGSID) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_pid_t)) + return -1; + } + else if (tmpulongest == tdep->ioctl_TIOCOUTQ + || tmpulongest == tdep->ioctl_TIOCMGET + || tmpulongest == tdep->ioctl_TIOCGSOFTCAR + || tmpulongest == tdep->ioctl_FIONREAD + || tmpulongest == tdep->ioctl_TIOCINQ + || tmpulongest == tdep->ioctl_TIOCGETD + || tmpulongest == tdep->ioctl_TIOCGPTN + || tmpulongest == tdep->ioctl_TIOCSERGETLSR) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_int)) + return -1; + } + else if (tmpulongest == tdep->ioctl_TIOCGWINSZ) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_winsize)) + return -1; + } + else if (tmpulongest == tdep->ioctl_TIOCLINUX) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); /* This syscall affect a char size memory. */ - if (record_arch_list_add_mem (tmpu32, 1)) - return -1; - } - else if (tmpu32 == tdep->ioctl_TIOCGSERIAL) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_serial_struct)) - return -1; - } - else if (tmpu32 == tdep->ioctl_TCGETS2) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_termios2)) - return -1; - } - else if (tmpu32 == tdep->ioctl_FIOQSIZE) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t)) - return -1; - } - else if (tmpu32 == tdep->ioctl_TIOCGICOUNT) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem - (tmpu32, tdep->size_serial_icounter_struct)) - return -1; - } - else if (tmpu32 == tdep->ioctl_TIOCGHAYESESP) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_hayes_esp_config)) - return -1; - } - else if (tmpu32 == tdep->ioctl_TIOCSERGSTRUCT) - { - printf_unfiltered (_("Process record and replay target doesn't " - "support ioctl request TIOCSERGSTRUCT\n")); - return 1; - } + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, 1)) + return -1; + } + else if (tmpulongest == tdep->ioctl_TIOCGSERIAL) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_serial_struct)) + return -1; + } + else if (tmpulongest == tdep->ioctl_TCGETS2) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_termios2)) + return -1; + } + else if (tmpulongest == tdep->ioctl_FIOQSIZE) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_loff_t)) + return -1; + } + else if (tmpulongest == tdep->ioctl_TIOCGICOUNT) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_serial_icounter_struct)) + return -1; + } + else if (tmpulongest == tdep->ioctl_TIOCGHAYESESP) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_hayes_esp_config)) + return -1; + } + else if (tmpulongest == tdep->ioctl_TIOCSERGSTRUCT) + { + printf_unfiltered (_("Process record and replay target doesn't " + "support ioctl request TIOCSERGSTRUCT\n")); + return 1; + } else - { - printf_unfiltered (_("Process record and replay target doesn't " - "support ioctl request 0x%s.\n"), - phex_nz (tmpu32, 4)); - return 1; - } + { + printf_unfiltered (_("Process record and replay target doesn't " + "support ioctl request 0x%s.\n"), + OUTPUT_REG (tmpulongest, tdep->arg2)); + return 1; + } break; /* sys_fcntl */ case 55: /* XXX */ - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); sys_fcntl: - if (tmpu32 == tdep->fcntl_F_GETLK) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_flock)) - return -1; - } + if (tmpulongest == tdep->fcntl_F_GETLK) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_flock)) + return -1; + } break; /* sys_ni_syscall */ @@ -425,9 +577,10 @@ record_linux_system_call (int num, struc /* sys_olduname */ case 59: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_oldold_utsname)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_oldold_utsname)) + return -1; break; /* sys_umask */ @@ -438,9 +591,10 @@ record_linux_system_call (int num, struc /* sys_ustat */ case 62: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_ustat)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_ustat)) + return -1; break; /* sys_dup2 */ @@ -455,9 +609,10 @@ record_linux_system_call (int num, struc /* sys_sigaction */ case 67: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_sigaction)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_old_sigaction)) + return -1; break; /* sys_sgetmask */ @@ -474,9 +629,10 @@ record_linux_system_call (int num, struc /* sys_sigpending */ case 73: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_sigset_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_old_sigset_t)) + return -1; break; /* sys_sethostname */ @@ -487,26 +643,30 @@ record_linux_system_call (int num, struc /* sys_old_getrlimit */ case 76: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_rlimit)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_rlimit)) + return -1; break; /* sys_getrusage */ case 77: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_rusage)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_rusage)) + return -1; break; /* sys_gettimeofday */ case 78: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_timeval)) - return -1; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_timezone)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_timeval)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_timezone)) + return -1; break; /* sys_settimeofday */ @@ -515,53 +675,56 @@ record_linux_system_call (int num, struc /* sys_getgroups16 */ case 80: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_gid_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_old_gid_t)) + return -1; break; /* sys_setgroups16 */ case 81: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_gid_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_old_gid_t)) + return -1; break; /* old_select */ case 82: { - struct sel_arg_struct - { - CORE_ADDR n; - CORE_ADDR inp; - CORE_ADDR outp; - CORE_ADDR exp; - CORE_ADDR tvp; - } sel; + struct sel_arg_struct + { + CORE_ADDR n; + CORE_ADDR inp; + CORE_ADDR outp; + CORE_ADDR exp; + CORE_ADDR tvp; + } sel; - regcache_raw_read (regcache, tdep->arg1, - (gdb_byte *) & tmpu32); - if (tmpu32) - { - if (target_read_memory (tmpu32, (gdb_byte *) & sel, sizeof (sel))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading memory " - "at addr = %s len = %lu.\n", - paddress (gdbarch, tmpu32), - (unsigned long)sizeof (sel)); - return -1; - } - if (record_arch_list_add_mem (sel.inp, tdep->size_fd_set)) - return -1; - if (record_arch_list_add_mem (sel.outp, tdep->size_fd_set)) - return -1; - if (record_arch_list_add_mem (sel.exp, tdep->size_fd_set)) - return -1; - if (record_arch_list_add_mem (sel.tvp, tdep->size_timeval)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, + &tmpulongest); + if (tmpulongest) + { + if (target_read_memory (tmpulongest, (gdb_byte *)&sel, + sizeof(sel))) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading memory " + "at addr = 0x%s len = %lu.\n", + OUTPUT_REG (tmpulongest, tdep->arg1), + (unsigned long)sizeof (sel)); + return -1; + } + if (record_arch_list_add_mem (sel.inp, tdep->size_fd_set)) + return -1; + if (record_arch_list_add_mem (sel.outp, tdep->size_fd_set)) + return -1; + if (record_arch_list_add_mem (sel.exp, tdep->size_fd_set)) + return -1; + if (record_arch_list_add_mem (sel.tvp, tdep->size_timeval)) + return -1; + } } break; @@ -572,12 +735,12 @@ record_linux_system_call (int num, struc /* sys_readlink */ case 85: { - uint32_t len; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & len); - if (record_arch_list_add_mem (tmpu32, len)) - return -1; + ULONGEST len; + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + regcache_raw_read_unsigned (regcache, tdep->arg3, &len); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, (int)len)) + return -1; } break; @@ -590,23 +753,24 @@ record_linux_system_call (int num, struc /* sys_reboot */ case 88: { - int q; - target_terminal_ours (); - q = - yquery (_("The next instruction is syscall reboot. " - "It will restart the computer. " - "Do you want to stop the program?")); - target_terminal_inferior (); - if (q) - return 1; + int q; + target_terminal_ours (); + q = + yquery (_("The next instruction is syscall reboot. " + "It will restart the computer. " + "Do you want to stop the program?")); + target_terminal_inferior (); + if (q) + return 1; } break; /* old_readdir */ case 89: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_dirent)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_dirent)) + return -1; break; /* old_mmap */ @@ -616,22 +780,22 @@ record_linux_system_call (int num, struc /* sys_munmap */ case 91: { - int q; - uint32_t len; + int q; + ULONGEST len; - regcache_raw_read (regcache, tdep->arg1, - (gdb_byte *) & tmpu32); - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & len); - target_terminal_ours (); - q = - yquery (_("The next instruction is syscall munmap. " - "It will free the memory addr = %s len = %u. " - "It will make record target get error. " - "Do you want to stop the program?"), - paddress (gdbarch, tmpu32), (int)len); - target_terminal_inferior (); - if (q) - return 1; + regcache_raw_read_unsigned (regcache, tdep->arg1, + &tmpulongest); + regcache_raw_read_unsigned (regcache, tdep->arg2, &len); + target_terminal_ours (); + q = + yquery (_("The next instruction is syscall munmap. " + "It will free the memory addr = 0x%s len = %u. " + "It will make record target get error. " + "Do you want to stop the program?"), + OUTPUT_REG (tmpulongest, tdep->arg1), (int)len); + target_terminal_inferior (); + if (q) + return 1; } break; @@ -655,292 +819,347 @@ record_linux_system_call (int num, struc case 99: /* sys_fstatfs */ case 100: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_statfs)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_statfs)) + return -1; break; /* sys_ioperm */ case 101: break; + /* sys_socket */ + case 500: + /* sys_sendto */ + case 503: + /* sys_sendmsg */ + case 505: + /* sys_shutdown */ + case 507: + /* sys_bind */ + case 508: + /* sys_connect */ + case 501: + /* sys_listen */ + case 509: + /* sys_setsockopt */ + case 513: + break; + + /* sys_accept */ + case 502: + /* sys_getsockname */ + case 510: + /* sys_getpeername */ + case 511: + { + ULONGEST len; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + regcache_raw_read_unsigned (regcache, tdep->arg3, &len); + if (record_linux_sockaddr (regcache, tdep, tmpulongest, len)) + return -1; + } + break; + + /* sys_recvfrom */ + case 504: + { + ULONGEST len; + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + regcache_raw_read_unsigned (regcache, tdep->arg5, &len); + if (record_linux_sockaddr (regcache, tdep, tmpulongest, len)) + return -1; + } + /* sys_recv */ + case 515: + { + ULONGEST size; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + regcache_raw_read_unsigned (regcache, tdep->arg3, &size); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, (int)size)) + return -1; + } + break; + + /* sys_recvmsg */ + case 506: + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_linux_msghdr (regcache, tdep, tmpulongest)) + return -1; + break; + + /* sys_socketpair */ + case 512: + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_int)) + return -1; + break; + + /* sys_getsockopt */ + case 514: + regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest); + if (tmpulongest) + { + ULONGEST optvalp; + gdb_byte *optlenp = alloca (tdep->size_int); + if (target_read_memory ((CORE_ADDR)tmpulongest, optlenp, + tdep->size_int)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr = 0x%s " + "len = %d.\n", + OUTPUT_REG (tmpulongest, tdep->arg5), + tdep->size_int); + return -1; + } + regcache_raw_read_unsigned (regcache, tdep->arg4, &optvalp); + if (record_arch_list_add_mem ((CORE_ADDR)optvalp, + (int)extract_signed_integer + (optlenp, tdep->size_int, + byte_order))) + return -1; + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_int)) + return -1; + } + break; + /* sys_socketcall */ case 102: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - switch (tmpu32) - { - case RECORD_SYS_SOCKET: - case RECORD_SYS_BIND: - case RECORD_SYS_CONNECT: - case RECORD_SYS_LISTEN: - break; - case RECORD_SYS_ACCEPT: - case RECORD_SYS_GETSOCKNAME: - case RECORD_SYS_GETPEERNAME: - { - uint32_t a[3]; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - if (tmpu32) - { - if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr = %s len = %lu.\n", - paddress (gdbarch, tmpu32), - (unsigned long)sizeof (a)); - return -1; - } - if (record_arch_list_add_mem (a[1], tdep->size_sockaddr)) - return -1; - if (record_arch_list_add_mem (a[2], tdep->size_int)) - return -1; - } - } - break; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + switch (tmpulongest) + { + case RECORD_SYS_SOCKET: + case RECORD_SYS_BIND: + case RECORD_SYS_CONNECT: + case RECORD_SYS_LISTEN: + break; + case RECORD_SYS_ACCEPT: + case RECORD_SYS_GETSOCKNAME: + case RECORD_SYS_GETPEERNAME: + { + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + if (tmpulongest) + { + gdb_byte *a = alloca (tdep->size_ulong * 2); + int addrlen; + gdb_byte *addrlenp; - case RECORD_SYS_SOCKETPAIR: - { - uint32_t a[4]; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - if (tmpu32) - { - if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr = %s len = %lu.\n", - paddress (gdbarch, tmpu32), - (unsigned long)sizeof (a)); - return -1; - } - if (record_arch_list_add_mem (a[3], tdep->size_int)) - return -1; - } - } - break; - case RECORD_SYS_SEND: - case RECORD_SYS_SENDTO: - break; - case RECORD_SYS_RECV: - { - uint32_t a[3]; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - if (tmpu32) - { - if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr = %s len = %lu.\n", - paddress (gdbarch, tmpu32), - (unsigned long)sizeof (a)); - return -1; - } - if (a[2]) - { - if (target_read_memory - (a[2], (gdb_byte *) & (a[2]), sizeof (a[2]))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr = %s " - "len = %lu.\n", - paddress (gdbarch, a[2]), - (unsigned long)sizeof (a[2])); - return -1; - } - if (record_arch_list_add_mem (a[1], a[2])) - return -1; - } - } - } - break; - case RECORD_SYS_RECVFROM: - { - uint32_t a[6]; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - if (tmpu32) - { - if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr = %s len = %lu.\n", - paddress (gdbarch, tmpu32), - (unsigned long)sizeof (a)); - return -1; - } - if (a[2]) - { - if (target_read_memory - (a[2], (gdb_byte *) & (a[2]), sizeof (a[2]))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr = %s " - "len = %lu.\n", - paddress (gdbarch, a[2]), - (unsigned long)sizeof (a[2])); - return -1; - } - if (record_arch_list_add_mem (a[1], a[2])) - return -1; - if (record_arch_list_add_mem (a[4], tdep->size_sockaddr)) - return -1; - if (record_arch_list_add_mem (a[5], tdep->size_int)) - return -1; - } - } - } - break; - case RECORD_SYS_SHUTDOWN: - case RECORD_SYS_SETSOCKOPT: - break; - case RECORD_SYS_GETSOCKOPT: - { - uint32_t a[5]; - uint32_t av; + tmpulongest += tdep->size_ulong; + if (target_read_memory ((CORE_ADDR)tmpulongest, a, + tdep->size_ulong * 2)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr = 0x%s len = %d.\n", + OUTPUT_REG (tmpulongest, tdep->arg2), + tdep->size_ulong * 2); + return -1; + } + if (record_linux_sockaddr (regcache, tdep, + extract_unsigned_integer + (a, tdep->size_ulong, byte_order), + extract_unsigned_integer + (a + tdep->size_ulong, + tdep->size_ulong, byte_order))) + return -1; + } + } + break; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - if (tmpu32) - { - if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr = %s len = %lu.\n", - paddress (gdbarch, tmpu32), - (unsigned long)sizeof (a)); - return -1; - } - if (a[4]) - { - if (target_read_memory - (a[4], (gdb_byte *) & av, sizeof (av))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr = %s " - "len = %lu.\n", - paddress (gdbarch, a[4]), - (unsigned long)sizeof (av)); - return -1; - } - if (record_arch_list_add_mem (a[3], av)) - return -1; - if (record_arch_list_add_mem (a[4], tdep->size_int)) - return -1; - } - } - } - break; - case RECORD_SYS_SENDMSG: - break; - case RECORD_SYS_RECVMSG: - { - uint32_t a[2], i; - struct record_msghdr - { - uint32_t msg_name; - uint32_t msg_namelen; - uint32_t msg_iov; - uint32_t msg_iovlen; - uint32_t msg_control; - uint32_t msg_controllen; - uint32_t msg_flags; - } rec; - struct record_iovec - { - uint32_t iov_base; - uint32_t iov_len; - } iov; + case RECORD_SYS_SOCKETPAIR: + { + gdb_byte *a = alloca (tdep->size_ulong); + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + if (tmpulongest) + { + tmpulongest += tdep->size_ulong * 3; + if (target_read_memory ((CORE_ADDR)tmpulongest, a, + tdep->size_ulong)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr = 0x%s len = %d.\n", + OUTPUT_REG (tmpulongest, tdep->arg2), + tdep->size_ulong); + return -1; + } + if (record_arch_list_add_mem ((CORE_ADDR)extract_unsigned_integer + (a, + tdep->size_ulong, + byte_order), + tdep->size_int)) + return -1; + } + } + break; + case RECORD_SYS_SEND: + case RECORD_SYS_SENDTO: + break; + case RECORD_SYS_RECVFROM: + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + if (tmpulongest) + { + gdb_byte *a = alloca (tdep->size_ulong * 2); + int addrlen; + gdb_byte *addrlenp; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - if (tmpu32) - { - if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr = %s len = %lu.\n", - paddress (gdbarch, tmpu32), - (unsigned long)sizeof (a)); - return -1; - } - if (record_arch_list_add_mem (a[1], tdep->size_msghdr)) - return -1; - if (a[1]) - { - if (target_read_memory - (a[1], (gdb_byte *) & rec, sizeof (rec))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr = %s " - "len = %lu.\n", - paddress (gdbarch, a[1]), - (unsigned long)sizeof (rec)); - return -1; - } - if (record_arch_list_add_mem - (rec.msg_name, rec.msg_namelen)) - return -1; - if (record_arch_list_add_mem - (rec.msg_control, rec.msg_controllen)) - return -1; - if (rec.msg_iov) - { - for (i = 0; i < rec.msg_iovlen; i++) - { - if (target_read_memory - (rec.msg_iov, (gdb_byte *) & iov, - sizeof (iov))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error " - "reading memory at " - "addr = %s " - "len = %lu.\n", - paddress (gdbarch, - rec.msg_iov), - (unsigned long)sizeof (iov)); - return -1; - } - if (record_arch_list_add_mem - (iov.iov_base, iov.iov_len)) - return -1; - rec.msg_iov += sizeof (struct record_iovec); - } - } - } - } - } - break; - default: - printf_unfiltered (_("Process record and replay target " - "doesn't support socketcall call 0x%s\n"), - phex_nz (tmpu32, 4)); - return -1; - break; - } + tmpulongest += tdep->size_ulong * 4; + if (target_read_memory ((CORE_ADDR)tmpulongest, a, + tdep->size_ulong * 2)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr = 0x%s len = %d.\n", + OUTPUT_REG (tmpulongest, tdep->arg2), + tdep->size_ulong * 2); + return -1; + } + if (record_linux_sockaddr (regcache, tdep, + extract_unsigned_integer + (a, tdep->size_ulong, byte_order), + extract_unsigned_integer + (a + tdep->size_ulong, + tdep->size_ulong, byte_order))) + return -1; + } + case RECORD_SYS_RECV: + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + if (tmpulongest) + { + gdb_byte *a = alloca (tdep->size_ulong * 2); + + tmpulongest += tdep->size_ulong; + if (target_read_memory ((CORE_ADDR)tmpulongest, a, + tdep->size_ulong)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr = 0x%s len = %d.\n", + OUTPUT_REG (tmpulongest, tdep->arg2), + tdep->size_ulong); + return -1; + } + tmpulongest = extract_unsigned_integer (a, tdep->size_ulong, + byte_order); + if (tmpulongest) + { + a += tdep->size_ulong; + if (record_arch_list_add_mem + ((CORE_ADDR)tmpulongest, + (int)extract_unsigned_integer(a, tdep->size_ulong, + byte_order))) + return -1; + } + } + break; + case RECORD_SYS_SHUTDOWN: + case RECORD_SYS_SETSOCKOPT: + break; + case RECORD_SYS_GETSOCKOPT: + { + gdb_byte *a = alloca (tdep->size_ulong * 2); + gdb_byte *av = alloca (tdep->size_int); + + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + if (tmpulongest) + { + tmpulongest += tdep->size_ulong * 3; + if (target_read_memory ((CORE_ADDR)tmpulongest, a, + tdep->size_ulong * 2)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr = 0x%s len = %d.\n", + OUTPUT_REG (tmpulongest, tdep->arg2), + tdep->size_ulong * 2); + return -1; + } + tmpulongest = extract_unsigned_integer (a + tdep->size_ulong, + tdep->size_ulong, + byte_order); + if (tmpulongest) + { + if (target_read_memory ((CORE_ADDR)tmpulongest, av, + tdep->size_int)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr = 0x%s " + "len = %d.\n", + phex_nz (tmpulongest, + tdep->size_ulong), + tdep->size_int); + return -1; + } + if (record_arch_list_add_mem + ((CORE_ADDR)extract_unsigned_integer + (a, tdep->size_ulong, byte_order), + (int)extract_unsigned_integer (av, tdep->size_int, + byte_order))) + return -1; + a += tdep->size_ulong; + if (record_arch_list_add_mem + ((CORE_ADDR)extract_unsigned_integer + (a, tdep->size_ulong, byte_order), + tdep->size_int)) + return -1; + } + } + } + break; + case RECORD_SYS_SENDMSG: + break; + case RECORD_SYS_RECVMSG: + { + gdb_byte *a = alloca (tdep->size_ulong); + + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + if (tmpulongest) + { + tmpulongest += tdep->size_ulong; + if (target_read_memory ((CORE_ADDR)tmpulongest, a, + tdep->size_ulong)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr = 0x%s len = %d.\n", + OUTPUT_REG (tmpulongest, tdep->arg2), + tdep->size_ulong); + return -1; + } + tmpulongest = extract_unsigned_integer (a, tdep->size_ulong, + byte_order); + if (record_linux_msghdr (regcache, tdep, + extract_unsigned_integer + (a, tdep->size_ulong, byte_order))) + return -1; + } + } + break; + default: + printf_unfiltered (_("Process record and replay target " + "doesn't support socketcall call 0x%s\n"), + OUTPUT_REG (tmpulongest, tdep->arg1)); + return -1; + break; + } break; /* sys_syslog */ @@ -949,16 +1168,18 @@ record_linux_system_call (int num, struc /* sys_setitimer */ case 104: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_itimerval)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_itimerval)) + return -1; break; /* sys_getitimer */ case 105: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_itimerval)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_itimerval)) + return -1; break; /* sys_newstat */ @@ -967,16 +1188,19 @@ record_linux_system_call (int num, struc case 107: /* sys_newfstat */ case 108: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_stat)) - return -1; + /* sys_newfstatat */ + case 540: + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_stat)) + return -1; break; /* sys_uname */ case 109: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_utsname)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_old_utsname)) + return -1; break; /* sys_iopl */ @@ -991,12 +1215,14 @@ record_linux_system_call (int num, struc /* sys_wait4 */ case 114: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; - regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_rusage)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_int)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_rusage)) + return -1; break; /* sys_swapoff */ @@ -1005,47 +1231,121 @@ record_linux_system_call (int num, struc /* sys_sysinfo */ case 116: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_sysinfo)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_sysinfo)) + return -1; + break; + + /* sys_shmget */ + case 520: + /* sys_semget */ + case 523: + /* sys_semop */ + case 524: + /* sys_msgget */ + case 528: + /* sys_shmdt */ + /* XXX maybe need do some record works wiht sys_shmdt. */ + case 527: + /* sys_msgsnd */ + case 529: + /* sys_semtimedop */ + case 532: + break; + + /* sys_shmat */ + case 521: + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_ulong)) + return -1; + break; + + /* sys_shmctl */ + case 522: + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_shmid_ds)) + return -1; + break; + + /* sys_semctl */ + /* XXX sys_semctl 525 still not support. */ + + /* sys_msgrcv */ + case 530: + { + ULONGEST msgp; + regcache_raw_read_signed (regcache, tdep->arg3, &tmpulongest); + regcache_raw_read_unsigned (regcache, tdep->arg2, &msgp); + if (record_arch_list_add_mem ((CORE_ADDR)msgp, + (int)tmpulongest + tdep->size_long)) + return -1; + } + break; + + /* sys_msgctl */ + case 531: + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_msqid_ds)) + return -1; break; /* sys_ipc */ case 117: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - switch (tmpu32) - { - case RECORD_MSGRCV: - { - int32_t second; - uint32_t ptr; - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & second); - regcache_raw_read (regcache, tdep->arg5, - (gdb_byte *) & ptr); - if (record_arch_list_add_mem (ptr, second + tdep->size_long)) - return -1; - } - break; - case RECORD_MSGCTL: - regcache_raw_read (regcache, tdep->arg5, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_msqid_ds)) - return -1; - break; - case RECORD_SHMAT: - regcache_raw_read (regcache, tdep->arg4, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_ulong)) - return -1; - break; - case RECORD_SHMCTL: - regcache_raw_read (regcache, tdep->arg5, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_shmid_ds)) - return -1; - break; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + tmpulongest &= 0xffff; + switch (tmpulongest) + { + case RECORD_SEMOP: + case RECORD_SEMGET: + case RECORD_SEMTIMEDOP: + case RECORD_MSGSND: + case RECORD_MSGGET: + /* XXX maybe need do some record works wiht RECORD_SHMDT. */ + case RECORD_SHMDT: + case RECORD_SHMGET: + break; + case RECORD_MSGRCV: + { + ULONGEST second; + ULONGEST ptr; + regcache_raw_read_signed (regcache, tdep->arg3, &second); + regcache_raw_read_unsigned (regcache, tdep->arg5, &ptr); + if (record_arch_list_add_mem ((CORE_ADDR)ptr, + (int)second + tdep->size_long)) + return -1; + } + break; + case RECORD_MSGCTL: + regcache_raw_read_unsigned (regcache, tdep->arg5, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_msqid_ds)) + return -1; + break; + case RECORD_SHMAT: + regcache_raw_read_unsigned (regcache, tdep->arg4, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_ulong)) + return -1; + break; + case RECORD_SHMCTL: + regcache_raw_read_unsigned (regcache, tdep->arg5, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_shmid_ds)) + return -1; + break; + default: + /* XXX RECORD_SEMCTL still not support. */ + printf_unfiltered (_("Process record and replay target doesn't " + "support ipc number %d\n"), (int)tmpulongest); + break; + } break; /* sys_fsync */ @@ -1060,30 +1360,30 @@ record_linux_system_call (int num, struc /* sys_newuname */ case 122: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_new_utsname)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_new_utsname)) + return -1; break; /* sys_modify_ldt */ case 123: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (tmpu32 == 0 || tmpu32 == 2) - { - uint32_t ptr, bytecount; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & ptr); - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & bytecount); - if (record_arch_list_add_mem (ptr, bytecount)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (tmpulongest == 0 || tmpulongest == 2) + { + ULONGEST ptr, bytecount; + regcache_raw_read_unsigned (regcache, tdep->arg2, &ptr); + regcache_raw_read_unsigned (regcache, tdep->arg3, &bytecount); + if (record_arch_list_add_mem ((CORE_ADDR)ptr, (int)bytecount)) + return -1; + } break; /* sys_adjtimex */ case 124: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_timex)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_timex)) + return -1; break; /* sys_mprotect */ @@ -1092,9 +1392,10 @@ record_linux_system_call (int num, struc /* sys_sigprocmask */ case 126: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_sigset_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_old_sigset_t)) + return -1; break; /* sys_ni_syscall */ @@ -1109,35 +1410,39 @@ record_linux_system_call (int num, struc /* sys_quotactl */ case 131: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - switch (tmpu32) - { - case RECORD_Q_GETFMT: - regcache_raw_read (regcache, tdep->arg4, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, 4)) - return -1; - break; - case RECORD_Q_GETINFO: - regcache_raw_read (regcache, tdep->arg4, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_mem_dqinfo)) - return -1; - break; - case RECORD_Q_GETQUOTA: - regcache_raw_read (regcache, tdep->arg4, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_if_dqblk)) - return -1; - break; - case RECORD_Q_XGETQSTAT: - case RECORD_Q_XGETQUOTA: - regcache_raw_read (regcache, tdep->arg4, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_fs_quota_stat)) - return -1; - break; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + switch (tmpulongest) + { + case RECORD_Q_GETFMT: + regcache_raw_read_unsigned (regcache, tdep->arg4, + &tmpulongest); + /* __u32 */ + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, 4)) + return -1; + break; + case RECORD_Q_GETINFO: + regcache_raw_read_unsigned (regcache, tdep->arg4, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_mem_dqinfo)) + return -1; + break; + case RECORD_Q_GETQUOTA: + regcache_raw_read_unsigned (regcache, tdep->arg4, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_if_dqblk)) + return -1; + break; + case RECORD_Q_XGETQSTAT: + case RECORD_Q_XGETQUOTA: + regcache_raw_read_unsigned (regcache, tdep->arg4, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_fs_quota_stat)) + return -1; + break; + } break; /* sys_getpgid */ @@ -1150,15 +1455,15 @@ record_linux_system_call (int num, struc /* sys_sysfs */ case 135: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (tmpu32 == 2) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - /*XXX the size of memory is not very clear. */ - if (record_arch_list_add_mem (tmpu32, 10)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (tmpulongest == 2) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + /*XXX the size of memory is not very clear. */ + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, 10)) + return -1; + } break; /* sys_personality */ @@ -1173,37 +1478,43 @@ record_linux_system_call (int num, struc /* sys_llseek */ case 140: - regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_loff_t)) + return -1; break; /* sys_getdents */ case 141: { - uint32_t count; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & count); - if (record_arch_list_add_mem (tmpu32, tdep->size_dirent * count)) - return -1; + ULONGEST count; + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + regcache_raw_read_unsigned (regcache, tdep->arg3, &count); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_dirent * count)) + return -1; } break; /* sys_select */ case 142: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set)) - return -1; - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set)) - return -1; - regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set)) - return -1; - regcache_raw_read (regcache, tdep->arg5, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_timeval)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_fd_set)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_fd_set)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_fd_set)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_timeval)) + return -1; break; /* sys_flock */ @@ -1215,36 +1526,37 @@ record_linux_system_call (int num, struc /* sys_readv */ case 145: { - uint32_t vec; - uint32_t vlen; - struct record_iovec - { - uint32_t iov_base; - uint32_t iov_len; - } iov; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & vec); - if (vec) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & vlen); - for (tmpu32 = 0; tmpu32 < vlen; tmpu32++) - { - if (target_read_memory - (vec, (gdb_byte *) & iov, sizeof (struct record_iovec))) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading " - "memory at addr = %s len = %lu.\n", - paddress (gdbarch, vec), - (unsigned long)sizeof (struct record_iovec)); - return -1; - } - if (record_arch_list_add_mem (iov.iov_base, iov.iov_len)) - return -1; - vec += sizeof (struct record_iovec); - } - } + ULONGEST vec, vlen; + + regcache_raw_read_unsigned (regcache, tdep->arg2, &vec); + if (vec) + { + gdb_byte *iov = alloca (tdep->size_iovec); + + regcache_raw_read_unsigned (regcache, tdep->arg3, &vlen); + for (tmpulongest = 0; tmpulongest < vlen; tmpulongest++) + { + if (target_read_memory ((CORE_ADDR)vec, iov, + tdep->size_iovec)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading " + "memory at addr = 0x%s len = %d.\n", + OUTPUT_REG (vec, tdep->arg2), + tdep->size_iovec); + return -1; + } + if (record_arch_list_add_mem + ((CORE_ADDR)extract_unsigned_integer + (iov, tdep->size_pointer, byte_order), + (int)extract_unsigned_integer + (iov + tdep->size_pointer, tdep->size_size_t, + byte_order))) + return -1; + vec += tdep->size_iovec; + } + } } break; @@ -1270,9 +1582,9 @@ record_linux_system_call (int num, struc /* sys_sched_getparam */ case 155: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_int)) + return -1; break; /* sys_sched_setscheduler */ @@ -1291,9 +1603,10 @@ record_linux_system_call (int num, struc case 161: /* sys_nanosleep */ case 162: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_timespec)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_timespec)) + return -1; break; /* sys_mremap */ @@ -1304,15 +1617,17 @@ record_linux_system_call (int num, struc /* sys_getresuid16 */ case 165: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_uid_t)) - return -1; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_uid_t)) - return -1; - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_uid_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_old_uid_t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_old_uid_t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_old_uid_t)) + return -1; break; /* sys_vm86 */ @@ -1323,32 +1638,32 @@ record_linux_system_call (int num, struc /* sys_poll */ case 168: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t nfds; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & nfds); - if (record_arch_list_add_mem (tmpu32, tdep->size_pollfd * nfds)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (tmpulongest) + { + ULONGEST nfds; + regcache_raw_read_unsigned (regcache, tdep->arg2, &nfds); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_pollfd * nfds)) + return -1; + } break; /* sys_nfsservctl */ case 169: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (tmpu32 == 7 || tmpu32 == 8) - { - uint32_t rsize; - if (tmpu32 == 7) - rsize = tdep->size_NFS_FHSIZE; - else - rsize = tdep->size_knfsd_fh; - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, rsize)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (tmpulongest == 7 || tmpulongest == 8) + { + int rsize; + if (tmpulongest == 7) + rsize = tdep->size_NFS_FHSIZE; + else + rsize = tdep->size_knfsd_fh; + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, rsize)) + return -1; + } break; /* sys_setresgid16 */ @@ -1357,35 +1672,37 @@ record_linux_system_call (int num, struc /* sys_getresgid16 */ case 171: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_gid_t)) - return -1; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_gid_t)) - return -1; - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_old_gid_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest,tdep->size_old_gid_t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_old_gid_t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_old_gid_t)) + return -1; break; /* sys_prctl */ case 172: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - switch (tmpu32) - { - case 2: - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; - break; - case 16: - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_TASK_COMM_LEN)) - return -1; - break; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + switch (tmpulongest) + { + case 2: + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_int)) + return -1; + break; + case 16: + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_TASK_COMM_LEN)) + return -1; + break; + } break; /* sys_rt_sigreturn */ @@ -1394,36 +1711,39 @@ record_linux_system_call (int num, struc /* sys_rt_sigaction */ case 174: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_sigaction)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_sigaction)) + return -1; break; /* sys_rt_sigprocmask */ case 175: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_sigset_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_sigset_t)) + return -1; break; /* sys_rt_sigpending */ case 176: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t sigsetsize; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & sigsetsize); - if (record_arch_list_add_mem (tmpu32, sigsetsize)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (tmpulongest) + { + ULONGEST sigsetsize; + regcache_raw_read_unsigned (regcache, tdep->arg2,&sigsetsize); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + (int)sigsetsize)) + return -1; + } break; /* sys_rt_sigtimedwait */ case 177: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_siginfo_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_siginfo_t)) + return -1; break; /* sys_rt_sigqueueinfo */ @@ -1434,15 +1754,14 @@ record_linux_system_call (int num, struc /* sys_pread64 */ case 180: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t count; - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & count); - if (record_arch_list_add_mem (tmpu32, count)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (tmpulongest) + { + ULONGEST count; + regcache_raw_read_unsigned (regcache, tdep->arg3,&count); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, (int)count)) + return -1; + } break; /* sys_pwrite64 */ @@ -1453,22 +1772,22 @@ record_linux_system_call (int num, struc /* sys_getcwd */ case 183: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t size; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & size); - if (record_arch_list_add_mem (tmpu32, size)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (tmpulongest) + { + ULONGEST size; + regcache_raw_read_unsigned (regcache, tdep->arg2, &size); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, (int)size)) + return -1; + } break; /* sys_capget */ case 184: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_cap_user_data_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_cap_user_data_t)) + return -1; break; /* sys_capset */ @@ -1477,16 +1796,17 @@ record_linux_system_call (int num, struc /* sys_sigaltstack */ case 186: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_stack_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_stack_t)) + return -1; break; /* sys_sendfile */ case 187: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_off_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_off_t)) + return -1; break; /* sys_ni_syscall */ @@ -1499,9 +1819,10 @@ record_linux_system_call (int num, struc /* sys_getrlimit */ case 191: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_rlimit)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_rlimit)) + return -1; break; /* sys_mmap2 */ @@ -1520,9 +1841,10 @@ record_linux_system_call (int num, struc case 196: /* sys_fstat64 */ case 197: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_stat64)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_stat64)) + return -1; break; /* sys_lchown */ @@ -1543,16 +1865,16 @@ record_linux_system_call (int num, struc /* sys_getgroups */ case 205: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (tmpu32) - { - int gidsetsize; - regcache_raw_read (regcache, tdep->arg1, - (gdb_byte *) & gidsetsize); - if (record_arch_list_add_mem - (tmpu32, tdep->size_gid_t * gidsetsize)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (tmpulongest) + { + ULONGEST gidsetsize; + regcache_raw_read_unsigned (regcache, tdep->arg1, + &gidsetsize); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_gid_t * (int)gidsetsize)) + return -1; + } break; /* sys_setgroups */ @@ -1565,15 +1887,15 @@ record_linux_system_call (int num, struc /* sys_getresuid */ case 209: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_uid_t)) - return -1; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_uid_t)) - return -1; - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_uid_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_uid_t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_uid_t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_uid_t)) + return -1; break; /* sys_setresgid */ @@ -1582,15 +1904,15 @@ record_linux_system_call (int num, struc /* sys_getresgid */ case 211: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_gid_t)) - return -1; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_gid_t)) - return -1; - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_gid_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_gid_t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_gid_t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_gid_t)) + return -1; break; /* sys_chown */ @@ -1609,9 +1931,10 @@ record_linux_system_call (int num, struc /* sys_mincore */ case 218: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_PAGE_SIZE)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_PAGE_SIZE)) + return -1; break; /* sys_madvise */ @@ -1621,30 +1944,32 @@ record_linux_system_call (int num, struc /* sys_getdents64 */ case 220: { - uint32_t count; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & tmpu32); - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & count); - if (record_arch_list_add_mem (tmpu32, tdep->size_dirent64 * count)) - return -1; + ULONGEST count; + regcache_raw_read_unsigned (regcache, tdep->arg2, + &tmpulongest); + regcache_raw_read_unsigned (regcache, tdep->arg3, &count); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_dirent64 * count)) + return -1; } break; /* sys_fcntl64 */ case 221: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (tmpu32 == tdep->fcntl_F_GETLK64) + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (tmpulongest == tdep->fcntl_F_GETLK64) { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_flock64)) - return -1; - } - else if (tmpu32 != tdep->fcntl_F_SETLK64 - && tmpu32 != tdep->fcntl_F_SETLKW64) + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_flock64)) + return -1; + } + else if (tmpulongest != tdep->fcntl_F_SETLK64 + && tmpulongest != tdep->fcntl_F_SETLKW64) { - goto sys_fcntl; - } + goto sys_fcntl; + } break; /* sys_ni_syscall */ @@ -1669,15 +1994,14 @@ record_linux_system_call (int num, struc case 230: /* sys_fgetxattr */ case 231: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t size; - regcache_raw_read (regcache, tdep->arg4, - (gdb_byte *) & size); - if (record_arch_list_add_mem (tmpu32, size)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (tmpulongest) + { + ULONGEST size; + regcache_raw_read_unsigned (regcache, tdep->arg4, &size); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, (int)size)) + return -1; + } break; /* sys_listxattr */ @@ -1686,15 +2010,14 @@ record_linux_system_call (int num, struc case 233: /* sys_flistxattr */ case 234: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t size; - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & size); - if (record_arch_list_add_mem (tmpu32, size)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (tmpulongest) + { + ULONGEST size; + regcache_raw_read_unsigned (regcache, tdep->arg3, &size); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, (int)size)) + return -1; + } break; /* sys_removexattr */ @@ -1709,9 +2032,10 @@ record_linux_system_call (int num, struc /* sys_sendfile64 */ case 239: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_loff_t)) + return -1; break; /* sys_futex */ @@ -1722,35 +2046,36 @@ record_linux_system_call (int num, struc /* sys_sched_getaffinity */ case 242: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t len; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & len); - if (record_arch_list_add_mem (tmpu32, len)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (tmpulongest) + { + ULONGEST len; + regcache_raw_read_unsigned (regcache, tdep->arg2, &len); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, (int)len)) + return -1; + } break; /* sys_set_thread_area */ case 243: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_int)) + return -1; break; /* sys_get_thread_area */ case 244: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_user_desc)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_user_desc)) + return -1; break; /* sys_io_setup */ case 245: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_long)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_long)) + return -1; break; /* sys_io_destroy */ @@ -1759,49 +2084,57 @@ record_linux_system_call (int num, struc /* sys_io_getevents */ case 247: - regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); - if (tmpu32) - { - int32_t nr; - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & nr); - if (record_arch_list_add_mem (tmpu32, nr * tdep->size_io_event)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + if (tmpulongest) + { + ULONGEST nr; + regcache_raw_read_unsigned (regcache, tdep->arg3, &nr); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + nr * tdep->size_io_event)) + return -1; + } break; /* sys_io_submit */ case 248: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (tmpu32) - { - int32_t i, nr; - uint32_t *iocbp; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & nr); - iocbp = (uint32_t *) alloca (nr * tdep->size_int); - if (target_read_memory - (tmpu32, (gdb_byte *) iocbp, nr * tdep->size_int)) - { - if (record_debug) - fprintf_unfiltered (gdb_stdlog, - "Process record: error reading memory " - "at addr = %s len = %u.\n", - paddress (gdbarch, tmpu32), - (int)(nr * tdep->size_int)); - return -1; - } - for (i = 0; i < nr; i++) - { - if (record_arch_list_add_mem (iocbp[i], tdep->size_iocb)) - return -1; - } - } + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (tmpulongest) + { + ULONGEST nr, i; + gdb_byte *iocbp; + + regcache_raw_read_unsigned (regcache, tdep->arg2, &nr); + iocbp = alloca (nr * tdep->size_pointer); + if (target_read_memory ((CORE_ADDR)tmpulongest, iocbp, + nr * tdep->size_pointer)) + { + if (record_debug) + fprintf_unfiltered (gdb_stdlog, + "Process record: error reading memory " + "at addr = 0x%s len = %u.\n", + OUTPUT_REG (tmpulongest, tdep->arg2), + (int)(nr * tdep->size_pointer)); + return -1; + } + for (i = 0; i < nr; i++) + { + if (record_arch_list_add_mem ((CORE_ADDR)extract_unsigned_integer + (iocbp, + tdep->size_pointer, + byte_order), + tdep->size_iocb)) + return -1; + iocbp += tdep->size_pointer; + } + } break; /* sys_io_cancel */ case 249: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_io_event)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_io_event)) + return -1; break; /* sys_fadvise64 */ @@ -1813,28 +2146,28 @@ record_linux_system_call (int num, struc /* sys_exit_group */ case 252: { - int q; - target_terminal_ours (); - q = - yquery (_("The next instruction is syscall exit_group. " - "It will make the program exit. " - "Do you want to stop the program?")); - target_terminal_inferior (); - if (q) - return 1; + int q; + target_terminal_ours (); + q = + yquery (_("The next instruction is syscall exit_group. " + "It will make the program exit. " + "Do you want to stop the program?")); + target_terminal_inferior (); + if (q) + return 1; } break; /* sys_lookup_dcookie */ case 253: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t len; - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & len); - if (record_arch_list_add_mem (tmpu32, len)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (tmpulongest) + { + ULONGEST len; + regcache_raw_read_unsigned (regcache, tdep->arg3, &len); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, (int)len)) + return -1; + } break; /* sys_epoll_create */ @@ -1845,16 +2178,15 @@ record_linux_system_call (int num, struc /* sys_epoll_wait */ case 256: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (tmpu32) - { - int32_t maxevents; - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & maxevents); - if (record_arch_list_add_mem - (tmpu32, maxevents * tdep->size_epoll_event)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (tmpulongest) + { + ULONGEST maxevents; + regcache_raw_read_unsigned (regcache, tdep->arg3, &maxevents); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + maxevents * tdep->size_epoll_event)) + return -1; + } break; /* sys_remap_file_pages */ @@ -1865,23 +2197,25 @@ record_linux_system_call (int num, struc /* sys_timer_create */ case 259: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_int)) + return -1; break; /* sys_timer_settime */ case 260: - regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_itimerspec)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_itimerspec)) + return -1; break; /* sys_timer_gettime */ case 261: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_itimerspec)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_itimerspec)) + return -1; break; /* sys_timer_getoverrun */ @@ -1894,32 +2228,36 @@ record_linux_system_call (int num, struc /* sys_clock_gettime */ case 265: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_timespec)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_timespec)) + return -1; break; /* sys_clock_getres */ case 266: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_timespec)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_timespec)) + return -1; break; /* sys_clock_nanosleep */ case 267: - regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_timespec)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_timespec)) + return -1; break; /* sys_statfs64 */ case 268: /* sys_fstatfs64 */ case 269: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_statfs64)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_statfs64)) + return -1; break; /* sys_tgkill */ @@ -1936,18 +2274,18 @@ record_linux_system_call (int num, struc /* sys_get_mempolicy */ case 275: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t maxnode; - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & maxnode); - if (record_arch_list_add_mem (tmpu32, maxnode * tdep->size_long)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_int)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (tmpulongest) + { + ULONGEST maxnode; + regcache_raw_read_unsigned (regcache, tdep->arg3, &maxnode); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + maxnode * tdep->size_long)) + return -1; + } break; /* sys_set_mempolicy */ @@ -1962,18 +2300,17 @@ record_linux_system_call (int num, struc /* sys_mq_timedreceive */ case 280: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t msg_len; - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & msg_len); - if (record_arch_list_add_mem (tmpu32, msg_len)) - return -1; - } - regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (tmpulongest) + { + ULONGEST msg_len; + regcache_raw_read_unsigned (regcache, tdep->arg3, &msg_len); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, (int)msg_len)) + return -1; + } + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_int)) + return -1; break; /* sys_mq_notify */ @@ -1982,9 +2319,10 @@ record_linux_system_call (int num, struc /* sys_mq_getsetattr */ case 282: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_mq_attr)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_mq_attr)) + return -1; break; /* sys_kexec_load */ @@ -1993,12 +2331,14 @@ record_linux_system_call (int num, struc /* sys_waitid */ case 284: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_siginfo)) - return -1; - regcache_raw_read (regcache, tdep->arg5, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_rusage)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_siginfo)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_rusage)) + return -1; break; /* sys_ni_syscall */ @@ -2011,20 +2351,20 @@ record_linux_system_call (int num, struc /* sys_keyctl */ case 288: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (tmpu32 == 6 || tmpu32 == 11) - { - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t buflen; - regcache_raw_read (regcache, tdep->arg4, - (gdb_byte *) & buflen); - if (record_arch_list_add_mem (tmpu32, buflen)) - return -1; - } - } + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (tmpulongest == 6 || tmpulongest == 11) + { + regcache_raw_read_unsigned (regcache, tdep->arg3, + &tmpulongest); + if (tmpulongest) + { + ULONGEST buflen; + regcache_raw_read_unsigned (regcache, tdep->arg4, &buflen); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + (int)buflen)) + return -1; + } + } break; /* sys_ioprio_set */ @@ -2053,9 +2393,10 @@ record_linux_system_call (int num, struc /* sys_fstatat64 */ case 300: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_stat64)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_stat64)) + return -1; break; /* sys_unlinkat */ @@ -2070,15 +2411,14 @@ record_linux_system_call (int num, struc /* sys_readlinkat */ case 305: - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (tmpu32) - { - int32_t bufsiz; - regcache_raw_read (regcache, tdep->arg4, - (gdb_byte *) & bufsiz); - if (record_arch_list_add_mem (tmpu32, bufsiz)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (tmpulongest) + { + ULONGEST bufsiz; + regcache_raw_read_unsigned (regcache, tdep->arg4, &bufsiz); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, (int)bufsiz)) + return -1; + } break; /* sys_fchmodat */ @@ -2089,34 +2429,39 @@ record_linux_system_call (int num, struc /* sys_pselect6 */ case 308: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set)) - return -1; - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set)) - return -1; - regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_fd_set)) - return -1; - regcache_raw_read (regcache, tdep->arg5, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_timespec)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_fd_set)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_fd_set)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_fd_set)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_timespec)) + return -1; break; /* sys_ppoll */ case 309: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t nfds; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & nfds); - if (record_arch_list_add_mem (tmpu32, tdep->size_pollfd * nfds)) - return -1; - } - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_timespec)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (tmpulongest) + { + ULONGEST nfds; + regcache_raw_read_unsigned (regcache, tdep->arg2, &nfds); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_pollfd * nfds)) + return -1; + } + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_timespec)) + return -1; break; /* sys_unshare */ @@ -2127,22 +2472,24 @@ record_linux_system_call (int num, struc /* sys_get_robust_list */ case 312: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_int)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_int)) + return -1; break; /* sys_splice */ case 313: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t)) - return -1; - regcache_raw_read (regcache, tdep->arg4, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_loff_t)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_loff_t)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg4, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_loff_t)) + return -1; break; /* sys_sync_file_range */ @@ -2155,48 +2502,47 @@ record_linux_system_call (int num, struc /* sys_move_pages */ case 317: - regcache_raw_read (regcache, tdep->arg5, (gdb_byte *) & tmpu32); - if (tmpu32) - { - uint32_t nr_pages; - regcache_raw_read (regcache, tdep->arg2, - (gdb_byte *) & nr_pages); - if (record_arch_list_add_mem (tmpu32, nr_pages * tdep->size_int)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg5, &tmpulongest); + if (tmpulongest) + { + ULONGEST nr_pages; + regcache_raw_read_unsigned (regcache, tdep->arg2, &nr_pages); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + nr_pages * tdep->size_int)) + return -1; + } break; /* sys_getcpu */ case 318: - regcache_raw_read (regcache, tdep->arg1, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_int)) - return -1; - regcache_raw_read (regcache, tdep->arg3, (gdb_byte *) & tmpu32); - if (record_arch_list_add_mem (tmpu32, tdep->size_ulong * 2)) - return -1; + regcache_raw_read_unsigned (regcache, tdep->arg1, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_int)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, tdep->size_int)) + return -1; + regcache_raw_read_unsigned (regcache, tdep->arg3, &tmpulongest); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + tdep->size_ulong * 2)) + return -1; break; /* sys_epoll_pwait */ case 319: - regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32); - if (tmpu32) - { - int32_t maxevents; - regcache_raw_read (regcache, tdep->arg3, - (gdb_byte *) & maxevents); - if (record_arch_list_add_mem - (tmpu32, maxevents * tdep->size_epoll_event)) - return -1; - } + regcache_raw_read_unsigned (regcache, tdep->arg2, &tmpulongest); + if (tmpulongest) + { + ULONGEST maxevents; + regcache_raw_read_unsigned (regcache, tdep->arg3, &maxevents); + if (record_arch_list_add_mem ((CORE_ADDR)tmpulongest, + (int)maxevents * tdep->size_epoll_event)) + return -1; + } break; default: printf_unfiltered (_("Process record and replay target doesn't " - "support syscall number %u\n"), - (int)tmpu32); + "support syscall number %u\n"), num); return -1; break; } --- a/linux-record.h +++ b/linux-record.h @@ -23,6 +23,7 @@ struct linux_record_tdep { /* The size of the type that will be used in a system call. */ + int size_pointer; int size__old_kernel_stat; int size_tms; int size_loff_t; @@ -81,7 +82,6 @@ struct linux_record_tdep int size_itimerspec; int size_mq_attr; int size_siginfo; - int size_termios; int size_termios2; int size_pid_t; @@ -89,6 +89,8 @@ struct linux_record_tdep int size_serial_struct; int size_serial_icounter_struct; int size_hayes_esp_config; + int size_size_t; + int size_iovec; /* The values of the second argument of system call "sys_ioctl". */ int ioctl_TCGETS; @@ -171,6 +173,7 @@ struct linux_record_tdep int arg3; int arg4; int arg5; + int arg6; }; extern int record_linux_system_call (int num, struct regcache *regcache, --000e0cd32c8c8c93b5046e1486c9 Content-Type: text/plain; charset=US-ASCII; name="prec_syscall_64bits.txt" Content-Disposition: attachment; filename="prec_syscall_64bits.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fwu0lhy70 Content-length: 159658 LS0tCiBpMzg2LWxpbnV4LXRkZXAuYyB8ICAgMTMgCiBsaW51eC1yZWNvcmQu YyAgICB8IDI1NTggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBsaW51eC1yZWNvcmQuaCAgICB8ICAg IDUgCiAzIGZpbGVzIGNoYW5nZWQsIDE0NjggaW5zZXJ0aW9ucygrKSwgMTEw OCBkZWxldGlvbnMoLSkKCi0tLSBhL2kzODYtbGludXgtdGRlcC5jCisrKyBi L2kzODYtbGludXgtdGRlcC5jCkBAIC0zNzEsOCArMzcxLDE1IEBAIGkzODZf bGludXhfaW50eDgwX3N5c2VudGVyX3JlY29yZCAoc3RydWMKIAogICByZWdj YWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIEkzODZfRUFYX1JFR05VTSwgKGdk Yl9ieXRlICopJnRtcHUzMik7CiAKKyAgaWYgKHRtcHUzMiA+IDQ5OSkKKyAg ICB7CisgICAgICBwcmludGZfdW5maWx0ZXJlZCAoXygiUHJvY2VzcyByZWNv cmQgYW5kIHJlcGxheSB0YXJnZXQgZG9lc24ndCAiCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAic3VwcG9ydCBzeXNjYWxsIG51bWJlciAldVxuIiks IHRtcHUzMik7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCiAgIHJldCA9 IHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAodG1wdTMyLCByZWdjYWNoZSwK LQkJCQkgICZpMzg2X2xpbnV4X3JlY29yZF90ZGVwKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmaTM4Nl9saW51eF9yZWNvcmRfdGRl cCk7CiAgIGlmIChyZXQpCiAgICAgcmV0dXJuIHJldDsKIApAQCAtNDgxLDYg KzQ4OCw3IEBAIGkzODZfbGludXhfaW5pdF9hYmkgKHN0cnVjdCBnZGJhcmNo X2luZm8KICAgLyogSW5pdGlhbGl6ZSB0aGUgaTM4Nl9saW51eF9yZWNvcmRf dGRlcC4gICovCiAgIC8qIFRoZXNlIHZhbHVlcyBhcmUgdGhlIHNpemUgb2Yg dGhlIHR5cGUgdGhhdCB3aWxsIGJlIHVzZWQgaW4gYSBzeXN0ZW0KICAgICAg Y2FsbC4gIFRoZXkgYXJlIG9idGFpbmVkIGZyb20gTGludXggS2VybmVsIHNv dXJjZS4gICovCisgIGkzODZfbGludXhfcmVjb3JkX3RkZXAuc2l6ZV9wb2lu dGVyID0gNDsKICAgaTM4Nl9saW51eF9yZWNvcmRfdGRlcC5zaXplX19vbGRf a2VybmVsX3N0YXQgPSAzMjsKICAgaTM4Nl9saW51eF9yZWNvcmRfdGRlcC5z aXplX3RtcyA9IDE2OwogICBpMzg2X2xpbnV4X3JlY29yZF90ZGVwLnNpemVf bG9mZl90ID0gODsKQEAgLTU0Niw2ICs1NTQsOCBAQCBpMzg2X2xpbnV4X2lu aXRfYWJpIChzdHJ1Y3QgZ2RiYXJjaF9pbmZvCiAgIGkzODZfbGludXhfcmVj b3JkX3RkZXAuc2l6ZV9zZXJpYWxfc3RydWN0ID0gNjA7CiAgIGkzODZfbGlu dXhfcmVjb3JkX3RkZXAuc2l6ZV9zZXJpYWxfaWNvdW50ZXJfc3RydWN0ID0g ODA7CiAgIGkzODZfbGludXhfcmVjb3JkX3RkZXAuc2l6ZV9oYXllc19lc3Bf Y29uZmlnID0gMTI7CisgIGkzODZfbGludXhfcmVjb3JkX3RkZXAuc2l6ZV9z aXplX3QgPSA0OworICBpMzg2X2xpbnV4X3JlY29yZF90ZGVwLnNpemVfaW92 ZWMgPSA4OwogCiAgIC8qIFRoZXNlIHZhbHVlcyBhcmUgdGhlIHNlY29uZCBh cmd1bWVudCBvZiBzeXN0ZW0gY2FsbCAic3lzX2lvY3RsIi4KICAgICAgVGhl eSBhcmUgb2J0YWluZWQgZnJvbSBMaW51eCBLZXJuZWwgc291cmNlLiAgKi8K QEAgLTYyNyw2ICs2MzcsNyBAQCBpMzg2X2xpbnV4X2luaXRfYWJpIChzdHJ1 Y3QgZ2RiYXJjaF9pbmZvCiAgIGkzODZfbGludXhfcmVjb3JkX3RkZXAuYXJn MyA9IEkzODZfRURYX1JFR05VTTsKICAgaTM4Nl9saW51eF9yZWNvcmRfdGRl cC5hcmc0ID0gSTM4Nl9FU0lfUkVHTlVNOwogICBpMzg2X2xpbnV4X3JlY29y ZF90ZGVwLmFyZzUgPSBJMzg2X0VESV9SRUdOVU07CisgIGkzODZfbGludXhf cmVjb3JkX3RkZXAuYXJnNiA9IEkzODZfRUJQX1JFR05VTTsKIAogICB0ZGVw LT5pMzg2X2ludHg4MF9yZWNvcmQgPSBpMzg2X2xpbnV4X2ludHg4MF9zeXNl bnRlcl9yZWNvcmQ7CiAgIHRkZXAtPmkzODZfc3lzZW50ZXJfcmVjb3JkID0g aTM4Nl9saW51eF9pbnR4ODBfc3lzZW50ZXJfcmVjb3JkOwotLS0gYS9saW51 eC1yZWNvcmQuYworKysgYi9saW51eC1yZWNvcmQuYwpAQCAtMTksNiArMTks NyBAQAogCiAjaW5jbHVkZSAiZGVmcy5oIgogI2luY2x1ZGUgInRhcmdldC5o IgorI2luY2x1ZGUgImdkYnR5cGVzLmgiCiAjaW5jbHVkZSAicmVnY2FjaGUu aCIKICNpbmNsdWRlICJyZWNvcmQuaCIKICNpbmNsdWRlICJsaW51eC1yZWNv cmQuaCIKQEAgLTgwLDYgKzgxLDEzMiBAQAogI2RlZmluZSBSRUNPUkRfUV9Y R0VUUVNUQVQJKCgnNScgPDwgOCkgKyA1KQogI2RlZmluZSBSRUNPUkRfUV9Y R0VUUVVPVEEJKCgnMycgPDwgOCkgKyAzKQogCisjZGVmaW5lIE9VVFBVVF9S RUcodmFsLCBudW0pICAgICAgcGhleF9ueiAoKHZhbCksIFwKKyAgICBUWVBF X0xFTkdUSCAoZ2RiYXJjaF9yZWdpc3Rlcl90eXBlIChnZXRfcmVnY2FjaGVf YXJjaCAocmVnY2FjaGUpLCAobnVtKSkpKQorCitzdGF0aWMgaW50CityZWNv cmRfbGludXhfc29ja2FkZHIgKHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUs CisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBsaW51eF9yZWNvcmRf dGRlcCAqdGRlcCwgVUxPTkdFU1QgYWRkciwKKyAgICAgICAgICAgICAgICAg ICAgICAgVUxPTkdFU1QgbGVuKQoreworICBnZGJfYnl0ZSAqYTsKKyAgaW50 IGFkZHJsZW47CisgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoID0gZ2V0X3Jl Z2NhY2hlX2FyY2ggKHJlZ2NhY2hlKTsKKyAgZW51bSBiZmRfZW5kaWFuIGJ5 dGVfb3JkZXIgPSBnZGJhcmNoX2J5dGVfb3JkZXIgKGdkYmFyY2gpOworCisg IGlmICghYWRkcikKKyAgICByZXR1cm4gMDsKKworICBhID0gYWxsb2NhICh0 ZGVwLT5zaXplX2ludCk7CisKKyAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRk X21lbSAoKENPUkVfQUREUilsZW4sIHRkZXAtPnNpemVfaW50KSkKKyAgICBy ZXR1cm4gLTE7CisKKyAgLyogR2V0IHRoZSBhZGRybGVuLiAgKi8KKyAgaWYg KHRhcmdldF9yZWFkX21lbW9yeSAoKENPUkVfQUREUilsZW4sIGEsIHRkZXAt PnNpemVfaW50KSkKKyAgICB7CisgICAgICBpZiAocmVjb3JkX2RlYnVnKQor ICAgICAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIlByb2Nlc3MgcmVjb3JkOiBlcnJv ciByZWFkaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVt b3J5IGF0IGFkZHIgPSAweCVzIGxlbiA9ICVkLlxuIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwaGV4X256IChsZW4sIHRkZXAtPnNpemVfcG9p bnRlciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6 ZV9pbnQpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICBhZGRybGVu ID0gKGludClleHRyYWN0X3Vuc2lnbmVkX2ludGVnZXIoYSwgdGRlcC0+c2l6 ZV9pbnQsIGJ5dGVfb3JkZXIpOworICBpZiAoYWRkcmxlbiA8PSAwIHx8IGFk ZHJsZW4gPiB0ZGVwLT5zaXplX3NvY2thZGRyKQorICAgIGFkZHJsZW4gPSB0 ZGVwLT5zaXplX3NvY2thZGRyOworCisgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9tZW0gKChDT1JFX0FERFIpYWRkciwgYWRkcmxlbikpCisgICAgcmV0 dXJuIC0xOworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CityZWNv cmRfbGludXhfbXNnaGRyIChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLAor ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGxpbnV4X3JlY29yZF90ZGVw ICp0ZGVwLCBVTE9OR0VTVCBhZGRyKQoreworICBnZGJfYnl0ZSAqYTsKKyAg c3RydWN0IGdkYmFyY2ggKmdkYmFyY2ggPSBnZXRfcmVnY2FjaGVfYXJjaCAo cmVnY2FjaGUpOworICBlbnVtIGJmZF9lbmRpYW4gYnl0ZV9vcmRlciA9IGdk YmFyY2hfYnl0ZV9vcmRlciAoZ2RiYXJjaCk7CisKKyAgaWYgKCFhZGRyKQor ICAgIHJldHVybiAwOworCisgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9t ZW0gKChDT1JFX0FERFIpYWRkciwgdGRlcC0+c2l6ZV9tc2doZHIpKQorICAg IHJldHVybiAtMTsKKworICBhID0gYWxsb2NhICh0ZGVwLT5zaXplX21zZ2hk cik7CisgIGlmICh0YXJnZXRfcmVhZF9tZW1vcnkgKChDT1JFX0FERFIpYWRk ciwgYSwgdGRlcC0+c2l6ZV9tc2doZHIpKQorICAgIHsKKyAgICAgIGlmIChy ZWNvcmRfZGVidWcpCisgICAgICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2Ri X3N0ZGxvZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJvY2Vz cyByZWNvcmQ6IGVycm9yIHJlYWRpbmcgIgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJtZW1vcnkgYXQgYWRkciA9IDB4JXMgIgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJsZW4gPSAlZC5cbiIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcGhleF9ueiAoYWRkciwgdGRlcC0+c2l6ZV9w b2ludGVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5z aXplX21zZ2hkcik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAg LyogbXNnX25hbWUgbXNnX25hbWVsZW4gKi8KKyAgYWRkciA9IGV4dHJhY3Rf dW5zaWduZWRfaW50ZWdlciAoYSwgdGRlcC0+c2l6ZV9wb2ludGVyLCBieXRl X29yZGVyKTsKKyAgYSArPSB0ZGVwLT5zaXplX3BvaW50ZXI7CisgIGlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpYWRkciwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClleHRyYWN0X3Vu c2lnbmVkX2ludGVnZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChhLCB0ZGVwLT5zaXplX2ludCwgYnl0ZV9vcmRlcikpKQor ICAgIHJldHVybiAtMTsKKyAgYSArPSB0ZGVwLT5zaXplX2ludDsKKworICAv KiBtc2dfaW92IG1zZ19pb3ZsZW4gKi8KKyAgYWRkciA9IGV4dHJhY3RfdW5z aWduZWRfaW50ZWdlciAoYSwgdGRlcC0+c2l6ZV9wb2ludGVyLCBieXRlX29y ZGVyKTsKKyAgYSArPSB0ZGVwLT5zaXplX3BvaW50ZXI7CisgIGlmIChhZGRy KQorICAgIHsKKyAgICAgIFVMT05HRVNUIGk7CisgICAgICBVTE9OR0VTVCBs ZW4gPSBleHRyYWN0X3Vuc2lnbmVkX2ludGVnZXIgKGEsIHRkZXAtPnNpemVf c2l6ZV90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBieXRlX29yZGVyKTsKKyAgICAgIGdkYl9ieXRlICppb3Yg PSBhbGxvY2EgKHRkZXAtPnNpemVfaW92ZWMpOworCisgICAgICBmb3IgKGkg PSAwOyBpIDwgbGVuOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICBpZiAo dGFyZ2V0X3JlYWRfbWVtb3J5ICgoQ09SRV9BRERSKWFkZHIsIGlvdiwgdGRl cC0+c2l6ZV9pb3ZlYykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg IGlmIChyZWNvcmRfZGVidWcpCisgICAgICAgICAgICAgICAgZnByaW50Zl91 bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlByb2Nlc3MgcmVjb3JkOiBlcnJvciAiCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZGluZyBtZW1v cnkgYXQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ImFkZHIgPSAweCVzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJsZW4gPSAlZC5cbiIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwaGV4X256IChhZGRyLHRkZXAtPnNpemVfcG9pbnRl ciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVw LT5zaXplX2lvdmVjKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX21lbSAoKENPUkVfQUREUilleHRyYWN0X3Vuc2lnbmVkX2ludGVnZXIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGlvdiwgdGRlcC0+c2l6ZV9wb2ludGVyLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ynl0ZV9vcmRlciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGludClleHRyYWN0X3Vuc2lnbmVkX2ludGVnZXIKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlv diArIHRkZXAtPnNpemVfcG9pbnRlciwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfc2l6ZV90 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYnl0ZV9vcmRlcikpKQorICAgICAgICAgICAgcmV0dXJuIC0xOwor ICAgICAgICAgIGFkZHIgKz0gdGRlcC0+c2l6ZV9pb3ZlYzsKKyAgICAgICAg fQorICAgIH0KKyAgYSArPSB0ZGVwLT5zaXplX3NpemVfdDsKKworICAvKiBt c2dfY29udHJvbCBtc2dfY29udHJvbGxlbiAqLworICBhZGRyID0gZXh0cmFj dF91bnNpZ25lZF9pbnRlZ2VyIChhLCB0ZGVwLT5zaXplX3BvaW50ZXIsIGJ5 dGVfb3JkZXIpOworICBhICs9IHRkZXAtPnNpemVfcG9pbnRlcjsKKyAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUilhZGRyLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KWV4dHJhY3Rf dW5zaWduZWRfaW50ZWdlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGEsIHRkZXAtPnNpemVfc2l6ZV90LCBieXRlX29yZGVy KSkpCisgICAgcmV0dXJuIC0xOworCisgIHJldHVybiAwOworfQorCiAvKiBX aGVuIHRoZSBhcmNoaXRlY3R1cmUgcHJvY2VzcyByZWNvcmQgZ2V0IGEgTGlu dXggc3lzY2FsbAogICAgaW5zdHJ1Y3Rpb24sIGl0IHdpbGwgZ2V0IGEgTGlu dXggc3lzY2FsbCBudW1iZXIgb2YgdGhpcwogICAgYXJjaGl0ZWN0dXJlIGFu ZCBjb252ZXJ0IGl0IHRvIHRoZSBMaW51eCBzeXNjYWxsIG51bWJlciAibnVt IiB3aGljaApAQCAtOTQsMTAgKzIyMSwxMSBAQAogCiBpbnQKIHJlY29yZF9s aW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWN0IHJlZ2NhY2hlICpy ZWdjYWNoZSwKLQkJCSAgc3RydWN0IGxpbnV4X3JlY29yZF90ZGVwICp0ZGVw KQorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbGludXhfcmVj b3JkX3RkZXAgKnRkZXApCiB7CiAgIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNo ID0gZ2V0X3JlZ2NhY2hlX2FyY2ggKHJlZ2NhY2hlKTsKLSAgdWludDMyX3Qg dG1wdTMyOworICBlbnVtIGJmZF9lbmRpYW4gYnl0ZV9vcmRlciA9IGdkYmFy Y2hfYnl0ZV9vcmRlciAoZ2RiYXJjaCk7CisgIFVMT05HRVNUIHRtcHVsb25n ZXN0OwogCiAgIHN3aXRjaCAobnVtKQogICAgIHsKQEAgLTEwOCwxNSArMjM2 LDE1IEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3Ry dWMKICAgICAgIC8qIHN5c19leGl0ICovCiAgICAgY2FzZSAxOgogICAgICAg ewotCWludCBxOwotCXRhcmdldF90ZXJtaW5hbF9vdXJzICgpOwotCXEgPQot CSAgeXF1ZXJ5IChfICgiVGhlIG5leHQgaW5zdHJ1Y3Rpb24gaXMgc3lzY2Fs bCBleGl0LiAgIgotCQkgICAgICJJdCB3aWxsIG1ha2UgdGhlIHByb2dyYW0g ZXhpdC4gICIKLQkJICAgICAiRG8geW91IHdhbnQgdG8gc3RvcCB0aGUgcHJv Z3JhbT8iKSk7Ci0JdGFyZ2V0X3Rlcm1pbmFsX2luZmVyaW9yICgpOwotCWlm IChxKQotCSAgcmV0dXJuIDE7CisgICAgICAgIGludCBxOworICAgICAgICB0 YXJnZXRfdGVybWluYWxfb3VycyAoKTsKKyAgICAgICAgcSA9CisgICAgICAg ICAgeXF1ZXJ5IChfICgiVGhlIG5leHQgaW5zdHJ1Y3Rpb24gaXMgc3lzY2Fs bCBleGl0LiAgIgorICAgICAgICAgICAgICAgICAgICAgIkl0IHdpbGwgbWFr ZSB0aGUgcHJvZ3JhbSBleGl0LiAgIgorICAgICAgICAgICAgICAgICAgICAg IkRvIHlvdSB3YW50IHRvIHN0b3AgdGhlIHByb2dyYW0/IikpOworICAgICAg ICB0YXJnZXRfdGVybWluYWxfaW5mZXJpb3IgKCk7CisgICAgICAgIGlmIChx KQorICAgICAgICAgIHJldHVybiAxOwogICAgICAgfQogICAgICAgYnJlYWs7 CiAKQEAgLTEyNywxMSArMjU1LDExIEBAIHJlY29yZF9saW51eF9zeXN0ZW1f Y2FsbCAoaW50IG51bSwgc3RydWMKICAgICAgIC8qIHN5c19yZWFkICovCiAg ICAgY2FzZSAzOgogICAgICAgewotCXVpbnQzMl90IGFkZHIsIGNvdW50Owot CXJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdk Yl9ieXRlICopICYgYWRkcik7Ci0JcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2Nh Y2hlLCB0ZGVwLT5hcmczLCAoZ2RiX2J5dGUgKikgJiBjb3VudCk7Ci0JaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoYWRkciwgY291bnQpKQotCSAg cmV0dXJuIC0xOworICAgICAgICBVTE9OR0VTVCBhZGRyLCBjb3VudDsKKyAg ICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0 ZGVwLT5hcmcyLCAmYWRkcik7CisgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFk X3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgJmNvdW50KTsKKyAg ICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQURE UilhZGRyLCAoaW50KWNvdW50KSkKKyAgICAgICAgICByZXR1cm4gLTE7CiAg ICAgICB9CiAgICAgICBicmVhazsKIApAQCAtMTcxLDkgKzI5OSwxMCBAQCBy ZWNvcmRfbGludXhfc3lzdGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAgICAg Y2FzZSAyODoKICAgICAgIC8qIHN5c19sc3RhdCAqLwogICAgIGNhc2UgODQ6 Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfX29sZF9r ZXJuZWxfc3RhdCkpCi0JcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3 X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAmdG1wdWxv bmdlc3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo KENPUkVfQUREUil0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfX29sZF9rZXJuZWxfc3RhdCkp CisgICAgICAgIHJldHVybiAtMTsKICAgICAgIGJyZWFrOwogCiAgICAgICAv KiBzeXNfbHNlZWsgKi8KQEAgLTE5NCwxNiArMzIzLDE2IEBAIHJlY29yZF9s aW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKIAogICAgICAgLyog c3lzX3B0cmFjZSAqLwogICAgIGNhc2UgMjY6Ci0gICAgICByZWdjYWNoZV9y YXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsIChnZGJfYnl0ZSAqKSAm IHRtcHUzMik7Ci0gICAgICBpZiAodG1wdTMyID09IFJFQ09SRF9QVFJBQ0Vf UEVFS1RFWFQKLQkgIHx8IHRtcHUzMiA9PSBSRUNPUkRfUFRSQUNFX1BFRUtE QVRBCi0JICB8fCB0bXB1MzIgPT0gUkVDT1JEX1BUUkFDRV9QRUVLVVNSKQot CXsKLQkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJn NCwKLQkJCSAgICAgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLQkgIGlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgNCkpCi0JICAgIHJl dHVybiAtMTsKLQl9CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25l ZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsICZ0bXB1bG9uZ2VzdCk7CisgICAg ICBpZiAodG1wdWxvbmdlc3QgPT0gUkVDT1JEX1BUUkFDRV9QRUVLVEVYVAor ICAgICAgICAgIHx8IHRtcHVsb25nZXN0ID09IFJFQ09SRF9QVFJBQ0VfUEVF S0RBVEEKKyAgICAgICAgICB8fCB0bXB1bG9uZ2VzdCA9PSBSRUNPUkRfUFRS QUNFX1BFRUtVU1IpCisgICAgICAgIHsKKyAgICAgICAgICByZWdjYWNoZV9y YXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzQsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXB1bG9uZ2Vz dCk7CisgICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo KENPUkVfQUREUil0bXB1bG9uZ2VzdCwgNCkpCisgICAgICAgICAgICByZXR1 cm4gLTE7CisgICAgICAgIH0KICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBz eXNfYWxhcm0gKi8KQEAgLTI0MCw5ICszNjksOSBAQCByZWNvcmRfbGludXhf c3lzdGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAKICAgICAgIC8qIHN5c190 aW1lcyAqLwogICAgIGNhc2UgNDM6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVh ZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsIChnZGJfYnl0ZSAqKSAmIHRtcHUz Mik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1 MzIsIHRkZXAtPnNpemVfdG1zKSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdj YWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEs ICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfbWVtICgoQ09SRV9BRERSKXRtcHVsb25nZXN0LCB0ZGVwLT5zaXplX3Rt cykpCisgICAgICAgIHJldHVybiAtMTsKICAgICAgIGJyZWFrOwogCiAgICAg ICAvKiBzeXNfbmlfc3lzY2FsbCAqLwpAQCAtMjcwLDE0OSArMzk5LDE3MiBA QCByZWNvcmRfbGludXhfc3lzdGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAg ICAgICAvKiBzeXNfaW9jdGwgKi8KICAgICBjYXNlIDU0OgogICAgICAgLyog WFhYIE5lZWQgdG8gYWRkIGEgbG90IG9mIHN1cHBvcnQgb2Ygb3RoZXIgaW9j dGwgcmVxdWVzdHMuICAqLwotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJl Z2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwot ICAgICAgaWYgKHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9GSU9DTEVYIHx8IHRt cHUzMiA9PSB0ZGVwLT5pb2N0bF9GSU9OQ0xFWAotCSAgfHwgdG1wdTMyID09 IHRkZXAtPmlvY3RsX0ZJT05CSU8gfHwgdG1wdTMyID09IHRkZXAtPmlvY3Rs X0ZJT0FTWU5DCi0JICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVENTRVRT IHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9UQ1NFVFNXCi0JICB8fCB0bXB1 MzIgPT0gdGRlcC0+aW9jdGxfVENTRVRTRiB8fCB0bXB1MzIgPT0gdGRlcC0+ aW9jdGxfVENTRVRBCi0JICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVENT RVRBVyB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVENTRVRBRgotCSAgfHwg dG1wdTMyID09IHRkZXAtPmlvY3RsX1RDU0JSSyB8fCB0bXB1MzIgPT0gdGRl cC0+aW9jdGxfVENYT05DCi0JICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxf VENGTFNIIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9DRVhDTAotCSAg fHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NOWENMCi0JICB8fCB0bXB1 MzIgPT0gdGRlcC0+aW9jdGxfVElPQ1NDVFRZCi0JICB8fCB0bXB1MzIgPT0g dGRlcC0+aW9jdGxfVElPQ1NQR1JQIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0 bF9USU9DU1RJCi0JICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ1NX SU5TWgotCSAgfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NNQklTIHx8 IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9DTUJJQwotCSAgfHwgdG1wdTMy ID09IHRkZXAtPmlvY3RsX1RJT0NNU0VUCi0JICB8fCB0bXB1MzIgPT0gdGRl cC0+aW9jdGxfVElPQ1NTT0ZUQ0FSCi0JICB8fCB0bXB1MzIgPT0gdGRlcC0+ aW9jdGxfVElPQ0NPTlMKLQkgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9U SU9DU1NFUklBTAotCSAgfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NQ S1QgfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NOT1RUWQotCSAgfHwg dG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NTRVREIHx8IHRtcHUzMiA9PSB0 ZGVwLT5pb2N0bF9UQ1NCUktQCi0JICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9j dGxfVElPQ1RUWUdTVFJVQ1QKLQkgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0 bF9USU9DU0JSSyB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ0NCUksK LQkgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9UQ1NFVFMyIHx8IHRtcHUz MiA9PSB0ZGVwLT5pb2N0bF9UQ1NFVFNXMgotCSAgfHwgdG1wdTMyID09IHRk ZXAtPmlvY3RsX1RDU0VUU0YyCi0JICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9j dGxfVElPQ1NQVExDSwotCSAgfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RJ T0NTRVJDT05GSUcKLQkgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9D U0VSR1dJTEQKLQkgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9DU0VS U1dJTEQKLQkgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9DU0xDS1RS TUlPUwotCSAgfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NTRVJHRVRN VUxUSQotCSAgfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NTRVJTRVRN VUxUSQotCSAgfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NNSVdBSVQK LQkgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9DU0hBWUVTRVNQKQot CXsKLQkgIC8qIE5vdGhpbmcgdG8gZG8uICAqLwotCX0KLSAgICAgIGVsc2Ug aWYgKHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9UQ0dFVFMgfHwgdG1wdTMyID09 IHRkZXAtPmlvY3RsX1RDR0VUQQotCSAgICAgICB8fCB0bXB1MzIgPT0gdGRl cC0+aW9jdGxfVElPQ0dMQ0tUUk1JT1MpCi0JewotCSAgcmVnY2FjaGVfcmF3 X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLAotCQkJICAgICAoZ2RiX2J5 dGUgKikgJiB0bXB1MzIpOwotCSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRk X21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX3Rlcm1pb3MpKQotCSAgICByZXR1 cm4gLTE7Ci0JfQotICAgICAgZWxzZSBpZiAodG1wdTMyID09IHRkZXAtPmlv Y3RsX1RJT0NHUEdSUAotCSAgICAgICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9j dGxfVElPQ0dTSUQpCi0JewotCSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2Nh Y2hlLCB0ZGVwLT5hcmczLAotCQkJICAgICAoZ2RiX2J5dGUgKikgJiB0bXB1 MzIpOwotCSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMy LCB0ZGVwLT5zaXplX3BpZF90KSkKLQkgICAgcmV0dXJuIC0xOwotCX0KLSAg ICAgIGVsc2UgaWYgKHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9DT1VUUQot CSAgICAgICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ01HRVQKLQkg ICAgICAgfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NHU09GVENBUgot CSAgICAgICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfRklPTlJFQUQKLQkg ICAgICAgfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NJTlEKLQkgICAg ICAgfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NHRVRECi0JICAgICAg IHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9DR1BUTgotCSAgICAgICB8 fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ1NFUkdFVExTUikKLQl7Ci0J ICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsCi0J CQkgICAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0JICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfaW50KSkK LQkgICAgcmV0dXJuIC0xOwotCX0KLSAgICAgIGVsc2UgaWYgKHRtcHUzMiA9 PSB0ZGVwLT5pb2N0bF9USU9DR1dJTlNaKQotCXsKLQkgIHJlZ2NhY2hlX3Jh d19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywKLQkJCSAgICAgKGdkYl9i eXRlICopICYgdG1wdTMyKTsKLQkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV93aW5zaXplKSkKLQkgICAgcmV0 dXJuIC0xOwotCX0KLSAgICAgIGVsc2UgaWYgKHRtcHUzMiA9PSB0ZGVwLT5p b2N0bF9USU9DTElOVVgpCi0JewotCSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJl Z2NhY2hlLCB0ZGVwLT5hcmczLAotCQkJICAgICAoZ2RiX2J5dGUgKikgJiB0 bXB1MzIpOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJl Z2NhY2hlLCB0ZGVwLT5hcmcyLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYg KHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX0ZJT0NMRVgKKyAgICAgICAg ICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9GSU9OQ0xFWAorICAg ICAgICAgIHx8IHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX0ZJT05CSU8K KyAgICAgICAgICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9GSU9B U1lOQworICAgICAgICAgIHx8IHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3Rs X1RDU0VUUworICAgICAgICAgIHx8IHRtcHVsb25nZXN0ID09IHRkZXAtPmlv Y3RsX1RDU0VUU1cKKyAgICAgICAgICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVw LT5pb2N0bF9UQ1NFVFNGCisgICAgICAgICAgfHwgdG1wdWxvbmdlc3QgPT0g dGRlcC0+aW9jdGxfVENTRVRBCisgICAgICAgICAgfHwgdG1wdWxvbmdlc3Qg PT0gdGRlcC0+aW9jdGxfVENTRVRBVworICAgICAgICAgIHx8IHRtcHVsb25n ZXN0ID09IHRkZXAtPmlvY3RsX1RDU0VUQUYKKyAgICAgICAgICB8fCB0bXB1 bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9UQ1NCUksKKyAgICAgICAgICB8fCB0 bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9UQ1hPTkMKKyAgICAgICAgICB8 fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9UQ0ZMU0gKKyAgICAgICAg ICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9USU9DRVhDTAorICAg ICAgICAgIHx8IHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RJT0NOWENM CisgICAgICAgICAgfHwgdG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVElP Q1NDVFRZCisgICAgICAgICAgfHwgdG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9j dGxfVElPQ1NQR1JQCisgICAgICAgICAgfHwgdG1wdWxvbmdlc3QgPT0gdGRl cC0+aW9jdGxfVElPQ1NUSQorICAgICAgICAgIHx8IHRtcHVsb25nZXN0ID09 IHRkZXAtPmlvY3RsX1RJT0NTV0lOU1oKKyAgICAgICAgICB8fCB0bXB1bG9u Z2VzdCA9PSB0ZGVwLT5pb2N0bF9USU9DTUJJUworICAgICAgICAgIHx8IHRt cHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RJT0NNQklDCisgICAgICAgICAg fHwgdG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVElPQ01TRVQKKyAgICAg ICAgICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9USU9DU1NPRlRD QVIKKyAgICAgICAgICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9U SU9DQ09OUworICAgICAgICAgIHx8IHRtcHVsb25nZXN0ID09IHRkZXAtPmlv Y3RsX1RJT0NTU0VSSUFMCisgICAgICAgICAgfHwgdG1wdWxvbmdlc3QgPT0g dGRlcC0+aW9jdGxfVElPQ1BLVAorICAgICAgICAgIHx8IHRtcHVsb25nZXN0 ID09IHRkZXAtPmlvY3RsX1RJT0NOT1RUWQorICAgICAgICAgIHx8IHRtcHVs b25nZXN0ID09IHRkZXAtPmlvY3RsX1RJT0NTRVRECisgICAgICAgICAgfHwg dG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVENTQlJLUAorICAgICAgICAg IHx8IHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RJT0NUVFlHU1RSVUNU CisgICAgICAgICAgfHwgdG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVElP Q1NCUksKKyAgICAgICAgICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0 bF9USU9DQ0JSSworICAgICAgICAgIHx8IHRtcHVsb25nZXN0ID09IHRkZXAt PmlvY3RsX1RDU0VUUzIKKyAgICAgICAgICB8fCB0bXB1bG9uZ2VzdCA9PSB0 ZGVwLT5pb2N0bF9UQ1NFVFNXMgorICAgICAgICAgIHx8IHRtcHVsb25nZXN0 ID09IHRkZXAtPmlvY3RsX1RDU0VUU0YyCisgICAgICAgICAgfHwgdG1wdWxv bmdlc3QgPT0gdGRlcC0+aW9jdGxfVElPQ1NQVExDSworICAgICAgICAgIHx8 IHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RJT0NTRVJDT05GSUcKKyAg ICAgICAgICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9USU9DU0VS R1dJTEQKKyAgICAgICAgICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0 bF9USU9DU0VSU1dJTEQKKyAgICAgICAgICB8fCB0bXB1bG9uZ2VzdCA9PSB0 ZGVwLT5pb2N0bF9USU9DU0xDS1RSTUlPUworICAgICAgICAgIHx8IHRtcHVs b25nZXN0ID09IHRkZXAtPmlvY3RsX1RJT0NTRVJHRVRNVUxUSQorICAgICAg ICAgIHx8IHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RJT0NTRVJTRVRN VUxUSQorICAgICAgICAgIHx8IHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3Rs X1RJT0NNSVdBSVQKKyAgICAgICAgICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVw LT5pb2N0bF9USU9DU0hBWUVTRVNQKQorICAgICAgICB7CisgICAgICAgICAg LyogTm90aGluZyB0byBkby4gICovCisgICAgICAgIH0KKyAgICAgIGVsc2Ug aWYgKHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RDR0VUUworICAgICAg ICAgICAgICAgfHwgdG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVENHRVRB CisgICAgICAgICAgICAgICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0 bF9USU9DR0xDS1RSTUlPUykKKyAgICAgICAgeworICAgICAgICAgIHJlZ2Nh Y2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRtcHVs b25nZXN0KTsKKyAgICAgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf bWVtICgoQ09SRV9BRERSKXRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfdGVybWlvcykp CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgIGVs c2UgaWYgKHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RJT0NHUEdSUAor ICAgICAgICAgICAgICAgfHwgdG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxf VElPQ0dTSUQpCisgICAgICAgIHsKKyAgICAgICAgICByZWdjYWNoZV9yYXdf cmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXB1bG9uZ2VzdCk7 CisgICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENP UkVfQUREUil0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX3BpZF90KSkKKyAgICAgICAg ICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAodG1w dWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVElPQ09VVFEKKyAgICAgICAgICAg ICAgIHx8IHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RJT0NNR0VUCisg ICAgICAgICAgICAgICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9U SU9DR1NPRlRDQVIKKyAgICAgICAgICAgICAgIHx8IHRtcHVsb25nZXN0ID09 IHRkZXAtPmlvY3RsX0ZJT05SRUFECisgICAgICAgICAgICAgICB8fCB0bXB1 bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9USU9DSU5RCisgICAgICAgICAgICAg ICB8fCB0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9USU9DR0VURAorICAg ICAgICAgICAgICAgfHwgdG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVElP Q0dQVE4KKyAgICAgICAgICAgICAgIHx8IHRtcHVsb25nZXN0ID09IHRkZXAt PmlvY3RsX1RJT0NTRVJHRVRMU1IpCisgICAgICAgIHsKKyAgICAgICAgICBy ZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0 bXB1bG9uZ2VzdCk7CisgICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX21lbSAoKENPUkVfQUREUil0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX2ludCkp CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgIGVs c2UgaWYgKHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RJT0NHV0lOU1op CisgICAgICAgIHsKKyAgICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNp Z25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZ0bXB1bG9uZ2VzdCk7CisgICAgICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUil0 bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0ZGVwLT5zaXplX3dpbnNpemUpKQorICAgICAgICAgICAgcmV0 dXJuIC0xOworICAgICAgICB9CisgICAgICBlbHNlIGlmICh0bXB1bG9uZ2Vz dCA9PSB0ZGVwLT5pb2N0bF9USU9DTElOVVgpCisgICAgICAgIHsKKyAgICAg ICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRk ZXAtPmFyZzMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZ0bXB1bG9uZ2VzdCk7CiAgICAgICAgICAgLyogVGhpcyBzeXNjYWxs IGFmZmVjdCBhIGNoYXIgc2l6ZSBtZW1vcnkuICAqLwotCSAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCAxKSkKLQkgICAgcmV0dXJu IC0xOwotCX0KLSAgICAgIGVsc2UgaWYgKHRtcHUzMiA9PSB0ZGVwLT5pb2N0 bF9USU9DR1NFUklBTCkKLQl7Ci0JICByZWdjYWNoZV9yYXdfcmVhZCAocmVn Y2FjaGUsIHRkZXAtPmFyZzMsCi0JCQkgICAgIChnZGJfYnl0ZSAqKSAmIHRt cHUzMik7Ci0JICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1 MzIsIHRkZXAtPnNpemVfc2VyaWFsX3N0cnVjdCkpCi0JICAgIHJldHVybiAt MTsKLQl9Ci0gICAgICBlbHNlIGlmICh0bXB1MzIgPT0gdGRlcC0+aW9jdGxf VENHRVRTMikKLQl7Ci0JICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUs IHRkZXAtPmFyZzMsCi0JCQkgICAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7 Ci0JICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRk ZXAtPnNpemVfdGVybWlvczIpKQotCSAgICByZXR1cm4gLTE7Ci0JfQotICAg ICAgZWxzZSBpZiAodG1wdTMyID09IHRkZXAtPmlvY3RsX0ZJT1FTSVpFKQot CXsKLQkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJn MywKLQkJCSAgICAgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLQkgIGlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9s b2ZmX3QpKQotCSAgICByZXR1cm4gLTE7Ci0JfQotICAgICAgZWxzZSBpZiAo dG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NHSUNPVU5UKQotCXsKLQkgIHJl Z2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywKLQkJCSAg ICAgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLQkgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0KLQkgICAgICAodG1wdTMyLCB0ZGVwLT5zaXplX3Nl cmlhbF9pY291bnRlcl9zdHJ1Y3QpKQotCSAgICByZXR1cm4gLTE7Ci0JfQot ICAgICAgZWxzZSBpZiAodG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NHSEFZ RVNFU1ApCi0JewotCSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0 ZGVwLT5hcmczLAotCQkJICAgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwot CSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVw LT5zaXplX2hheWVzX2VzcF9jb25maWcpKQotCSAgICByZXR1cm4gLTE7Ci0J fQotICAgICAgZWxzZSBpZiAodG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NT RVJHU1RSVUNUKQotCXsKLQkgIHByaW50Zl91bmZpbHRlcmVkIChfKCJQcm9j ZXNzIHJlY29yZCBhbmQgcmVwbGF5IHRhcmdldCBkb2Vzbid0ICIKLQkJCSAg ICAgICAic3VwcG9ydCBpb2N0bCByZXF1ZXN0IFRJT0NTRVJHU1RSVUNUXG4i KSk7Ci0JICByZXR1cm4gMTsKLQl9CisgICAgICAgICAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUil0bXB1bG9uZ2VzdCwgMSkp CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgIGVs c2UgaWYgKHRtcHVsb25nZXN0ID09IHRkZXAtPmlvY3RsX1RJT0NHU0VSSUFM KQorICAgICAgICB7CisgICAgICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5z aWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmdG1wdWxvbmdlc3QpOworICAgICAg ICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIp dG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGRlcC0+c2l6ZV9zZXJpYWxfc3RydWN0KSkKKyAgICAgICAg ICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAodG1w dWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVENHRVRTMikKKyAgICAgICAgewor ICAgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNo ZSwgdGRlcC0+YXJnMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJnRtcHVsb25nZXN0KTsKKyAgICAgICAgICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKXRtcHVsb25nZXN0LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAt PnNpemVfdGVybWlvczIpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAg ICAgICB9CisgICAgICBlbHNlIGlmICh0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5p b2N0bF9GSU9RU0laRSkKKyAgICAgICAgeworICAgICAgICAgIHJlZ2NhY2hl X3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRtcHVsb25n ZXN0KTsKKyAgICAgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVt ICgoQ09SRV9BRERSKXRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfbG9mZl90KSkKKyAg ICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgZWxzZSBp ZiAodG1wdWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVElPQ0dJQ09VTlQpCisg ICAgICAgIHsKKyAgICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25l ZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZ0bXB1bG9uZ2VzdCk7CisgICAgICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUil0bXB1 bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0ZGVwLT5zaXplX3NlcmlhbF9pY291bnRlcl9zdHJ1Y3QpKQorICAg ICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICBlbHNlIGlm ICh0bXB1bG9uZ2VzdCA9PSB0ZGVwLT5pb2N0bF9USU9DR0hBWUVTRVNQKQor ICAgICAgICB7CisgICAgICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWdu ZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmdG1wdWxvbmdlc3QpOworICAgICAgICAg IGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpdG1w dWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGRlcC0+c2l6ZV9oYXllc19lc3BfY29uZmlnKSkKKyAgICAgICAg ICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAodG1w dWxvbmdlc3QgPT0gdGRlcC0+aW9jdGxfVElPQ1NFUkdTVFJVQ1QpCisgICAg ICAgIHsKKyAgICAgICAgICBwcmludGZfdW5maWx0ZXJlZCAoXygiUHJvY2Vz cyByZWNvcmQgYW5kIHJlcGxheSB0YXJnZXQgZG9lc24ndCAiCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgInN1cHBvcnQgaW9jdGwgcmVxdWVz dCBUSU9DU0VSR1NUUlVDVFxuIikpOworICAgICAgICAgIHJldHVybiAxOwor ICAgICAgICB9CiAgICAgICBlbHNlCi0JewotCSAgcHJpbnRmX3VuZmlsdGVy ZWQgKF8oIlByb2Nlc3MgcmVjb3JkIGFuZCByZXBsYXkgdGFyZ2V0IGRvZXNu J3QgIgotCQkJICAgICAgICJzdXBwb3J0IGlvY3RsIHJlcXVlc3QgMHglcy5c biIpLAotCQkJICAgICBwaGV4X256ICh0bXB1MzIsIDQpKTsKLQkgIHJldHVy biAxOwotCX0KKyAgICAgICAgeworICAgICAgICAgIHByaW50Zl91bmZpbHRl cmVkIChfKCJQcm9jZXNzIHJlY29yZCBhbmQgcmVwbGF5IHRhcmdldCBkb2Vz bid0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3VwcG9y dCBpb2N0bCByZXF1ZXN0IDB4JXMuXG4iKSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgT1VUUFVUX1JFRyAodG1wdWxvbmdlc3QsIHRkZXAtPmFy ZzIpKTsKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQogICAgICAg YnJlYWs7CiAKICAgICAgIC8qIHN5c19mY250bCAqLwogICAgIGNhc2UgNTU6 CiAgICAgICAvKiBYWFggKi8KLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChy ZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsK KyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwg dGRlcC0+YXJnMiwgJnRtcHVsb25nZXN0KTsKICAgICBzeXNfZmNudGw6Ci0g ICAgICBpZiAodG1wdTMyID09IHRkZXAtPmZjbnRsX0ZfR0VUTEspCi0Jewot CSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLAot CQkJICAgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotCSAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX2Zsb2Nr KSkKLQkgICAgcmV0dXJuIC0xOwotCX0KKyAgICAgIGlmICh0bXB1bG9uZ2Vz dCA9PSB0ZGVwLT5mY250bF9GX0dFVExLKQorICAgICAgICB7CisgICAgICAg ICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVw LT5hcmczLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmdG1wdWxvbmdlc3QpOworICAgICAgICAgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKChDT1JFX0FERFIpdG1wdWxvbmdlc3QsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9m bG9jaykpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KICAg ICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfbmlfc3lzY2FsbCAqLwpAQCAt NDI1LDkgKzU3NywxMCBAQCByZWNvcmRfbGludXhfc3lzdGVtX2NhbGwgKGlu dCBudW0sIHN0cnVjCiAKICAgICAgIC8qIHN5c19vbGR1bmFtZSAqLwogICAg IGNhc2UgNTk6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUs IHRkZXAtPmFyZzEsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNp emVfb2xkb2xkX3V0c25hbWUpKQotCXJldHVybiAtMTsKKyAgICAgIHJlZ2Nh Y2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMSwg JnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0gKChDT1JFX0FERFIpdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX29sZG9sZF91dHNu YW1lKSkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgICAgYnJlYWs7CiAKICAg ICAgIC8qIHN5c191bWFzayAqLwpAQCAtNDM4LDkgKzU5MSwxMCBAQCByZWNv cmRfbGludXhfc3lzdGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAKICAgICAg IC8qIHN5c191c3RhdCAqLwogICAgIGNhc2UgNjI6Ci0gICAgICByZWdjYWNo ZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAq KSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf bWVtICh0bXB1MzIsIHRkZXAtPnNpemVfdXN0YXQpKQotCXJldHVybiAtMTsK KyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwg dGRlcC0+YXJnMiwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRf YXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpdG1wdWxvbmdlc3QsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXpl X3VzdGF0KSkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgICAgYnJlYWs7CiAK ICAgICAgIC8qIHN5c19kdXAyICovCkBAIC00NTUsOSArNjA5LDEwIEBAIHJl Y29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKIAogICAg ICAgLyogc3lzX3NpZ2FjdGlvbiAqLwogICAgIGNhc2UgNjc6Ci0gICAgICBy ZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsIChnZGJf Ynl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfb2xkX3NpZ2FjdGlvbikp Ci0JcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWdu ZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAmdG1wdWxvbmdlc3QpOworICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUil0 bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRkZXAtPnNpemVfb2xkX3NpZ2FjdGlvbikpCisgICAgICAgIHJldHVy biAtMTsKICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfc2dldG1hc2sg Ki8KQEAgLTQ3NCw5ICs2MjksMTAgQEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9j YWxsIChpbnQgbnVtLCBzdHJ1YwogCiAgICAgICAvKiBzeXNfc2lncGVuZGlu ZyAqLwogICAgIGNhc2UgNzM6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAo cmVnY2FjaGUsIHRkZXAtPmFyZzEsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7 Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIs IHRkZXAtPnNpemVfb2xkX3NpZ3NldF90KSkKLQlyZXR1cm4gLTE7CisgICAg ICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAt PmFyZzEsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKXRtcHVsb25nZXN0LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9vbGRf c2lnc2V0X3QpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVhazsK IAogICAgICAgLyogc3lzX3NldGhvc3RuYW1lICovCkBAIC00ODcsMjYgKzY0 MywzMCBAQCByZWNvcmRfbGludXhfc3lzdGVtX2NhbGwgKGludCBudW0sIHN0 cnVjCiAKICAgICAgIC8qIHN5c19vbGRfZ2V0cmxpbWl0ICovCiAgICAgY2Fz ZSA3NjoKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRl cC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9y bGltaXQpKQotCXJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFk X3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgJnRtcHVsb25nZXN0 KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JF X0FERFIpdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0ZGVwLT5zaXplX3JsaW1pdCkpCisgICAgICAgIHJldHVy biAtMTsKICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfZ2V0cnVzYWdl ICovCiAgICAgY2FzZSA3NzoKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChy ZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsK LSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwg dGRlcC0+c2l6ZV9ydXNhZ2UpKQotCXJldHVybiAtMTsKKyAgICAgIHJlZ2Nh Y2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwg JnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0gKChDT1JFX0FERFIpdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX3J1c2FnZSkpCisg ICAgICAgIHJldHVybiAtMTsKICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBz eXNfZ2V0dGltZW9mZGF5ICovCiAgICAgY2FzZSA3ODoKLSAgICAgIHJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMSwgKGdkYl9ieXRl ICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV90aW1ldmFsKSkKLQlyZXR1cm4g LTE7Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAt PmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVj b3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfdGlt ZXpvbmUpKQotCXJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFk X3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMSwgJnRtcHVsb25nZXN0 KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JF X0FERFIpdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0ZGVwLT5zaXplX3RpbWV2YWwpKQorICAgICAgICByZXR1 cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVn Y2FjaGUsIHRkZXAtPmFyZzIsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKXRtcHVsb25n ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRl cC0+c2l6ZV90aW1lem9uZSkpCisgICAgICAgIHJldHVybiAtMTsKICAgICAg IGJyZWFrOwogCiAgICAgICAvKiBzeXNfc2V0dGltZW9mZGF5ICovCkBAIC01 MTUsNTMgKzY3NSw1NiBAQCByZWNvcmRfbGludXhfc3lzdGVtX2NhbGwgKGlu dCBudW0sIHN0cnVjCiAKICAgICAgIC8qIHN5c19nZXRncm91cHMxNiAqLwog ICAgIGNhc2UgODA6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2Fj aGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAg ICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAt PnNpemVfb2xkX2dpZF90KSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdjYWNo ZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsICZ0 bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf bWVtICgoQ09SRV9BRERSKXRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9vbGRfZ2lkX3QpKQor ICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAogICAgICAgLyog c3lzX3NldGdyb3VwczE2ICovCiAgICAgY2FzZSA4MToKLSAgICAgIHJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRl ICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9vbGRfZ2lkX3QpKQotCXJldHVy biAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdj YWNoZSwgdGRlcC0+YXJnMiwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpdG1wdWxvbmdl c3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVw LT5zaXplX29sZF9naWRfdCkpCisgICAgICAgIHJldHVybiAtMTsKICAgICAg IGJyZWFrOwogCiAgICAgICAvKiBvbGRfc2VsZWN0ICovCiAgICAgY2FzZSA4 MjoKICAgICAgIHsKLQlzdHJ1Y3Qgc2VsX2FyZ19zdHJ1Y3QKLQl7Ci0JICBD T1JFX0FERFIgbjsKLQkgIENPUkVfQUREUiBpbnA7Ci0JICBDT1JFX0FERFIg b3V0cDsKLQkgIENPUkVfQUREUiBleHA7Ci0JICBDT1JFX0FERFIgdHZwOwot CX0gc2VsOworICAgICAgICBzdHJ1Y3Qgc2VsX2FyZ19zdHJ1Y3QKKyAgICAg ICAgeworICAgICAgICAgIENPUkVfQUREUiBuOworICAgICAgICAgIENPUkVf QUREUiBpbnA7CisgICAgICAgICAgQ09SRV9BRERSIG91dHA7CisgICAgICAg ICAgQ09SRV9BRERSIGV4cDsKKyAgICAgICAgICBDT1JFX0FERFIgdHZwOwor ICAgICAgICB9IHNlbDsKIAotCXJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNo ZSwgdGRlcC0+YXJnMSwKLQkJCSAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7 Ci0JaWYgKHRtcHUzMikKLQkgIHsKLQkgICAgaWYgKHRhcmdldF9yZWFkX21l bW9yeSAodG1wdTMyLCAoZ2RiX2J5dGUgKikgJiBzZWwsIHNpemVvZiAoc2Vs KSkpCi0JICAgICAgewotCQlpZiAocmVjb3JkX2RlYnVnKQotCQkgIGZwcmlu dGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKLQkJCQkgICAgICAiUHJvY2Vz cyByZWNvcmQ6IGVycm9yIHJlYWRpbmcgbWVtb3J5ICIKLQkJCQkgICAgICAi YXQgYWRkciA9ICVzIGxlbiA9ICVsdS5cbiIsCi0JCQkJICAgICAgcGFkZHJl c3MgKGdkYmFyY2gsIHRtcHUzMiksCi0JCQkJICAgICAgKHVuc2lnbmVkIGxv bmcpc2l6ZW9mIChzZWwpKTsKLQkJcmV0dXJuIC0xOwotCSAgICAgIH0KLQkg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoc2VsLmlucCwgdGRl cC0+c2l6ZV9mZF9zZXQpKQotCSAgICAgIHJldHVybiAtMTsKLQkgICAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoc2VsLm91dHAsIHRkZXAtPnNp emVfZmRfc2V0KSkKLQkgICAgICByZXR1cm4gLTE7Ci0JICAgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9tZW0gKHNlbC5leHAsIHRkZXAtPnNpemVfZmRf c2V0KSkKLQkgICAgICByZXR1cm4gLTE7Ci0JICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKHNlbC50dnAsIHRkZXAtPnNpemVfdGltZXZhbCkp Ci0JICAgICAgcmV0dXJuIC0xOwotCSAgfQorICAgICAgICByZWdjYWNoZV9y YXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1wdWxvbmdlc3Qp OworICAgICAgICBpZiAodG1wdWxvbmdlc3QpCisgICAgICAgICAgeworICAg ICAgICAgICAgaWYgKHRhcmdldF9yZWFkX21lbW9yeSAodG1wdWxvbmdlc3Qs IChnZGJfYnl0ZSAqKSZzZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplb2Yoc2VsKSkpCisgICAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICBpZiAocmVjb3JkX2RlYnVnKQorICAgICAgICAgICAg ICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJvY2VzcyByZWNv cmQ6IGVycm9yIHJlYWRpbmcgbWVtb3J5ICIKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgImF0IGFkZHIgPSAweCVzIGxlbiA9ICVs dS5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE9VVFBVVF9SRUcgKHRtcHVsb25nZXN0LCB0ZGVwLT5hcmcxKSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxv bmcpc2l6ZW9mIChzZWwpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7 CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKHNlbC5pbnAsIHRkZXAtPnNpemVfZmRfc2V0KSkK KyAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbSAoc2VsLm91dHAsIHRkZXAtPnNpemVf ZmRfc2V0KSkKKyAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoc2VsLmV4cCwgdGRl cC0+c2l6ZV9mZF9zZXQpKQorICAgICAgICAgICAgICByZXR1cm4gLTE7Cisg ICAgICAgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChzZWwu dHZwLCB0ZGVwLT5zaXplX3RpbWV2YWwpKQorICAgICAgICAgICAgICByZXR1 cm4gLTE7CisgICAgICAgICAgfQogICAgICAgfQogICAgICAgYnJlYWs7CiAK QEAgLTU3MiwxMiArNzM1LDEyIEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2Fs bCAoaW50IG51bSwgc3RydWMKICAgICAgIC8qIHN5c19yZWFkbGluayAqLwog ICAgIGNhc2UgODU6CiAgICAgICB7Ci0JdWludDMyX3QgbGVuOwotCXJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwKLQkJCSAgIChn ZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0JcmVnY2FjaGVfcmF3X3JlYWQgKHJl Z2NhY2hlLCB0ZGVwLT5hcmczLCAoZ2RiX2J5dGUgKikgJiBsZW4pOwotCWlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgbGVuKSkKLQkg IHJldHVybiAtMTsKKyAgICAgICAgVUxPTkdFU1QgbGVuOworICAgICAgICBy ZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1w dWxvbmdlc3QpOworICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25l ZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsICZsZW4pOworICAgICAgICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKXRtcHVsb25n ZXN0LCAoaW50KWxlbikpCisgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAg fQogICAgICAgYnJlYWs7CiAKQEAgLTU5MCwyMyArNzUzLDI0IEBAIHJlY29y ZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKICAgICAgIC8q IHN5c19yZWJvb3QgKi8KICAgICBjYXNlIDg4OgogICAgICAgewotCWludCBx OwotCXRhcmdldF90ZXJtaW5hbF9vdXJzICgpOwotCXEgPQotCSAgeXF1ZXJ5 IChfKCJUaGUgbmV4dCBpbnN0cnVjdGlvbiBpcyBzeXNjYWxsIHJlYm9vdC4g ICIKLQkJICAgICJJdCB3aWxsIHJlc3RhcnQgdGhlIGNvbXB1dGVyLiAgIgot CQkgICAgIkRvIHlvdSB3YW50IHRvIHN0b3AgdGhlIHByb2dyYW0/IikpOwot CXRhcmdldF90ZXJtaW5hbF9pbmZlcmlvciAoKTsKLQlpZiAocSkKLQkgIHJl dHVybiAxOworICAgICAgICBpbnQgcTsKKyAgICAgICAgdGFyZ2V0X3Rlcm1p bmFsX291cnMgKCk7CisgICAgICAgIHEgPQorICAgICAgICAgIHlxdWVyeSAo XygiVGhlIG5leHQgaW5zdHJ1Y3Rpb24gaXMgc3lzY2FsbCByZWJvb3QuICAi CisgICAgICAgICAgICAgICAgICAgICJJdCB3aWxsIHJlc3RhcnQgdGhlIGNv bXB1dGVyLiAgIgorICAgICAgICAgICAgICAgICAgICAiRG8geW91IHdhbnQg dG8gc3RvcCB0aGUgcHJvZ3JhbT8iKSk7CisgICAgICAgIHRhcmdldF90ZXJt aW5hbF9pbmZlcmlvciAoKTsKKyAgICAgICAgaWYgKHEpCisgICAgICAgICAg cmV0dXJuIDE7CiAgICAgICB9CiAgICAgICBicmVhazsKIAogICAgICAgLyog b2xkX3JlYWRkaXIgKi8KICAgICBjYXNlIDg5OgotICAgICAgcmVnY2FjaGVf cmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikg JiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21l bSAodG1wdTMyLCB0ZGVwLT5zaXplX2RpcmVudCkpCi0JcmV0dXJuIC0xOwor ICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0 ZGVwLT5hcmcyLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUil0bXB1bG9uZ2VzdCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVf ZGlyZW50KSkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgICAgYnJlYWs7CiAK ICAgICAgIC8qIG9sZF9tbWFwICovCkBAIC02MTYsMjIgKzc4MCwyMiBAQCBy ZWNvcmRfbGludXhfc3lzdGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAgICAg ICAvKiBzeXNfbXVubWFwICovCiAgICAgY2FzZSA5MToKICAgICAgIHsKLQlp bnQgcTsKLQl1aW50MzJfdCBsZW47CisgICAgICAgIGludCBxOworICAgICAg ICBVTE9OR0VTVCBsZW47CiAKLQlyZWdjYWNoZV9yYXdfcmVhZCAocmVnY2Fj aGUsIHRkZXAtPmFyZzEsCi0JCQkgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIp OwotCXJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwg KGdkYl9ieXRlICopICYgbGVuKTsKLQl0YXJnZXRfdGVybWluYWxfb3VycyAo KTsKLQlxID0KLQkgIHlxdWVyeSAoXygiVGhlIG5leHQgaW5zdHJ1Y3Rpb24g aXMgc3lzY2FsbCBtdW5tYXAuICAiCi0JCSAgICAiSXQgd2lsbCBmcmVlIHRo ZSBtZW1vcnkgYWRkciA9ICVzIGxlbiA9ICV1LiAgIgotCQkgICAgIkl0IHdp bGwgbWFrZSByZWNvcmQgdGFyZ2V0IGdldCBlcnJvci4gICIKLQkJICAgICJE byB5b3Ugd2FudCB0byBzdG9wIHRoZSBwcm9ncmFtPyIpLAotCQkgIHBhZGRy ZXNzIChnZGJhcmNoLCB0bXB1MzIpLCAoaW50KWxlbik7Ci0JdGFyZ2V0X3Rl cm1pbmFsX2luZmVyaW9yICgpOwotCWlmIChxKQotCSAgcmV0dXJuIDE7Cisg ICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwg dGRlcC0+YXJnMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZ0bXB1bG9uZ2VzdCk7CisgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFk X3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgJmxlbik7CisgICAg ICAgIHRhcmdldF90ZXJtaW5hbF9vdXJzICgpOworICAgICAgICBxID0KKyAg ICAgICAgICB5cXVlcnkgKF8oIlRoZSBuZXh0IGluc3RydWN0aW9uIGlzIHN5 c2NhbGwgbXVubWFwLiAgIgorICAgICAgICAgICAgICAgICAgICAiSXQgd2ls bCBmcmVlIHRoZSBtZW1vcnkgYWRkciA9IDB4JXMgbGVuID0gJXUuICAiCisg ICAgICAgICAgICAgICAgICAgICJJdCB3aWxsIG1ha2UgcmVjb3JkIHRhcmdl dCBnZXQgZXJyb3IuICAiCisgICAgICAgICAgICAgICAgICAgICJEbyB5b3Ug d2FudCB0byBzdG9wIHRoZSBwcm9ncmFtPyIpLAorICAgICAgICAgICAgICAg ICAgT1VUUFVUX1JFRyAodG1wdWxvbmdlc3QsIHRkZXAtPmFyZzEpLCAoaW50 KWxlbik7CisgICAgICAgIHRhcmdldF90ZXJtaW5hbF9pbmZlcmlvciAoKTsK KyAgICAgICAgaWYgKHEpCisgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICB9 CiAgICAgICBicmVhazsKIApAQCAtNjU1LDI5MiArODE5LDM0NyBAQCByZWNv cmRfbGludXhfc3lzdGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAgICAgY2Fz ZSA5OToKICAgICAgIC8qIHN5c19mc3RhdGZzICovCiAgICAgY2FzZSAxMDA6 Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfc3RhdGZz KSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNp Z25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsICZ0bXB1bG9uZ2VzdCk7Cisg ICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERS KXRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGRlcC0+c2l6ZV9zdGF0ZnMpKQorICAgICAgICByZXR1cm4gLTE7 CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX2lvcGVybSAqLwogICAg IGNhc2UgMTAxOgogICAgICAgYnJlYWs7CiAKKyAgICAgIC8qIHN5c19zb2Nr ZXQgKi8KKyAgICBjYXNlIDUwMDoKKyAgICAgIC8qIHN5c19zZW5kdG8gKi8K KyAgICBjYXNlIDUwMzoKKyAgICAgIC8qIHN5c19zZW5kbXNnICovCisgICAg Y2FzZSA1MDU6CisgICAgICAvKiBzeXNfc2h1dGRvd24gKi8KKyAgICBjYXNl IDUwNzoKKyAgICAgIC8qIHN5c19iaW5kICovCisgICAgY2FzZSA1MDg6Cisg ICAgICAvKiBzeXNfY29ubmVjdCAqLworICAgIGNhc2UgNTAxOgorICAgICAg Lyogc3lzX2xpc3RlbiAqLworICAgIGNhc2UgNTA5OgorICAgICAgLyogc3lz X3NldHNvY2tvcHQgKi8KKyAgICBjYXNlIDUxMzoKKyAgICAgIGJyZWFrOwor CisgICAgICAvKiBzeXNfYWNjZXB0ICovCisgICAgY2FzZSA1MDI6CisgICAg ICAvKiBzeXNfZ2V0c29ja25hbWUgKi8KKyAgICBjYXNlIDUxMDoKKyAgICAg IC8qIHN5c19nZXRwZWVybmFtZSAqLworICAgIGNhc2UgNTExOgorICAgICAg eworICAgICAgICBVTE9OR0VTVCBsZW47CisgICAgICAgIHJlZ2NhY2hlX3Jh d19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgJnRtcHVs b25nZXN0KTsKKyAgICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQg KHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAmbGVuKTsKKyAgICAgICAgaWYgKHJl Y29yZF9saW51eF9zb2NrYWRkciAocmVnY2FjaGUsIHRkZXAsIHRtcHVsb25n ZXN0LCBsZW4pKQorICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgIH0KKyAg ICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfcmVjdmZyb20gKi8KKyAgICBj YXNlIDUwNDoKKyAgICAgIHsKKyAgICAgICAgVUxPTkdFU1QgbGVuOworICAg ICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRk ZXAtPmFyZzQsICZ0bXB1bG9uZ2VzdCk7CisgICAgICAgIHJlZ2NhY2hlX3Jh d19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnNSwgJmxlbik7 CisgICAgICAgIGlmIChyZWNvcmRfbGludXhfc29ja2FkZHIgKHJlZ2NhY2hl LCB0ZGVwLCB0bXB1bG9uZ2VzdCwgbGVuKSkKKyAgICAgICAgICByZXR1cm4g LTE7CisgICAgICB9CisgICAgICAvKiBzeXNfcmVjdiAqLworICAgIGNhc2Ug NTE1OgorICAgICAgeworICAgICAgICBVTE9OR0VTVCBzaXplOworICAgICAg ICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAt PmFyZzIsICZ0bXB1bG9uZ2VzdCk7CisgICAgICAgIHJlZ2NhY2hlX3Jhd19y ZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgJnNpemUpOwor ICAgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9B RERSKXRtcHVsb25nZXN0LCAoaW50KXNpemUpKQorICAgICAgICAgIHJldHVy biAtMTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNf cmVjdm1zZyAqLworICAgIGNhc2UgNTA2OgorICAgICAgcmVnY2FjaGVfcmF3 X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAmdG1wdWxv bmdlc3QpOworICAgICAgaWYgKHJlY29yZF9saW51eF9tc2doZHIgKHJlZ2Nh Y2hlLCB0ZGVwLCB0bXB1bG9uZ2VzdCkpCisgICAgICAgIHJldHVybiAtMTsK KyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfc29ja2V0cGFpciAqLwor ICAgIGNhc2UgNTEyOgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWdu ZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmc0LCAmdG1wdWxvbmdlc3QpOworICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUil0 bXB1bG9uZ2VzdCwgdGRlcC0+c2l6ZV9pbnQpKQorICAgICAgICByZXR1cm4g LTE7CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX2dldHNvY2tvcHQg Ki8KKyAgICBjYXNlIDUxNDoKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vu c2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnNSwgJnRtcHVsb25nZXN0KTsK KyAgICAgIGlmICh0bXB1bG9uZ2VzdCkKKyAgICAgICAgeworICAgICAgICAg IFVMT05HRVNUIG9wdHZhbHA7CisgICAgICAgICAgZ2RiX2J5dGUgKm9wdGxl bnAgPSBhbGxvY2EgKHRkZXAtPnNpemVfaW50KTsKKyAgICAgICAgICBpZiAo dGFyZ2V0X3JlYWRfbWVtb3J5ICgoQ09SRV9BRERSKXRtcHVsb25nZXN0LCBv cHRsZW5wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRk ZXAtPnNpemVfaW50KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg aWYgKHJlY29yZF9kZWJ1ZykKKyAgICAgICAgICAgICAgICBmcHJpbnRmX3Vu ZmlsdGVyZWQgKGdkYl9zdGRsb2csCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiUHJvY2VzcyByZWNvcmQ6IGVycm9yIHJlYWRpbmcg IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1lbW9y eSBhdCBhZGRyID0gMHglcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAibGVuID0gJWQuXG4iLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgT1VUUFVUX1JFRyAodG1wdWxvbmdlc3QsIHRk ZXAtPmFyZzUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdGRlcC0+c2l6ZV9pbnQpOworICAgICAgICAgICAgICByZXR1cm4gLTE7 CisgICAgICAgICAgICB9CisgICAgICAgICAgcmVnY2FjaGVfcmF3X3JlYWRf dW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmc0LCAmb3B0dmFscCk7Cisg ICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVf QUREUilvcHR2YWxwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChpbnQpZXh0cmFjdF9zaWduZWRfaW50ZWdlcgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3B0 bGVucCwgdGRlcC0+c2l6ZV9pbnQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlX29yZGVyKSkpCisgICAg ICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX21lbSAoKENPUkVfQUREUil0bXB1bG9uZ2VzdCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXpl X2ludCkpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAg ICAgIGJyZWFrOworCiAgICAgICAvKiBzeXNfc29ja2V0Y2FsbCAqLwogICAg IGNhc2UgMTAyOgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmcxLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAg c3dpdGNoICh0bXB1MzIpCi0JewotCWNhc2UgUkVDT1JEX1NZU19TT0NLRVQ6 Ci0JY2FzZSBSRUNPUkRfU1lTX0JJTkQ6Ci0JY2FzZSBSRUNPUkRfU1lTX0NP Tk5FQ1Q6Ci0JY2FzZSBSRUNPUkRfU1lTX0xJU1RFTjoKLQkgIGJyZWFrOwot CWNhc2UgUkVDT1JEX1NZU19BQ0NFUFQ6Ci0JY2FzZSBSRUNPUkRfU1lTX0dF VFNPQ0tOQU1FOgotCWNhc2UgUkVDT1JEX1NZU19HRVRQRUVSTkFNRToKLQkg IHsKLQkgICAgdWludDMyX3QgYVszXTsKLQkgICAgcmVnY2FjaGVfcmF3X3Jl YWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLAotCQkJICAgICAgIChnZGJfYnl0 ZSAqKSAmIHRtcHUzMik7Ci0JICAgIGlmICh0bXB1MzIpCi0JICAgICAgewot CQlpZiAodGFyZ2V0X3JlYWRfbWVtb3J5ICh0bXB1MzIsIChnZGJfYnl0ZSAq KSBhLCBzaXplb2YgKGEpKSkKLQkJICB7Ci0JCSAgICBpZiAocmVjb3JkX2Rl YnVnKQotCQkgICAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2cs Ci0JCQkJCSAgIlByb2Nlc3MgcmVjb3JkOiBlcnJvciByZWFkaW5nICIKLQkJ CQkJICAibWVtb3J5IGF0IGFkZHIgPSAlcyBsZW4gPSAlbHUuXG4iLAotCQkJ CQkgIHBhZGRyZXNzIChnZGJhcmNoLCB0bXB1MzIpLAotCQkJCQkgICh1bnNp Z25lZCBsb25nKXNpemVvZiAoYSkpOwotCQkgICAgcmV0dXJuIC0xOwotCQkg IH0KLQkJaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoYVsxXSwgdGRl cC0+c2l6ZV9zb2NrYWRkcikpCi0JCSAgcmV0dXJuIC0xOwotCQlpZiAocmVj b3JkX2FyY2hfbGlzdF9hZGRfbWVtIChhWzJdLCB0ZGVwLT5zaXplX2ludCkp Ci0JCSAgcmV0dXJuIC0xOwotCSAgICAgIH0KLQkgIH0KLQkgIGJyZWFrOwor ICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0 ZGVwLT5hcmcxLCAmdG1wdWxvbmdlc3QpOworICAgICAgc3dpdGNoICh0bXB1 bG9uZ2VzdCkKKyAgICAgICAgeworICAgICAgICBjYXNlIFJFQ09SRF9TWVNf U09DS0VUOgorICAgICAgICBjYXNlIFJFQ09SRF9TWVNfQklORDoKKyAgICAg ICAgY2FzZSBSRUNPUkRfU1lTX0NPTk5FQ1Q6CisgICAgICAgIGNhc2UgUkVD T1JEX1NZU19MSVNURU46CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh c2UgUkVDT1JEX1NZU19BQ0NFUFQ6CisgICAgICAgIGNhc2UgUkVDT1JEX1NZ U19HRVRTT0NLTkFNRToKKyAgICAgICAgY2FzZSBSRUNPUkRfU1lTX0dFVFBF RVJOQU1FOgorICAgICAgICAgIHsKKyAgICAgICAgICAgIHJlZ2NhY2hlX3Jh d19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1wdWxvbmdl c3QpOworICAgICAgICAgICAgaWYgKHRtcHVsb25nZXN0KQorICAgICAgICAg ICAgICB7CisgICAgICAgICAgICAgICAgZ2RiX2J5dGUgKmEgPSBhbGxvY2Eg KHRkZXAtPnNpemVfdWxvbmcgKiAyKTsKKyAgICAgICAgICAgICAgICBpbnQg YWRkcmxlbjsKKyAgICAgICAgICAgICAgICBnZGJfYnl0ZSAqYWRkcmxlbnA7 CiAKLQljYXNlIFJFQ09SRF9TWVNfU09DS0VUUEFJUjoKLQkgIHsKLQkgICAg dWludDMyX3QgYVs0XTsKLQkgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2Nh Y2hlLCB0ZGVwLT5hcmcyLAotCQkJICAgICAgIChnZGJfYnl0ZSAqKSAmIHRt cHUzMik7Ci0JICAgIGlmICh0bXB1MzIpCi0JICAgICAgewotCQlpZiAodGFy Z2V0X3JlYWRfbWVtb3J5ICh0bXB1MzIsIChnZGJfYnl0ZSAqKSBhLCBzaXpl b2YgKGEpKSkKLQkJICB7Ci0JCSAgICBpZiAocmVjb3JkX2RlYnVnKQotCQkg ICAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCi0JCQkJCSAg IlByb2Nlc3MgcmVjb3JkOiBlcnJvciByZWFkaW5nICIKLQkJCQkJICAibWVt b3J5IGF0IGFkZHIgPSAlcyBsZW4gPSAlbHUuXG4iLAotCQkJCQkgIHBhZGRy ZXNzIChnZGJhcmNoLCB0bXB1MzIpLAotCQkJCSAgICAgICAgICAodW5zaWdu ZWQgbG9uZylzaXplb2YgKGEpKTsKLQkJICAgIHJldHVybiAtMTsKLQkJICB9 Ci0JCWlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKGFbM10sIHRkZXAt PnNpemVfaW50KSkKLQkJICByZXR1cm4gLTE7Ci0JICAgICAgfQotCSAgfQot CSAgYnJlYWs7Ci0JY2FzZSBSRUNPUkRfU1lTX1NFTkQ6Ci0JY2FzZSBSRUNP UkRfU1lTX1NFTkRUTzoKLQkgIGJyZWFrOwotCWNhc2UgUkVDT1JEX1NZU19S RUNWOgotCSAgewotCSAgICB1aW50MzJfdCBhWzNdOwotCSAgICByZWdjYWNo ZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsCi0JCQkgICAgICAg KGdkYl9ieXRlICopICYgdG1wdTMyKTsKLQkgICAgaWYgKHRtcHUzMikKLQkg ICAgICB7Ci0JCWlmICh0YXJnZXRfcmVhZF9tZW1vcnkgKHRtcHUzMiwgKGdk Yl9ieXRlICopIGEsIHNpemVvZiAoYSkpKQotCQkgIHsKLQkJICAgIGlmIChy ZWNvcmRfZGVidWcpCi0JCSAgICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2Ri X3N0ZGxvZywKLQkJCQkJICAiUHJvY2VzcyByZWNvcmQ6IGVycm9yIHJlYWRp bmcgIgotCQkJCQkgICJtZW1vcnkgYXQgYWRkciA9ICVzIGxlbiA9ICVsdS5c biIsCi0JCQkJCSAgcGFkZHJlc3MgKGdkYmFyY2gsIHRtcHUzMiksCi0JCQkJ CSAgKHVuc2lnbmVkIGxvbmcpc2l6ZW9mIChhKSk7Ci0JCSAgICByZXR1cm4g LTE7Ci0JCSAgfQotCQlpZiAoYVsyXSkKLQkJICB7Ci0JCSAgICBpZiAodGFy Z2V0X3JlYWRfbWVtb3J5Ci0JCQkoYVsyXSwgKGdkYl9ieXRlICopICYgKGFb Ml0pLCBzaXplb2YgKGFbMl0pKSkKLQkJICAgICAgewotCQkJaWYgKHJlY29y ZF9kZWJ1ZykKLQkJCSAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9n LAotCQkJCQkgICAgICAiUHJvY2VzcyByZWNvcmQ6IGVycm9yIHJlYWRpbmcg IgotCQkJCQkgICAgICAibWVtb3J5IGF0IGFkZHIgPSAlcyAiCi0JCQkJCSAg ICAgICJsZW4gPSAlbHUuXG4iLAotCQkJCQkgICAgICBwYWRkcmVzcyAoZ2Ri YXJjaCwgYVsyXSksCi0JCQkJCSAgICAgICh1bnNpZ25lZCBsb25nKXNpemVv ZiAoYVsyXSkpOwotCQkJcmV0dXJuIC0xOwotCQkgICAgICB9Ci0JCSAgICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChhWzFdLCBhWzJdKSkKLQkJ ICAgICAgcmV0dXJuIC0xOwotCQkgIH0KLQkgICAgICB9Ci0JICB9Ci0JICBi cmVhazsKLQljYXNlIFJFQ09SRF9TWVNfUkVDVkZST006Ci0JICB7Ci0JICAg IHVpbnQzMl90IGFbNl07Ci0JICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdj YWNoZSwgdGRlcC0+YXJnMiwKLQkJCSAgICAgICAoZ2RiX2J5dGUgKikgJiB0 bXB1MzIpOwotCSAgICBpZiAodG1wdTMyKQotCSAgICAgIHsKLQkJaWYgKHRh cmdldF9yZWFkX21lbW9yeSAodG1wdTMyLCAoZ2RiX2J5dGUgKikgYSwgc2l6 ZW9mIChhKSkpCi0JCSAgewotCQkgICAgaWYgKHJlY29yZF9kZWJ1ZykKLQkJ ICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAotCQkJCQkg ICJQcm9jZXNzIHJlY29yZDogZXJyb3IgcmVhZGluZyAiCi0JCQkJCSAgIm1l bW9yeSBhdCBhZGRyID0gJXMgbGVuID0gJWx1LlxuIiwKLQkJCQkJICBwYWRk cmVzcyAoZ2RiYXJjaCwgdG1wdTMyKSwKLQkJCQkJICAodW5zaWduZWQgbG9u ZylzaXplb2YgKGEpKTsKLQkJICAgIHJldHVybiAtMTsKLQkJICB9Ci0JCWlm IChhWzJdKQotCQkgIHsKLQkJICAgIGlmICh0YXJnZXRfcmVhZF9tZW1vcnkK LQkJCShhWzJdLCAoZ2RiX2J5dGUgKikgJiAoYVsyXSksIHNpemVvZiAoYVsy XSkpKQotCQkgICAgICB7Ci0JCQlpZiAocmVjb3JkX2RlYnVnKQotCQkJICBm cHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCi0JCQkJCSAgICAgICJQ cm9jZXNzIHJlY29yZDogZXJyb3IgcmVhZGluZyAiCi0JCQkJCSAgICAgICJt ZW1vcnkgYXQgYWRkciA9ICVzICIKLQkJCQkJICAgICAgImxlbiA9ICVsdS5c biIsCi0JCQkJCSAgICAgIHBhZGRyZXNzIChnZGJhcmNoLCBhWzJdKSwKLQkJ CQkJICAgICAgKHVuc2lnbmVkIGxvbmcpc2l6ZW9mIChhWzJdKSk7Ci0JCQly ZXR1cm4gLTE7Ci0JCSAgICAgIH0KLQkJICAgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKGFbMV0sIGFbMl0pKQotCQkgICAgICByZXR1cm4gLTE7 Ci0JCSAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChhWzRdLCB0 ZGVwLT5zaXplX3NvY2thZGRyKSkKLQkJICAgICAgcmV0dXJuIC0xOwotCQkg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoYVs1XSwgdGRlcC0+ c2l6ZV9pbnQpKQotCQkgICAgICByZXR1cm4gLTE7Ci0JCSAgfQotCSAgICAg IH0KLQkgIH0KLQkgIGJyZWFrOwotCWNhc2UgUkVDT1JEX1NZU19TSFVURE9X TjoKLQljYXNlIFJFQ09SRF9TWVNfU0VUU09DS09QVDoKLQkgIGJyZWFrOwot CWNhc2UgUkVDT1JEX1NZU19HRVRTT0NLT1BUOgotCSAgewotCSAgICB1aW50 MzJfdCBhWzVdOwotCSAgICB1aW50MzJfdCBhdjsKKyAgICAgICAgICAgICAg ICB0bXB1bG9uZ2VzdCArPSB0ZGVwLT5zaXplX3Vsb25nOworICAgICAgICAg ICAgICAgIGlmICh0YXJnZXRfcmVhZF9tZW1vcnkgKChDT1JFX0FERFIpdG1w dWxvbmdlc3QsIGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGRlcC0+c2l6ZV91bG9uZyAqIDIpKQorICAgICAgICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAocmVjb3JkX2RlYnVn KQorICAgICAgICAgICAgICAgICAgICAgIGZwcmludGZfdW5maWx0ZXJlZCAo Z2RiX3N0ZGxvZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJQcm9jZXNzIHJlY29yZDogZXJyb3IgcmVhZGluZyAiCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVt b3J5IGF0IGFkZHIgPSAweCVzIGxlbiA9ICVkLlxuIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9SRUcgKHRt cHVsb25nZXN0LCB0ZGVwLT5hcmcyKSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfdWxvbmcgKiAyKTsK KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChyZWNvcmRfbGludXhfc29j a2FkZHIgKHJlZ2NhY2hlLCB0ZGVwLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RfdW5zaWduZWRfaW50ZWdl cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGEsIHRkZXAtPnNpemVfdWxvbmcsIGJ5dGVfb3JkZXIpLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3Rf dW5zaWduZWRfaW50ZWdlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGEgKyB0ZGVwLT5zaXplX3Vsb25nLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRk ZXAtPnNpemVfdWxvbmcsIGJ5dGVfb3JkZXIpKSkKKyAgICAgICAgICAgICAg ICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0K KyAgICAgICAgICBicmVhazsKIAotCSAgICByZWdjYWNoZV9yYXdfcmVhZCAo cmVnY2FjaGUsIHRkZXAtPmFyZzIsCi0JCQkgICAgICAgKGdkYl9ieXRlICop ICYgdG1wdTMyKTsKLQkgICAgaWYgKHRtcHUzMikKLQkgICAgICB7Ci0JCWlm ICh0YXJnZXRfcmVhZF9tZW1vcnkgKHRtcHUzMiwgKGdkYl9ieXRlICopIGEs IHNpemVvZiAoYSkpKQotCQkgIHsKLQkJICAgIGlmIChyZWNvcmRfZGVidWcp Ci0JCSAgICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKLQkJ CQkJICAiUHJvY2VzcyByZWNvcmQ6IGVycm9yIHJlYWRpbmcgIgotCQkJCQkg ICJtZW1vcnkgYXQgYWRkciA9ICVzIGxlbiA9ICVsdS5cbiIsCi0JCQkJCSAg cGFkZHJlc3MgKGdkYmFyY2gsIHRtcHUzMiksCi0JCQkJCSAgKHVuc2lnbmVk IGxvbmcpc2l6ZW9mIChhKSk7Ci0JCSAgICByZXR1cm4gLTE7Ci0JCSAgfQot CQlpZiAoYVs0XSkKLQkJICB7Ci0JCSAgICBpZiAodGFyZ2V0X3JlYWRfbWVt b3J5Ci0JCQkoYVs0XSwgKGdkYl9ieXRlICopICYgYXYsIHNpemVvZiAoYXYp KSkKLQkJICAgICAgewotCQkJaWYgKHJlY29yZF9kZWJ1ZykKLQkJCSAgZnBy aW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAotCQkJCQkgICAgICAiUHJv Y2VzcyByZWNvcmQ6IGVycm9yIHJlYWRpbmcgIgotCQkJCQkgICAgICAibWVt b3J5IGF0IGFkZHIgPSAlcyAiCi0JCQkJCSAgICAgICJsZW4gPSAlbHUuXG4i LAotCQkJCQkgICAgICBwYWRkcmVzcyAoZ2RiYXJjaCwgYVs0XSksCi0JCQkJ CSAgICAgICh1bnNpZ25lZCBsb25nKXNpemVvZiAoYXYpKTsKLQkJCXJldHVy biAtMTsKLQkJICAgICAgfQotCQkgICAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX21lbSAoYVszXSwgYXYpKQotCQkgICAgICByZXR1cm4gLTE7Ci0JCSAg ICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChhWzRdLCB0ZGVwLT5z aXplX2ludCkpCi0JCSAgICAgIHJldHVybiAtMTsKLQkJICB9Ci0JICAgICAg fQotCSAgfQotCSAgYnJlYWs7Ci0JY2FzZSBSRUNPUkRfU1lTX1NFTkRNU0c6 Ci0JICBicmVhazsKLQljYXNlIFJFQ09SRF9TWVNfUkVDVk1TRzoKLQkgIHsK LQkgICAgdWludDMyX3QgYVsyXSwgaTsKLQkgICAgc3RydWN0IHJlY29yZF9t c2doZHIKLQkgICAgewotCSAgICAgIHVpbnQzMl90IG1zZ19uYW1lOwotCSAg ICAgIHVpbnQzMl90IG1zZ19uYW1lbGVuOwotCSAgICAgIHVpbnQzMl90IG1z Z19pb3Y7Ci0JICAgICAgdWludDMyX3QgbXNnX2lvdmxlbjsKLQkgICAgICB1 aW50MzJfdCBtc2dfY29udHJvbDsKLQkgICAgICB1aW50MzJfdCBtc2dfY29u dHJvbGxlbjsKLQkgICAgICB1aW50MzJfdCBtc2dfZmxhZ3M7Ci0JICAgIH0g cmVjOwotCSAgICBzdHJ1Y3QgcmVjb3JkX2lvdmVjCi0JICAgIHsKLQkgICAg ICB1aW50MzJfdCBpb3ZfYmFzZTsKLQkgICAgICB1aW50MzJfdCBpb3ZfbGVu OwotCSAgICB9IGlvdjsKKyAgICAgICAgY2FzZSBSRUNPUkRfU1lTX1NPQ0tF VFBBSVI6CisgICAgICAgICAgeworICAgICAgICAgICAgZ2RiX2J5dGUgKmEg PSBhbGxvY2EgKHRkZXAtPnNpemVfdWxvbmcpOworICAgICAgICAgICAgcmVn Y2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcy LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0 bXB1bG9uZ2VzdCk7CisgICAgICAgICAgICBpZiAodG1wdWxvbmdlc3QpCisg ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0bXB1bG9uZ2VzdCAr PSB0ZGVwLT5zaXplX3Vsb25nICogMzsKKyAgICAgICAgICAgICAgICBpZiAo dGFyZ2V0X3JlYWRfbWVtb3J5ICgoQ09SRV9BRERSKXRtcHVsb25nZXN0LCBh LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRk ZXAtPnNpemVfdWxvbmcpKQorICAgICAgICAgICAgICAgICAgeworICAgICAg ICAgICAgICAgICAgICBpZiAocmVjb3JkX2RlYnVnKQorICAgICAgICAgICAg ICAgICAgICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcm9j ZXNzIHJlY29yZDogZXJyb3IgcmVhZGluZyAiCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAibWVtb3J5IGF0IGFkZHIgPSAw eCVzIGxlbiA9ICVkLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE9VVFBVVF9SRUcgKHRtcHVsb25nZXN0LCB0ZGVw LT5hcmcyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRkZXAtPnNpemVfdWxvbmcpOworICAgICAgICAgICAgICAgICAg ICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQURE UilleHRyYWN0X3Vuc2lnbmVkX2ludGVnZXIKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGEs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX3Vsb25nLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYnl0ZV9vcmRlciksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9pbnQpKQorICAgICAg ICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICB9CisgICAg ICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJFQ09S RF9TWVNfU0VORDoKKyAgICAgICAgY2FzZSBSRUNPUkRfU1lTX1NFTkRUTzoK KyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSRUNPUkRfU1lTX1JF Q1ZGUk9NOgorICAgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVk IChyZWdjYWNoZSwgdGRlcC0+YXJnMiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJnRtcHVsb25nZXN0KTsKKyAgICAgICAgICBp ZiAodG1wdWxvbmdlc3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg IGdkYl9ieXRlICphID0gYWxsb2NhICh0ZGVwLT5zaXplX3Vsb25nICogMik7 CisgICAgICAgICAgICAgIGludCBhZGRybGVuOworICAgICAgICAgICAgICBn ZGJfYnl0ZSAqYWRkcmxlbnA7CiAKLQkgICAgcmVnY2FjaGVfcmF3X3JlYWQg KHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLAotCQkJICAgICAgIChnZGJfYnl0ZSAq KSAmIHRtcHUzMik7Ci0JICAgIGlmICh0bXB1MzIpCi0JICAgICAgewotCQlp ZiAodGFyZ2V0X3JlYWRfbWVtb3J5ICh0bXB1MzIsIChnZGJfYnl0ZSAqKSBh LCBzaXplb2YgKGEpKSkKLQkJICB7Ci0JCSAgICBpZiAocmVjb3JkX2RlYnVn KQotCQkgICAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCi0J CQkJCSAgIlByb2Nlc3MgcmVjb3JkOiBlcnJvciByZWFkaW5nICIKLQkJCQkJ ICAibWVtb3J5IGF0IGFkZHIgPSAlcyBsZW4gPSAlbHUuXG4iLAotCQkJCQkg IHBhZGRyZXNzIChnZGJhcmNoLCB0bXB1MzIpLAotCQkJCQkgICh1bnNpZ25l ZCBsb25nKXNpemVvZiAoYSkpOwotCQkgICAgcmV0dXJuIC0xOwotCQkgIH0K LQkJaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoYVsxXSwgdGRlcC0+ c2l6ZV9tc2doZHIpKQotCQkgIHJldHVybiAtMTsKLQkJaWYgKGFbMV0pCi0J CSAgewotCQkgICAgaWYgKHRhcmdldF9yZWFkX21lbW9yeQotCQkJKGFbMV0s IChnZGJfYnl0ZSAqKSAmIHJlYywgc2l6ZW9mIChyZWMpKSkKLQkJICAgICAg ewotCQkJaWYgKHJlY29yZF9kZWJ1ZykKLQkJCSAgZnByaW50Zl91bmZpbHRl cmVkIChnZGJfc3RkbG9nLAotCQkJCQkgICAgICAiUHJvY2VzcyByZWNvcmQ6 IGVycm9yIHJlYWRpbmcgIgotCQkJCQkgICAgICAibWVtb3J5IGF0IGFkZHIg PSAlcyAiCi0JCQkJCSAgICAgICJsZW4gPSAlbHUuXG4iLAotCQkJCQkgICAg ICBwYWRkcmVzcyAoZ2RiYXJjaCwgYVsxXSksCi0JCQkJCSAgICAgICh1bnNp Z25lZCBsb25nKXNpemVvZiAocmVjKSk7Ci0JCQlyZXR1cm4gLTE7Ci0JCSAg ICAgIH0KLQkJICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0KLQkJ CShyZWMubXNnX25hbWUsIHJlYy5tc2dfbmFtZWxlbikpCi0JCSAgICAgIHJl dHVybiAtMTsKLQkJICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0K LQkJCShyZWMubXNnX2NvbnRyb2wsIHJlYy5tc2dfY29udHJvbGxlbikpCi0J CSAgICAgIHJldHVybiAtMTsKLQkJICAgIGlmIChyZWMubXNnX2lvdikKLQkJ ICAgICAgewotCQkJZm9yIChpID0gMDsgaSA8IHJlYy5tc2dfaW92bGVuOyBp KyspCi0JCQkgIHsKLQkJCSAgICBpZiAodGFyZ2V0X3JlYWRfbWVtb3J5Ci0J CQkJKHJlYy5tc2dfaW92LCAoZ2RiX2J5dGUgKikgJiBpb3YsCi0JCQkJIHNp emVvZiAoaW92KSkpCi0JCQkgICAgICB7Ci0JCQkJaWYgKHJlY29yZF9kZWJ1 ZykKLQkJCQkgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKLQkJ CQkJCSAgICAgICJQcm9jZXNzIHJlY29yZDogZXJyb3IgIgotCQkJCQkJICAg ICAgInJlYWRpbmcgbWVtb3J5IGF0ICIKLQkJCQkJCSAgICAgICJhZGRyID0g JXMgIgotCQkJCQkJICAgICAgImxlbiA9ICVsdS5cbiIsCi0JCQkJCQkgICAg ICBwYWRkcmVzcyAoZ2RiYXJjaCwKLQkJCQkJCQkJcmVjLm1zZ19pb3YpLAot CQkJCQkJICAgICAgKHVuc2lnbmVkIGxvbmcpc2l6ZW9mIChpb3YpKTsKLQkJ CQlyZXR1cm4gLTE7Ci0JCQkgICAgICB9Ci0JCQkgICAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX21lbQotCQkJCShpb3YuaW92X2Jhc2UsIGlvdi5pb3Zf bGVuKSkKLQkJCSAgICAgIHJldHVybiAtMTsKLQkJCSAgICByZWMubXNnX2lv diArPSBzaXplb2YgKHN0cnVjdCByZWNvcmRfaW92ZWMpOwotCQkJICB9Ci0J CSAgICAgIH0KLQkJICB9Ci0JICAgICAgfQotCSAgfQotCSAgYnJlYWs7Ci0J ZGVmYXVsdDoKLQkgIHByaW50Zl91bmZpbHRlcmVkIChfKCJQcm9jZXNzIHJl Y29yZCBhbmQgcmVwbGF5IHRhcmdldCAiCi0JCQkgICAgICAgImRvZXNuJ3Qg c3VwcG9ydCBzb2NrZXRjYWxsIGNhbGwgMHglc1xuIiksCi0JCQkgICAgIHBo ZXhfbnogKHRtcHUzMiwgNCkpOwotCSAgcmV0dXJuIC0xOwotCSAgYnJlYWs7 Ci0JfQorICAgICAgICAgICAgICB0bXB1bG9uZ2VzdCArPSB0ZGVwLT5zaXpl X3Vsb25nICogNDsKKyAgICAgICAgICAgICAgaWYgKHRhcmdldF9yZWFkX21l bW9yeSAoKENPUkVfQUREUil0bXB1bG9uZ2VzdCwgYSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV91bG9uZyAq IDIpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGlm IChyZWNvcmRfZGVidWcpCisgICAgICAgICAgICAgICAgICAgIGZwcmludGZf dW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiUHJvY2VzcyByZWNvcmQ6IGVycm9yIHJl YWRpbmcgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJtZW1vcnkgYXQgYWRkciA9IDB4JXMgbGVuID0gJWQuXG4iLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9S RUcgKHRtcHVsb25nZXN0LCB0ZGVwLT5hcmcyKSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX3Vsb25nICog Mik7CisgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICBpZiAocmVjb3JkX2xpbnV4X3NvY2th ZGRyIChyZWdjYWNoZSwgdGRlcCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZXh0cmFjdF91bnNpZ25lZF9pbnRlZ2VyCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGEs IHRkZXAtPnNpemVfdWxvbmcsIGJ5dGVfb3JkZXIpLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0X3Vuc2lnbmVk X2ludGVnZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoYSArIHRkZXAtPnNpemVfdWxvbmcsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfdWxv bmcsIGJ5dGVfb3JkZXIpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7 CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgUkVDT1JEX1NZU19SRUNW OgorICAgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdj YWNoZSwgdGRlcC0+YXJnMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJnRtcHVsb25nZXN0KTsKKyAgICAgICAgICBpZiAodG1w dWxvbmdlc3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGdkYl9i eXRlICphID0gYWxsb2NhICh0ZGVwLT5zaXplX3Vsb25nICogMik7CisKKyAg ICAgICAgICAgICAgdG1wdWxvbmdlc3QgKz0gdGRlcC0+c2l6ZV91bG9uZzsK KyAgICAgICAgICAgICAgaWYgKHRhcmdldF9yZWFkX21lbW9yeSAoKENPUkVf QUREUil0bXB1bG9uZ2VzdCwgYSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV91bG9uZykpCisgICAgICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgICAgaWYgKHJlY29yZF9kZWJ1ZykK KyAgICAgICAgICAgICAgICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJf c3RkbG9nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJQcm9jZXNzIHJlY29yZDogZXJyb3IgcmVhZGluZyAiCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1lbW9yeSBhdCBh ZGRyID0gMHglcyBsZW4gPSAlZC5cbiIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgT1VUUFVUX1JFRyAodG1wdWxvbmdlc3Qs IHRkZXAtPmFyZzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRkZXAtPnNpemVfdWxvbmcpOworICAgICAgICAgICAgICAg ICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICB0bXB1bG9uZ2VzdCA9IGV4dHJhY3RfdW5zaWduZWRfaW50ZWdlciAo YSwgdGRlcC0+c2l6ZV91bG9uZywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVfb3JkZXIpOwor ICAgICAgICAgICAgICBpZiAodG1wdWxvbmdlc3QpCisgICAgICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgICAgYSArPSB0ZGVwLT5zaXplX3Vsb25n OworICAgICAgICAgICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRk X21lbQorICAgICAgICAgICAgICAgICAgICAgICAgKChDT1JFX0FERFIpdG1w dWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgKGludClleHRy YWN0X3Vuc2lnbmVkX2ludGVnZXIoYSwgdGRlcC0+c2l6ZV91bG9uZywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBieXRlX29yZGVyKSkpCisgICAgICAgICAgICAgICAgICAgIHJl dHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUkVDT1JEX1NZU19TSFVU RE9XTjoKKyAgICAgICAgY2FzZSBSRUNPUkRfU1lTX1NFVFNPQ0tPUFQ6Cisg ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUkVDT1JEX1NZU19HRVRT T0NLT1BUOgorICAgICAgICAgIHsKKyAgICAgICAgICAgIGdkYl9ieXRlICph ID0gYWxsb2NhICh0ZGVwLT5zaXplX3Vsb25nICogMik7CisgICAgICAgICAg ICBnZGJfYnl0ZSAqYXYgPSBhbGxvY2EgKHRkZXAtPnNpemVfaW50KTsKKwor ICAgICAgICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2Nh Y2hlLCB0ZGVwLT5hcmcyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZ0bXB1bG9uZ2VzdCk7CisgICAgICAgICAgICBpZiAo dG1wdWxvbmdlc3QpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICB0bXB1bG9uZ2VzdCArPSB0ZGVwLT5zaXplX3Vsb25nICogMzsKKyAgICAg ICAgICAgICAgICBpZiAodGFyZ2V0X3JlYWRfbWVtb3J5ICgoQ09SRV9BRERS KXRtcHVsb25nZXN0LCBhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRkZXAtPnNpemVfdWxvbmcgKiAyKSkKKyAgICAgICAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlY29yZF9k ZWJ1ZykKKyAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmX3VuZmlsdGVy ZWQgKGdkYl9zdGRsb2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiUHJvY2VzcyByZWNvcmQ6IGVycm9yIHJlYWRpbmcg IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Im1lbW9yeSBhdCBhZGRyID0gMHglcyBsZW4gPSAlZC5cbiIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPVVRQVVRfUkVH ICh0bXB1bG9uZ2VzdCwgdGRlcC0+YXJnMiksCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX3Vsb25nICog Mik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0bXB1bG9uZ2VzdCA9IGV4 dHJhY3RfdW5zaWduZWRfaW50ZWdlciAoYSArIHRkZXAtPnNpemVfdWxvbmcs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRkZXAtPnNpemVfdWxvbmcsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5 dGVfb3JkZXIpOworICAgICAgICAgICAgICAgIGlmICh0bXB1bG9uZ2VzdCkK KyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg KHRhcmdldF9yZWFkX21lbW9yeSAoKENPUkVfQUREUil0bXB1bG9uZ2VzdCwg YXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRkZXAtPnNpemVfaW50KSkKKyAgICAgICAgICAgICAgICAgICAgICB7 CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVjb3JkX2RlYnVnKQor ICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmX3VuZmlsdGVyZWQg KGdkYl9zdGRsb2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlByb2Nlc3MgcmVjb3JkOiBlcnJvciByZWFkaW5n ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAibWVtb3J5IGF0IGFkZHIgPSAweCVzICIKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGVuID0gJWQuXG4i LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHBoZXhfbnogKHRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNp emVfdWxvbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRkZXAtPnNpemVfaW50KTsKKyAgICAgICAgICAgICAg ICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgKChDT1JFX0FERFIp ZXh0cmFjdF91bnNpZ25lZF9pbnRlZ2VyCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGEsIHRkZXAtPnNpemVfdWxvbmcsIGJ5 dGVfb3JkZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCll eHRyYWN0X3Vuc2lnbmVkX2ludGVnZXIgKGF2LCB0ZGVwLT5zaXplX2ludCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBieXRlX29yZGVyKSkpCisgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgICBhICs9IHRk ZXAtPnNpemVfdWxvbmc7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9tZW0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgKChDT1JFX0FERFIpZXh0cmFjdF91bnNpZ25lZF9pbnRlZ2VyCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGEsIHRkZXAt PnNpemVfdWxvbmcsIGJ5dGVfb3JkZXIpLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGRlcC0+c2l6ZV9pbnQpKQorICAgICAgICAgICAgICAgICAg ICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAg ICAgY2FzZSBSRUNPUkRfU1lTX1NFTkRNU0c6CisgICAgICAgICAgYnJlYWs7 CisgICAgICAgIGNhc2UgUkVDT1JEX1NZU19SRUNWTVNHOgorICAgICAgICAg IHsKKyAgICAgICAgICAgIGdkYl9ieXRlICphID0gYWxsb2NhICh0ZGVwLT5z aXplX3Vsb25nKTsKKworICAgICAgICAgICAgcmVnY2FjaGVfcmF3X3JlYWRf dW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXB1bG9uZ2VzdCk7Cisg ICAgICAgICAgICBpZiAodG1wdWxvbmdlc3QpCisgICAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgICB0bXB1bG9uZ2VzdCArPSB0ZGVwLT5zaXplX3Vs b25nOworICAgICAgICAgICAgICAgIGlmICh0YXJnZXRfcmVhZF9tZW1vcnkg KChDT1JFX0FERFIpdG1wdWxvbmdlc3QsIGEsCisgICAgICAgICAgICAgICAg ICAgIHRkZXAtPnNpemVfdWxvbmcpKQorICAgICAgICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgICAgICBpZiAocmVjb3JkX2RlYnVnKQorICAgICAg ICAgICAgICAgICAgICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxv ZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJQcm9jZXNzIHJlY29yZDogZXJyb3IgcmVhZGluZyAiCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVtb3J5IGF0IGFk ZHIgPSAweCVzIGxlbiA9ICVkLlxuIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9SRUcgKHRtcHVsb25nZXN0 LCB0ZGVwLT5hcmcyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRkZXAtPnNpemVfdWxvbmcpOworICAgICAgICAgICAg ICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgdG1wdWxvbmdlc3QgPSBleHRyYWN0X3Vuc2lnbmVkX2lu dGVnZXIgKGEsIHRkZXAtPnNpemVfdWxvbmcsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVf b3JkZXIpOworICAgICAgICAgICAgICAgIGlmIChyZWNvcmRfbGludXhfbXNn aGRyIChyZWdjYWNoZSwgdGRlcCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZXh0cmFjdF91bnNpZ25lZF9pbnRlZ2VyCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGEs IHRkZXAtPnNpemVfdWxvbmcsIGJ5dGVfb3JkZXIpKSkKKyAgICAgICAgICAg ICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAg IH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg ICAgICBwcmludGZfdW5maWx0ZXJlZCAoXygiUHJvY2VzcyByZWNvcmQgYW5k IHJlcGxheSB0YXJnZXQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJkb2Vzbid0IHN1cHBvcnQgc29ja2V0Y2FsbCBjYWxsIDB4JXNcbiIp LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPVVRQVVRfUkVHICh0 bXB1bG9uZ2VzdCwgdGRlcC0+YXJnMSkpOworICAgICAgICAgIHJldHVybiAt MTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgYnJlYWs7 CiAKICAgICAgIC8qIHN5c19zeXNsb2cgKi8KQEAgLTk0OSwxNiArMTE2OCwx OCBAQCByZWNvcmRfbGludXhfc3lzdGVtX2NhbGwgKGludCBudW0sIHN0cnVj CiAKICAgICAgIC8qIHN5c19zZXRpdGltZXIgKi8KICAgICBjYXNlIDEwNDoK LSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJn MywgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRf YXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9pdGltZXJ2 YWwpKQotCXJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vu c2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgJnRtcHVsb25nZXN0KTsK KyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FE RFIpdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0ZGVwLT5zaXplX2l0aW1lcnZhbCkpCisgICAgICAgIHJldHVy biAtMTsKICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfZ2V0aXRpbWVy ICovCiAgICAgY2FzZSAxMDU6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAo cmVnY2FjaGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7 Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIs IHRkZXAtPnNpemVfaXRpbWVydmFsKSkKLQlyZXR1cm4gLTE7CisgICAgICBy ZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzIsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfbWVtICgoQ09SRV9BRERSKXRtcHVsb25nZXN0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9pdGltZXJ2 YWwpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAogICAg ICAgLyogc3lzX25ld3N0YXQgKi8KQEAgLTk2NywxNiArMTE4OCwxOSBAQCBy ZWNvcmRfbGludXhfc3lzdGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAgICAg Y2FzZSAxMDc6CiAgICAgICAvKiBzeXNfbmV3ZnN0YXQgKi8KICAgICBjYXNl IDEwODoKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRl cC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9z dGF0KSkKLQlyZXR1cm4gLTE7CisgICAgICAvKiBzeXNfbmV3ZnN0YXRhdCAq LworICAgIGNhc2UgNTQwOgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5z aWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAmdG1wdWxvbmdlc3QpOwor ICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQURE Uil0bXB1bG9uZ2VzdCwgdGRlcC0+c2l6ZV9zdGF0KSkKKyAgICAgICAgcmV0 dXJuIC0xOwogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c191bmFtZSAq LwogICAgIGNhc2UgMTA5OgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJl Z2NhY2hlLCB0ZGVwLT5hcmcxLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwot ICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0 ZGVwLT5zaXplX29sZF91dHNuYW1lKSkKLQlyZXR1cm4gLTE7CisgICAgICBy ZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzEsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfbWVtICgoQ09SRV9BRERSKXRtcHVsb25nZXN0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9vbGRfdXRz bmFtZSkpCisgICAgICAgIHJldHVybiAtMTsKICAgICAgIGJyZWFrOwogCiAg ICAgICAvKiBzeXNfaW9wbCAqLwpAQCAtOTkxLDEyICsxMjE1LDE0IEBAIHJl Y29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKIAogICAg ICAgLyogc3lzX3dhaXQ0ICovCiAgICAgY2FzZSAxMTQ6Ci0gICAgICByZWdj YWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0 ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfaW50KSkKLQlyZXR1cm4gLTE7 Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzQsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfcnVzYWdl KSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNp Z25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsICZ0bXB1bG9uZ2VzdCk7Cisg ICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERS KXRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGRlcC0+c2l6ZV9pbnQpKQorICAgICAgICByZXR1cm4gLTE7Cisg ICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRk ZXAtPmFyZzQsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKXRtcHVsb25nZXN0LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9y dXNhZ2UpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAog ICAgICAgLyogc3lzX3N3YXBvZmYgKi8KQEAgLTEwMDUsNDcgKzEyMzEsMTIx IEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMK IAogICAgICAgLyogc3lzX3N5c2luZm8gKi8KICAgICBjYXNlIDExNjoKLSAg ICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMSwg KGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9zeXNpbmZvKSkK LQlyZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25l ZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsICZ0bXB1bG9uZ2VzdCk7CisgICAg ICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKXRt cHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdGRlcC0+c2l6ZV9zeXNpbmZvKSkKKyAgICAgICAgcmV0dXJuIC0xOwor ICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19zaG1nZXQgKi8KKyAgICBj YXNlIDUyMDoKKyAgICAgIC8qIHN5c19zZW1nZXQgKi8KKyAgICBjYXNlIDUy MzoKKyAgICAgIC8qIHN5c19zZW1vcCAqLworICAgIGNhc2UgNTI0OgorICAg ICAgLyogc3lzX21zZ2dldCAqLworICAgIGNhc2UgNTI4OgorICAgICAgLyog c3lzX3NobWR0ICovCisgICAgICAvKiBYWFggbWF5YmUgbmVlZCBkbyBzb21l IHJlY29yZCB3b3JrcyB3aWh0IHN5c19zaG1kdC4gICovCisgICAgY2FzZSA1 Mjc6CisgICAgICAvKiBzeXNfbXNnc25kICovCisgICAgY2FzZSA1Mjk6Cisg ICAgICAvKiBzeXNfc2VtdGltZWRvcCAqLworICAgIGNhc2UgNTMyOgorICAg ICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19zaG1hdCAqLworICAgIGNhc2Ug NTIxOgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2Nh Y2hlLCB0ZGVwLT5hcmczLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUil0bXB1bG9uZ2Vz dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAt PnNpemVfdWxvbmcpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgICBicmVh azsKKworICAgICAgLyogc3lzX3NobWN0bCAqLworICAgIGNhc2UgNTIyOgor ICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0 ZGVwLT5hcmczLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUil0bXB1bG9uZ2VzdCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVf c2htaWRfZHMpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgICBicmVhazsK KworICAgICAgLyogc3lzX3NlbWN0bCAqLworICAgICAgLyogWFhYIHN5c19z ZW1jdGwgNTI1IHN0aWxsIG5vdCBzdXBwb3J0LiAgKi8KKworICAgICAgLyog c3lzX21zZ3JjdiAqLworICAgIGNhc2UgNTMwOgorICAgICAgeworICAgICAg ICBVTE9OR0VTVCBtc2dwOworICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF9z aWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAmdG1wdWxvbmdlc3QpOwor ICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUs IHRkZXAtPmFyZzIsICZtc2dwKTsKKyAgICAgICAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX21lbSAoKENPUkVfQUREUiltc2dwLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KXRtcHVsb25nZXN0ICsg dGRlcC0+c2l6ZV9sb25nKSkKKyAgICAgICAgICByZXR1cm4gLTE7CisgICAg ICB9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX21zZ2N0bCAqLwor ICAgIGNhc2UgNTMxOgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWdu ZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAmdG1wdWxvbmdlc3QpOworICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUil0 bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRkZXAtPnNpemVfbXNxaWRfZHMpKQorICAgICAgICByZXR1cm4gLTE7 CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX2lwYyAqLwogICAgIGNh c2UgMTE3OgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0 ZGVwLT5hcmcxLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgc3dp dGNoICh0bXB1MzIpCi0JewotCWNhc2UgUkVDT1JEX01TR1JDVjoKLQkgIHsK LQkgICAgaW50MzJfdCBzZWNvbmQ7Ci0JICAgIHVpbnQzMl90IHB0cjsKLQkg ICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLAot CQkJICAgICAgIChnZGJfYnl0ZSAqKSAmIHNlY29uZCk7Ci0JICAgIHJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnNSwKLQkJCSAgICAg ICAoZ2RiX2J5dGUgKikgJiBwdHIpOwotCSAgICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfbWVtIChwdHIsIHNlY29uZCArIHRkZXAtPnNpemVfbG9uZykp Ci0JICAgICAgcmV0dXJuIC0xOwotCSAgfQotCSAgYnJlYWs7Ci0JY2FzZSBS RUNPUkRfTVNHQ1RMOgotCSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmc1LAotCQkJICAgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIp OwotCSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0 ZGVwLT5zaXplX21zcWlkX2RzKSkKLQkgICAgcmV0dXJuIC0xOwotCSAgYnJl YWs7Ci0JY2FzZSBSRUNPUkRfU0hNQVQ6Ci0JICByZWdjYWNoZV9yYXdfcmVh ZCAocmVnY2FjaGUsIHRkZXAtPmFyZzQsCi0JCQkgICAgIChnZGJfYnl0ZSAq KSAmIHRtcHUzMik7Ci0JICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVt ICh0bXB1MzIsIHRkZXAtPnNpemVfdWxvbmcpKQotCSAgICByZXR1cm4gLTE7 Ci0JICBicmVhazsKLQljYXNlIFJFQ09SRF9TSE1DVEw6Ci0JICByZWdjYWNo ZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzUsCi0JCQkgICAgIChn ZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0JICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfc2htaWRfZHMpKQotCSAg ICByZXR1cm4gLTE7Ci0JICBicmVhazsKLQl9CisgICAgICByZWdjYWNoZV9y YXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsICZ0bXB1 bG9uZ2VzdCk7CisgICAgICB0bXB1bG9uZ2VzdCAmPSAweGZmZmY7CisgICAg ICBzd2l0Y2ggKHRtcHVsb25nZXN0KQorICAgICAgICB7CisgICAgICAgIGNh c2UgUkVDT1JEX1NFTU9QOgorICAgICAgICBjYXNlIFJFQ09SRF9TRU1HRVQ6 CisgICAgICAgIGNhc2UgUkVDT1JEX1NFTVRJTUVET1A6CisgICAgICAgIGNh c2UgUkVDT1JEX01TR1NORDoKKyAgICAgICAgY2FzZSBSRUNPUkRfTVNHR0VU OgorICAgICAgICAgIC8qIFhYWCBtYXliZSBuZWVkIGRvIHNvbWUgcmVjb3Jk IHdvcmtzIHdpaHQgUkVDT1JEX1NITURULiAgKi8KKyAgICAgICAgY2FzZSBS RUNPUkRfU0hNRFQ6CisgICAgICAgIGNhc2UgUkVDT1JEX1NITUdFVDoKKyAg ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSRUNPUkRfTVNHUkNWOgor ICAgICAgICAgIHsKKyAgICAgICAgICAgIFVMT05HRVNUIHNlY29uZDsKKyAg ICAgICAgICAgIFVMT05HRVNUIHB0cjsKKyAgICAgICAgICAgIHJlZ2NhY2hl X3Jhd19yZWFkX3NpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsICZzZWNv bmQpOworICAgICAgICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQg KHJlZ2NhY2hlLCB0ZGVwLT5hcmc1LCAmcHRyKTsKKyAgICAgICAgICAgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpcHRyLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlu dClzZWNvbmQgKyB0ZGVwLT5zaXplX2xvbmcpKQorICAgICAgICAgICAgICBy ZXR1cm4gLTE7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAg ICAgICBjYXNlIFJFQ09SRF9NU0dDVEw6CisgICAgICAgICAgcmVnY2FjaGVf cmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmc1LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1wdWxvbmdl c3QpOworICAgICAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0g KChDT1JFX0FERFIpdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9tc3FpZF9kcykpCisg ICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgYnJlYWs7CisgICAg ICAgIGNhc2UgUkVDT1JEX1NITUFUOgorICAgICAgICAgIHJlZ2NhY2hlX3Jh d19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnNCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRtcHVsb25nZXN0 KTsKKyAgICAgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgo Q09SRV9BRERSKXRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfdWxvbmcpKQorICAgICAg ICAgICAgcmV0dXJuIC0xOworICAgICAgICAgIGJyZWFrOworICAgICAgICBj YXNlIFJFQ09SRF9TSE1DVEw6CisgICAgICAgICAgcmVnY2FjaGVfcmF3X3Jl YWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmc1LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1wdWxvbmdlc3QpOwor ICAgICAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JF X0FERFIpdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9zaG1pZF9kcykpCisgICAgICAg ICAgICByZXR1cm4gLTE7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl ZmF1bHQ6CisgICAgICAgICAgLyogWFhYIFJFQ09SRF9TRU1DVEwgc3RpbGwg bm90IHN1cHBvcnQuICAqLworICAgICAgICAgIHByaW50Zl91bmZpbHRlcmVk IChfKCJQcm9jZXNzIHJlY29yZCBhbmQgcmVwbGF5IHRhcmdldCBkb2Vzbid0 ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3VwcG9ydCBp cGMgbnVtYmVyICVkXG4iKSwgKGludCl0bXB1bG9uZ2VzdCk7CisgICAgICAg ICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgIGJyZWFrOwogCiAgICAgICAv KiBzeXNfZnN5bmMgKi8KQEAgLTEwNjAsMzAgKzEzNjAsMzAgQEAgcmVjb3Jk X2xpbnV4X3N5c3RlbV9jYWxsIChpbnQgbnVtLCBzdHJ1YwogCiAgICAgICAv KiBzeXNfbmV3dW5hbWUgKi8KICAgICBjYXNlIDEyMjoKLSAgICAgIHJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMSwgKGdkYl9ieXRl ICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9uZXdfdXRzbmFtZSkpCi0JcmV0 dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJl Z2NhY2hlLCB0ZGVwLT5hcmcxLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUil0bXB1bG9u Z2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRk ZXAtPnNpemVfbmV3X3V0c25hbWUpKQorICAgICAgICByZXR1cm4gLTE7CiAg ICAgICBicmVhazsKIAogICAgICAgLyogc3lzX21vZGlmeV9sZHQgKi8KICAg ICBjYXNlIDEyMzoKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNo ZSwgdGRlcC0+YXJnMSwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAg IGlmICh0bXB1MzIgPT0gMCB8fCB0bXB1MzIgPT0gMikKLQl7Ci0JICB1aW50 MzJfdCBwdHIsIGJ5dGVjb3VudDsKLQkgIHJlZ2NhY2hlX3Jhd19yZWFkIChy ZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgcHRyKTsKLQkg IHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywKLQkJ CSAgICAgKGdkYl9ieXRlICopICYgYnl0ZWNvdW50KTsKLQkgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9tZW0gKHB0ciwgYnl0ZWNvdW50KSkKLQkgICAg cmV0dXJuIC0xOwotCX0KKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2ln bmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMSwgJnRtcHVsb25nZXN0KTsKKyAg ICAgIGlmICh0bXB1bG9uZ2VzdCA9PSAwIHx8IHRtcHVsb25nZXN0ID09IDIp CisgICAgICAgIHsKKyAgICAgICAgICBVTE9OR0VTVCBwdHIsIGJ5dGVjb3Vu dDsKKyAgICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVn Y2FjaGUsIHRkZXAtPmFyZzIsICZwdHIpOworICAgICAgICAgIHJlZ2NhY2hl X3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgJmJ5 dGVjb3VudCk7CisgICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRk X21lbSAoKENPUkVfQUREUilwdHIsIChpbnQpYnl0ZWNvdW50KSkKKyAgICAg ICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogICAgICAgYnJlYWs7CiAK ICAgICAgIC8qIHN5c19hZGp0aW1leCAqLwogICAgIGNhc2UgMTI0OgotICAg ICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAo Z2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX3RpbWV4KSkKLQly ZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAo cmVnY2FjaGUsIHRkZXAtPmFyZzEsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKXRtcHVs b25nZXN0LCB0ZGVwLT5zaXplX3RpbWV4KSkKKyAgICAgICAgcmV0dXJuIC0x OwogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19tcHJvdGVjdCAqLwpA QCAtMTA5Miw5ICsxMzkyLDEwIEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2Fs bCAoaW50IG51bSwgc3RydWMKIAogICAgICAgLyogc3lzX3NpZ3Byb2NtYXNr ICovCiAgICAgY2FzZSAxMjY6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAo cmVnY2FjaGUsIHRkZXAtPmFyZzMsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7 Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIs IHRkZXAtPnNpemVfb2xkX3NpZ3NldF90KSkKLQlyZXR1cm4gLTE7CisgICAg ICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAt PmFyZzMsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKXRtcHVsb25nZXN0LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9vbGRf c2lnc2V0X3QpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVhazsK IAogICAgICAgLyogc3lzX25pX3N5c2NhbGwgKi8KQEAgLTExMDksMzUgKzE0 MTAsMzkgQEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChpbnQgbnVtLCBz dHJ1YwogCiAgICAgICAvKiBzeXNfcXVvdGFjdGwgKi8KICAgICBjYXNlIDEz MToKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+ YXJnMSwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIHN3aXRjaCAo dG1wdTMyKQotCXsKLQljYXNlIFJFQ09SRF9RX0dFVEZNVDoKLQkgIHJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnNCwKLQkJCSAgICAg KGdkYl9ieXRlICopICYgdG1wdTMyKTsKLQkgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKHRtcHUzMiwgNCkpCi0JICAgIHJldHVybiAtMTsKLQkg IGJyZWFrOwotCWNhc2UgUkVDT1JEX1FfR0VUSU5GTzoKLQkgIHJlZ2NhY2hl X3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnNCwKLQkJCSAgICAgKGdk Yl9ieXRlICopICYgdG1wdTMyKTsKLQkgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9tZW1fZHFpbmZvKSkKLQkg ICAgcmV0dXJuIC0xOwotCSAgYnJlYWs7Ci0JY2FzZSBSRUNPUkRfUV9HRVRR VU9UQToKLQkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+ YXJnNCwKLQkJCSAgICAgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLQkgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6 ZV9pZl9kcWJsaykpCi0JICAgIHJldHVybiAtMTsKLQkgIGJyZWFrOwotCWNh c2UgUkVDT1JEX1FfWEdFVFFTVEFUOgotCWNhc2UgUkVDT1JEX1FfWEdFVFFV T1RBOgotCSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5h cmc0LAotCQkJICAgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotCSAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXpl X2ZzX3F1b3RhX3N0YXQpKQotCSAgICByZXR1cm4gLTE7Ci0JICBicmVhazsK LQl9CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2Fj aGUsIHRkZXAtPmFyZzEsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBzd2l0Y2gg KHRtcHVsb25nZXN0KQorICAgICAgICB7CisgICAgICAgIGNhc2UgUkVDT1JE X1FfR0VURk1UOgorICAgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2ln bmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnNCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJnRtcHVsb25nZXN0KTsKKyAgICAgICAg ICAvKiBfX3UzMiAqLworICAgICAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9tZW0gKChDT1JFX0FERFIpdG1wdWxvbmdlc3QsIDQpKQorICAgICAg ICAgICAgcmV0dXJuIC0xOworICAgICAgICAgIGJyZWFrOworICAgICAgICBj YXNlIFJFQ09SRF9RX0dFVElORk86CisgICAgICAgICAgcmVnY2FjaGVfcmF3 X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmc0LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1wdWxvbmdlc3Qp OworICAgICAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChD T1JFX0FERFIpdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9tZW1fZHFpbmZvKSkKKyAg ICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICBicmVhazsKKyAgICAg ICAgY2FzZSBSRUNPUkRfUV9HRVRRVU9UQToKKyAgICAgICAgICByZWdjYWNo ZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXB1bG9u Z2VzdCk7CisgICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21l bSAoKENPUkVfQUREUil0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX2lmX2RxYmxrKSkK KyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICBicmVhazsKKyAg ICAgICAgY2FzZSBSRUNPUkRfUV9YR0VUUVNUQVQ6CisgICAgICAgIGNhc2Ug UkVDT1JEX1FfWEdFVFFVT1RBOgorICAgICAgICAgIHJlZ2NhY2hlX3Jhd19y ZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnNCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRtcHVsb25nZXN0KTsK KyAgICAgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09S RV9BRERSKXRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfZnNfcXVvdGFfc3RhdCkpCisg ICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgYnJlYWs7CisgICAg ICAgIH0KICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfZ2V0cGdpZCAq LwpAQCAtMTE1MCwxNSArMTQ1NSwxNSBAQCByZWNvcmRfbGludXhfc3lzdGVt X2NhbGwgKGludCBudW0sIHN0cnVjCiAKICAgICAgIC8qIHN5c19zeXNmcyAq LwogICAgIGNhc2UgMTM1OgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJl Z2NhY2hlLCB0ZGVwLT5hcmcxLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwot ICAgICAgaWYgKHRtcHUzMiA9PSAyKQotCXsKLQkgIHJlZ2NhY2hlX3Jhd19y ZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywKLQkJCSAgICAgKGdkYl9ieXRl ICopICYgdG1wdTMyKTsKLQkgIC8qWFhYIHRoZSBzaXplIG9mIG1lbW9yeSBp cyBub3QgdmVyeSBjbGVhci4gICovCi0JICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfbWVtICh0bXB1MzIsIDEwKSkKLQkgICAgcmV0dXJuIC0xOwotCX0K KyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwg dGRlcC0+YXJnMSwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmICh0bXB1bG9u Z2VzdCA9PSAyKQorICAgICAgICB7CisgICAgICAgICAgcmVnY2FjaGVfcmF3 X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1wdWxvbmdlc3Qp OworICAgICAgICAgIC8qWFhYIHRoZSBzaXplIG9mIG1lbW9yeSBpcyBub3Qg dmVyeSBjbGVhci4gICovCisgICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xp c3RfYWRkX21lbSAoKENPUkVfQUREUil0bXB1bG9uZ2VzdCwgMTApKQorICAg ICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAgICAgICBicmVhazsK IAogICAgICAgLyogc3lzX3BlcnNvbmFsaXR5ICovCkBAIC0xMTczLDM3ICsx NDc4LDQzIEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwg c3RydWMKIAogICAgICAgLyogc3lzX2xsc2VlayAqLwogICAgIGNhc2UgMTQw OgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5h cmc0LCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX2xvZmZf dCkpCi0JcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5z aWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmc0LCAmdG1wdWxvbmdlc3QpOwor ICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQURE Uil0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRkZXAtPnNpemVfbG9mZl90KSkKKyAgICAgICAgcmV0dXJuIC0x OwogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19nZXRkZW50cyAqLwog ICAgIGNhc2UgMTQxOgogICAgICAgewotCXVpbnQzMl90IGNvdW50OwotCXJl Z2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwKLQkJCSAg IChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0JcmVnY2FjaGVfcmF3X3JlYWQg KHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAoZ2RiX2J5dGUgKikgJiBjb3VudCk7 Ci0JaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVw LT5zaXplX2RpcmVudCAqIGNvdW50KSkKLQkgIHJldHVybiAtMTsKKyAgICAg ICAgVUxPTkdFU1QgY291bnQ7CisgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFk X3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXB1bG9uZ2VzdCk7CisgICAg ICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRl cC0+YXJnMywgJmNvdW50KTsKKyAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xp c3RfYWRkX21lbSAoKENPUkVfQUREUil0bXB1bG9uZ2VzdCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9kaXJl bnQgKiBjb3VudCkpCisgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgfQog ICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19zZWxlY3QgKi8KICAgICBj YXNlIDE0MjoKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwg dGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6 ZV9mZF9zZXQpKQotCXJldHVybiAtMTsKLSAgICAgIHJlZ2NhY2hlX3Jhd19y ZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgKGdkYl9ieXRlICopICYgdG1w dTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRt cHUzMiwgdGRlcC0+c2l6ZV9mZF9zZXQpKQotCXJldHVybiAtMTsKLSAgICAg IHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnNCwgKGdk Yl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9mZF9zZXQpKQotCXJl dHVybiAtMTsKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwg dGRlcC0+YXJnNSwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6 ZV90aW1ldmFsKSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdf cmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsICZ0bXB1bG9u Z2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgo Q09SRV9BRERSKXRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9mZF9zZXQpKQorICAgICAgICBy ZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAo cmVnY2FjaGUsIHRkZXAtPmFyZzMsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKXRtcHVs b25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dGRlcC0+c2l6ZV9mZF9zZXQpKQorICAgICAgICByZXR1cm4gLTE7CisgICAg ICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAt PmFyZzQsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKXRtcHVsb25nZXN0LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9mZF9z ZXQpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdf cmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzUsICZ0bXB1bG9u Z2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgo Q09SRV9BRERSKXRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV90aW1ldmFsKSkKKyAgICAgICAg cmV0dXJuIC0xOwogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19mbG9j ayAqLwpAQCAtMTIxNSwzNiArMTUyNiwzNyBAQCByZWNvcmRfbGludXhfc3lz dGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAgICAgICAvKiBzeXNfcmVhZHYg Ki8KICAgICBjYXNlIDE0NToKICAgICAgIHsKLQl1aW50MzJfdCB2ZWM7Ci0J dWludDMyX3QgdmxlbjsKLQlzdHJ1Y3QgcmVjb3JkX2lvdmVjCi0JewotCSAg dWludDMyX3QgaW92X2Jhc2U7Ci0JICB1aW50MzJfdCBpb3ZfbGVuOwotCX0g aW92OwotCXJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJn MiwgKGdkYl9ieXRlICopICYgdmVjKTsKLQlpZiAodmVjKQotCSAgewotCSAg ICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsCi0J CQkgICAgICAgKGdkYl9ieXRlICopICYgdmxlbik7Ci0JICAgIGZvciAodG1w dTMyID0gMDsgdG1wdTMyIDwgdmxlbjsgdG1wdTMyKyspCi0JICAgICAgewot CQlpZiAodGFyZ2V0X3JlYWRfbWVtb3J5Ci0JCSAgICAodmVjLCAoZ2RiX2J5 dGUgKikgJiBpb3YsIHNpemVvZiAoc3RydWN0IHJlY29yZF9pb3ZlYykpKQot CQkgIHsKLQkJICAgIGlmIChyZWNvcmRfZGVidWcpCi0JCSAgICAgIGZwcmlu dGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKLQkJCQkJICAiUHJvY2VzcyBy ZWNvcmQ6IGVycm9yIHJlYWRpbmcgIgotCQkJCQkgICJtZW1vcnkgYXQgYWRk ciA9ICVzIGxlbiA9ICVsdS5cbiIsCi0JCQkJCSAgcGFkZHJlc3MgKGdkYmFy Y2gsIHZlYyksCi0JCQkJCSAgKHVuc2lnbmVkIGxvbmcpc2l6ZW9mIChzdHJ1 Y3QgcmVjb3JkX2lvdmVjKSk7Ci0JCSAgICByZXR1cm4gLTE7Ci0JCSAgfQot CQlpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChpb3YuaW92X2Jhc2Us IGlvdi5pb3ZfbGVuKSkKLQkJICByZXR1cm4gLTE7Ci0JCXZlYyArPSBzaXpl b2YgKHN0cnVjdCByZWNvcmRfaW92ZWMpOwotCSAgICAgIH0KLQkgIH0KKyAg ICAgICAgVUxPTkdFU1QgdmVjLCB2bGVuOworCisgICAgICAgIHJlZ2NhY2hl X3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgJnZl Yyk7CisgICAgICAgIGlmICh2ZWMpCisgICAgICAgICAgeworICAgICAgICAg ICAgZ2RiX2J5dGUgKmlvdiA9IGFsbG9jYSAodGRlcC0+c2l6ZV9pb3ZlYyk7 CisKKyAgICAgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChy ZWdjYWNoZSwgdGRlcC0+YXJnMywgJnZsZW4pOworICAgICAgICAgICAgZm9y ICh0bXB1bG9uZ2VzdCA9IDA7IHRtcHVsb25nZXN0IDwgdmxlbjsgdG1wdWxv bmdlc3QrKykKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlm ICh0YXJnZXRfcmVhZF9tZW1vcnkgKChDT1JFX0FERFIpdmVjLCBpb3YsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+ c2l6ZV9pb3ZlYykpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg ICAgICAgICAgIGlmIChyZWNvcmRfZGVidWcpCisgICAgICAgICAgICAgICAg ICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByb2Nlc3Mg cmVjb3JkOiBlcnJvciByZWFkaW5nICIKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJtZW1vcnkgYXQgYWRkciA9IDB4JXMg bGVuID0gJWQuXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgT1VUUFVUX1JFRyAodmVjLCB0ZGVwLT5hcmcyKSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAt PnNpemVfaW92ZWMpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7 CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbQorICAgICAgICAgICAgICAgICAgICAg ICgoQ09SRV9BRERSKWV4dHJhY3RfdW5zaWduZWRfaW50ZWdlcgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlvdiwgdGRlcC0+c2l6 ZV9wb2ludGVyLCBieXRlX29yZGVyKSwKKyAgICAgICAgICAgICAgICAgICAg ICAgKGludClleHRyYWN0X3Vuc2lnbmVkX2ludGVnZXIKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChpb3YgKyB0ZGVwLT5zaXplX3BvaW50ZXIs IHRkZXAtPnNpemVfc2l6ZV90LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJ5dGVfb3JkZXIpKSkKKyAgICAgICAgICAgICAgICAgIHJldHVy biAtMTsKKyAgICAgICAgICAgICAgICB2ZWMgKz0gdGRlcC0+c2l6ZV9pb3Zl YzsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0KICAgICAgIH0KICAg ICAgIGJyZWFrOwogCkBAIC0xMjcwLDkgKzE1ODIsOSBAQCByZWNvcmRfbGlu dXhfc3lzdGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAKICAgICAgIC8qIHN5 c19zY2hlZF9nZXRwYXJhbSAqLwogICAgIGNhc2UgMTU1OgotICAgICAgcmVn Y2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5 dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX2ludCkpCi0JcmV0dXJuIC0x OworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmcyLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUil0bXB1bG9uZ2VzdCwg dGRlcC0+c2l6ZV9pbnQpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBi cmVhazsKIAogICAgICAgLyogc3lzX3NjaGVkX3NldHNjaGVkdWxlciAqLwpA QCAtMTI5MSw5ICsxNjAzLDEwIEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2Fs bCAoaW50IG51bSwgc3RydWMKICAgICBjYXNlIDE2MToKICAgICAgIC8qIHN5 c19uYW5vc2xlZXAgKi8KICAgICBjYXNlIDE2MjoKLSAgICAgIHJlZ2NhY2hl X3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICop ICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9t ZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV90aW1lc3BlYykpCi0JcmV0dXJuIC0x OworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmcyLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUil0bXB1bG9uZ2VzdCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNp emVfdGltZXNwZWMpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVh azsKIAogICAgICAgLyogc3lzX21yZW1hcCAqLwpAQCAtMTMwNCwxNSArMTYx NywxNyBAQCByZWNvcmRfbGludXhfc3lzdGVtX2NhbGwgKGludCBudW0sIHN0 cnVjCiAKICAgICAgIC8qIHN5c19nZXRyZXN1aWQxNiAqLwogICAgIGNhc2Ug MTY1OgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVw LT5hcmcxLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX29s ZF91aWRfdCkpCi0JcmV0dXJuIC0xOwotICAgICAgcmVnY2FjaGVfcmF3X3Jl YWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1 MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1w dTMyLCB0ZGVwLT5zaXplX29sZF91aWRfdCkpCi0JcmV0dXJuIC0xOwotICAg ICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAo Z2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX29sZF91aWRfdCkp Ci0JcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWdu ZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAmdG1wdWxvbmdlc3QpOworICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUil0 bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRkZXAtPnNpemVfb2xkX3VpZF90KSkKKyAgICAgICAgcmV0dXJuIC0x OworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmcyLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUil0bXB1bG9uZ2VzdCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNp emVfb2xkX3VpZF90KSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgICAgcmVn Y2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcz LCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX21lbSAoKENPUkVfQUREUil0bXB1bG9uZ2VzdCwgdGRlcC0+c2l6ZV9v bGRfdWlkX3QpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVhazsK IAogICAgICAgLyogc3lzX3ZtODYgKi8KQEAgLTEzMjMsMzIgKzE2MzgsMzIg QEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChpbnQgbnVtLCBzdHJ1Ywog CiAgICAgICAvKiBzeXNfcG9sbCAqLwogICAgIGNhc2UgMTY4OgotICAgICAg cmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAoZ2Ri X2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHRtcHUzMikKLQl7Ci0J ICB1aW50MzJfdCBuZmRzOwotCSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2Nh Y2hlLCB0ZGVwLT5hcmcyLAotCQkJICAgICAoZ2RiX2J5dGUgKikgJiBuZmRz KTsKLQkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwg dGRlcC0+c2l6ZV9wb2xsZmQgKiBuZmRzKSkKLQkgICAgcmV0dXJuIC0xOwot CX0KKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNo ZSwgdGRlcC0+YXJnMSwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmICh0bXB1 bG9uZ2VzdCkKKyAgICAgICAgeworICAgICAgICAgIFVMT05HRVNUIG5mZHM7 CisgICAgICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2Nh Y2hlLCB0ZGVwLT5hcmcyLCAmbmZkcyk7CisgICAgICAgICAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUil0bXB1bG9uZ2VzdCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVw LT5zaXplX3BvbGxmZCAqIG5mZHMpKQorICAgICAgICAgICAgcmV0dXJuIC0x OworICAgICAgICB9CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX25m c3NlcnZjdGwgKi8KICAgICBjYXNlIDE2OToKLSAgICAgIHJlZ2NhY2hlX3Jh d19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMSwgKGdkYl9ieXRlICopICYg dG1wdTMyKTsKLSAgICAgIGlmICh0bXB1MzIgPT0gNyB8fCB0bXB1MzIgPT0g OCkKLQl7Ci0JICB1aW50MzJfdCByc2l6ZTsKLQkgIGlmICh0bXB1MzIgPT0g NykKLQkgICAgcnNpemUgPSB0ZGVwLT5zaXplX05GU19GSFNJWkU7Ci0JICBl bHNlCi0JICAgIHJzaXplID0gdGRlcC0+c2l6ZV9rbmZzZF9maDsKLQkgIHJl Z2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywKLQkJCSAg ICAgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLQkgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgcnNpemUpKQotCSAgICByZXR1cm4g LTE7Ci0JfQorICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJl Z2NhY2hlLCB0ZGVwLT5hcmcxLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYg KHRtcHVsb25nZXN0ID09IDcgfHwgdG1wdWxvbmdlc3QgPT0gOCkKKyAgICAg ICAgeworICAgICAgICAgIGludCByc2l6ZTsKKyAgICAgICAgICBpZiAodG1w dWxvbmdlc3QgPT0gNykKKyAgICAgICAgICAgIHJzaXplID0gdGRlcC0+c2l6 ZV9ORlNfRkhTSVpFOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJz aXplID0gdGRlcC0+c2l6ZV9rbmZzZF9maDsKKyAgICAgICAgICByZWdjYWNo ZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXB1bG9u Z2VzdCk7CisgICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21l bSAoKENPUkVfQUREUil0bXB1bG9uZ2VzdCwgcnNpemUpKQorICAgICAgICAg ICAgcmV0dXJuIC0xOworICAgICAgICB9CiAgICAgICBicmVhazsKIAogICAg ICAgLyogc3lzX3NldHJlc2dpZDE2ICovCkBAIC0xMzU3LDM1ICsxNjcyLDM3 IEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMK IAogICAgICAgLyogc3lzX2dldHJlc2dpZDE2ICovCiAgICAgY2FzZSAxNzE6 Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzEsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfb2xkX2dp ZF90KSkKLQlyZXR1cm4gLTE7Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAo cmVnY2FjaGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7 Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIs IHRkZXAtPnNpemVfb2xkX2dpZF90KSkKLQlyZXR1cm4gLTE7Ci0gICAgICBy ZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsIChnZGJf Ynl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfb2xkX2dpZF90KSkKLQly ZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAo cmVnY2FjaGUsIHRkZXAtPmFyZzEsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKXRtcHVs b25nZXN0LHRkZXAtPnNpemVfb2xkX2dpZF90KSkKKyAgICAgICAgcmV0dXJu IC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2Nh Y2hlLCB0ZGVwLT5hcmcyLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUil0bXB1bG9uZ2Vz dCwgdGRlcC0+c2l6ZV9vbGRfZ2lkX3QpKQorICAgICAgICByZXR1cm4gLTE7 CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUs IHRkZXAtPmFyZzMsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKXRtcHVsb25nZXN0LCB0 ZGVwLT5zaXplX29sZF9naWRfdCkpCisgICAgICAgIHJldHVybiAtMTsKICAg ICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfcHJjdGwgKi8KICAgICBjYXNl IDE3MjoKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRl cC0+YXJnMSwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIHN3aXRj aCAodG1wdTMyKQotCXsKLQljYXNlIDI6Ci0JICByZWdjYWNoZV9yYXdfcmVh ZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsCi0JCQkgICAgIChnZGJfYnl0ZSAq KSAmIHRtcHUzMik7Ci0JICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVt ICh0bXB1MzIsIHRkZXAtPnNpemVfaW50KSkKLQkgICAgcmV0dXJuIC0xOwot CSAgYnJlYWs7Ci0JY2FzZSAxNjoKLQkgIHJlZ2NhY2hlX3Jhd19yZWFkIChy ZWdjYWNoZSwgdGRlcC0+YXJnMiwKLQkJCSAgICAgKGdkYl9ieXRlICopICYg dG1wdTMyKTsKLQkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRt cHUzMiwgdGRlcC0+c2l6ZV9UQVNLX0NPTU1fTEVOKSkKLQkgICAgcmV0dXJu IC0xOwotCSAgYnJlYWs7Ci0JfQorICAgICAgcmVnY2FjaGVfcmF3X3JlYWRf dW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAmdG1wdWxvbmdlc3Qp OworICAgICAgc3dpdGNoICh0bXB1bG9uZ2VzdCkKKyAgICAgICAgeworICAg ICAgICBjYXNlIDI6CisgICAgICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5z aWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmdG1wdWxvbmdlc3QpOworICAgICAg ICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIp dG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGRlcC0+c2l6ZV9pbnQpKQorICAgICAgICAgICAgcmV0dXJu IC0xOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDE2OgorICAg ICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwg dGRlcC0+YXJnMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJnRtcHVsb25nZXN0KTsKKyAgICAgICAgICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKXRtcHVsb25nZXN0LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNp emVfVEFTS19DT01NX0xFTikpCisgICAgICAgICAgICByZXR1cm4gLTE7Cisg ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgIGJyZWFrOwogCiAg ICAgICAvKiBzeXNfcnRfc2lncmV0dXJuICovCkBAIC0xMzk0LDM2ICsxNzEx LDM5IEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3Ry dWMKIAogICAgICAgLyogc3lzX3J0X3NpZ2FjdGlvbiAqLwogICAgIGNhc2Ug MTc0OgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVw LT5hcmczLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX3Np Z2FjdGlvbikpCi0JcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3Jl YWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAmdG1wdWxvbmdl c3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENP UkVfQUREUil0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRkZXAtPnNpemVfc2lnYWN0aW9uKSkKKyAgICAgICAg cmV0dXJuIC0xOwogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19ydF9z aWdwcm9jbWFzayAqLwogICAgIGNhc2UgMTc1OgotICAgICAgcmVnY2FjaGVf cmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAoZ2RiX2J5dGUgKikg JiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21l bSAodG1wdTMyLCB0ZGVwLT5zaXplX3NpZ3NldF90KSkKLQlyZXR1cm4gLTE7 CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUs IHRkZXAtPmFyZzMsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKXRtcHVsb25nZXN0LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6 ZV9zaWdzZXRfdCkpCisgICAgICAgIHJldHVybiAtMTsKICAgICAgIGJyZWFr OwogCiAgICAgICAvKiBzeXNfcnRfc2lncGVuZGluZyAqLwogICAgIGNhc2Ug MTc2OgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVw LT5hcmcxLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHRt cHUzMikKLQl7Ci0JICB1aW50MzJfdCBzaWdzZXRzaXplOwotCSAgcmVnY2Fj aGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLAotCQkJICAgICAo Z2RiX2J5dGUgKikgJiBzaWdzZXRzaXplKTsKLQkgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgc2lnc2V0c2l6ZSkpCi0JICAgIHJl dHVybiAtMTsKLQl9CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25l ZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEsICZ0bXB1bG9uZ2VzdCk7CisgICAg ICBpZiAodG1wdWxvbmdlc3QpCisgICAgICAgIHsKKyAgICAgICAgICBVTE9O R0VTVCBzaWdzZXRzaXplOworICAgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFk X3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwmc2lnc2V0c2l6ZSk7 CisgICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENP UkVfQUREUil0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoaW50KXNpZ3NldHNpemUpKQorICAgICAgICAg ICAgcmV0dXJuIC0xOworICAgICAgICB9CiAgICAgICBicmVhazsKIAogICAg ICAgLyogc3lzX3J0X3NpZ3RpbWVkd2FpdCAqLwogICAgIGNhc2UgMTc3Ogot ICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcy LCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX3NpZ2luZm9f dCkpCi0JcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5z aWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAmdG1wdWxvbmdlc3QpOwor ICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQURE Uil0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRkZXAtPnNpemVfc2lnaW5mb190KSkKKyAgICAgICAgcmV0dXJu IC0xOwogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19ydF9zaWdxdWV1 ZWluZm8gKi8KQEAgLTE0MzQsMTUgKzE3NTQsMTQgQEAgcmVjb3JkX2xpbnV4 X3N5c3RlbV9jYWxsIChpbnQgbnVtLCBzdHJ1YwogCiAgICAgICAvKiBzeXNf cHJlYWQ2NCAqLwogICAgIGNhc2UgMTgwOgotICAgICAgcmVnY2FjaGVfcmF3 X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0 bXB1MzIpOwotICAgICAgaWYgKHRtcHUzMikKLQl7Ci0JICB1aW50MzJfdCBj b3VudDsKLQkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+ YXJnMywKLQkJCSAgICAgKGdkYl9ieXRlICopICYgY291bnQpOwotCSAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCBjb3VudCkpCi0J ICAgIHJldHVybiAtMTsKLQl9CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91 bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsICZ0bXB1bG9uZ2VzdCk7 CisgICAgICBpZiAodG1wdWxvbmdlc3QpCisgICAgICAgIHsKKyAgICAgICAg ICBVTE9OR0VTVCBjb3VudDsKKyAgICAgICAgICByZWdjYWNoZV9yYXdfcmVh ZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsJmNvdW50KTsKKyAg ICAgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9B RERSKXRtcHVsb25nZXN0LCAoaW50KWNvdW50KSkKKyAgICAgICAgICAgIHJl dHVybiAtMTsKKyAgICAgICAgfQogICAgICAgYnJlYWs7CiAKICAgICAgIC8q IHN5c19wd3JpdGU2NCAqLwpAQCAtMTQ1MywyMiArMTc3MiwyMiBAQCByZWNv cmRfbGludXhfc3lzdGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAKICAgICAg IC8qIHN5c19nZXRjd2QgKi8KICAgICBjYXNlIDE4MzoKLSAgICAgIHJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMSwgKGdkYl9ieXRl ICopICYgdG1wdTMyKTsKLSAgICAgIGlmICh0bXB1MzIpCi0JewotCSAgdWlu dDMyX3Qgc2l6ZTsKLQkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwg dGRlcC0+YXJnMiwKLQkJCSAgICAgKGdkYl9ieXRlICopICYgc2l6ZSk7Ci0J ICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHNpemUp KQotCSAgICByZXR1cm4gLTE7Ci0JfQorICAgICAgcmVnY2FjaGVfcmF3X3Jl YWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAmdG1wdWxvbmdl c3QpOworICAgICAgaWYgKHRtcHVsb25nZXN0KQorICAgICAgICB7CisgICAg ICAgICAgVUxPTkdFU1Qgc2l6ZTsKKyAgICAgICAgICByZWdjYWNoZV9yYXdf cmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsICZzaXplKTsK KyAgICAgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09S RV9BRERSKXRtcHVsb25nZXN0LCAoaW50KXNpemUpKQorICAgICAgICAgICAg cmV0dXJuIC0xOworICAgICAgICB9CiAgICAgICBicmVhazsKIAogICAgICAg Lyogc3lzX2NhcGdldCAqLwogICAgIGNhc2UgMTg0OgotICAgICAgcmVnY2Fj aGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUg KikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRk X21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX2NhcF91c2VyX2RhdGFfdCkpCi0J cmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQg KHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAmdG1wdWxvbmdlc3QpOworICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUil0bXB1 bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRkZXAtPnNpemVfY2FwX3VzZXJfZGF0YV90KSkKKyAgICAgICAgcmV0dXJu IC0xOwogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19jYXBzZXQgKi8K QEAgLTE0NzcsMTYgKzE3OTYsMTcgQEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9j YWxsIChpbnQgbnVtLCBzdHJ1YwogCiAgICAgICAvKiBzeXNfc2lnYWx0c3Rh Y2sgKi8KICAgICBjYXNlIDE4NjoKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFk IChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1wdTMy KTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUz MiwgdGRlcC0+c2l6ZV9zdGFja190KSkKLQlyZXR1cm4gLTE7CisgICAgICBy ZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzIsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfbWVtICgoQ09SRV9BRERSKXRtcHVsb25nZXN0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9zdGFja190 KSkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgICAgYnJlYWs7CiAKICAgICAg IC8qIHN5c19zZW5kZmlsZSAqLwogICAgIGNhc2UgMTg3OgotICAgICAgcmVn Y2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAoZ2RiX2J5 dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX29mZl90KSkKLQlyZXR1cm4g LTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2Fj aGUsIHRkZXAtPmFyZzMsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVj b3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKXRtcHVsb25nZXN0 LCB0ZGVwLT5zaXplX29mZl90KSkKKyAgICAgICAgcmV0dXJuIC0xOwogICAg ICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19uaV9zeXNjYWxsICovCkBAIC0x NDk5LDkgKzE4MTksMTAgQEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChp bnQgbnVtLCBzdHJ1YwogCiAgICAgICAvKiBzeXNfZ2V0cmxpbWl0ICovCiAg ICAgY2FzZSAxOTE6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2Fj aGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAg ICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAt PnNpemVfcmxpbWl0KSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9y YXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsICZ0bXB1 bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVt ICgoQ09SRV9BRERSKXRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9ybGltaXQpKQorICAgICAg ICByZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX21t YXAyICovCkBAIC0xNTIwLDkgKzE4NDEsMTAgQEAgcmVjb3JkX2xpbnV4X3N5 c3RlbV9jYWxsIChpbnQgbnVtLCBzdHJ1YwogICAgIGNhc2UgMTk2OgogICAg ICAgLyogc3lzX2ZzdGF0NjQgKi8KICAgICBjYXNlIDE5NzoKLSAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9i eXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9zdGF0NjQpKQotCXJldHVy biAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdj YWNoZSwgdGRlcC0+YXJnMiwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpdG1wdWxvbmdl c3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVw LT5zaXplX3N0YXQ2NCkpCisgICAgICAgIHJldHVybiAtMTsKICAgICAgIGJy ZWFrOwogCiAgICAgICAvKiBzeXNfbGNob3duICovCkBAIC0xNTQzLDE2ICsx ODY1LDE2IEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwg c3RydWMKIAogICAgICAgLyogc3lzX2dldGdyb3VwcyAqLwogICAgIGNhc2Ug MjA1OgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVw LT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHRt cHUzMikKLQl7Ci0JICBpbnQgZ2lkc2V0c2l6ZTsKLQkgIHJlZ2NhY2hlX3Jh d19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMSwKLQkJCSAgICAgKGdkYl9i eXRlICopICYgZ2lkc2V0c2l6ZSk7Ci0JICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfbWVtCi0JICAgICAgKHRtcHUzMiwgdGRlcC0+c2l6ZV9naWRfdCAq IGdpZHNldHNpemUpKQotCSAgICByZXR1cm4gLTE7Ci0JfQorICAgICAgcmVn Y2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcy LCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHRtcHVsb25nZXN0KQorICAg ICAgICB7CisgICAgICAgICAgVUxPTkdFU1QgZ2lkc2V0c2l6ZTsKKyAgICAg ICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRk ZXAtPmFyZzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZnaWRzZXRzaXplKTsKKyAgICAgICAgICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKXRtcHVsb25nZXN0LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVf Z2lkX3QgKiAoaW50KWdpZHNldHNpemUpKQorICAgICAgICAgICAgcmV0dXJu IC0xOworICAgICAgICB9CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lz X3NldGdyb3VwcyAqLwpAQCAtMTU2NSwxNSArMTg4NywxNSBAQCByZWNvcmRf bGludXhfc3lzdGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAKICAgICAgIC8q IHN5c19nZXRyZXN1aWQgKi8KICAgICBjYXNlIDIwOToKLSAgICAgIHJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMSwgKGdkYl9ieXRl ICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV91aWRfdCkpCi0JcmV0dXJuIC0x OwotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5h cmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX3VpZF90 KSkKLQlyZXR1cm4gLTE7Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVn Y2FjaGUsIHRkZXAtPmFyZzMsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0g ICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRk ZXAtPnNpemVfdWlkX3QpKQotCXJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hl X3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMSwgJnRt cHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9t ZW0gKChDT1JFX0FERFIpdG1wdWxvbmdlc3QsIHRkZXAtPnNpemVfdWlkX3Qp KQorICAgICAgICByZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVh ZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsICZ0bXB1bG9uZ2Vz dCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09S RV9BRERSKXRtcHVsb25nZXN0LCB0ZGVwLT5zaXplX3VpZF90KSkKKyAgICAg ICAgcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWdu ZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAmdG1wdWxvbmdlc3QpOworICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUil0 bXB1bG9uZ2VzdCwgdGRlcC0+c2l6ZV91aWRfdCkpCisgICAgICAgIHJldHVy biAtMTsKICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfc2V0cmVzZ2lk ICovCkBAIC0xNTgyLDE1ICsxOTA0LDE1IEBAIHJlY29yZF9saW51eF9zeXN0 ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKIAogICAgICAgLyogc3lzX2dldHJl c2dpZCAqLwogICAgIGNhc2UgMjExOgotICAgICAgcmVnY2FjaGVfcmF3X3Jl YWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAoZ2RiX2J5dGUgKikgJiB0bXB1 MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1w dTMyLCB0ZGVwLT5zaXplX2dpZF90KSkKLQlyZXR1cm4gLTE7Ci0gICAgICBy ZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsIChnZGJf Ynl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfZ2lkX3QpKQotCXJldHVy biAtMTsKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRl cC0+YXJnMywgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9n aWRfdCkpCi0JcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRf dW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAmdG1wdWxvbmdlc3Qp OworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVf QUREUil0bXB1bG9uZ2VzdCwgdGRlcC0+c2l6ZV9naWRfdCkpCisgICAgICAg IHJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVk IChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgJnRtcHVsb25nZXN0KTsKKyAgICAg IGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpdG1w dWxvbmdlc3QsIHRkZXAtPnNpemVfZ2lkX3QpKQorICAgICAgICByZXR1cm4g LTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2Fj aGUsIHRkZXAtPmFyZzMsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVj b3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKXRtcHVsb25nZXN0 LCB0ZGVwLT5zaXplX2dpZF90KSkKKyAgICAgICAgcmV0dXJuIC0xOwogICAg ICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19jaG93biAqLwpAQCAtMTYwOSw5 ICsxOTMxLDEwIEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51 bSwgc3RydWMKIAogICAgICAgLyogc3lzX21pbmNvcmUgKi8KICAgICBjYXNl IDIxODoKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRl cC0+YXJnMywgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9Q QUdFX1NJWkUpKQotCXJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19y ZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgJnRtcHVsb25n ZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChD T1JFX0FERFIpdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0ZGVwLT5zaXplX1BBR0VfU0laRSkpCisgICAgICAg IHJldHVybiAtMTsKICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfbWFk dmlzZSAqLwpAQCAtMTYyMSwzMCArMTk0NCwzMiBAQCByZWNvcmRfbGludXhf c3lzdGVtX2NhbGwgKGludCBudW0sIHN0cnVjCiAgICAgICAvKiBzeXNfZ2V0 ZGVudHM2NCAqLwogICAgIGNhc2UgMjIwOgogICAgICAgewotCXVpbnQzMl90 IGNvdW50OwotCXJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+ YXJnMiwKLQkJCSAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0JcmVnY2Fj aGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAoZ2RiX2J5dGUg KikgJiBjb3VudCk7Ci0JaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo dG1wdTMyLCB0ZGVwLT5zaXplX2RpcmVudDY0ICogY291bnQpKQotCSAgcmV0 dXJuIC0xOworICAgICAgICBVTE9OR0VTVCBjb3VudDsKKyAgICAgICAgcmVn Y2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcy LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRtcHVs b25nZXN0KTsKKyAgICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQg KHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAmY291bnQpOworICAgICAgICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKXRtcHVsb25n ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 ZGVwLT5zaXplX2RpcmVudDY0ICogY291bnQpKQorICAgICAgICAgIHJldHVy biAtMTsKICAgICAgIH0KICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNf ZmNudGw2NCAqLwogICAgIGNhc2UgMjIxOgotICAgICAgcmVnY2FjaGVfcmF3 X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0 bXB1MzIpOwotICAgICAgaWYgKHRtcHUzMiA9PSB0ZGVwLT5mY250bF9GX0dF VExLNjQpCisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVn Y2FjaGUsIHRkZXAtPmFyZzIsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAo dG1wdWxvbmdlc3QgPT0gdGRlcC0+ZmNudGxfRl9HRVRMSzY0KQogICAgICAg ICB7Ci0JICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzMsCi0JCQkgICAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0JICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVf ZmxvY2s2NCkpCi0JICAgIHJldHVybiAtMTsKLQl9Ci0gICAgICBlbHNlIGlm ICh0bXB1MzIgIT0gdGRlcC0+ZmNudGxfRl9TRVRMSzY0Ci0JICAgICAgICYm IHRtcHUzMiAhPSB0ZGVwLT5mY250bF9GX1NFVExLVzY0KQorICAgICAgICAg IHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+ YXJnMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JnRtcHVsb25nZXN0KTsKKyAgICAgICAgICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfbWVtICgoQ09SRV9BRERSKXRtcHVsb25nZXN0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfZmxv Y2s2NCkpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAg ICAgIGVsc2UgaWYgKHRtcHVsb25nZXN0ICE9IHRkZXAtPmZjbnRsX0ZfU0VU TEs2NAorICAgICAgICAgICAgICAgJiYgdG1wdWxvbmdlc3QgIT0gdGRlcC0+ ZmNudGxfRl9TRVRMS1c2NCkKICAgICAgICAgewotCSAgZ290byBzeXNfZmNu dGw7Ci0JfQorICAgICAgICAgIGdvdG8gc3lzX2ZjbnRsOworICAgICAgICB9 CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX25pX3N5c2NhbGwgKi8K QEAgLTE2NjksMTUgKzE5OTQsMTQgQEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9j YWxsIChpbnQgbnVtLCBzdHJ1YwogICAgIGNhc2UgMjMwOgogICAgICAgLyog c3lzX2ZnZXR4YXR0ciAqLwogICAgIGNhc2UgMjMxOgotICAgICAgcmVnY2Fj aGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAoZ2RiX2J5dGUg KikgJiB0bXB1MzIpOwotICAgICAgaWYgKHRtcHUzMikKLQl7Ci0JICB1aW50 MzJfdCBzaXplOwotCSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0 ZGVwLT5hcmc0LAotCQkJICAgICAoZ2RiX2J5dGUgKikgJiBzaXplKTsKLQkg IGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgc2l6ZSkp Ci0JICAgIHJldHVybiAtMTsKLQl9CisgICAgICByZWdjYWNoZV9yYXdfcmVh ZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsICZ0bXB1bG9uZ2Vz dCk7CisgICAgICBpZiAodG1wdWxvbmdlc3QpCisgICAgICAgIHsKKyAgICAg ICAgICBVTE9OR0VTVCBzaXplOworICAgICAgICAgIHJlZ2NhY2hlX3Jhd19y ZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnNCwgJnNpemUpOwor ICAgICAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JF X0FERFIpdG1wdWxvbmdlc3QsIChpbnQpc2l6ZSkpCisgICAgICAgICAgICBy ZXR1cm4gLTE7CisgICAgICAgIH0KICAgICAgIGJyZWFrOwogCiAgICAgICAv KiBzeXNfbGlzdHhhdHRyICovCkBAIC0xNjg2LDE1ICsyMDEwLDE0IEBAIHJl Y29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKICAgICBj YXNlIDIzMzoKICAgICAgIC8qIHN5c19mbGlzdHhhdHRyICovCiAgICAgY2Fz ZSAyMzQ6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRk ZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAo dG1wdTMyKQotCXsKLQkgIHVpbnQzMl90IHNpemU7Ci0JICByZWdjYWNoZV9y YXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsCi0JCQkgICAgIChnZGJf Ynl0ZSAqKSAmIHNpemUpOwotCSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRk X21lbSAodG1wdTMyLCBzaXplKSkKLQkgICAgcmV0dXJuIC0xOwotCX0KKyAg ICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRl cC0+YXJnMiwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmICh0bXB1bG9uZ2Vz dCkKKyAgICAgICAgeworICAgICAgICAgIFVMT05HRVNUIHNpemU7CisgICAg ICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0 ZGVwLT5hcmczLCAmc2l6ZSk7CisgICAgICAgICAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX21lbSAoKENPUkVfQUREUil0bXB1bG9uZ2VzdCwgKGludClz aXplKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogICAg ICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19yZW1vdmV4YXR0ciAqLwpAQCAt MTcwOSw5ICsyMDMyLDEwIEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAo aW50IG51bSwgc3RydWMKIAogICAgICAgLyogc3lzX3NlbmRmaWxlNjQgKi8K ICAgICBjYXNlIDIzOToKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdj YWNoZSwgdGRlcC0+YXJnMywgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAg ICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRl cC0+c2l6ZV9sb2ZmX3QpKQotCXJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hl X3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgJnRt cHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9t ZW0gKChDT1JFX0FERFIpdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX2xvZmZfdCkpCisgICAg ICAgIHJldHVybiAtMTsKICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNf ZnV0ZXggKi8KQEAgLTE3MjIsMzUgKzIwNDYsMzYgQEAgcmVjb3JkX2xpbnV4 X3N5c3RlbV9jYWxsIChpbnQgbnVtLCBzdHJ1YwogCiAgICAgICAvKiBzeXNf c2NoZWRfZ2V0YWZmaW5pdHkgKi8KICAgICBjYXNlIDI0MjoKLSAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgKGdkYl9i eXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmICh0bXB1MzIpCi0JewotCSAg dWludDMyX3QgbGVuOwotCSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hl LCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiBsZW4pOwotCSAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCBsZW4pKQotCSAgICBy ZXR1cm4gLTE7Ci0JfQorICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWdu ZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAmdG1wdWxvbmdlc3QpOworICAg ICAgaWYgKHRtcHVsb25nZXN0KQorICAgICAgICB7CisgICAgICAgICAgVUxP TkdFU1QgbGVuOworICAgICAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2ln bmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgJmxlbik7CisgICAgICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUil0bXB1 bG9uZ2VzdCwgKGludClsZW4pKQorICAgICAgICAgICAgcmV0dXJuIC0xOwor ICAgICAgICB9CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX3NldF90 aHJlYWRfYXJlYSAqLwogICAgIGNhc2UgMjQzOgotICAgICAgcmVnY2FjaGVf cmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAoZ2RiX2J5dGUgKikg JiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21l bSAodG1wdTMyLCB0ZGVwLT5zaXplX2ludCkpCi0JcmV0dXJuIC0xOworICAg ICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVw LT5hcmcxLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX21lbSAoKENPUkVfQUREUil0bXB1bG9uZ2VzdCwgdGRlcC0+ c2l6ZV9pbnQpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVhazsK IAogICAgICAgLyogc3lzX2dldF90aHJlYWRfYXJlYSAqLwogICAgIGNhc2Ug MjQ0OgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVw LT5hcmcxLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX3Vz ZXJfZGVzYykpCi0JcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3Jl YWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAmdG1wdWxvbmdl c3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENP UkVfQUREUil0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRkZXAtPnNpemVfdXNlcl9kZXNjKSkKKyAgICAgICAg cmV0dXJuIC0xOwogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19pb19z ZXR1cCAqLwogICAgIGNhc2UgMjQ1OgotICAgICAgcmVnY2FjaGVfcmF3X3Jl YWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1 MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1w dTMyLCB0ZGVwLT5zaXplX2xvbmcpKQotCXJldHVybiAtMTsKKyAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJn MiwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9tZW0gKChDT1JFX0FERFIpdG1wdWxvbmdlc3QsIHRkZXAtPnNpemVf bG9uZykpCisgICAgICAgIHJldHVybiAtMTsKICAgICAgIGJyZWFrOwogCiAg ICAgICAvKiBzeXNfaW9fZGVzdHJveSAqLwpAQCAtMTc1OSw0OSArMjA4NCw1 NyBAQCByZWNvcmRfbGludXhfc3lzdGVtX2NhbGwgKGludCBudW0sIHN0cnVj CiAKICAgICAgIC8qIHN5c19pb19nZXRldmVudHMgKi8KICAgICBjYXNlIDI0 NzoKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+ YXJnNCwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmICh0bXB1 MzIpCi0JewotCSAgaW50MzJfdCBucjsKLQkgIHJlZ2NhY2hlX3Jhd19yZWFk IChyZWdjYWNoZSwgdGRlcC0+YXJnMywgKGdkYl9ieXRlICopICYgbnIpOwot CSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCBuciAq IHRkZXAtPnNpemVfaW9fZXZlbnQpKQotCSAgICByZXR1cm4gLTE7Ci0JfQor ICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0 ZGVwLT5hcmc0LCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHRtcHVsb25n ZXN0KQorICAgICAgICB7CisgICAgICAgICAgVUxPTkdFU1QgbnI7CisgICAg ICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0 ZGVwLT5hcmczLCAmbnIpOworICAgICAgICAgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKChDT1JFX0FERFIpdG1wdWxvbmdlc3QsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnIgKiB0ZGVwLT5z aXplX2lvX2V2ZW50KSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAg ICAgfQogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19pb19zdWJtaXQg Ki8KICAgICBjYXNlIDI0ODoKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChy ZWdjYWNoZSwgdGRlcC0+YXJnMywgKGdkYl9ieXRlICopICYgdG1wdTMyKTsK LSAgICAgIGlmICh0bXB1MzIpCi0JewotCSAgaW50MzJfdCBpLCBucjsKLQkg IHVpbnQzMl90ICppb2NicDsKLQkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdj YWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgbnIpOwotCSAgaW9j YnAgPSAodWludDMyX3QgKikgYWxsb2NhIChuciAqIHRkZXAtPnNpemVfaW50 KTsKLQkgIGlmICh0YXJnZXRfcmVhZF9tZW1vcnkKLQkgICAgICAodG1wdTMy LCAoZ2RiX2J5dGUgKikgaW9jYnAsIG5yICogdGRlcC0+c2l6ZV9pbnQpKQot CSAgICB7Ci0JICAgICAgaWYgKHJlY29yZF9kZWJ1ZykKLQkJZnByaW50Zl91 bmZpbHRlcmVkIChnZGJfc3RkbG9nLAotCQkJCSAgICAiUHJvY2VzcyByZWNv cmQ6IGVycm9yIHJlYWRpbmcgbWVtb3J5ICIKLQkJCQkgICAgImF0IGFkZHIg PSAlcyBsZW4gPSAldS5cbiIsCi0JCQkJICAgIHBhZGRyZXNzIChnZGJhcmNo LCB0bXB1MzIpLAotCQkJCSAgICAoaW50KShuciAqIHRkZXAtPnNpemVfaW50 KSk7Ci0JICAgICAgcmV0dXJuIC0xOwotCSAgICB9Ci0JICBmb3IgKGkgPSAw OyBpIDwgbnI7IGkrKykKLQkgICAgewotCSAgICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKGlvY2JwW2ldLCB0ZGVwLT5zaXplX2lvY2IpKQot CQlyZXR1cm4gLTE7Ci0JICAgIH0KLQl9CisgICAgICByZWdjYWNoZV9yYXdf cmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsICZ0bXB1bG9u Z2VzdCk7CisgICAgICBpZiAodG1wdWxvbmdlc3QpCisgICAgICAgIHsKKyAg ICAgICAgICBVTE9OR0VTVCBuciwgaTsKKyAgICAgICAgICBnZGJfYnl0ZSAq aW9jYnA7CisKKyAgICAgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25l ZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsICZucik7CisgICAgICAgICAgaW9j YnAgPSBhbGxvY2EgKG5yICogdGRlcC0+c2l6ZV9wb2ludGVyKTsKKyAgICAg ICAgICBpZiAodGFyZ2V0X3JlYWRfbWVtb3J5ICgoQ09SRV9BRERSKXRtcHVs b25nZXN0LCBpb2NicCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBuciAqIHRkZXAtPnNpemVfcG9pbnRlcikpCisgICAgICAgICAgICB7 CisgICAgICAgICAgICAgIGlmIChyZWNvcmRfZGVidWcpCisgICAgICAgICAg ICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByb2Nlc3MgcmVjb3Jk OiBlcnJvciByZWFkaW5nIG1lbW9yeSAiCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiYXQgYWRkciA9IDB4JXMgbGVuID0gJXUuXG4i LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1VUUFVU X1JFRyAodG1wdWxvbmdlc3QsIHRkZXAtPmFyZzIpLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGludCkobnIgKiB0ZGVwLT5zaXpl X3BvaW50ZXIpKTsKKyAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAg ICAgICAgfQorICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBucjsgaSsrKQor ICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKWV4dHJhY3RfdW5zaWduZWRfaW50 ZWdlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGlvY2JwLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAt PnNpemVfcG9pbnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlX29yZGVyKSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRl cC0+c2l6ZV9pb2NiKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7Cisg ICAgICAgICAgICAgIGlvY2JwICs9IHRkZXAtPnNpemVfcG9pbnRlcjsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgYnJlYWs7CiAKICAgICAg IC8qIHN5c19pb19jYW5jZWwgKi8KICAgICBjYXNlIDI0OToKLSAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgKGdkYl9i eXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9pb19ldmVudCkpCi0JcmV0 dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJl Z2NhY2hlLCB0ZGVwLT5hcmczLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUil0bXB1bG9u Z2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRk ZXAtPnNpemVfaW9fZXZlbnQpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAg ICBicmVhazsKIAogICAgICAgLyogc3lzX2ZhZHZpc2U2NCAqLwpAQCAtMTgx MywyOCArMjE0NiwyOCBAQCByZWNvcmRfbGludXhfc3lzdGVtX2NhbGwgKGlu dCBudW0sIHN0cnVjCiAgICAgICAvKiBzeXNfZXhpdF9ncm91cCAqLwogICAg IGNhc2UgMjUyOgogICAgICAgewotCWludCBxOwotCXRhcmdldF90ZXJtaW5h bF9vdXJzICgpOwotCXEgPQotCSAgeXF1ZXJ5IChfKCJUaGUgbmV4dCBpbnN0 cnVjdGlvbiBpcyBzeXNjYWxsIGV4aXRfZ3JvdXAuICAiCi0JCSAgICAiSXQg d2lsbCBtYWtlIHRoZSBwcm9ncmFtIGV4aXQuICAiCi0JCSAgICAiRG8geW91 IHdhbnQgdG8gc3RvcCB0aGUgcHJvZ3JhbT8iKSk7Ci0JdGFyZ2V0X3Rlcm1p bmFsX2luZmVyaW9yICgpOwotCWlmIChxKQotCSAgcmV0dXJuIDE7CisgICAg ICAgIGludCBxOworICAgICAgICB0YXJnZXRfdGVybWluYWxfb3VycyAoKTsK KyAgICAgICAgcSA9CisgICAgICAgICAgeXF1ZXJ5IChfKCJUaGUgbmV4dCBp bnN0cnVjdGlvbiBpcyBzeXNjYWxsIGV4aXRfZ3JvdXAuICAiCisgICAgICAg ICAgICAgICAgICAgICJJdCB3aWxsIG1ha2UgdGhlIHByb2dyYW0gZXhpdC4g ICIKKyAgICAgICAgICAgICAgICAgICAgIkRvIHlvdSB3YW50IHRvIHN0b3Ag dGhlIHByb2dyYW0/IikpOworICAgICAgICB0YXJnZXRfdGVybWluYWxfaW5m ZXJpb3IgKCk7CisgICAgICAgIGlmIChxKQorICAgICAgICAgIHJldHVybiAx OwogICAgICAgfQogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19sb29r dXBfZGNvb2tpZSAqLwogICAgIGNhc2UgMjUzOgotICAgICAgcmVnY2FjaGVf cmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikg JiB0bXB1MzIpOwotICAgICAgaWYgKHRtcHUzMikKLQl7Ci0JICB1aW50MzJf dCBsZW47Ci0JICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAt PmFyZzMsIChnZGJfYnl0ZSAqKSAmIGxlbik7Ci0JICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIGxlbikpCi0JICAgIHJldHVybiAt MTsKLQl9CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVn Y2FjaGUsIHRkZXAtPmFyZzIsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAo dG1wdWxvbmdlc3QpCisgICAgICAgIHsKKyAgICAgICAgICBVTE9OR0VTVCBs ZW47CisgICAgICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJl Z2NhY2hlLCB0ZGVwLT5hcmczLCAmbGVuKTsKKyAgICAgICAgICBpZiAocmVj b3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKXRtcHVsb25nZXN0 LCAoaW50KWxlbikpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAg IH0KICAgICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfZXBvbGxfY3JlYXRl ICovCkBAIC0xODQ1LDE2ICsyMTc4LDE1IEBAIHJlY29yZF9saW51eF9zeXN0 ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKIAogICAgICAgLyogc3lzX2Vwb2xs X3dhaXQgKi8KICAgICBjYXNlIDI1NjoKLSAgICAgIHJlZ2NhY2hlX3Jhd19y ZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1w dTMyKTsKLSAgICAgIGlmICh0bXB1MzIpCi0JewotCSAgaW50MzJfdCBtYXhl dmVudHM7Ci0JICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAt PmFyZzMsCi0JCQkgICAgIChnZGJfYnl0ZSAqKSAmIG1heGV2ZW50cyk7Ci0J ICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtCi0JICAgICAgKHRtcHUz MiwgbWF4ZXZlbnRzICogdGRlcC0+c2l6ZV9lcG9sbF9ldmVudCkpCi0JICAg IHJldHVybiAtMTsKLQl9CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNp Z25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsICZ0bXB1bG9uZ2VzdCk7Cisg ICAgICBpZiAodG1wdWxvbmdlc3QpCisgICAgICAgIHsKKyAgICAgICAgICBV TE9OR0VTVCBtYXhldmVudHM7CisgICAgICAgICAgcmVnY2FjaGVfcmF3X3Jl YWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAmbWF4ZXZlbnRz KTsKKyAgICAgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgo Q09SRV9BRERSKXRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG1heGV2ZW50cyAqIHRkZXAtPnNpemVfZXBv bGxfZXZlbnQpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9 CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX3JlbWFwX2ZpbGVfcGFn ZXMgKi8KQEAgLTE4NjUsMjMgKzIxOTcsMjUgQEAgcmVjb3JkX2xpbnV4X3N5 c3RlbV9jYWxsIChpbnQgbnVtLCBzdHJ1YwogCiAgICAgICAvKiBzeXNfdGlt ZXJfY3JlYXRlICovCiAgICAgY2FzZSAyNTk6Ci0gICAgICByZWdjYWNoZV9y YXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsIChnZGJfYnl0ZSAqKSAm IHRtcHUzMik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVt ICh0bXB1MzIsIHRkZXAtPnNpemVfaW50KSkKLQlyZXR1cm4gLTE7CisgICAg ICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAt PmFyZzMsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKXRtcHVsb25nZXN0LCB0ZGVwLT5z aXplX2ludCkpCisgICAgICAgIHJldHVybiAtMTsKICAgICAgIGJyZWFrOwog CiAgICAgICAvKiBzeXNfdGltZXJfc2V0dGltZSAqLwogICAgIGNhc2UgMjYw OgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5h cmc0LCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX2l0aW1l cnNwZWMpKQotCXJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFk X3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnNCwgJnRtcHVsb25nZXN0 KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JF X0FERFIpdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0ZGVwLT5zaXplX2l0aW1lcnNwZWMpKQorICAgICAgICBy ZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX3RpbWVy X2dldHRpbWUgKi8KICAgICBjYXNlIDI2MToKLSAgICAgIHJlZ2NhY2hlX3Jh d19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYg dG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0g KHRtcHUzMiwgdGRlcC0+c2l6ZV9pdGltZXJzcGVjKSkKLQlyZXR1cm4gLTE7 CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUs IHRkZXAtPmFyZzIsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKXRtcHVsb25nZXN0LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6 ZV9pdGltZXJzcGVjKSkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgICAgYnJl YWs7CiAKICAgICAgIC8qIHN5c190aW1lcl9nZXRvdmVycnVuICovCkBAIC0x ODk0LDMyICsyMjI4LDM2IEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAo aW50IG51bSwgc3RydWMKIAogICAgICAgLyogc3lzX2Nsb2NrX2dldHRpbWUg Ki8KICAgICBjYXNlIDI2NToKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChy ZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsK LSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwg dGRlcC0+c2l6ZV90aW1lc3BlYykpCi0JcmV0dXJuIC0xOworICAgICAgcmVn Y2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcy LCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX21lbSAoKENPUkVfQUREUil0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfdGltZXNwZWMp KQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAogICAgICAg Lyogc3lzX2Nsb2NrX2dldHJlcyAqLwogICAgIGNhc2UgMjY2OgotICAgICAg cmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2Ri X2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xp c3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX3RpbWVzcGVjKSkKLQly ZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAo cmVnY2FjaGUsIHRkZXAtPmFyZzIsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKXRtcHVs b25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dGRlcC0+c2l6ZV90aW1lc3BlYykpCisgICAgICAgIHJldHVybiAtMTsKICAg ICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfY2xvY2tfbmFub3NsZWVwICov CiAgICAgY2FzZSAyNjc6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVn Y2FjaGUsIHRkZXAtPmFyZzQsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0g ICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRk ZXAtPnNpemVfdGltZXNwZWMpKQotCXJldHVybiAtMTsKKyAgICAgIHJlZ2Nh Y2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnNCwg JnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0gKChDT1JFX0FERFIpdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX3RpbWVzcGVjKSkK KyAgICAgICAgcmV0dXJuIC0xOwogICAgICAgYnJlYWs7CiAKICAgICAgIC8q IHN5c19zdGF0ZnM2NCAqLwogICAgIGNhc2UgMjY4OgogICAgICAgLyogc3lz X2ZzdGF0ZnM2NCAqLwogICAgIGNhc2UgMjY5OgotICAgICAgcmVnY2FjaGVf cmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAoZ2RiX2J5dGUgKikg JiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21l bSAodG1wdTMyLCB0ZGVwLT5zaXplX3N0YXRmczY0KSkKLQlyZXR1cm4gLTE7 CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUs IHRkZXAtPmFyZzMsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKXRtcHVsb25nZXN0LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6 ZV9zdGF0ZnM2NCkpCisgICAgICAgIHJldHVybiAtMTsKICAgICAgIGJyZWFr OwogCiAgICAgICAvKiBzeXNfdGdraWxsICovCkBAIC0xOTM2LDE4ICsyMjc0 LDE4IEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3Ry dWMKIAogICAgICAgLyogc3lzX2dldF9tZW1wb2xpY3kgKi8KICAgICBjYXNl IDI3NToKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRl cC0+YXJnMSwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9p bnQpKQotCXJldHVybiAtMTsKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChy ZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsK LSAgICAgIGlmICh0bXB1MzIpCi0JewotCSAgdWludDMyX3QgbWF4bm9kZTsK LQkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywK LQkJCSAgICAgKGdkYl9ieXRlICopICYgbWF4bm9kZSk7Ci0JICBpZiAocmVj b3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIG1heG5vZGUgKiB0ZGVw LT5zaXplX2xvbmcpKQotCSAgICByZXR1cm4gLTE7Ci0JfQorICAgICAgcmVn Y2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcx LCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX21lbSAoKENPUkVfQUREUil0bXB1bG9uZ2VzdCwgdGRlcC0+c2l6ZV9p bnQpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdf cmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsICZ0bXB1bG9u Z2VzdCk7CisgICAgICBpZiAodG1wdWxvbmdlc3QpCisgICAgICAgIHsKKyAg ICAgICAgICBVTE9OR0VTVCBtYXhub2RlOworICAgICAgICAgIHJlZ2NhY2hl X3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgJm1h eG5vZGUpOworICAgICAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9t ZW0gKChDT1JFX0FERFIpdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbWF4bm9kZSAqIHRkZXAtPnNpemVf bG9uZykpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KICAg ICAgIGJyZWFrOwogCiAgICAgICAvKiBzeXNfc2V0X21lbXBvbGljeSAqLwpA QCAtMTk2MiwxOCArMjMwMCwxNyBAQCByZWNvcmRfbGludXhfc3lzdGVtX2Nh bGwgKGludCBudW0sIHN0cnVjCiAKICAgICAgIC8qIHN5c19tcV90aW1lZHJl Y2VpdmUgKi8KICAgICBjYXNlIDI4MDoKLSAgICAgIHJlZ2NhY2hlX3Jhd19y ZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1w dTMyKTsKLSAgICAgIGlmICh0bXB1MzIpCi0JewotCSAgdWludDMyX3QgbXNn X2xlbjsKLQkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+ YXJnMywKLQkJCSAgICAgKGdkYl9ieXRlICopICYgbXNnX2xlbik7Ci0JICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIG1zZ19sZW4p KQotCSAgICByZXR1cm4gLTE7Ci0JfQotICAgICAgcmVnY2FjaGVfcmF3X3Jl YWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmc0LCAoZ2RiX2J5dGUgKikgJiB0bXB1 MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1w dTMyLCB0ZGVwLT5zaXplX2ludCkpCi0JcmV0dXJuIC0xOworICAgICAgcmVn Y2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcy LCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHRtcHVsb25nZXN0KQorICAg ICAgICB7CisgICAgICAgICAgVUxPTkdFU1QgbXNnX2xlbjsKKyAgICAgICAg ICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAt PmFyZzMsICZtc2dfbGVuKTsKKyAgICAgICAgICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKXRtcHVsb25nZXN0LCAoaW50KW1z Z19sZW4pKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9Cisg ICAgICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRk ZXAtPmFyZzQsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtICgoQ09SRV9BRERSKXRtcHVsb25nZXN0LCB0ZGVw LT5zaXplX2ludCkpCisgICAgICAgIHJldHVybiAtMTsKICAgICAgIGJyZWFr OwogCiAgICAgICAvKiBzeXNfbXFfbm90aWZ5ICovCkBAIC0xOTgyLDkgKzIz MTksMTAgQEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChpbnQgbnVtLCBz dHJ1YwogCiAgICAgICAvKiBzeXNfbXFfZ2V0c2V0YXR0ciAqLwogICAgIGNh c2UgMjgyOgotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0 ZGVwLT5hcmczLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXpl X21xX2F0dHIpKQotCXJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19y ZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgJnRtcHVsb25n ZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChD T1JFX0FERFIpdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0ZGVwLT5zaXplX21xX2F0dHIpKQorICAgICAgICBy ZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX2tleGVj X2xvYWQgKi8KQEAgLTE5OTMsMTIgKzIzMzEsMTQgQEAgcmVjb3JkX2xpbnV4 X3N5c3RlbV9jYWxsIChpbnQgbnVtLCBzdHJ1YwogCiAgICAgICAvKiBzeXNf d2FpdGlkICovCiAgICAgY2FzZSAyODQ6Ci0gICAgICByZWdjYWNoZV9yYXdf cmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsIChnZGJfYnl0ZSAqKSAmIHRt cHUzMik7Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0 bXB1MzIsIHRkZXAtPnNpemVfc2lnaW5mbykpCi0JcmV0dXJuIC0xOwotICAg ICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmc1LCAo Z2RiX2J5dGUgKikgJiB0bXB1MzIpOwotICAgICAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX3J1c2FnZSkpCi0J cmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQg KHJlZ2NhY2hlLCB0ZGVwLT5hcmczLCAmdG1wdWxvbmdlc3QpOworICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUil0bXB1 bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRkZXAtPnNpemVfc2lnaW5mbykpCisgICAgICAgIHJldHVybiAtMTsKKyAg ICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRl cC0+YXJnNSwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpdG1wdWxvbmdlc3QsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX3J1 c2FnZSkpCisgICAgICAgIHJldHVybiAtMTsKICAgICAgIGJyZWFrOwogCiAg ICAgICAvKiBzeXNfbmlfc3lzY2FsbCAqLwpAQCAtMjAxMSwyMCArMjM1MSwy MCBAQCByZWNvcmRfbGludXhfc3lzdGVtX2NhbGwgKGludCBudW0sIHN0cnVj CiAKICAgICAgIC8qIHN5c19rZXljdGwgKi8KICAgICBjYXNlIDI4ODoKLSAg ICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMSwg KGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmICh0bXB1MzIgPT0g NiB8fCB0bXB1MzIgPT0gMTEpCi0JewotCSAgcmVnY2FjaGVfcmF3X3JlYWQg KHJlZ2NhY2hlLCB0ZGVwLT5hcmczLAotCQkJICAgICAoZ2RiX2J5dGUgKikg JiB0bXB1MzIpOwotCSAgaWYgKHRtcHUzMikKLQkgICAgewotCSAgICAgIHVp bnQzMl90IGJ1ZmxlbjsKLQkgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVn Y2FjaGUsIHRkZXAtPmFyZzQsCi0JCQkJIChnZGJfYnl0ZSAqKSAmIGJ1Zmxl bik7Ci0JICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1w dTMyLCBidWZsZW4pKQotCQlyZXR1cm4gLTE7Ci0JICAgIH0KLQl9CisgICAg ICByZWdjYWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAt PmFyZzEsICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAodG1wdWxvbmdlc3Qg PT0gNiB8fCB0bXB1bG9uZ2VzdCA9PSAxMSkKKyAgICAgICAgeworICAgICAg ICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRl cC0+YXJnMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJnRtcHVsb25nZXN0KTsKKyAgICAgICAgICBpZiAodG1wdWxvbmdlc3Qp CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIFVMT05HRVNUIGJ1Zmxl bjsKKyAgICAgICAgICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQg KHJlZ2NhY2hlLCB0ZGVwLT5hcmc0LCAmYnVmbGVuKTsKKyAgICAgICAgICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUil0 bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGludClidWZsZW4pKQorICAgICAgICAgICAgICAgIHJl dHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgYnJl YWs7CiAKICAgICAgIC8qIHN5c19pb3ByaW9fc2V0ICovCkBAIC0yMDUzLDkg KzIzOTMsMTAgQEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChpbnQgbnVt LCBzdHJ1YwogCiAgICAgICAvKiBzeXNfZnN0YXRhdDY0ICovCiAgICAgY2Fz ZSAzMDA6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRk ZXAtPmFyZzMsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVf c3RhdDY0KSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdfcmVh ZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsICZ0bXB1bG9uZ2Vz dCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09S RV9BRERSKXRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdGRlcC0+c2l6ZV9zdGF0NjQpKQorICAgICAgICByZXR1 cm4gLTE7CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX3VubGlua2F0 ICovCkBAIC0yMDcwLDE1ICsyNDExLDE0IEBAIHJlY29yZF9saW51eF9zeXN0 ZW1fY2FsbCAoaW50IG51bSwgc3RydWMKIAogICAgICAgLyogc3lzX3JlYWRs aW5rYXQgKi8KICAgICBjYXNlIDMwNToKLSAgICAgIHJlZ2NhY2hlX3Jhd19y ZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgKGdkYl9ieXRlICopICYgdG1w dTMyKTsKLSAgICAgIGlmICh0bXB1MzIpCi0JewotCSAgaW50MzJfdCBidWZz aXo7Ci0JICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFy ZzQsCi0JCQkgICAgIChnZGJfYnl0ZSAqKSAmIGJ1ZnNpeik7Ci0JICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIGJ1ZnNpeikpCi0J ICAgIHJldHVybiAtMTsKLQl9CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91 bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsICZ0bXB1bG9uZ2VzdCk7 CisgICAgICBpZiAodG1wdWxvbmdlc3QpCisgICAgICAgIHsKKyAgICAgICAg ICBVTE9OR0VTVCBidWZzaXo7CisgICAgICAgICAgcmVnY2FjaGVfcmF3X3Jl YWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmc0LCAmYnVmc2l6KTsK KyAgICAgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgoQ09S RV9BRERSKXRtcHVsb25nZXN0LCAoaW50KWJ1ZnNpeikpCisgICAgICAgICAg ICByZXR1cm4gLTE7CisgICAgICAgIH0KICAgICAgIGJyZWFrOwogCiAgICAg ICAvKiBzeXNfZmNobW9kYXQgKi8KQEAgLTIwODksMzQgKzI0MjksMzkgQEAg cmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChpbnQgbnVtLCBzdHJ1YwogCiAg ICAgICAvKiBzeXNfcHNlbGVjdDYgKi8KICAgICBjYXNlIDMwODoKLSAgICAg IHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdk Yl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9mZF9zZXQpKQotCXJl dHVybiAtMTsKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwg dGRlcC0+YXJnMywgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6 ZV9mZF9zZXQpKQotCXJldHVybiAtMTsKLSAgICAgIHJlZ2NhY2hlX3Jhd19y ZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnNCwgKGdkYl9ieXRlICopICYgdG1w dTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRt cHUzMiwgdGRlcC0+c2l6ZV9mZF9zZXQpKQotCXJldHVybiAtMTsKLSAgICAg IHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnNSwgKGdk Yl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV90aW1lc3BlYykpCi0J cmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQg KHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAmdG1wdWxvbmdlc3QpOworICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUil0bXB1 bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRkZXAtPnNpemVfZmRfc2V0KSkKKyAgICAgICAgcmV0dXJuIC0xOworICAg ICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVw LT5hcmczLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX21lbSAoKENPUkVfQUREUil0bXB1bG9uZ2VzdCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfZmRf c2V0KSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3 X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmc0LCAmdG1wdWxv bmdlc3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo KENPUkVfQUREUil0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRkZXAtPnNpemVfZmRfc2V0KSkKKyAgICAgICAg cmV0dXJuIC0xOworICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQg KHJlZ2NhY2hlLCB0ZGVwLT5hcmc1LCAmdG1wdWxvbmdlc3QpOworICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUil0bXB1 bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRkZXAtPnNpemVfdGltZXNwZWMpKQorICAgICAgICByZXR1cm4gLTE7CiAg ICAgICBicmVhazsKIAogICAgICAgLyogc3lzX3Bwb2xsICovCiAgICAgY2Fz ZSAzMDk6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRk ZXAtPmFyZzEsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAo dG1wdTMyKQotCXsKLQkgIHVpbnQzMl90IG5mZHM7Ci0JICByZWdjYWNoZV9y YXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsCi0JCQkgICAgIChnZGJf Ynl0ZSAqKSAmIG5mZHMpOwotCSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRk X21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX3BvbGxmZCAqIG5mZHMpKQotCSAg ICByZXR1cm4gLTE7Ci0JfQotICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJl Z2NhY2hlLCB0ZGVwLT5hcmczLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwot ICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0 ZGVwLT5zaXplX3RpbWVzcGVjKSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdj YWNoZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzEs ICZ0bXB1bG9uZ2VzdCk7CisgICAgICBpZiAodG1wdWxvbmdlc3QpCisgICAg ICAgIHsKKyAgICAgICAgICBVTE9OR0VTVCBuZmRzOworICAgICAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJn MiwgJm5mZHMpOworICAgICAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0gKChDT1JFX0FERFIpdG1wdWxvbmdlc3QsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV9wb2xsZmQg KiBuZmRzKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQor ICAgICAgcmVnY2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0 ZGVwLT5hcmczLCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX21lbSAoKENPUkVfQUREUil0bXB1bG9uZ2VzdCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXAtPnNpemVf dGltZXNwZWMpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgICBicmVhazsK IAogICAgICAgLyogc3lzX3Vuc2hhcmUgKi8KQEAgLTIxMjcsMjIgKzI0NzIs MjQgQEAgcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChpbnQgbnVtLCBzdHJ1 YwogCiAgICAgICAvKiBzeXNfZ2V0X3JvYnVzdF9saXN0ICovCiAgICAgY2Fz ZSAzMTI6Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVnY2FjaGUsIHRk ZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Ci0gICAgICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVf aW50KSkKLQlyZXR1cm4gLTE7Ci0gICAgICByZWdjYWNoZV9yYXdfcmVhZCAo cmVnY2FjaGUsIHRkZXAtPmFyZzMsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7 Ci0gICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIs IHRkZXAtPnNpemVfaW50KSkKLQlyZXR1cm4gLTE7CisgICAgICByZWdjYWNo ZV9yYXdfcmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsICZ0 bXB1bG9uZ2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf bWVtICgoQ09SRV9BRERSKXRtcHVsb25nZXN0LCB0ZGVwLT5zaXplX2ludCkp CisgICAgICAgIHJldHVybiAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFk X3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgJnRtcHVsb25nZXN0 KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JF X0FERFIpdG1wdWxvbmdlc3QsIHRkZXAtPnNpemVfaW50KSkKKyAgICAgICAg cmV0dXJuIC0xOwogICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHN5c19zcGxp Y2UgKi8KICAgICBjYXNlIDMxMzoKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFk IChyZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1wdTMy KTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUz MiwgdGRlcC0+c2l6ZV9sb2ZmX3QpKQotCXJldHVybiAtMTsKLSAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnNCwgKGdkYl9i eXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9sb2ZmX3QpKQotCXJldHVy biAtMTsKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdj YWNoZSwgdGRlcC0+YXJnMiwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpdG1wdWxvbmdl c3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVw LT5zaXplX2xvZmZfdCkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJn NCwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9tZW0gKChDT1JFX0FERFIpdG1wdWxvbmdlc3QsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwLT5zaXplX2xvZmZfdCkp CisgICAgICAgIHJldHVybiAtMTsKICAgICAgIGJyZWFrOwogCiAgICAgICAv KiBzeXNfc3luY19maWxlX3JhbmdlICovCkBAIC0yMTU1LDQ4ICsyNTAyLDQ3 IEBAIHJlY29yZF9saW51eF9zeXN0ZW1fY2FsbCAoaW50IG51bSwgc3RydWMK IAogICAgICAgLyogc3lzX21vdmVfcGFnZXMgKi8KICAgICBjYXNlIDMxNzoK LSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJn NSwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmICh0bXB1MzIp Ci0JewotCSAgdWludDMyX3QgbnJfcGFnZXM7Ci0JICByZWdjYWNoZV9yYXdf cmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsCi0JCQkgICAgIChnZGJfYnl0 ZSAqKSAmIG5yX3BhZ2VzKTsKLQkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0gKHRtcHUzMiwgbnJfcGFnZXMgKiB0ZGVwLT5zaXplX2ludCkpCi0J ICAgIHJldHVybiAtMTsKLQl9CisgICAgICByZWdjYWNoZV9yYXdfcmVhZF91 bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzUsICZ0bXB1bG9uZ2VzdCk7 CisgICAgICBpZiAodG1wdWxvbmdlc3QpCisgICAgICAgIHsKKyAgICAgICAg ICBVTE9OR0VTVCBucl9wYWdlczsKKyAgICAgICAgICByZWdjYWNoZV9yYXdf cmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsICZucl9wYWdl cyk7CisgICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo KENPUkVfQUREUil0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBucl9wYWdlcyAqIHRkZXAtPnNpemVfaW50 KSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogICAgICAg YnJlYWs7CiAKICAgICAgIC8qIHN5c19nZXRjcHUgKi8KICAgICBjYXNlIDMx ODoKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdjYWNoZSwgdGRlcC0+ YXJnMSwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAgICAgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9pbnQp KQotCXJldHVybiAtMTsKLSAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWdj YWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKLSAg ICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRl cC0+c2l6ZV9pbnQpKQotCXJldHVybiAtMTsKLSAgICAgIHJlZ2NhY2hlX3Jh d19yZWFkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgKGdkYl9ieXRlICopICYg dG1wdTMyKTsKLSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0g KHRtcHUzMiwgdGRlcC0+c2l6ZV91bG9uZyAqIDIpKQotCXJldHVybiAtMTsK KyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwg dGRlcC0+YXJnMSwgJnRtcHVsb25nZXN0KTsKKyAgICAgIGlmIChyZWNvcmRf YXJjaF9saXN0X2FkZF9tZW0gKChDT1JFX0FERFIpdG1wdWxvbmdlc3QsIHRk ZXAtPnNpemVfaW50KSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgICAgcmVn Y2FjaGVfcmF3X3JlYWRfdW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcy LCAmdG1wdWxvbmdlc3QpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX21lbSAoKENPUkVfQUREUil0bXB1bG9uZ2VzdCwgdGRlcC0+c2l6ZV9p bnQpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgICByZWdjYWNoZV9yYXdf cmVhZF91bnNpZ25lZCAocmVnY2FjaGUsIHRkZXAtPmFyZzMsICZ0bXB1bG9u Z2VzdCk7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICgo Q09SRV9BRERSKXRtcHVsb25nZXN0LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGRlcC0+c2l6ZV91bG9uZyAqIDIpKQorICAgICAg ICByZXR1cm4gLTE7CiAgICAgICBicmVhazsKIAogICAgICAgLyogc3lzX2Vw b2xsX3B3YWl0ICovCiAgICAgY2FzZSAzMTk6Ci0gICAgICByZWdjYWNoZV9y YXdfcmVhZCAocmVnY2FjaGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAm IHRtcHUzMik7Ci0gICAgICBpZiAodG1wdTMyKQotCXsKLQkgIGludDMyX3Qg bWF4ZXZlbnRzOwotCSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlZ2NhY2hlLCB0 ZGVwLT5hcmczLAotCQkJICAgICAoZ2RiX2J5dGUgKikgJiBtYXhldmVudHMp OwotCSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbQotCSAgICAgICh0 bXB1MzIsIG1heGV2ZW50cyAqIHRkZXAtPnNpemVfZXBvbGxfZXZlbnQpKQot CSAgICByZXR1cm4gLTE7Ci0JfQorICAgICAgcmVnY2FjaGVfcmF3X3JlYWRf dW5zaWduZWQgKHJlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAmdG1wdWxvbmdlc3Qp OworICAgICAgaWYgKHRtcHVsb25nZXN0KQorICAgICAgICB7CisgICAgICAg ICAgVUxPTkdFU1QgbWF4ZXZlbnRzOworICAgICAgICAgIHJlZ2NhY2hlX3Jh d19yZWFkX3Vuc2lnbmVkIChyZWdjYWNoZSwgdGRlcC0+YXJnMywgJm1heGV2 ZW50cyk7CisgICAgICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21l bSAoKENPUkVfQUREUil0bXB1bG9uZ2VzdCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoaW50KW1heGV2ZW50cyAqIHRkZXAt PnNpemVfZXBvbGxfZXZlbnQpKQorICAgICAgICAgICAgcmV0dXJuIC0xOwor ICAgICAgICB9CiAgICAgICBicmVhazsKIAogICAgIGRlZmF1bHQ6CiAgICAg ICBwcmludGZfdW5maWx0ZXJlZCAoXygiUHJvY2VzcyByZWNvcmQgYW5kIHJl cGxheSB0YXJnZXQgZG9lc24ndCAiCi0JCQkgICAic3VwcG9ydCBzeXNjYWxs IG51bWJlciAldVxuIiksCi0JCQkgKGludCl0bXB1MzIpOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgInN1cHBvcnQgc3lzY2FsbCBudW1iZXIgJXVc biIpLCBudW0pOwogICAgICAgcmV0dXJuIC0xOwogICAgICAgYnJlYWs7CiAg ICAgfQotLS0gYS9saW51eC1yZWNvcmQuaAorKysgYi9saW51eC1yZWNvcmQu aApAQCAtMjMsNiArMjMsNyBAQAogc3RydWN0IGxpbnV4X3JlY29yZF90ZGVw CiB7CiAgIC8qIFRoZSBzaXplIG9mIHRoZSB0eXBlIHRoYXQgd2lsbCBiZSB1 c2VkIGluIGEgc3lzdGVtIGNhbGwuICAqLworICBpbnQgc2l6ZV9wb2ludGVy OwogICBpbnQgc2l6ZV9fb2xkX2tlcm5lbF9zdGF0OwogICBpbnQgc2l6ZV90 bXM7CiAgIGludCBzaXplX2xvZmZfdDsKQEAgLTgxLDcgKzgyLDYgQEAgc3Ry dWN0IGxpbnV4X3JlY29yZF90ZGVwCiAgIGludCBzaXplX2l0aW1lcnNwZWM7 CiAgIGludCBzaXplX21xX2F0dHI7CiAgIGludCBzaXplX3NpZ2luZm87Ci0K ICAgaW50IHNpemVfdGVybWlvczsKICAgaW50IHNpemVfdGVybWlvczI7CiAg IGludCBzaXplX3BpZF90OwpAQCAtODksNiArODksOCBAQCBzdHJ1Y3QgbGlu dXhfcmVjb3JkX3RkZXAKICAgaW50IHNpemVfc2VyaWFsX3N0cnVjdDsKICAg aW50IHNpemVfc2VyaWFsX2ljb3VudGVyX3N0cnVjdDsKICAgaW50IHNpemVf aGF5ZXNfZXNwX2NvbmZpZzsKKyAgaW50IHNpemVfc2l6ZV90OworICBpbnQg c2l6ZV9pb3ZlYzsKIAogICAvKiBUaGUgdmFsdWVzIG9mIHRoZSBzZWNvbmQg YXJndW1lbnQgb2Ygc3lzdGVtIGNhbGwgInN5c19pb2N0bCIuICAqLwogICBp bnQgaW9jdGxfVENHRVRTOwpAQCAtMTcxLDYgKzE3Myw3IEBAIHN0cnVjdCBs aW51eF9yZWNvcmRfdGRlcAogICBpbnQgYXJnMzsKICAgaW50IGFyZzQ7CiAg IGludCBhcmc1OworICBpbnQgYXJnNjsKIH07CiAKIGV4dGVybiBpbnQgcmVj b3JkX2xpbnV4X3N5c3RlbV9jYWxsIChpbnQgbnVtLCBzdHJ1Y3QgcmVnY2Fj aGUgKnJlZ2NhY2hlLAo= --000e0cd32c8c8c93b5046e1486c9--