From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5956 invoked by alias); 16 Nov 2008 08:22:41 -0000 Received: (qmail 4841 invoked by uid 22791); 16 Nov 2008 08:22:33 -0000 X-Spam-Check-By: sourceware.org Received: from ti-out-0910.google.com (HELO ti-out-0910.google.com) (209.85.142.190) by sourceware.org (qpsmtpd/0.31) with ESMTP; Sun, 16 Nov 2008 08:21:36 +0000 Received: by ti-out-0910.google.com with SMTP id d10so1448108tib.12 for ; Sun, 16 Nov 2008 00:21:31 -0800 (PST) Received: by 10.110.105.10 with SMTP id d10mr3500952tic.2.1226823690989; Sun, 16 Nov 2008 00:21:30 -0800 (PST) Received: by 10.110.103.3 with HTTP; Sun, 16 Nov 2008 00:21:30 -0800 (PST) Message-ID: Date: Mon, 17 Nov 2008 02:18:00 -0000 From: teawater To: "gdb-patches@sourceware.org" Subject: [RFA] Resubmit process record and replay, 5/10 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_40491_7538264.1226823690953" 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: 2008-11/txt/msg00413.txt.bz2 ------=_Part_40491_7538264.1226823690953 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Content-length: 15209 This patch add process record and replay for Linux support file. The main function is "record_linux_system_call" will be called by architecture record function. It is used to record the system call execute log. 2008-11-16 Hui Zhu Process record and replay target. * Makefile.in (linux-record.c): New file. * configure.tgt (linux-record.c): New file. * linux-record.c, linux-record.h: New file. Makefile.in | 4 b/linux-record.c | 2501 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ b/linux-record.h | 171 +++ configure.tgt | 6 4 files changed, 2678 insertions(+), 4 deletions(-) Following is the diff with the previous patch: @@ -1,6 +1,6 @@ --- a/configure.tgt +++ b/configure.tgt -@@ -185,7 +185,8 @@ i[34567]86-*-solaris*) +@@ -185,7 +185,8 @@ i[34567]86-*-linux*) # Target: Intel 386 running GNU/Linux gdb_target_obs="i386-tdep.o i386-linux-tdep.o glibc-tdep.o i387-tdep.o \ @@ -10,7 +10,7 @@ build_gdbserver=yes ;; i[34567]86-*-gnu*) -@@ -507,7 +508,8 @@ x86_64-*-linux*) +@@ -508,7 +509,8 @@ # Target: GNU/Linux x86-64 gdb_target_obs="amd64-tdep.o amd64-linux-tdep.o i386-tdep.o \ i387-tdep.o i386-linux-tdep.o glibc-tdep.o \ @@ -20,29 +20,9 @@ build_gdbserver=yes ;; x86_64-*-freebsd* | x86_64-*-kfreebsd*-gnu) ---- a/Makefile.in -+++ b/Makefile.in -@@ -515,7 +515,7 @@ ALL_TARGET_OBS = \ - xcoffread.o \ - prologue-value.o \ - symfile-mem.o \ -- corelow.o -+ corelow.o linux-record.o - - # Host-dependent makefile fragment comes in here. - @host_makefile_frag@ -@@ -1297,7 +1297,7 @@ ALLDEPFILES = \ - inf-ptrace.c inf-ttrace.c \ - irix5-nat.c \ - libunwind-frame.c \ -- linux-fork.c \ -+ linux-fork.c linux-record.c \ - m68hc11-tdep.c \ - m32r-tdep.c \ - m32r-linux-nat.c m32r-linux-tdep.c \ ---- a/linux-record.c +--- a//dev/null +++ b/linux-record.c -@@ -0,0 +1,2465 @@ +@@ -0,0 +1,2501 @@ +/* Process record and replay target code for GNU/Linux. + + Copyright (C) 2008 Free Software Foundation, Inc. @@ -51,7 +31,7 @@ + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 2 of the License, or ++ the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, @@ -148,7 +128,7 @@ + target_terminal_ours (); + q = + yquery (_ -+ ("The next instruction is syscall exit. It will make the program exit. Do you want to stop the program.")); ++ ("The next instruction is syscall exit. It will make the program exit. Do you want to stop the program?")); + target_terminal_inferior (); + if (q) + { @@ -453,13 +433,13 @@ + else if (tmpu32 == tdep->ioctl_TIOCSERGSTRUCT) + { + printf_unfiltered (_ -+ ("Record: record and reverse target doesn't support ioctl request TIOCSERGSTRUCT\n")); ++ ("Process record and replay target doesn't support ioctl request TIOCSERGSTRUCT\n")); + return (1); + } + else + { + printf_unfiltered (_ -+ ("Record: record and reverse target doesn't support ioctl request 0x%08x.\n"), ++ ("Process record and replay target doesn't support ioctl request 0x%08x.\n"), + tmpu32); + return (1); + } @@ -616,22 +596,13 @@ + /* old_select */ + case 82: + { -+ /* -+ struct sel_arg_struct { -+ unsigned long n; -+ fd_set *inp; -+ fd_set *outp; -+ fd_set *exp; -+ struct timeval *tvp; -+ }; -+ */ + struct sel_arg_struct + { -+ uint32_t n; -+ uint32_t inp; -+ uint32_t outp; -+ uint32_t exp; -+ uint32_t tvp; ++ CORE_ADDR n; ++ CORE_ADDR inp; ++ CORE_ADDR outp; ++ CORE_ADDR exp; ++ CORE_ADDR tvp; + } sel; + + regcache_raw_read (record_regcache, tdep->arg1, @@ -640,9 +611,12 @@ + { + if (target_read_memory (tmpu32, (gdb_byte *) & sel, sizeof (sel))) + { -+ fprintf_unfiltered (gdb_stdlog, -+ "Record: read memory addr = 0x%s len = %d error.\n", -+ paddr_nz (tmpu32), sizeof (sel)); ++ if (record_debug) ++ { ++ fprintf_unfiltered (gdb_stdlog, ++ "Process record: error reading memory at addr = 0x%s len = %d.\n", ++ paddr_nz (tmpu32), sizeof (sel)); ++ } + return (-1); + } + if (record_arch_list_add_mem (sel.inp, tdep->size_fd_set)) @@ -696,7 +670,7 @@ + target_terminal_ours (); + q = + yquery (_ -+ ("The next instruction is syscall reboot. It will restart the computer. Do you want to stop the program.")); ++ ("The next instruction is syscall reboot. It will restart the computer. Do you want to stop the program?")); + target_terminal_inferior (); + if (q) + { @@ -730,7 +704,7 @@ + target_terminal_ours (); + q = + yquery (_ -+ ("The next instruction is syscall munmap. It will free the memory addr = 0x%s len = %d. It will make record target get error. Do you want to stop the program."), ++ ("The next instruction is syscall munmap. It will free the memory addr = 0x%s len = %d. It will make record target get error. Do you want to stop the program?"), + paddr_nz (tmpu32), len); + target_terminal_inferior (); + if (q) @@ -792,9 +766,12 @@ + { + if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) + { -+ fprintf_unfiltered (gdb_stdlog, -+ "Record: read memory addr = 0x%s len = %d error.\n", -+ paddr_nz (tmpu32), sizeof (a)); ++ if (record_debug) ++ { ++ fprintf_unfiltered (gdb_stdlog, ++ "Process record: error reading memory at addr = 0x%s len = %d.\n", ++ paddr_nz (tmpu32), sizeof (a)); ++ } + return (-1); + } + if (record_arch_list_add_mem (a[1], tdep->size_sockaddr)) @@ -818,9 +795,12 @@ + { + if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) + { -+ fprintf_unfiltered (gdb_stdlog, -+ "Record: read memory addr = 0x%s len = %d error.\n", -+ paddr_nz (tmpu32), sizeof (a)); ++ if (record_debug) ++ { ++ fprintf_unfiltered (gdb_stdlog, ++ "Process record: error reading memory at addr = 0x%s len = %d.\n", ++ paddr_nz (tmpu32), sizeof (a)); ++ } + return (-1); + } + if (record_arch_list_add_mem (a[3], tdep->size_int)) @@ -842,9 +822,12 @@ + { + if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) + { -+ fprintf_unfiltered (gdb_stdlog, -+ "Record: read memory addr = 0x%s len = %d error.\n", -+ paddr_nz (tmpu32), sizeof (a)); ++ if (record_debug) ++ { ++ fprintf_unfiltered (gdb_stdlog, ++ "Process record: error reading memory at addr = 0x%s len = %d.\n", ++ paddr_nz (tmpu32), sizeof (a)); ++ } + return (-1); + } + if (a[2]) @@ -852,9 +835,12 @@ + if (target_read_memory + (a[2], (gdb_byte *) & (a[2]), sizeof (a[2]))) + { -+ fprintf_unfiltered (gdb_stdlog, -+ "Record: read memory addr = 0x%s len = %d error.\n", -+ paddr_nz (a[2]), sizeof (a[2])); ++ if (record_debug) ++ { ++ fprintf_unfiltered (gdb_stdlog, ++ "Process record: error reading memory at addr = 0x%s len = %d.\n", ++ paddr_nz (a[2]), sizeof (a[2])); ++ } + return (-1); + } + if (record_arch_list_add_mem (a[1], a[2])) @@ -874,9 +860,12 @@ + { + if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) + { -+ fprintf_unfiltered (gdb_stdlog, -+ "Record: read memory addr = 0x%s len = %d error.\n", -+ paddr_nz (tmpu32), sizeof (a)); ++ if (record_debug) ++ { ++ fprintf_unfiltered (gdb_stdlog, ++ "Process record: error reading memory at addr = 0x%s len = %d.\n", ++ paddr_nz (tmpu32), sizeof (a)); ++ } + return (-1); + } + if (a[2]) @@ -884,9 +873,13 @@ + if (target_read_memory + (a[2], (gdb_byte *) & (a[2]), sizeof (a[2]))) + { -+ fprintf_unfiltered (gdb_stdlog, -+ "Record: read memory addr = 0x%s len = %d error.\n", -+ paddr_nz (a[2]), sizeof (a[2])); ++ if (record_debug) ++ { ++ fprintf_unfiltered (gdb_stdlog, ++ "Process record: error reading memory at addr = 0x%s len = %d.\n", ++ paddr_nz (a[2]), ++ sizeof (a[2])); ++ } + return (-1); + } + if (record_arch_list_add_mem (a[1], a[2])) @@ -919,9 +912,12 @@ + { + if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) + { -+ fprintf_unfiltered (gdb_stdlog, -+ "Record: read memory addr = 0x%s len = %d error.\n", -+ paddr_nz (tmpu32), sizeof (a)); ++ if (record_debug) ++ { ++ fprintf_unfiltered (gdb_stdlog, ++ "Process record: error reading memory at addr = 0x%s len = %d.\n", ++ paddr_nz (tmpu32), sizeof (a)); ++ } + return (-1); + } + if (a[4]) @@ -929,9 +925,12 @@ + if (target_read_memory + (a[4], (gdb_byte *) & av, sizeof (av))) + { -+ fprintf_unfiltered (gdb_stdlog, -+ "Record: read memory addr = 0x%s len = %d error.\n", -+ paddr_nz (a[4]), sizeof (av)); ++ if (record_debug) ++ { ++ fprintf_unfiltered (gdb_stdlog, ++ "Process record: error reading memory at addr = 0x%s len = %d.\n", ++ paddr_nz (a[4]), sizeof (av)); ++ } + return (-1); + } + if (record_arch_list_add_mem (a[3], av)) @@ -973,9 +972,12 @@ + { + if (target_read_memory (tmpu32, (gdb_byte *) a, sizeof (a))) + { -+ fprintf_unfiltered (gdb_stdlog, -+ "Record: read memory addr = 0x%s len = %d error.\n", -+ paddr_nz (tmpu32), sizeof (a)); ++ if (record_debug) ++ { ++ fprintf_unfiltered (gdb_stdlog, ++ "Process record: error reading memory at addr = 0x%s len = %d.\n", ++ paddr_nz (tmpu32), sizeof (a)); ++ } + return (-1); + } + if (record_arch_list_add_mem (a[1], tdep->size_msghdr)) @@ -987,9 +989,13 @@ + if (target_read_memory + (a[1], (gdb_byte *) & rec, sizeof (rec))) + { -+ fprintf_unfiltered (gdb_stdlog, -+ "Record: read memory addr = 0x%s len = %d error.\n", -+ paddr_nz (a[1]), sizeof (rec)); ++ if (record_debug) ++ { ++ fprintf_unfiltered (gdb_stdlog, ++ "Process record: error reading memory at addr = 0x%s len = %d.\n", ++ paddr_nz (a[1]), ++ sizeof (rec)); ++ } + return (-1); + } + if (record_arch_list_add_mem @@ -1010,10 +1016,14 @@ + (rec.msg_iov, (gdb_byte *) & iov, + sizeof (iov))) + { -+ fprintf_unfiltered (gdb_stdlog, -+ "Record: read memory addr = 0x%s len = %d error.\n", -+ paddr_nz (rec.msg_iov), -+ sizeof (iov)); ++ if (record_debug) ++ { ++ fprintf_unfiltered (gdb_stdlog, ++ "Process record: error reading memory at addr = 0x%s len = %d.\n", ++ paddr_nz (rec. ++ msg_iov), ++ sizeof (iov)); ++ } + return (-1); + } + if (record_arch_list_add_mem @@ -1030,7 +1040,7 @@ + break; + default: + printf_unfiltered (_ -+ ("Record: record and reverse function doesn't support socketcall call 0x%08x\n"), ++ ("Process record and replay target doesn't support socketcall call 0x%08x\n"), + tmpu32); + return (-1); + break; @@ -1378,10 +1388,13 @@ + if (target_read_memory + (vec, (gdb_byte *) & iov, sizeof (struct record_iovec))) + { -+ fprintf_unfiltered (gdb_stdlog, -+ "Record: read memory addr = 0x%s len = %d error.\n", -+ paddr_nz (vec), -+ sizeof (struct record_iovec)); ++ if (record_debug) ++ { ++ fprintf_unfiltered (gdb_stdlog, ++ "Process record: error reading memory at addr = 0x%s len = %d.\n", ++ paddr_nz (vec), ++ sizeof (struct record_iovec)); ++ } + return (-1); + } + if (record_arch_list_add_mem (iov.iov_base, iov.iov_len)) @@ -2016,9 +2029,12 @@ + if (target_read_memory + (tmpu32, (gdb_byte *) iocbp, nr * tdep->size_int)) + { -+ fprintf_unfiltered (gdb_stdlog, -+ "Record: read memory addr = 0x%s len = %d error.\n", -+ paddr_nz (tmpu32), nr * tdep->size_int); ++ if (record_debug) ++ { ++ fprintf_unfiltered (gdb_stdlog, ++ "Process record: error reading memory at addr = 0x%s len = %d.\n", ++ paddr_nz (tmpu32), nr * tdep->size_int); ++ } + return (-1); + } + for (i = 0; i < nr; i++) @@ -2053,7 +2069,7 @@ + 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.")); ++ ("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) + { @@ -2500,7 +2516,7 @@ + + default: + printf_unfiltered (_ -+ ("Record: record and reverse function doesn't support syscall number 0x%08x\n"), ++ ("Process record and replay target doesn't support syscall number 0x%08x\n"), + tmpu32); + return (-1); + break; @@ -2508,7 +2524,7 @@ + + return (0); +} ---- a/linux-record.h +--- a//dev/null +++ b/linux-record.h @@ -0,0 +1,171 @@ +/* Process record and replay target code for GNU/Linux. @@ -2519,7 +2535,7 @@ + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 2 of the License, or ++ the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, @@ -2535,7 +2551,7 @@ + +typedef struct linux_record_tdep_s +{ -+ /* The size of the type that will be use in system call. */ ++ /* The size of the type that will be use in system call. */ + int size__old_kernel_stat; + int size_tms; + int size_loff_t; @@ -2604,7 +2620,7 @@ + int size_serial_icounter_struct; + int size_hayes_esp_config; + -+ /* the values of the second argument of system call "sys_ioctl". */ ++ /* the values of the second argument of system call "sys_ioctl". */ + int ioctl_TCGETS; + int ioctl_TCSETS; + int ioctl_TCSETSW; @@ -2671,7 +2687,7 @@ + int ioctl_TIOCSHAYESESP; + int ioctl_FIOQSIZE; + -+ /* The number of the registers that use to be the arguments of system call. */ ++ /* The number of the registers that use to be the arguments of system call. */ + int arg1; + int arg2; + int arg3; @@ -2682,3 +2698,23 @@ +extern int record_linux_system_call (int num, linux_record_tdep_t * tdep); + +#endif /* _LINUX_RECORD_H_ */ +--- a/Makefile.in ++++ b/Makefile.in +@@ -515,7 +515,7 @@ + xcoffread.o \ + prologue-value.o \ + symfile-mem.o \ +- corelow.o ++ corelow.o linux-record.o + + # Host-dependent makefile fragment comes in here. + @host_makefile_frag@ +@@ -1297,7 +1297,7 @@ + inf-ptrace.c inf-ttrace.c \ + irix5-nat.c \ + libunwind-frame.c \ +- linux-fork.c \ ++ linux-fork.c linux-record.c \ ------=_Part_40491_7538264.1226823690953 Content-Type: text/plain; name=5-linux-record.txt Content-Transfer-Encoding: base64 X-Attachment-Id: f_fnlf4op80 Content-Disposition: attachment; filename=5-linux-record.txt Content-length: 90020 LS0tIGEvY29uZmlndXJlLnRndAorKysgYi9jb25maWd1cmUudGd0CkBAIC0x ODUsNyArMTg1LDggQEAKIGlbMzQ1NjddODYtKi1saW51eCopCiAJIyBUYXJn ZXQ6IEludGVsIDM4NiBydW5uaW5nIEdOVS9MaW51eAogCWdkYl90YXJnZXRf b2JzPSJpMzg2LXRkZXAubyBpMzg2LWxpbnV4LXRkZXAubyBnbGliYy10ZGVw Lm8gaTM4Ny10ZGVwLm8gXAotCQkJc29saWIubyBzb2xpYi1zdnI0Lm8gc3lt ZmlsZS1tZW0ubyBjb3JlbG93Lm8iCisJCQlzb2xpYi5vIHNvbGliLXN2cjQu byBzeW1maWxlLW1lbS5vIGNvcmVsb3cubyBcCisJCQlsaW51eC1yZWNvcmQu byIKIAlidWlsZF9nZGJzZXJ2ZXI9eWVzCiAJOzsKIGlbMzQ1NjddODYtKi1n bnUqKQpAQCAtNTA4LDcgKzUwOSw4IEBACiAJIyBUYXJnZXQ6IEdOVS9MaW51 eCB4ODYtNjQKIAlnZGJfdGFyZ2V0X29icz0iYW1kNjQtdGRlcC5vIGFtZDY0 LWxpbnV4LXRkZXAubyBpMzg2LXRkZXAubyBcCiAJCQlpMzg3LXRkZXAubyBp Mzg2LWxpbnV4LXRkZXAubyBnbGliYy10ZGVwLm8gXAotCQkJc29saWIubyBz b2xpYi1zdnI0Lm8gY29yZWxvdy5vIHN5bWZpbGUtbWVtLm8iCisJCQlzb2xp Yi5vIHNvbGliLXN2cjQubyBjb3JlbG93Lm8gc3ltZmlsZS1tZW0ubyBcCisJ CQlsaW51eC1yZWNvcmQubyIKIAlidWlsZF9nZGJzZXJ2ZXI9eWVzCiAJOzsK IHg4Nl82NC0qLWZyZWVic2QqIHwgeDg2XzY0LSota2ZyZWVic2QqLWdudSkK LS0tIGEvL2Rldi9udWxsCisrKyBiL2xpbnV4LXJlY29yZC5jCkBAIC0wLDAg KzEsMjUwMSBAQAorLyogUHJvY2VzcyByZWNvcmQgYW5kIHJlcGxheSB0YXJn ZXQgY29kZSBmb3IgR05VL0xpbnV4LgorCisgICBDb3B5cmlnaHQgKEMpIDIw MDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMg ZmlsZSBpcyBwYXJ0IG9mIEdEQi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRo ZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFt LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+ LiAgKi8KKworI2luY2x1ZGUgImRlZnMuaCIKKyNpbmNsdWRlICJ0YXJnZXQu aCIKKyNpbmNsdWRlICJyZWdjYWNoZS5oIgorI2luY2x1ZGUgInJlY29yZC5o IgorI2luY2x1ZGUgImxpbnV4LXJlY29yZC5oIgorI2luY2x1ZGUgPHN0ZGlu dC5oPgorCisvKiBUaGVzZSBtYWNyb3MgYXJlIHRoZSB2YWx1ZXMgb2YgdGhl IGZpcnN0IGFyZ3VtZW50IG9mIHN5c3RlbSBjYWxsCisgICAic3lzX3B0cmFj ZSIuIFRoZSB2YWx1ZXMgb2YgdGhlc2UgbWFjcm9zIGFyZSBnb3R0ZW4gZnJv bSBMaW51eCBLZXJuZWwKKyAgIHNvdXJjZS4gICovCisKKyNkZWZpbmUgUkVD T1JEX1BUUkFDRV9QRUVLVEVYVAkxCisjZGVmaW5lIFJFQ09SRF9QVFJBQ0Vf UEVFS0RBVEEJMgorI2RlZmluZSBSRUNPUkRfUFRSQUNFX1BFRUtVU1IJMwor CisvKiBUaGVzZSBtYWNyb3MgYXJlIHRoZSB2YWx1ZXMgb2YgdGhlIGZpcnN0 IGFyZ3VtZW50IG9mIHN5c3RlbSBjYWxsCisgICAic3lzX3NvY2tldGNhbGwi LiBUaGUgdmFsdWVzIG9mIHRoZXNlIG1hY3JvcyBhcmUgZ290dGVuIGZyb20g TGludXggS2VybmVsCisgICBzb3VyY2UuICAqLworCisjZGVmaW5lIFJFQ09S RF9TWVNfU09DS0VUCTEKKyNkZWZpbmUgUkVDT1JEX1NZU19CSU5ECQkyCisj ZGVmaW5lIFJFQ09SRF9TWVNfQ09OTkVDVAkzCisjZGVmaW5lIFJFQ09SRF9T WVNfTElTVEVOCTQKKyNkZWZpbmUgUkVDT1JEX1NZU19BQ0NFUFQJNQorI2Rl ZmluZSBSRUNPUkRfU1lTX0dFVFNPQ0tOQU1FCTYKKyNkZWZpbmUgUkVDT1JE X1NZU19HRVRQRUVSTkFNRQk3CisjZGVmaW5lIFJFQ09SRF9TWVNfU09DS0VU UEFJUgk4CisjZGVmaW5lIFJFQ09SRF9TWVNfU0VORAkJOQorI2RlZmluZSBS RUNPUkRfU1lTX1JFQ1YJCTEwCisjZGVmaW5lIFJFQ09SRF9TWVNfU0VORFRP CTExCisjZGVmaW5lIFJFQ09SRF9TWVNfUkVDVkZST00JMTIKKyNkZWZpbmUg UkVDT1JEX1NZU19TSFVURE9XTgkxMworI2RlZmluZSBSRUNPUkRfU1lTX1NF VFNPQ0tPUFQJMTQKKyNkZWZpbmUgUkVDT1JEX1NZU19HRVRTT0NLT1BUCTE1 CisjZGVmaW5lIFJFQ09SRF9TWVNfU0VORE1TRwkxNgorI2RlZmluZSBSRUNP UkRfU1lTX1JFQ1ZNU0cJMTcKKworLyogVGhlc2UgbWFjcm9zIGFyZSB0aGUg dmFsdWVzIG9mIHRoZSBmaXJzdCBhcmd1bWVudCBvZiBzeXN0ZW0gY2FsbAor ICAgInN5c19pcGMiLiBUaGUgdmFsdWVzIG9mIHRoZXNlIG1hY3JvcyBhcmUg Z290dGVuIGZyb20gTGludXggS2VybmVsIHNvdXJjZS4KKyAqLworCisjZGVm aW5lIFJFQ09SRF9TRU1PUAkJMQorI2RlZmluZSBSRUNPUkRfU0VNR0VUCQky CisjZGVmaW5lIFJFQ09SRF9TRU1DVEwJCTMKKyNkZWZpbmUgUkVDT1JEX1NF TVRJTUVET1AJNAorI2RlZmluZSBSRUNPUkRfTVNHU05ECQkxMQorI2RlZmlu ZSBSRUNPUkRfTVNHUkNWCQkxMgorI2RlZmluZSBSRUNPUkRfTVNHR0VUCQkx MworI2RlZmluZSBSRUNPUkRfTVNHQ1RMCQkxNAorI2RlZmluZSBSRUNPUkRf U0hNQVQJCTIxCisjZGVmaW5lIFJFQ09SRF9TSE1EVAkJMjIKKyNkZWZpbmUg UkVDT1JEX1NITUdFVAkJMjMKKyNkZWZpbmUgUkVDT1JEX1NITUNUTAkJMjQK KworLyogVGhlc2UgbWFjcm9zIGFyZSB0aGUgdmFsdWVzIG9mIHRoZSBmaXJz dCBhcmd1bWVudCBvZiBzeXN0ZW0gY2FsbAorICAgInN5c19xdW90YWN0bCIu IFRoZSB2YWx1ZXMgb2YgdGhlc2UgbWFjcm9zIGFyZSBnb3R0ZW4gZnJvbSBM aW51eCBLZXJuZWwKKyAgIHNvdXJjZS4gICovCisKKyNkZWZpbmUgUkVDT1JE X1FfR0VURk1UCQkweDgwMDAwNAorI2RlZmluZSBSRUNPUkRfUV9HRVRJTkZP CTB4ODAwMDA1CisjZGVmaW5lIFJFQ09SRF9RX0dFVFFVT1RBCTB4ODAwMDA3 CisjZGVmaW5lIFJFQ09SRF9RX1hHRVRRU1RBVAkoKCc1Jzw8OCkrKDUpKQor I2RlZmluZSBSRUNPUkRfUV9YR0VUUVVPVEEJKCgnMyc8PDgpKygzKSkKKwor LyogUmVjb3JkIHRoZSB2YWx1ZXMgb2YgdGhlIHJlZ2lzdGVycyBhbmQgbWVt b3J5IHRoYXQgd2lsbCBiZSBjaGFuZ2VkIGluCisgICBjdXJyZW50IHN5c3Rl bSBjYWxsLgorICAgUmV0dXJuIC0xIGlmIHNvbWV0aGluZyB3cm9uZy4gICov CisKK2ludAorcmVjb3JkX2xpbnV4X3N5c3RlbV9jYWxsIChpbnQgbnVtLCBs aW51eF9yZWNvcmRfdGRlcF90ICogdGRlcCkKK3sKKyAgdWludDMyX3QgdG1w dTMyOworCisgIHN3aXRjaCAobnVtKQorICAgIHsKKyAgICAgIC8qIHN5c19y ZXN0YXJ0X3N5c2NhbGwgKi8KKyAgICBjYXNlIDA6CisgICAgICBicmVhazsK KworICAgICAgLyogc3lzX2V4aXQgKi8KKyAgICBjYXNlIDE6CisgICAgICB7 CisJaW50IHE7CisJdGFyZ2V0X3Rlcm1pbmFsX291cnMgKCk7CisJcSA9CisJ ICB5cXVlcnkgKF8KKwkJICAoIlRoZSBuZXh0IGluc3RydWN0aW9uIGlzIHN5 c2NhbGwgZXhpdC4gIEl0IHdpbGwgbWFrZSB0aGUgcHJvZ3JhbSBleGl0LiAg RG8geW91IHdhbnQgdG8gc3RvcCB0aGUgcHJvZ3JhbT8iKSk7CisJdGFyZ2V0 X3Rlcm1pbmFsX2luZmVyaW9yICgpOworCWlmIChxKQorCSAgeworCSAgICBy ZXR1cm4gKDEpOworCSAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisKKyAg ICAgIC8qIHN5c19mb3JrICovCisgICAgY2FzZSAyOgorICAgICAgYnJlYWs7 CisKKyAgICAgIC8qIHN5c19yZWFkICovCisgICAgY2FzZSAzOgorICAgICAg eworCXVpbnQzMl90IGFkZHIsIGNvdW50OworCXJlZ2NhY2hlX3Jhd19yZWFk IChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAm IGFkZHIpOworCXJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUs IHRkZXAtPmFyZzMsIChnZGJfYnl0ZSAqKSAmIGNvdW50KTsKKwlpZiAocmVj b3JkX2FyY2hfbGlzdF9hZGRfbWVtIChhZGRyLCBjb3VudCkpCisJICB7CisJ ICAgIHJldHVybiAoLTEpOworCSAgfQorICAgICAgfQorICAgICAgYnJlYWs7 CisKKyAgICAgIC8qIHN5c193cml0ZSAqLworICAgIGNhc2UgNDoKKyAgICAg IC8qIHN5c19vcGVuICovCisgICAgY2FzZSA1OgorICAgICAgLyogc3lzX2Ns b3NlICovCisgICAgY2FzZSA2OgorICAgICAgLyogc3lzX3dhaXRwaWQgKi8K KyAgICBjYXNlIDc6CisgICAgICAvKiBzeXNfY3JlYXQgKi8KKyAgICBjYXNl IDg6CisgICAgICAvKiBzeXNfbGluayAqLworICAgIGNhc2UgOToKKyAgICAg IC8qIHN5c191bmxpbmsgKi8KKyAgICBjYXNlIDEwOgorICAgICAgLyogc3lz X2V4ZWN2ZSAqLworICAgIGNhc2UgMTE6CisgICAgICAvKiBzeXNfY2hkaXIg Ki8KKyAgICBjYXNlIDEyOgorICAgICAgLyogc3lzX3RpbWUgKi8KKyAgICBj YXNlIDEzOgorICAgICAgLyogc3lzX21rbm9kICovCisgICAgY2FzZSAxNDoK KyAgICAgIC8qIHN5c19jaG1vZCAqLworICAgIGNhc2UgMTU6CisgICAgICAv KiBzeXNfbGNob3duMTYgKi8KKyAgICBjYXNlIDE2OgorICAgICAgLyogc3lz X25pX3N5c2NhbGwgKi8KKyAgICBjYXNlIDE3OgorICAgICAgYnJlYWs7CisK KyAgICAgIC8qIHN5c19zdGF0ICovCisgICAgY2FzZSAxODoKKyAgICAgIC8q IHN5c19mc3RhdCAqLworICAgIGNhc2UgMjg6CisgICAgICAvKiBzeXNfbHN0 YXQgKi8KKyAgICBjYXNlIDg0OgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQg KHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYg dG1wdTMyKTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0g KHRtcHUzMiwgdGRlcC0+c2l6ZV9fb2xkX2tlcm5lbF9zdGF0KSkKKwl7CisJ ICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKworICAgICAgLyog c3lzX2xzZWVrICovCisgICAgY2FzZSAxOToKKyAgICAgIC8qIHN5c19nZXRw aWQgKi8KKyAgICBjYXNlIDIwOgorICAgICAgLyogc3lzX21vdW50ICovCisg ICAgY2FzZSAyMToKKyAgICAgIC8qIHN5c19vbGR1bW91bnQgKi8KKyAgICBj YXNlIDIyOgorICAgICAgLyogc3lzX3NldHVpZDE2ICovCisgICAgY2FzZSAy MzoKKyAgICAgIC8qIHN5c19nZXR1aWQxNiAqLworICAgIGNhc2UgMjQ6Cisg ICAgICAvKiBzeXNfc3RpbWUgKi8KKyAgICBjYXNlIDI1OgorICAgICAgYnJl YWs7CisKKyAgICAgIC8qIHN5c19wdHJhY2UgKi8KKyAgICBjYXNlIDI2Ogor ICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRl cC0+YXJnMSwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmICh0 bXB1MzIgPT0gUkVDT1JEX1BUUkFDRV9QRUVLVEVYVAorCSAgfHwgdG1wdTMy ID09IFJFQ09SRF9QVFJBQ0VfUEVFS0RBVEEKKwkgIHx8IHRtcHUzMiA9PSBS RUNPUkRfUFRSQUNFX1BFRUtVU1IpCisJeworCSAgcmVnY2FjaGVfcmF3X3Jl YWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnNCwKKwkJCSAgICAgKGdk Yl9ieXRlICopICYgdG1wdTMyKTsKKwkgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9tZW0gKHRtcHUzMiwgNCkpCisJICAgIHsKKwkgICAgICByZXR1cm4g KC0xKTsKKwkgICAgfQorCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBz eXNfYWxhcm0gKi8KKyAgICBjYXNlIDI3OgorICAgICAgLyogc3lzX3BhdXNl ICovCisgICAgY2FzZSAyOToKKyAgICAgIC8qIHN5c191dGltZSAgICAqLwor ICAgIGNhc2UgMzA6CisgICAgICAvKiBzeXNfbmlfc3lzY2FsbCAqLworICAg IGNhc2UgMzE6CisgICAgICAvKiBzeXNfbmlfc3lzY2FsbCAqLworICAgIGNh c2UgMzI6CisgICAgICAvKiBzeXNfYWNjZXNzICovCisgICAgY2FzZSAzMzoK KyAgICAgIC8qIHN5c19uaWNlICovCisgICAgY2FzZSAzNDoKKyAgICAgIC8q IHN5c19uaV9zeXNjYWxsICovCisgICAgY2FzZSAzNToKKyAgICAgIC8qIHN5 c19zeW5jICovCisgICAgY2FzZSAzNjoKKyAgICAgIC8qIHN5c19raWxsICov CisgICAgY2FzZSAzNzoKKyAgICAgIC8qIHN5c19yZW5hbWUgKi8KKyAgICBj YXNlIDM4OgorICAgICAgLyogc3lzX21rZGlyICovCisgICAgY2FzZSAzOToK KyAgICAgIC8qIHN5c19ybWRpciAqLworICAgIGNhc2UgNDA6CisgICAgICAv KiBzeXNfZHVwICovCisgICAgY2FzZSA0MToKKyAgICAgIC8qIHN5c19waXBl ICovCisgICAgY2FzZSA0MjoKKyAgICAgIGJyZWFrOworCisgICAgICAvKiBz eXNfdGltZXMgKi8KKyAgICBjYXNlIDQzOgorICAgICAgcmVnY2FjaGVfcmF3 X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMSwgKGdkYl9ieXRl ICopICYgdG1wdTMyKTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV90bXMpKQorCXsKKwkgIHJldHVy biAoLTEpOworCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfbmlf c3lzY2FsbCAqLworICAgIGNhc2UgNDQ6CisgICAgICAvKiBzeXNfYnJrICov CisgICAgY2FzZSA0NToKKyAgICAgIC8qIHN5c19zZXRnaWQxNiAqLworICAg IGNhc2UgNDY6CisgICAgICAvKiBzeXNfZ2V0Z2lkMTYgKi8KKyAgICBjYXNl IDQ3OgorICAgICAgLyogc3lzX3NpZ25hbCAqLworICAgIGNhc2UgNDg6Cisg ICAgICAvKiBzeXNfZ2V0ZXVpZDE2ICovCisgICAgY2FzZSA0OToKKyAgICAg IC8qIHN5c19nZXRlZ2lkMTYgKi8KKyAgICBjYXNlIDUwOgorICAgICAgLyog c3lzX2FjY3QgKi8KKyAgICBjYXNlIDUxOgorICAgICAgLyogc3lzX3Vtb3Vu dCAqLworICAgIGNhc2UgNTI6CisgICAgICAvKiBzeXNfbmlfc3lzY2FsbCAq LworICAgIGNhc2UgNTM6CisgICAgICBicmVhazsKKworICAgICAgLyogc3lz X2lvY3RsICovCisgICAgY2FzZSA1NDoKKyAgICAgIC8qIFhYWCB0aGVyZSBu ZWVkIGFkZCBhIGxvdCBvZiBzdXBwb3J0IG9mIG90aGVyIGlvY3RsIHJlcXVl c3RzLiAgKi8KKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVn Y2FjaGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Cisg ICAgICBpZiAodG1wdTMyID09IHRkZXAtPmlvY3RsX0ZJT0NMRVggfHwgdG1w dTMyID09IHRkZXAtPmlvY3RsX0ZJT05DTEVYCisJICB8fCB0bXB1MzIgPT0g dGRlcC0+aW9jdGxfRklPTkJJTyB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxf RklPQVNZTkMKKwkgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9UQ1NFVFMg fHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RDU0VUU1cKKwkgIHx8IHRtcHUz MiA9PSB0ZGVwLT5pb2N0bF9UQ1NFVFNGIHx8IHRtcHUzMiA9PSB0ZGVwLT5p b2N0bF9UQ1NFVEEKKwkgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9UQ1NF VEFXIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9UQ1NFVEFGCisJICB8fCB0 bXB1MzIgPT0gdGRlcC0+aW9jdGxfVENTQlJLIHx8IHRtcHUzMiA9PSB0ZGVw LT5pb2N0bF9UQ1hPTkMKKwkgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9U Q0ZMU0ggfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NFWENMCisJICB8 fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ05YQ0wKKwkgIHx8IHRtcHUz MiA9PSB0ZGVwLT5pb2N0bF9USU9DU0NUVFkKKwkgIHx8IHRtcHUzMiA9PSB0 ZGVwLT5pb2N0bF9USU9DU1BHUlAgfHwgdG1wdTMyID09IHRkZXAtPmlvY3Rs X1RJT0NTVEkKKwkgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9DU1dJ TlNaCisJICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ01CSVMgfHwg dG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NNQklDCisJICB8fCB0bXB1MzIg PT0gdGRlcC0+aW9jdGxfVElPQ01TRVQKKwkgIHx8IHRtcHUzMiA9PSB0ZGVw LT5pb2N0bF9USU9DU1NPRlRDQVIKKwkgIHx8IHRtcHUzMiA9PSB0ZGVwLT5p b2N0bF9USU9DQ09OUworCSAgfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RJ T0NTU0VSSUFMCisJICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ1BL VCB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ05PVFRZCisJICB8fCB0 bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ1NFVEQgfHwgdG1wdTMyID09IHRk ZXAtPmlvY3RsX1RDU0JSS1AKKwkgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0 bF9USU9DVFRZR1NUUlVDVAorCSAgfHwgdG1wdTMyID09IHRkZXAtPmlvY3Rs X1RJT0NTQlJLIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9DQ0JSSwor CSAgfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RDU0VUUzIgfHwgdG1wdTMy ID09IHRkZXAtPmlvY3RsX1RDU0VUU1cyCisJICB8fCB0bXB1MzIgPT0gdGRl cC0+aW9jdGxfVENTRVRTRjIKKwkgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0 bF9USU9DU1BUTENLCisJICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElP Q1NFUkNPTkZJRworCSAgfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NT RVJHV0lMRAorCSAgfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NTRVJT V0lMRAorCSAgfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NTTENLVFJN SU9TCisJICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ1NFUkdFVE1V TFRJCisJICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ1NFUlNFVE1V TFRJCisJICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ01JV0FJVAor CSAgfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NTSEFZRVNFU1ApCisJ eworCSAgLyogTm90aGluZyB0byBkby4gICovCisJfQorICAgICAgZWxzZSBp ZiAodG1wdTMyID09IHRkZXAtPmlvY3RsX1RDR0VUUyB8fCB0bXB1MzIgPT0g dGRlcC0+aW9jdGxfVENHRVRBCisJICAgICAgIHx8IHRtcHUzMiA9PSB0ZGVw LT5pb2N0bF9USU9DR0xDS1RSTUlPUykKKwl7CisJICByZWdjYWNoZV9yYXdf cmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmczLAorCQkJICAgICAo Z2RiX2J5dGUgKikgJiB0bXB1MzIpOworCSAgaWYgKHJlY29yZF9hcmNoX2xp c3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX3Rlcm1pb3MpKQorCSAg ICB7CisJICAgICAgcmV0dXJuICgtMSk7CisJICAgIH0KKwl9CisgICAgICBl bHNlIGlmICh0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ0dQR1JQCisJICAg ICAgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9DR1NJRCkKKwl7CisJ ICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5h cmczLAorCQkJICAgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworCSAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXpl X3BpZF90KSkKKwkgICAgeworCSAgICAgIHJldHVybiAoLTEpOworCSAgICB9 CisJfQorICAgICAgZWxzZSBpZiAodG1wdTMyID09IHRkZXAtPmlvY3RsX1RJ T0NPVVRRCisJICAgICAgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9D TUdFVAorCSAgICAgICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ0dT T0ZUQ0FSCisJICAgICAgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9GSU9O UkVBRAorCSAgICAgICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ0lO UQorCSAgICAgICB8fCB0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ0dFVEQK KwkgICAgICAgfHwgdG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NHUFROCisJ ICAgICAgIHx8IHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9DU0VSR0VUTFNS KQorCXsKKwkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUs IHRkZXAtPmFyZzMsCisJCQkgICAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7 CisJICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRk ZXAtPnNpemVfaW50KSkKKwkgICAgeworCSAgICAgIHJldHVybiAoLTEpOwor CSAgICB9CisJfQorICAgICAgZWxzZSBpZiAodG1wdTMyID09IHRkZXAtPmlv Y3RsX1RJT0NHV0lOU1opCisJeworCSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJl Y29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMywKKwkJCSAgICAgKGdkYl9ieXRl ICopICYgdG1wdTMyKTsKKwkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9t ZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV93aW5zaXplKSkKKwkgICAgeworCSAg ICAgIHJldHVybiAoLTEpOworCSAgICB9CisJfQorICAgICAgZWxzZSBpZiAo dG1wdTMyID09IHRkZXAtPmlvY3RsX1RJT0NMSU5VWCkKKwl7CisJICByZWdj YWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmczLAor CQkJICAgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworCSAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX2NoYXIp KQorCSAgICB7CisJICAgICAgcmV0dXJuICgtMSk7CisJICAgIH0KKwl9Cisg ICAgICBlbHNlIGlmICh0bXB1MzIgPT0gdGRlcC0+aW9jdGxfVElPQ0dTRVJJ QUwpCisJeworCSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNo ZSwgdGRlcC0+YXJnMywKKwkJCSAgICAgKGdkYl9ieXRlICopICYgdG1wdTMy KTsKKwkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwg dGRlcC0+c2l6ZV9zZXJpYWxfc3RydWN0KSkKKwkgICAgeworCSAgICAgIHJl dHVybiAoLTEpOworCSAgICB9CisJfQorICAgICAgZWxzZSBpZiAodG1wdTMy ID09IHRkZXAtPmlvY3RsX1RDR0VUUzIpCisJeworCSAgcmVnY2FjaGVfcmF3 X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMywKKwkJCSAgICAg KGdkYl9ieXRlICopICYgdG1wdTMyKTsKKwkgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV90ZXJtaW9zMikpCisJ ICAgIHsKKwkgICAgICByZXR1cm4gKC0xKTsKKwkgICAgfQorCX0KKyAgICAg IGVsc2UgaWYgKHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9GSU9RU0laRSkKKwl7 CisJICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVw LT5hcmczLAorCQkJICAgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworCSAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5z aXplX2xvZmZfdCkpCisJICAgIHsKKwkgICAgICByZXR1cm4gKC0xKTsKKwkg ICAgfQorCX0KKyAgICAgIGVsc2UgaWYgKHRtcHUzMiA9PSB0ZGVwLT5pb2N0 bF9USU9DR0lDT1VOVCkKKwl7CisJICByZWdjYWNoZV9yYXdfcmVhZCAocmVj b3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmczLAorCQkJICAgICAoZ2RiX2J5dGUg KikgJiB0bXB1MzIpOworCSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21l bQorCSAgICAgICh0bXB1MzIsIHRkZXAtPnNpemVfc2VyaWFsX2ljb3VudGVy X3N0cnVjdCkpCisJICAgIHsKKwkgICAgICByZXR1cm4gKC0xKTsKKwkgICAg fQorCX0KKyAgICAgIGVsc2UgaWYgKHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9U SU9DR0hBWUVTRVNQKQorCXsKKwkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNv cmRfcmVnY2FjaGUsIHRkZXAtPmFyZzMsCisJCQkgICAgIChnZGJfYnl0ZSAq KSAmIHRtcHUzMik7CisJICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVt ICh0bXB1MzIsIHRkZXAtPnNpemVfaGF5ZXNfZXNwX2NvbmZpZykpCisJICAg IHsKKwkgICAgICByZXR1cm4gKC0xKTsKKwkgICAgfQorCX0KKyAgICAgIGVs c2UgaWYgKHRtcHUzMiA9PSB0ZGVwLT5pb2N0bF9USU9DU0VSR1NUUlVDVCkK Kwl7CisJICBwcmludGZfdW5maWx0ZXJlZCAoXworCQkJICAgICAoIlByb2Nl c3MgcmVjb3JkIGFuZCByZXBsYXkgdGFyZ2V0IGRvZXNuJ3Qgc3VwcG9ydCBp b2N0bCByZXF1ZXN0IFRJT0NTRVJHU1RSVUNUXG4iKSk7CisJICByZXR1cm4g KDEpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBwcmludGZfdW5maWx0ZXJl ZCAoXworCQkJICAgICAoIlByb2Nlc3MgcmVjb3JkIGFuZCByZXBsYXkgdGFy Z2V0IGRvZXNuJ3Qgc3VwcG9ydCBpb2N0bCByZXF1ZXN0IDB4JTA4eC5cbiIp LAorCQkJICAgICB0bXB1MzIpOworCSAgcmV0dXJuICgxKTsKKwl9CisgICAg ICBicmVhazsKKworICAgICAgLyogc3lzX2ZjbnRsICovCisgICAgY2FzZSA1 NToKKyAgICAgIC8qIFhYWCAqLworICAgICAgcmVnY2FjaGVfcmF3X3JlYWQg KHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYg dG1wdTMyKTsKKyAgICBzeXNfZmNudGw6CisgICAgICBpZiAodG1wdTMyID09 IEZfR0VUTEspCisJeworCSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9y ZWdjYWNoZSwgdGRlcC0+YXJnMywKKwkJCSAgICAgKGdkYl9ieXRlICopICYg dG1wdTMyKTsKKwkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRt cHUzMiwgdGRlcC0+c2l6ZV9mbG9jaykpCisJICAgIHsKKwkgICAgICByZXR1 cm4gKC0xKTsKKwkgICAgfQorCX0KKyAgICAgIGJyZWFrOworCisgICAgICAv KiBzeXNfbmlfc3lzY2FsbCAqLworICAgIGNhc2UgNTY6CisgICAgICAvKiBz eXNfc2V0cGdpZCAqLworICAgIGNhc2UgNTc6CisgICAgICAvKiBzeXNfbmlf c3lzY2FsbCAqLworICAgIGNhc2UgNTg6CisgICAgICBicmVhazsKKworICAg ICAgLyogc3lzX29sZHVuYW1lICovCisgICAgY2FzZSA1OToKKyAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzEs IChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfb2xkb2xkX3V0 c25hbWUpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGJyZWFr OworCisgICAgICAvKiBzeXNfdW1hc2sgKi8KKyAgICBjYXNlIDYwOgorICAg ICAgLyogc3lzX2Nocm9vdCAqLworICAgIGNhc2UgNjE6CisgICAgICBicmVh azsKKworICAgICAgLyogc3lzX3VzdGF0ICovCisgICAgY2FzZSA2MjoKKyAg ICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAt PmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAocmVj b3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfdXN0 YXQpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGJyZWFrOwor CisgICAgICAvKiBzeXNfZHVwMiAqLworICAgIGNhc2UgNjM6CisgICAgICAv KiBzeXNfZ2V0cHBpZCAqLworICAgIGNhc2UgNjQ6CisgICAgICAvKiBzeXNf Z2V0cGdycCAqLworICAgIGNhc2UgNjU6CisgICAgICAvKiBzeXNfc2V0c2lk ICovCisgICAgY2FzZSA2NjoKKyAgICAgIGJyZWFrOworCisgICAgICAvKiBz eXNfc2lnYWN0aW9uICovCisgICAgY2FzZSA2NzoKKyAgICAgIHJlZ2NhY2hl X3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzMsIChnZGJf Ynl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfb2xkX3NpZ2FjdGlvbikp CisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgYnJlYWs7CisKKyAg ICAgIC8qIHN5c19zZ2V0bWFzayAqLworICAgIGNhc2UgNjg6CisgICAgICAv KiBzeXNfc3NldG1hc2sgKi8KKyAgICBjYXNlIDY5OgorICAgICAgLyogc3lz X3NldHJldWlkMTYgKi8KKyAgICBjYXNlIDcwOgorICAgICAgLyogc3lzX3Nl dHJlZ2lkMTYgKi8KKyAgICBjYXNlIDcxOgorICAgICAgLyogc3lzX3NpZ3N1 c3BlbmQgKi8KKyAgICBjYXNlIDcyOgorICAgICAgYnJlYWs7CisKKyAgICAg IC8qIHN5c19zaWdwZW5kaW5nICovCisgICAgY2FzZSA3MzoKKyAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzEs IChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfb2xkX3NpZ3Nl dF90KSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsK KworICAgICAgLyogc3lzX3NldGhvc3RuYW1lICovCisgICAgY2FzZSA3NDoK KyAgICAgIC8qIHN5c19zZXRybGltaXQgKi8KKyAgICBjYXNlIDc1OgorICAg ICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19vbGRfZ2V0cmxpbWl0ICovCisg ICAgY2FzZSA3NjoKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRf cmVnY2FjaGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7 CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIs IHRkZXAtPnNpemVfcmxpbWl0KSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9 CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX2dldHJ1c2FnZSAqLwor ICAgIGNhc2UgNzc6CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3Jk X3JlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIp OworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMy LCB0ZGVwLT5zaXplX3J1c2FnZSkpCisJeworCSAgcmV0dXJuICgtMSk7CisJ fQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19nZXR0aW1lb2ZkYXkg Ki8KKyAgICBjYXNlIDc4OgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJl Y29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMSwgKGdkYl9ieXRlICopICYgdG1w dTMyKTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRt cHUzMiwgdGRlcC0+c2l6ZV90aW1ldmFsKSkKKwl7CisJICByZXR1cm4gKC0x KTsKKwl9CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2Nh Y2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVw LT5zaXplX3RpbWV6b25lKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9Cisg ICAgICBicmVhazsKKworICAgICAgLyogc3lzX3NldHRpbWVvZmRheSAqLwor ICAgIGNhc2UgNzk6CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX2dl dGdyb3VwczE2ICovCisgICAgY2FzZSA4MDoKKyAgICAgIHJlZ2NhY2hlX3Jh d19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0 ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfb2xkX2dpZF90KSkKKwl7CisJ ICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKworICAgICAgLyog c3lzX3NldGdyb3VwczE2ICovCisgICAgY2FzZSA4MToKKyAgICAgIHJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzIsIChn ZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfb2xkX2dpZF90KSkK Kwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKworICAg ICAgLyogb2xkX3NlbGVjdCAqLworICAgIGNhc2UgODI6CisgICAgICB7CisJ c3RydWN0IHNlbF9hcmdfc3RydWN0CisJeworCSAgQ09SRV9BRERSIG47CisJ ICBDT1JFX0FERFIgaW5wOworCSAgQ09SRV9BRERSIG91dHA7CisJICBDT1JF X0FERFIgZXhwOworCSAgQ09SRV9BRERSIHR2cDsKKwl9IHNlbDsKKworCXJl Z2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzEs CisJCQkgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworCWlmICh0bXB1MzIp CisJICB7CisJICAgIGlmICh0YXJnZXRfcmVhZF9tZW1vcnkgKHRtcHUzMiwg KGdkYl9ieXRlICopICYgc2VsLCBzaXplb2YgKHNlbCkpKQorCSAgICAgIHsK KwkJaWYgKHJlY29yZF9kZWJ1ZykKKwkJICB7CisJCSAgICBmcHJpbnRmX3Vu ZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJCSJQcm9jZXNzIHJlY29yZDog ZXJyb3IgcmVhZGluZyBtZW1vcnkgYXQgYWRkciA9IDB4JXMgbGVuID0gJWQu XG4iLAorCQkJCQlwYWRkcl9ueiAodG1wdTMyKSwgc2l6ZW9mIChzZWwpKTsK KwkJICB9CisJCXJldHVybiAoLTEpOworCSAgICAgIH0KKwkgICAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbSAoc2VsLmlucCwgdGRlcC0+c2l6ZV9m ZF9zZXQpKQorCSAgICAgIHsKKwkJcmV0dXJuICgtMSk7CisJICAgICAgfQor CSAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChzZWwub3V0cCwg dGRlcC0+c2l6ZV9mZF9zZXQpKQorCSAgICAgIHsKKwkJcmV0dXJuICgtMSk7 CisJICAgICAgfQorCSAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVt IChzZWwuZXhwLCB0ZGVwLT5zaXplX2ZkX3NldCkpCisJICAgICAgeworCQly ZXR1cm4gKC0xKTsKKwkgICAgICB9CisJICAgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKHNlbC50dnAsIHRkZXAtPnNpemVfdGltZXZhbCkpCisJ ICAgICAgeworCQlyZXR1cm4gKC0xKTsKKwkgICAgICB9CisJICB9CisgICAg ICB9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX3N5bWxpbmsgKi8K KyAgICBjYXNlIDgzOgorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19y ZWFkbGluayAqLworICAgIGNhc2UgODU6CisgICAgICB7CisJdWludDMyX3Qg bGVuOworCXJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRk ZXAtPmFyZzIsCisJCQkgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworCXJl Z2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzMs IChnZGJfYnl0ZSAqKSAmIGxlbik7CisJaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX21lbSAodG1wdTMyLCBsZW4pKQorCSAgeworCSAgICByZXR1cm4gKC0x KTsKKwkgIH0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBz eXNfdXNlbGliICovCisgICAgY2FzZSA4NjoKKyAgICAgIC8qIHN5c19zd2Fw b24gKi8KKyAgICBjYXNlIDg3OgorICAgICAgYnJlYWs7CisKKyAgICAgIC8q IHN5c19yZWJvb3QgKi8KKyAgICBjYXNlIDg4OgorICAgICAgeworCWludCBx OworCXRhcmdldF90ZXJtaW5hbF9vdXJzICgpOworCXEgPQorCSAgeXF1ZXJ5 IChfCisJCSAgKCJUaGUgbmV4dCBpbnN0cnVjdGlvbiBpcyBzeXNjYWxsIHJl Ym9vdC4gIEl0IHdpbGwgcmVzdGFydCB0aGUgY29tcHV0ZXIuICBEbyB5b3Ug d2FudCB0byBzdG9wIHRoZSBwcm9ncmFtPyIpKTsKKwl0YXJnZXRfdGVybWlu YWxfaW5mZXJpb3IgKCk7CisJaWYgKHEpCisJICB7CisJICAgIHJldHVybiAo MSk7CisJICB9CisgICAgICB9CisgICAgICBicmVhazsKKworICAgICAgLyog b2xkX3JlYWRkaXIgKi8KKyAgICBjYXNlIDg5OgorICAgICAgcmVnY2FjaGVf cmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9i eXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9kaXJlbnQpKQorCXsKKwkg IHJldHVybiAoLTEpOworCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBv bGRfbW1hcCAqLworICAgIGNhc2UgOTA6CisgICAgICBicmVhazsKKworICAg ICAgLyogc3lzX211bm1hcCAqLworICAgIGNhc2UgOTE6CisgICAgICB7CisJ aW50IHE7CisJdWludDMyX3QgbGVuOworCisJcmVnY2FjaGVfcmF3X3JlYWQg KHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMSwKKwkJCSAgIChnZGJfYnl0 ZSAqKSAmIHRtcHUzMik7CisJcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9y ZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgbGVuKTsKKwl0 YXJnZXRfdGVybWluYWxfb3VycyAoKTsKKwlxID0KKwkgIHlxdWVyeSAoXwor CQkgICgiVGhlIG5leHQgaW5zdHJ1Y3Rpb24gaXMgc3lzY2FsbCBtdW5tYXAu ICBJdCB3aWxsIGZyZWUgdGhlIG1lbW9yeSBhZGRyID0gMHglcyBsZW4gPSAl ZC4gIEl0IHdpbGwgbWFrZSByZWNvcmQgdGFyZ2V0IGdldCBlcnJvci4gIERv IHlvdSB3YW50IHRvIHN0b3AgdGhlIHByb2dyYW0/IiksCisJCSAgcGFkZHJf bnogKHRtcHUzMiksIGxlbik7CisJdGFyZ2V0X3Rlcm1pbmFsX2luZmVyaW9y ICgpOworCWlmIChxKQorCSAgeworCSAgICByZXR1cm4gKDEpOworCSAgfQor ICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c190cnVuY2F0 ZSAqLworICAgIGNhc2UgOTI6CisgICAgICAvKiBzeXNfZnRydW5jYXRlICov CisgICAgY2FzZSA5MzoKKyAgICAgIC8qIHN5c19mY2htb2QgKi8KKyAgICBj YXNlIDk0OgorICAgICAgLyogc3lzX2ZjaG93bjE2ICovCisgICAgY2FzZSA5 NToKKyAgICAgIC8qIHN5c19nZXRwcmlvcml0eSAqLworICAgIGNhc2UgOTY6 CisgICAgICAvKiBzeXNfc2V0cHJpb3JpdHkgKi8KKyAgICBjYXNlIDk3Ogor ICAgICAgLyogc3lzX25pX3N5c2NhbGwgKi8KKyAgICBjYXNlIDk4OgorICAg ICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19zdGF0ZnMgKi8KKyAgICBjYXNl IDk5OgorICAgICAgLyogc3lzX2ZzdGF0ZnMgKi8KKyAgICBjYXNlIDEwMDoK KyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRk ZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVf c3RhdGZzKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVh azsKKworICAgICAgLyogc3lzX2lvcGVybSAqLworICAgIGNhc2UgMTAxOgor ICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19zb2NrZXRjYWxsICovCisg ICAgY2FzZSAxMDI6CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3Jk X3JlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIp OworICAgICAgc3dpdGNoICh0bXB1MzIpCisJeworCWNhc2UgUkVDT1JEX1NZ U19TT0NLRVQ6CisJY2FzZSBSRUNPUkRfU1lTX0JJTkQ6CisJY2FzZSBSRUNP UkRfU1lTX0NPTk5FQ1Q6CisJY2FzZSBSRUNPUkRfU1lTX0xJU1RFTjoKKwkg IGJyZWFrOworCWNhc2UgUkVDT1JEX1NZU19BQ0NFUFQ6CisJY2FzZSBSRUNP UkRfU1lTX0dFVFNPQ0tOQU1FOgorCWNhc2UgUkVDT1JEX1NZU19HRVRQRUVS TkFNRToKKwkgIHsKKwkgICAgdWludDMyX3QgYVszXTsKKwkgICAgcmVnY2Fj aGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMiwKKwkJ CSAgICAgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworCSAgICBpZiAodG1w dTMyKQorCSAgICAgIHsKKwkJaWYgKHRhcmdldF9yZWFkX21lbW9yeSAodG1w dTMyLCAoZ2RiX2J5dGUgKikgYSwgc2l6ZW9mIChhKSkpCisJCSAgeworCQkg ICAgaWYgKHJlY29yZF9kZWJ1ZykKKwkJICAgICAgeworCQkgICAgICAgIGZw cmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCQkJICAgICJQcm9j ZXNzIHJlY29yZDogZXJyb3IgcmVhZGluZyBtZW1vcnkgYXQgYWRkciA9IDB4 JXMgbGVuID0gJWQuXG4iLAorCQkJCQkgICAgcGFkZHJfbnogKHRtcHUzMiks IHNpemVvZiAoYSkpOworCQkgICAgICB9CisJCSAgICByZXR1cm4gKC0xKTsK KwkJICB9CisJCWlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKGFbMV0s IHRkZXAtPnNpemVfc29ja2FkZHIpKQorCQkgIHsKKwkJICAgIHJldHVybiAo LTEpOworCQkgIH0KKwkJaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo YVsyXSwgdGRlcC0+c2l6ZV9pbnQpKQorCQkgIHsKKwkJICAgIHJldHVybiAo LTEpOworCQkgIH0KKwkgICAgICB9CisJICB9CisJICBicmVhazsKKworCWNh c2UgUkVDT1JEX1NZU19TT0NLRVRQQUlSOgorCSAgeworCSAgICB1aW50MzJf dCBhWzRdOworCSAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2Nh Y2hlLCB0ZGVwLT5hcmcyLAorCQkJICAgICAgIChnZGJfYnl0ZSAqKSAmIHRt cHUzMik7CisJICAgIGlmICh0bXB1MzIpCisJICAgICAgeworCQlpZiAodGFy Z2V0X3JlYWRfbWVtb3J5ICh0bXB1MzIsIChnZGJfYnl0ZSAqKSBhLCBzaXpl b2YgKGEpKSkKKwkJICB7CisJCSAgICBpZiAocmVjb3JkX2RlYnVnKQorCQkg ICAgICB7CisJCSAgICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3Rk bG9nLAorCQkJCQkgICAgIlByb2Nlc3MgcmVjb3JkOiBlcnJvciByZWFkaW5n IG1lbW9yeSBhdCBhZGRyID0gMHglcyBsZW4gPSAlZC5cbiIsCisJCQkJCSAg ICBwYWRkcl9ueiAodG1wdTMyKSwgc2l6ZW9mIChhKSk7CisJCSAgICAgIH0K KwkJICAgIHJldHVybiAoLTEpOworCQkgIH0KKwkJaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX21lbSAoYVszXSwgdGRlcC0+c2l6ZV9pbnQpKQorCQkgIHsK KwkJICAgIHJldHVybiAoLTEpOworCQkgIH0KKwkgICAgICB9CisJICB9CisJ ICBicmVhazsKKwljYXNlIFJFQ09SRF9TWVNfU0VORDoKKwljYXNlIFJFQ09S RF9TWVNfU0VORFRPOgorCSAgYnJlYWs7CisJY2FzZSBSRUNPUkRfU1lTX1JF Q1Y6CisJICB7CisJICAgIHVpbnQzMl90IGFbM107CisJICAgIHJlZ2NhY2hl X3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzIsCisJCQkg ICAgICAgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKwkgICAgaWYgKHRtcHUz MikKKwkgICAgICB7CisJCWlmICh0YXJnZXRfcmVhZF9tZW1vcnkgKHRtcHUz MiwgKGdkYl9ieXRlICopIGEsIHNpemVvZiAoYSkpKQorCQkgIHsKKwkJICAg IGlmIChyZWNvcmRfZGVidWcpCisJCSAgICAgIHsKKwkJICAgICAgICBmcHJp bnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJCSAgICAiUHJvY2Vz cyByZWNvcmQ6IGVycm9yIHJlYWRpbmcgbWVtb3J5IGF0IGFkZHIgPSAweCVz IGxlbiA9ICVkLlxuIiwKKwkJCQkJICAgIHBhZGRyX256ICh0bXB1MzIpLCBz aXplb2YgKGEpKTsKKwkJICAgICAgfQorCQkgICAgcmV0dXJuICgtMSk7CisJ CSAgfQorCQlpZiAoYVsyXSkKKwkJICB7CisJCSAgICBpZiAodGFyZ2V0X3Jl YWRfbWVtb3J5CisJCQkoYVsyXSwgKGdkYl9ieXRlICopICYgKGFbMl0pLCBz aXplb2YgKGFbMl0pKSkKKwkJICAgICAgeworCQkJaWYgKHJlY29yZF9kZWJ1 ZykKKwkJCSAgeworCQkJICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0 ZGxvZywKKwkJCQkJCSJQcm9jZXNzIHJlY29yZDogZXJyb3IgcmVhZGluZyBt ZW1vcnkgYXQgYWRkciA9IDB4JXMgbGVuID0gJWQuXG4iLAorCQkJCQkJcGFk ZHJfbnogKGFbMl0pLCBzaXplb2YgKGFbMl0pKTsKKwkJCSAgfQorCQkJcmV0 dXJuICgtMSk7CisJCSAgICAgIH0KKwkJICAgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKGFbMV0sIGFbMl0pKQorCQkgICAgICB7CisJCQlyZXR1 cm4gKC0xKTsKKwkJICAgICAgfQorCQkgIH0KKwkgICAgICB9CisJICB9CisJ ICBicmVhazsKKwljYXNlIFJFQ09SRF9TWVNfUkVDVkZST006CisJICB7CisJ ICAgIHVpbnQzMl90IGFbNl07CisJICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChy ZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzIsCisJCQkgICAgICAgKGdkYl9i eXRlICopICYgdG1wdTMyKTsKKwkgICAgaWYgKHRtcHUzMikKKwkgICAgICB7 CisJCWlmICh0YXJnZXRfcmVhZF9tZW1vcnkgKHRtcHUzMiwgKGdkYl9ieXRl ICopIGEsIHNpemVvZiAoYSkpKQorCQkgIHsKKwkJICAgIGlmIChyZWNvcmRf ZGVidWcpCisJCSAgICAgIHsKKwkJCWZwcmludGZfdW5maWx0ZXJlZCAoZ2Ri X3N0ZGxvZywKKwkJCQkJICAgICJQcm9jZXNzIHJlY29yZDogZXJyb3IgcmVh ZGluZyBtZW1vcnkgYXQgYWRkciA9IDB4JXMgbGVuID0gJWQuXG4iLAorCQkJ CQkgICAgcGFkZHJfbnogKHRtcHUzMiksIHNpemVvZiAoYSkpOworCQkgICAg ICB9CisJCSAgICByZXR1cm4gKC0xKTsKKwkJICB9CisJCWlmIChhWzJdKQor CQkgIHsKKwkJICAgIGlmICh0YXJnZXRfcmVhZF9tZW1vcnkKKwkJCShhWzJd LCAoZ2RiX2J5dGUgKikgJiAoYVsyXSksIHNpemVvZiAoYVsyXSkpKQorCQkg ICAgICB7CisJCQlpZiAocmVjb3JkX2RlYnVnKQorCQkJICB7CisJCQkgICAg ZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorCQkJCQkJIlByb2Nl c3MgcmVjb3JkOiBlcnJvciByZWFkaW5nIG1lbW9yeSBhdCBhZGRyID0gMHgl cyBsZW4gPSAlZC5cbiIsCisJCQkJCQlwYWRkcl9ueiAoYVsyXSksCisJCQkJ CQlzaXplb2YgKGFbMl0pKTsKKwkJCSAgfQorCQkJcmV0dXJuICgtMSk7CisJ CSAgICAgIH0KKwkJICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0g KGFbMV0sIGFbMl0pKQorCQkgICAgICB7CisJCQlyZXR1cm4gKC0xKTsKKwkJ ICAgICAgfQorCQkgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo YVs0XSwgdGRlcC0+c2l6ZV9zb2NrYWRkcikpCisJCSAgICAgIHsKKwkJCXJl dHVybiAoLTEpOworCQkgICAgICB9CisJCSAgICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfbWVtIChhWzVdLCB0ZGVwLT5zaXplX2ludCkpCisJCSAgICAg IHsKKwkJCXJldHVybiAoLTEpOworCQkgICAgICB9CisJCSAgfQorCSAgICAg IH0KKwkgIH0KKwkgIGJyZWFrOworCWNhc2UgUkVDT1JEX1NZU19TSFVURE9X TjoKKwljYXNlIFJFQ09SRF9TWVNfU0VUU09DS09QVDoKKwkgIGJyZWFrOwor CWNhc2UgUkVDT1JEX1NZU19HRVRTT0NLT1BUOgorCSAgeworCSAgICB1aW50 MzJfdCBhWzVdOworCSAgICB1aW50MzJfdCBhdjsKKworCSAgICByZWdjYWNo ZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmcyLAorCQkJ ICAgICAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisJICAgIGlmICh0bXB1 MzIpCisJICAgICAgeworCQlpZiAodGFyZ2V0X3JlYWRfbWVtb3J5ICh0bXB1 MzIsIChnZGJfYnl0ZSAqKSBhLCBzaXplb2YgKGEpKSkKKwkJICB7CisJCSAg ICBpZiAocmVjb3JkX2RlYnVnKQorCQkgICAgICB7CisJCQlmcHJpbnRmX3Vu ZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJCSAgICAiUHJvY2VzcyByZWNv cmQ6IGVycm9yIHJlYWRpbmcgbWVtb3J5IGF0IGFkZHIgPSAweCVzIGxlbiA9 ICVkLlxuIiwKKwkJCQkJICAgIHBhZGRyX256ICh0bXB1MzIpLCBzaXplb2Yg KGEpKTsKKwkJICAgICAgfQorCQkgICAgcmV0dXJuICgtMSk7CisJCSAgfQor CQlpZiAoYVs0XSkKKwkJICB7CisJCSAgICBpZiAodGFyZ2V0X3JlYWRfbWVt b3J5CisJCQkoYVs0XSwgKGdkYl9ieXRlICopICYgYXYsIHNpemVvZiAoYXYp KSkKKwkJICAgICAgeworCQkJaWYgKHJlY29yZF9kZWJ1ZykKKwkJCSAgewor CQkJICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCQkJ CSJQcm9jZXNzIHJlY29yZDogZXJyb3IgcmVhZGluZyBtZW1vcnkgYXQgYWRk ciA9IDB4JXMgbGVuID0gJWQuXG4iLAorCQkJCQkJcGFkZHJfbnogKGFbNF0p LCBzaXplb2YgKGF2KSk7CisJCQkgIH0KKwkJCXJldHVybiAoLTEpOworCQkg ICAgICB9CisJCSAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChh WzNdLCBhdikpCisJCSAgICAgIHsKKwkJCXJldHVybiAoLTEpOworCQkgICAg ICB9CisJCSAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChhWzRd LCB0ZGVwLT5zaXplX2ludCkpCisJCSAgICAgIHsKKwkJCXJldHVybiAoLTEp OworCQkgICAgICB9CisJCSAgfQorCSAgICAgIH0KKwkgIH0KKwkgIGJyZWFr OworCWNhc2UgUkVDT1JEX1NZU19TRU5ETVNHOgorCSAgYnJlYWs7CisJY2Fz ZSBSRUNPUkRfU1lTX1JFQ1ZNU0c6CisJICB7CisJICAgIHVpbnQzMl90IGFb Ml0sIGk7CisJICAgIHN0cnVjdCByZWNvcmRfbXNnaGRyCisJICAgIHsKKwkg ICAgICB1aW50MzJfdCBtc2dfbmFtZTsKKwkgICAgICB1aW50MzJfdCBtc2df bmFtZWxlbjsKKwkgICAgICB1aW50MzJfdCBtc2dfaW92OworCSAgICAgIHVp bnQzMl90IG1zZ19pb3ZsZW47CisJICAgICAgdWludDMyX3QgbXNnX2NvbnRy b2w7CisJICAgICAgdWludDMyX3QgbXNnX2NvbnRyb2xsZW47CisJICAgICAg dWludDMyX3QgbXNnX2ZsYWdzOworCSAgICB9IHJlYzsKKwkgICAgc3RydWN0 IHJlY29yZF9pb3ZlYworCSAgICB7CisJICAgICAgdWludDMyX3QgaW92X2Jh c2U7CisJICAgICAgdWludDMyX3QgaW92X2xlbjsKKwkgICAgfSBpb3Y7CisK KwkgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRl cC0+YXJnMiwKKwkJCSAgICAgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwor CSAgICBpZiAodG1wdTMyKQorCSAgICAgIHsKKwkJaWYgKHRhcmdldF9yZWFk X21lbW9yeSAodG1wdTMyLCAoZ2RiX2J5dGUgKikgYSwgc2l6ZW9mIChhKSkp CisJCSAgeworCQkgICAgaWYgKHJlY29yZF9kZWJ1ZykKKwkJICAgICAgewor CQkJZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorCQkJCQkgICAg IlByb2Nlc3MgcmVjb3JkOiBlcnJvciByZWFkaW5nIG1lbW9yeSBhdCBhZGRy ID0gMHglcyBsZW4gPSAlZC5cbiIsCisJCQkJCSAgICBwYWRkcl9ueiAodG1w dTMyKSwgc2l6ZW9mIChhKSk7CisJCSAgICAgIH0KKwkJICAgIHJldHVybiAo LTEpOworCQkgIH0KKwkJaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo YVsxXSwgdGRlcC0+c2l6ZV9tc2doZHIpKQorCQkgIHsKKwkJICAgIHJldHVy biAoLTEpOworCQkgIH0KKwkJaWYgKGFbMV0pCisJCSAgeworCQkgICAgaWYg KHRhcmdldF9yZWFkX21lbW9yeQorCQkJKGFbMV0sIChnZGJfYnl0ZSAqKSAm IHJlYywgc2l6ZW9mIChyZWMpKSkKKwkJICAgICAgeworCQkJaWYgKHJlY29y ZF9kZWJ1ZykKKwkJCSAgeworCQkJICAgIGZwcmludGZfdW5maWx0ZXJlZCAo Z2RiX3N0ZGxvZywKKwkJCQkJCSJQcm9jZXNzIHJlY29yZDogZXJyb3IgcmVh ZGluZyBtZW1vcnkgYXQgYWRkciA9IDB4JXMgbGVuID0gJWQuXG4iLAorCQkJ CQkJcGFkZHJfbnogKGFbMV0pLAorCQkJCQkJc2l6ZW9mIChyZWMpKTsKKwkJ CSAgfQorCQkJcmV0dXJuICgtMSk7CisJCSAgICAgIH0KKwkJICAgIGlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0KKwkJCShyZWMubXNnX25hbWUsIHJl Yy5tc2dfbmFtZWxlbikpCisJCSAgICAgIHsKKwkJCXJldHVybiAoLTEpOwor CQkgICAgICB9CisJCSAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVt CisJCQkocmVjLm1zZ19jb250cm9sLCByZWMubXNnX2NvbnRyb2xsZW4pKQor CQkgICAgICB7CisJCQlyZXR1cm4gKC0xKTsKKwkJICAgICAgfQorCQkgICAg aWYgKHJlYy5tc2dfaW92KQorCQkgICAgICB7CisJCQlmb3IgKGkgPSAwOyBp IDwgcmVjLm1zZ19pb3ZsZW47IGkrKykKKwkJCSAgeworCQkJICAgIGlmICh0 YXJnZXRfcmVhZF9tZW1vcnkKKwkJCQkocmVjLm1zZ19pb3YsIChnZGJfYnl0 ZSAqKSAmIGlvdiwKKwkJCQkgc2l6ZW9mIChpb3YpKSkKKwkJCSAgICAgIHsK KwkJCQlpZiAocmVjb3JkX2RlYnVnKQorCQkJCSAgeworCQkJCSAgICBmcHJp bnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJCQkJIlByb2Nlc3Mg cmVjb3JkOiBlcnJvciByZWFkaW5nIG1lbW9yeSBhdCBhZGRyID0gMHglcyBs ZW4gPSAlZC5cbiIsCisJCQkJCQkJcGFkZHJfbnogKHJlYy4KKwkJCQkJCQkJ ICBtc2dfaW92KSwKKwkJCQkJCQlzaXplb2YgKGlvdikpOworCQkJCSAgfQor CQkJCXJldHVybiAoLTEpOworCQkJICAgICAgfQorCQkJICAgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9tZW0KKwkJCQkoaW92Lmlvdl9iYXNlLCBpb3Yu aW92X2xlbikpCisJCQkgICAgICB7CisJCQkJcmV0dXJuICgtMSk7CisJCQkg ICAgICB9CisJCQkgICAgcmVjLm1zZ19pb3YgKz0gc2l6ZW9mIChzdHJ1Y3Qg cmVjb3JkX2lvdmVjKTsKKwkJCSAgfQorCQkgICAgICB9CisJCSAgfQorCSAg ICAgIH0KKwkgIH0KKwkgIGJyZWFrOworCWRlZmF1bHQ6CisJICBwcmludGZf dW5maWx0ZXJlZCAoXworCQkJICAgICAoIlByb2Nlc3MgcmVjb3JkIGFuZCBy ZXBsYXkgdGFyZ2V0IGRvZXNuJ3Qgc3VwcG9ydCBzb2NrZXRjYWxsIGNhbGwg MHglMDh4XG4iKSwKKwkJCSAgICAgdG1wdTMyKTsKKwkgIHJldHVybiAoLTEp OworCSAgYnJlYWs7CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5 c19zeXNsb2cgKi8KKyAgICBjYXNlIDEwMzoKKyAgICAgIGJyZWFrOworCisg ICAgICAvKiBzeXNfc2V0aXRpbWVyICovCisgICAgY2FzZSAxMDQ6CisgICAg ICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5h cmczLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX2l0aW1l cnZhbCkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgYnJlYWs7 CisKKyAgICAgIC8qIHN5c19nZXRpdGltZXIgKi8KKyAgICBjYXNlIDEwNToK KyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRk ZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVf aXRpbWVydmFsKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBi cmVhazsKKworICAgICAgLyogc3lzX25ld3N0YXQgKi8KKyAgICBjYXNlIDEw NjoKKyAgICAgIC8qIHN5c19uZXdsc3RhdCAqLworICAgIGNhc2UgMTA3Ogor ICAgICAgLyogc3lzX25ld2ZzdGF0ICovCisgICAgY2FzZSAxMDg6CisgICAg ICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5h cmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX3N0YXQp KQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGJyZWFrOworCisg ICAgICAvKiBzeXNfdW5hbWUgKi8KKyAgICBjYXNlIDEwOToKKyAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzEs IChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfb2xkX3V0c25h bWUpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGJyZWFrOwor CisgICAgICAvKiBzeXNfaW9wbCAqLworICAgIGNhc2UgMTEwOgorICAgICAg Lyogc3lzX3ZoYW5ndXAgKi8KKyAgICBjYXNlIDExMToKKyAgICAgIC8qIHN5 c19uaV9zeXNjYWxsICovCisgICAgY2FzZSAxMTI6CisgICAgICAvKiBzeXNf dm04Nm9sZCAqLworICAgIGNhc2UgMTEzOgorICAgICAgYnJlYWs7CisKKyAg ICAgIC8qIHN5c193YWl0NCAqLworICAgIGNhc2UgMTE0OgorICAgICAgcmVn Y2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMiwg KGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9pbnQpKQorCXsK KwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFk IChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzQsIChnZGJfYnl0ZSAqKSAm IHRtcHUzMik7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVt ICh0bXB1MzIsIHRkZXAtPnNpemVfcnVzYWdlKSkKKwl7CisJICByZXR1cm4g KC0xKTsKKwl9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX3N3YXBv ZmYgKi8KKyAgICBjYXNlIDExNToKKyAgICAgIGJyZWFrOworCisgICAgICAv KiBzeXNfc3lzaW5mbyAqLworICAgIGNhc2UgMTE2OgorICAgICAgcmVnY2Fj aGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMSwgKGdk Yl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9zeXNpbmZvKSkKKwl7 CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKworICAgICAg Lyogc3lzX2lwYyAqLworICAgIGNhc2UgMTE3OgorICAgICAgcmVnY2FjaGVf cmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMSwgKGdkYl9i eXRlICopICYgdG1wdTMyKTsKKyAgICAgIHN3aXRjaCAodG1wdTMyKQorCXsK KwljYXNlIFJFQ09SRF9NU0dSQ1Y6CisJICB7CisJICAgIGludDMyX3Qgc2Vj b25kOworCSAgICB1aW50MzJfdCBwdHI7CisJICAgIHJlZ2NhY2hlX3Jhd19y ZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzMsCisJCQkgICAgICAg KGdkYl9ieXRlICopICYgc2Vjb25kKTsKKwkgICAgcmVnY2FjaGVfcmF3X3Jl YWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnNSwKKwkJCSAgICAgICAo Z2RiX2J5dGUgKikgJiBwdHIpOworCSAgICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfbWVtIChwdHIsIHNlY29uZCArIHRkZXAtPnNpemVfbG9uZykpCisJ ICAgICAgeworCQlyZXR1cm4gKC0xKTsKKwkgICAgICB9CisJICB9CisJICBi cmVhazsKKwljYXNlIFJFQ09SRF9NU0dDVEw6CisJICByZWdjYWNoZV9yYXdf cmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmc1LAorCQkJICAgICAo Z2RiX2J5dGUgKikgJiB0bXB1MzIpOworCSAgaWYgKHJlY29yZF9hcmNoX2xp c3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX21zcWlkX2RzKSkKKwkg ICAgeworCSAgICAgIHJldHVybiAoLTEpOworCSAgICB9CisJICBicmVhazsK KwljYXNlIFJFQ09SRF9TSE1BVDoKKwkgIHJlZ2NhY2hlX3Jhd19yZWFkIChy ZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzQsCisJCQkgICAgIChnZGJfYnl0 ZSAqKSAmIHRtcHUzMik7CisJICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf bWVtICh0bXB1MzIsIHRkZXAtPnNpemVfdWxvbmcpKQorCSAgICB7CisJICAg ICAgcmV0dXJuICgtMSk7CisJICAgIH0KKwkgIGJyZWFrOworCWNhc2UgUkVD T1JEX1NITUNUTDoKKwkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVn Y2FjaGUsIHRkZXAtPmFyZzUsCisJCQkgICAgIChnZGJfYnl0ZSAqKSAmIHRt cHUzMik7CisJICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1 MzIsIHRkZXAtPnNpemVfc2htaWRfZHMpKQorCSAgICB7CisJICAgICAgcmV0 dXJuICgtMSk7CisJICAgIH0KKwkgIGJyZWFrOworCX0KKyAgICAgIGJyZWFr OworCisgICAgICAvKiBzeXNfZnN5bmMgKi8KKyAgICBjYXNlIDExODoKKyAg ICAgIC8qIHN5c19zaWdyZXR1cm4gKi8KKyAgICBjYXNlIDExOToKKyAgICAg IC8qIHN5c19jbG9uZSAqLworICAgIGNhc2UgMTIwOgorICAgICAgLyogc3lz X3NldGRvbWFpbm5hbWUgKi8KKyAgICBjYXNlIDEyMToKKyAgICAgIGJyZWFr OworCisgICAgICAvKiBzeXNfbmV3dW5hbWUgKi8KKyAgICBjYXNlIDEyMjoK KyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRk ZXAtPmFyZzEsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVf bmV3X3V0c25hbWUpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAg IGJyZWFrOworCisgICAgICAvKiBzeXNfbW9kaWZ5X2xkdCAqLworICAgIGNh c2UgMTIzOgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdj YWNoZSwgdGRlcC0+YXJnMSwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAg ICAgIGlmICh0bXB1MzIgPT0gMCB8fCB0bXB1MzIgPT0gMikKKwl7CisJICB1 aW50MzJfdCBwdHIsIGJ5dGVjb3VudDsKKwkgIHJlZ2NhY2hlX3Jhd19yZWFk IChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAm IHB0cik7CisJICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hl LCB0ZGVwLT5hcmczLAorCQkJICAgICAoZ2RiX2J5dGUgKikgJiBieXRlY291 bnQpOworCSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAocHRyLCBi eXRlY291bnQpKQorCSAgICB7CisJICAgICAgcmV0dXJuICgtMSk7CisJICAg IH0KKwl9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX2FkanRpbWV4 ICovCisgICAgY2FzZSAxMjQ6CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAo cmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAoZ2RiX2J5dGUgKikgJiB0 bXB1MzIpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo dG1wdTMyLCB0ZGVwLT5zaXplX3RpbWV4KSkKKwl7CisJICByZXR1cm4gKC0x KTsKKwl9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX21wcm90ZWN0 ICovCisgICAgY2FzZSAxMjU6CisgICAgICBicmVhazsKKworICAgICAgLyog c3lzX3NpZ3Byb2NtYXNrICovCisgICAgY2FzZSAxMjY6CisgICAgICByZWdj YWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmczLCAo Z2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX29sZF9zaWdzZXRf dCkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgYnJlYWs7CisK KyAgICAgIC8qIHN5c19uaV9zeXNjYWxsICovCisgICAgY2FzZSAxMjc6Cisg ICAgICAvKiBzeXNfaW5pdF9tb2R1bGUgKi8KKyAgICBjYXNlIDEyODoKKyAg ICAgIC8qIHN5c19kZWxldGVfbW9kdWxlICovCisgICAgY2FzZSAxMjk6Cisg ICAgICAvKiBzeXNfbmlfc3lzY2FsbCAqLworICAgIGNhc2UgMTMwOgorICAg ICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19xdW90YWN0bCAqLworICAgIGNh c2UgMTMxOgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdj YWNoZSwgdGRlcC0+YXJnMSwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAg ICAgIHN3aXRjaCAodG1wdTMyKQorCXsKKwljYXNlIFJFQ09SRF9RX0dFVEZN VDoKKwkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRk ZXAtPmFyZzQsCisJCQkgICAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisJ ICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIDQpKQor CSAgICB7CisJICAgICAgcmV0dXJuICgtMSk7CisJICAgIH0KKwkgIGJyZWFr OworCWNhc2UgUkVDT1JEX1FfR0VUSU5GTzoKKwkgIHJlZ2NhY2hlX3Jhd19y ZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzQsCisJCQkgICAgIChn ZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisJICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfbWVtX2RxaW5mbykpCisJ ICAgIHsKKwkgICAgICByZXR1cm4gKC0xKTsKKwkgICAgfQorCSAgYnJlYWs7 CisJY2FzZSBSRUNPUkRfUV9HRVRRVU9UQToKKwkgIHJlZ2NhY2hlX3Jhd19y ZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzQsCisJCQkgICAgIChn ZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisJICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfaWZfZHFibGspKQorCSAg ICB7CisJICAgICAgcmV0dXJuICgtMSk7CisJICAgIH0KKwkgIGJyZWFrOwor CWNhc2UgUkVDT1JEX1FfWEdFVFFTVEFUOgorCWNhc2UgUkVDT1JEX1FfWEdF VFFVT1RBOgorCSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNo ZSwgdGRlcC0+YXJnNCwKKwkJCSAgICAgKGdkYl9ieXRlICopICYgdG1wdTMy KTsKKwkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwg dGRlcC0+c2l6ZV9mc19xdW90YV9zdGF0KSkKKwkgICAgeworCSAgICAgIHJl dHVybiAoLTEpOworCSAgICB9CisJICBicmVhazsKKwl9CisgICAgICBicmVh azsKKworICAgICAgLyogc3lzX2dldHBnaWQgKi8KKyAgICBjYXNlIDEzMjoK KyAgICAgIC8qIHN5c19mY2hkaXIgKi8KKyAgICBjYXNlIDEzMzoKKyAgICAg IC8qIHN5c19iZGZsdXNoICovCisgICAgY2FzZSAxMzQ6CisgICAgICBicmVh azsKKworICAgICAgLyogc3lzX3N5c2ZzICovCisgICAgY2FzZSAxMzU6Cisg ICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVw LT5hcmcxLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYgKHRt cHUzMiA9PSAyKQorCXsKKwkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRf cmVnY2FjaGUsIHRkZXAtPmFyZzMsCisJCQkgICAgIChnZGJfYnl0ZSAqKSAm IHRtcHUzMik7CisJICAvKlhYWCB0aGUgc2l6ZSBvZiBtZW1vcnkgaXMgbm90 IHZlcnkgY2xlYXIgKi8KKwkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9t ZW0gKHRtcHUzMiwgMTApKQorCSAgICB7CisJICAgICAgcmV0dXJuICgtMSk7 CisJICAgIH0KKwl9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX3Bl cnNvbmFsaXR5ICovCisgICAgY2FzZSAxMzY6CisgICAgICAvKiBzeXNfbmlf c3lzY2FsbCAqLworICAgIGNhc2UgMTM3OgorICAgICAgLyogc3lzX3NldGZz dWlkMTYgKi8KKyAgICBjYXNlIDEzODoKKyAgICAgIC8qIHN5c19zZXRmc2dp ZDE2ICovCisgICAgY2FzZSAxMzk6CisgICAgICBicmVhazsKKworICAgICAg Lyogc3lzX2xsc2VlayAqLworICAgIGNhc2UgMTQwOgorICAgICAgcmVnY2Fj aGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnNCwgKGdk Yl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9sb2ZmX3QpKQorCXsK KwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGJyZWFrOworCisgICAgICAv KiBzeXNfZ2V0ZGVudHMgKi8KKyAgICBjYXNlIDE0MToKKyAgICAgIHsKKwl1 aW50MzJfdCBjb3VudDsKKwlyZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3Jl Z2NhY2hlLCB0ZGVwLT5hcmcyLAorCQkJICAgKGdkYl9ieXRlICopICYgdG1w dTMyKTsKKwlyZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0 ZGVwLT5hcmczLCAoZ2RiX2J5dGUgKikgJiBjb3VudCk7CisJaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX2RpcmVu dCAqIGNvdW50KSkKKwkgIHsKKwkgICAgcmV0dXJuICgtMSk7CisJICB9Cisg ICAgICB9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX3NlbGVjdCAq LworICAgIGNhc2UgMTQyOgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJl Y29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1w dTMyKTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRt cHUzMiwgdGRlcC0+c2l6ZV9mZF9zZXQpKQorCXsKKwkgIHJldHVybiAoLTEp OworCX0KKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2Fj aGUsIHRkZXAtPmFyZzMsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAg ICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAt PnNpemVfZmRfc2V0KSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAg ICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5h cmc0LCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX2ZkX3Nl dCkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgcmVnY2FjaGVf cmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnNSwgKGdkYl9i eXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV90aW1ldmFsKSkKKwl7CisJ ICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKworICAgICAgLyog c3lzX2Zsb2NrICovCisgICAgY2FzZSAxNDM6CisgICAgICAvKiBzeXNfbXN5 bmMgKi8KKyAgICBjYXNlIDE0NDoKKyAgICAgIGJyZWFrOworCisgICAgICAv KiBzeXNfcmVhZHYgKi8KKyAgICBjYXNlIDE0NToKKyAgICAgIHsKKwl1aW50 MzJfdCB2ZWM7CisJdWludDMyX3QgdmxlbjsKKwlzdHJ1Y3QgcmVjb3JkX2lv dmVjCisJeworCSAgdWludDMyX3QgaW92X2Jhc2U7CisJICB1aW50MzJfdCBp b3ZfbGVuOworCX0gaW92OworCXJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRf cmVnY2FjaGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHZlYyk7CisJ aWYgKHZlYykKKwkgIHsKKwkgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29y ZF9yZWdjYWNoZSwgdGRlcC0+YXJnMywKKwkJCSAgICAgICAoZ2RiX2J5dGUg KikgJiB2bGVuKTsKKwkgICAgZm9yICh0bXB1MzIgPSAwOyB0bXB1MzIgPCB2 bGVuOyB0bXB1MzIrKykKKwkgICAgICB7CisJCWlmICh0YXJnZXRfcmVhZF9t ZW1vcnkKKwkJICAgICh2ZWMsIChnZGJfYnl0ZSAqKSAmIGlvdiwgc2l6ZW9m IChzdHJ1Y3QgcmVjb3JkX2lvdmVjKSkpCisJCSAgeworCQkgICAgaWYgKHJl Y29yZF9kZWJ1ZykKKwkJICAgICAgeworCQkJZnByaW50Zl91bmZpbHRlcmVk IChnZGJfc3RkbG9nLAorCQkJCQkgICAgIlByb2Nlc3MgcmVjb3JkOiBlcnJv ciByZWFkaW5nIG1lbW9yeSBhdCBhZGRyID0gMHglcyBsZW4gPSAlZC5cbiIs CisJCQkJCSAgICBwYWRkcl9ueiAodmVjKSwKKwkJCQkJICAgIHNpemVvZiAo c3RydWN0IHJlY29yZF9pb3ZlYykpOworCQkgICAgICB9CisJCSAgICByZXR1 cm4gKC0xKTsKKwkJICB9CisJCWlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9t ZW0gKGlvdi5pb3ZfYmFzZSwgaW92Lmlvdl9sZW4pKQorCQkgIHsKKwkJICAg IHJldHVybiAoLTEpOworCQkgIH0KKwkJdmVjICs9IHNpemVvZiAoc3RydWN0 IHJlY29yZF9pb3ZlYyk7CisJICAgICAgfQorCSAgfQorICAgICAgfQorICAg ICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c193cml0ZXYgKi8KKyAgICBjYXNl IDE0NjoKKyAgICAgIC8qIHN5c19nZXRzaWQgKi8KKyAgICBjYXNlIDE0NzoK KyAgICAgIC8qIHN5c19mZGF0YXN5bmMgKi8KKyAgICBjYXNlIDE0ODoKKyAg ICAgIC8qIHN5c19zeXNjdGwgKi8KKyAgICBjYXNlIDE0OToKKyAgICAgIC8q IHN5c19tbG9jayAqLworICAgIGNhc2UgMTUwOgorICAgICAgLyogc3lzX211 bmxvY2sgKi8KKyAgICBjYXNlIDE1MToKKyAgICAgIC8qIHN5c19tbG9ja2Fs bCAqLworICAgIGNhc2UgMTUyOgorICAgICAgLyogc3lzX211bmxvY2thbGwg Ki8KKyAgICBjYXNlIDE1MzoKKyAgICAgIC8qIHN5c19zY2hlZF9zZXRwYXJh bSAqLworICAgIGNhc2UgMTU0OgorICAgICAgYnJlYWs7CisKKyAgICAgIC8q IHN5c19zY2hlZF9nZXRwYXJhbSAqLworICAgIGNhc2UgMTU1OgorICAgICAg cmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJn MiwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmIChyZWNvcmRf YXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9pbnQpKQor CXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGJyZWFrOworCisgICAg ICAvKiBzeXNfc2NoZWRfc2V0c2NoZWR1bGVyICovCisgICAgY2FzZSAxNTY6 CisgICAgICAvKiBzeXNfc2NoZWRfZ2V0c2NoZWR1bGVyICovCisgICAgY2Fz ZSAxNTc6CisgICAgICAvKiBzeXNfc2NoZWRfeWllbGQgKi8KKyAgICBjYXNl IDE1ODoKKyAgICAgIC8qIHN5c19zY2hlZF9nZXRfcHJpb3JpdHlfbWF4ICov CisgICAgY2FzZSAxNTk6CisgICAgICAvKiBzeXNfc2NoZWRfZ2V0X3ByaW9y aXR5X21pbiAqLworICAgIGNhc2UgMTYwOgorICAgICAgYnJlYWs7CisKKyAg ICAgIC8qIHN5c19zY2hlZF9ycl9nZXRfaW50ZXJ2YWwgKi8KKyAgICBjYXNl IDE2MToKKyAgICAgIC8qIHN5c19uYW5vc2xlZXAgKi8KKyAgICBjYXNlIDE2 MjoKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUs IHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNp emVfdGltZXNwZWMpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAg IGJyZWFrOworCisgICAgICAvKiBzeXNfbXJlbWFwICovCisgICAgY2FzZSAx NjM6CisgICAgICAvKiBzeXNfc2V0cmVzdWlkMTYgKi8KKyAgICBjYXNlIDE2 NDoKKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfZ2V0cmVzdWlkMTYg Ki8KKyAgICBjYXNlIDE2NToKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChy ZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzEsIChnZGJfYnl0ZSAqKSAmIHRt cHUzMik7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0 bXB1MzIsIHRkZXAtPnNpemVfb2xkX3VpZF90KSkKKwl7CisJICByZXR1cm4g KC0xKTsKKwl9CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3Jl Z2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwor ICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0 ZGVwLT5zaXplX29sZF91aWRfdCkpCisJeworCSAgcmV0dXJuICgtMSk7CisJ fQorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwg dGRlcC0+YXJnMywgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6 ZV9vbGRfdWlkX3QpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAg IGJyZWFrOworCisgICAgICAvKiBzeXNfdm04NiAqLworICAgIGNhc2UgMTY2 OgorICAgICAgLyogc3lzX25pX3N5c2NhbGwgKi8KKyAgICBjYXNlIDE2NzoK KyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfcG9sbCAqLworICAgIGNh c2UgMTY4OgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdj YWNoZSwgdGRlcC0+YXJnMSwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAg ICAgIGlmICh0bXB1MzIpCisJeworCSAgdWludDMyX3QgbmZkczsKKwkgIHJl Z2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzIs CisJCQkgICAgIChnZGJfYnl0ZSAqKSAmIG5mZHMpOworCSAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX3BvbGxm ZCAqIG5mZHMpKQorCSAgICB7CisJICAgICAgcmV0dXJuICgtMSk7CisJICAg IH0KKwl9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX25mc3NlcnZj dGwgKi8KKyAgICBjYXNlIDE2OToKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFk IChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzEsIChnZGJfYnl0ZSAqKSAm IHRtcHUzMik7CisgICAgICBpZiAodG1wdTMyID09IDcgfHwgdG1wdTMyID09 IDgpCisJeworCSAgdWludDMyX3QgcnNpemU7CisJICBpZiAodG1wdTMyID09 IDcpCisJICAgIHsKKwkgICAgICByc2l6ZSA9IHRkZXAtPnNpemVfTkZTX0ZI U0laRTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgcnNpemUg PSB0ZGVwLT5zaXplX2tuZnNkX2ZoOworCSAgICB9CisJICByZWdjYWNoZV9y YXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmczLAorCQkJICAg ICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworCSAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX21lbSAodG1wdTMyLCByc2l6ZSkpCisJICAgIHsKKwkgICAg ICByZXR1cm4gKC0xKTsKKwkgICAgfQorCX0KKyAgICAgIGJyZWFrOworCisg ICAgICAvKiBzeXNfc2V0cmVzZ2lkMTYgKi8KKyAgICBjYXNlIDE3MDoKKyAg ICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfZ2V0cmVzZ2lkMTYgKi8KKyAg ICBjYXNlIDE3MToKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRf cmVnY2FjaGUsIHRkZXAtPmFyZzEsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7 CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIs IHRkZXAtPnNpemVfb2xkX2dpZF90KSkKKwl7CisJICByZXR1cm4gKC0xKTsK Kwl9CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hl LCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5z aXplX29sZF9naWRfdCkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAg ICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+ YXJnMywgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9vbGRf Z2lkX3QpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGJyZWFr OworCisgICAgICAvKiBzeXNfcHJjdGwgKi8KKyAgICBjYXNlIDE3MjoKKyAg ICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAt PmFyZzEsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBzd2l0Y2gg KHRtcHUzMikKKwl7CisJY2FzZSAyOgorCSAgcmVnY2FjaGVfcmF3X3JlYWQg KHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMiwKKwkJCSAgICAgKGdkYl9i eXRlICopICYgdG1wdTMyKTsKKwkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9pbnQpKQorCSAgICB7CisJICAg ICAgcmV0dXJuICgtMSk7CisJICAgIH0KKwkgIGJyZWFrOworCWNhc2UgMTY6 CisJICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVw LT5hcmcyLAorCQkJICAgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworCSAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5z aXplX1RBU0tfQ09NTV9MRU4pKQorCSAgICB7CisJICAgICAgcmV0dXJuICgt MSk7CisJICAgIH0KKwkgIGJyZWFrOworCX0KKyAgICAgIGJyZWFrOworCisg ICAgICAvKiBzeXNfcnRfc2lncmV0dXJuICovCisgICAgY2FzZSAxNzM6Cisg ICAgICBicmVhazsKKworICAgICAgLyogc3lzX3J0X3NpZ2FjdGlvbiAqLwor ICAgIGNhc2UgMTc0OgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29y ZF9yZWdjYWNoZSwgdGRlcC0+YXJnMywgKGdkYl9ieXRlICopICYgdG1wdTMy KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUz MiwgdGRlcC0+c2l6ZV9zaWdhY3Rpb24pKQorCXsKKwkgIHJldHVybiAoLTEp OworCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfcnRfc2lncHJv Y21hc2sgKi8KKyAgICBjYXNlIDE3NToKKyAgICAgIHJlZ2NhY2hlX3Jhd19y ZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzMsIChnZGJfYnl0ZSAq KSAmIHRtcHUzMik7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf bWVtICh0bXB1MzIsIHRkZXAtPnNpemVfc2lnc2V0X3QpKQorCXsKKwkgIHJl dHVybiAoLTEpOworCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNf cnRfc2lncGVuZGluZyAqLworICAgIGNhc2UgMTc2OgorICAgICAgcmVnY2Fj aGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMSwgKGdk Yl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmICh0bXB1MzIpCisJewor CSAgdWludDMyX3Qgc2lnc2V0c2l6ZTsKKwkgIHJlZ2NhY2hlX3Jhd19yZWFk IChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzIsCisJCQkgICAgIChnZGJf Ynl0ZSAqKSAmIHNpZ3NldHNpemUpOworCSAgaWYgKHJlY29yZF9hcmNoX2xp c3RfYWRkX21lbSAodG1wdTMyLCBzaWdzZXRzaXplKSkKKwkgICAgeworCSAg ICAgIHJldHVybiAoLTEpOworCSAgICB9CisJfQorICAgICAgYnJlYWs7CisK KyAgICAgIC8qIHN5c19ydF9zaWd0aW1lZHdhaXQgKi8KKyAgICBjYXNlIDE3 NzoKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUs IHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNp emVfc2lnaW5mb190KSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAg ICBicmVhazsKKworICAgICAgLyogc3lzX3J0X3NpZ3F1ZXVlaW5mbyAqLwor ICAgIGNhc2UgMTc4OgorICAgICAgLyogc3lzX3J0X3NpZ3N1c3BlbmQgKi8K KyAgICBjYXNlIDE3OToKKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNf cHJlYWQ2NCAqLworICAgIGNhc2UgMTgwOgorICAgICAgcmVnY2FjaGVfcmF3 X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRl ICopICYgdG1wdTMyKTsKKyAgICAgIGlmICh0bXB1MzIpCisJeworCSAgdWlu dDMyX3QgY291bnQ7CisJICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3Jl Z2NhY2hlLCB0ZGVwLT5hcmczLAorCQkJICAgICAoZ2RiX2J5dGUgKikgJiBj b3VudCk7CisJICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1 MzIsIGNvdW50KSkKKwkgICAgeworCSAgICAgIHJldHVybiAoLTEpOworCSAg ICB9CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19wd3JpdGU2 NCAqLworICAgIGNhc2UgMTgxOgorICAgICAgLyogc3lzX2Nob3duMTYgKi8K KyAgICBjYXNlIDE4MjoKKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNf Z2V0Y3dkICovCisgICAgY2FzZSAxODM6CisgICAgICByZWdjYWNoZV9yYXdf cmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAoZ2RiX2J5dGUg KikgJiB0bXB1MzIpOworICAgICAgaWYgKHRtcHUzMikKKwl7CisJICB1aW50 MzJfdCBzaXplOworCSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdj YWNoZSwgdGRlcC0+YXJnMiwKKwkJCSAgICAgKGdkYl9ieXRlICopICYgc2l6 ZSk7CisJICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIs IHNpemUpKQorCSAgICB7CisJICAgICAgcmV0dXJuICgtMSk7CisJICAgIH0K Kwl9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX2NhcGdldCAqLwor ICAgIGNhc2UgMTg0OgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29y ZF9yZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1wdTMy KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUz MiwgdGRlcC0+c2l6ZV9jYXBfdXNlcl9kYXRhX3QpKQorCXsKKwkgIHJldHVy biAoLTEpOworCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfY2Fw c2V0ICovCisgICAgY2FzZSAxODU6CisgICAgICBicmVhazsKKworICAgICAg Lyogc3lzX3NpZ2FsdHN0YWNrICovCisgICAgY2FzZSAxODY6CisgICAgICBy ZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmcy LCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX3N0YWNrX3Qp KQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGJyZWFrOworCisg ICAgICAvKiBzeXNfc2VuZGZpbGUgKi8KKyAgICBjYXNlIDE4NzoKKyAgICAg IHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFy ZzMsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfb2ZmX3Qp KQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGJyZWFrOworCisg ICAgICAvKiBzeXNfbmlfc3lzY2FsbCAqLworICAgIGNhc2UgMTg4OgorICAg ICAgLyogc3lzX25pX3N5c2NhbGwgKi8KKyAgICBjYXNlIDE4OToKKyAgICAg IC8qIHN5c192Zm9yayAqLworICAgIGNhc2UgMTkwOgorICAgICAgYnJlYWs7 CisKKyAgICAgIC8qIHN5c19nZXRybGltaXQgKi8KKyAgICBjYXNlIDE5MToK KyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRk ZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVf cmxpbWl0KSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVh azsKKworICAgICAgLyogc3lzX21tYXAyICovCisgICAgY2FzZSAxOTI6Cisg ICAgICBicmVhazsKKworICAgICAgLyogc3lzX3RydW5jYXRlNjQgKi8KKyAg ICBjYXNlIDE5MzoKKyAgICAgIC8qIHN5c19mdHJ1bmNhdGU2NCAqLworICAg IGNhc2UgMTk0OgorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19zdGF0 NjQgKi8KKyAgICBjYXNlIDE5NToKKyAgICAgIC8qIHN5c19sc3RhdDY0ICov CisgICAgY2FzZSAxOTY6CisgICAgICAvKiBzeXNfZnN0YXQ2NCAqLworICAg IGNhc2UgMTk3OgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9y ZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsK KyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwg dGRlcC0+c2l6ZV9zdGF0NjQpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0K KyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfbGNob3duICovCisgICAg Y2FzZSAxOTg6CisgICAgICAvKiBzeXNfZ2V0dWlkICovCisgICAgY2FzZSAx OTk6CisgICAgICAvKiBzeXNfZ2V0Z2lkICovCisgICAgY2FzZSAyMDA6Cisg ICAgICAvKiBzeXNfZ2V0ZXVpZCAqLworICAgIGNhc2UgMjAxOgorICAgICAg Lyogc3lzX2dldGVnaWQgKi8KKyAgICBjYXNlIDIwMjoKKyAgICAgIC8qIHN5 c19zZXRyZXVpZCAqLworICAgIGNhc2UgMjAzOgorICAgICAgLyogc3lzX3Nl dHJlZ2lkICovCisgICAgY2FzZSAyMDQ6CisgICAgICBicmVhazsKKworICAg ICAgLyogc3lzX2dldGdyb3VwcyAqLworICAgIGNhc2UgMjA1OgorICAgICAg cmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJn MiwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmICh0bXB1MzIp CisJeworCSAgaW50IGdpZHNldHNpemU7CisJICByZWdjYWNoZV9yYXdfcmVh ZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmcxLAorCQkJICAgICAoZ2Ri X2J5dGUgKikgJiBnaWRzZXRzaXplKTsKKwkgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0KKwkgICAgICAodG1wdTMyLCB0ZGVwLT5zaXplX2dpZF90 ICogZ2lkc2V0c2l6ZSkpCisJICAgIHsKKwkgICAgICByZXR1cm4gKC0xKTsK KwkgICAgfQorCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfc2V0 Z3JvdXBzICovCisgICAgY2FzZSAyMDY6CisgICAgICAvKiBzeXNfZmNob3du ICovCisgICAgY2FzZSAyMDc6CisgICAgICAvKiBzeXNfc2V0cmVzdWlkICov CisgICAgY2FzZSAyMDg6CisgICAgICBicmVhazsKKworICAgICAgLyogc3lz X2dldHJlc3VpZCAqLworICAgIGNhc2UgMjA5OgorICAgICAgcmVnY2FjaGVf cmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMSwgKGdkYl9i eXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV91aWRfdCkpCisJeworCSAg cmV0dXJuICgtMSk7CisJfQorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJl Y29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1w dTMyKTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRt cHUzMiwgdGRlcC0+c2l6ZV91aWRfdCkpCisJeworCSAgcmV0dXJuICgtMSk7 CisJfQorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNo ZSwgdGRlcC0+YXJnMywgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAg IGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+ c2l6ZV91aWRfdCkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAg YnJlYWs7CisKKyAgICAgIC8qIHN5c19zZXRyZXNnaWQgKi8KKyAgICBjYXNl IDIxMDoKKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfZ2V0cmVzZ2lk ICovCisgICAgY2FzZSAyMTE6CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAo cmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAoZ2RiX2J5dGUgKikgJiB0 bXB1MzIpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo dG1wdTMyLCB0ZGVwLT5zaXplX2dpZF90KSkKKwl7CisJICByZXR1cm4gKC0x KTsKKwl9CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2Nh Y2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVw LT5zaXplX2dpZF90KSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAg ICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5h cmczLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX2dpZF90 KSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKwor ICAgICAgLyogc3lzX2Nob3duICovCisgICAgY2FzZSAyMTI6CisgICAgICAv KiBzeXNfc2V0dWlkICovCisgICAgY2FzZSAyMTM6CisgICAgICAvKiBzeXNf c2V0Z2lkICovCisgICAgY2FzZSAyMTQ6CisgICAgICAvKiBzeXNfc2V0ZnN1 aWQgKi8KKyAgICBjYXNlIDIxNToKKyAgICAgIC8qIHN5c19zZXRmc2dpZCAq LworICAgIGNhc2UgMjE2OgorICAgICAgLyogc3lzX3Bpdm90X3Jvb3QgKi8K KyAgICBjYXNlIDIxNzoKKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNf bWluY29yZSAqLworICAgIGNhc2UgMjE4OgorICAgICAgcmVnY2FjaGVfcmF3 X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMywgKGdkYl9ieXRl ICopICYgdG1wdTMyKTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9QQUdFX1NJWkUpKQorCXsKKwkg IHJldHVybiAoLTEpOworCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBz eXNfbWFkdmlzZSAqLworICAgIGNhc2UgMjE5OgorICAgICAgYnJlYWs7CisK KyAgICAgIC8qIHN5c19nZXRkZW50czY0ICovCisgICAgY2FzZSAyMjA6Cisg ICAgICB7CisJdWludDMyX3QgY291bnQ7CisJcmVnY2FjaGVfcmF3X3JlYWQg KHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMiwKKwkJCSAgIChnZGJfYnl0 ZSAqKSAmIHRtcHUzMik7CisJcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9y ZWdjYWNoZSwgdGRlcC0+YXJnMywgKGdkYl9ieXRlICopICYgY291bnQpOwor CWlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+ c2l6ZV9kaXJlbnQ2NCAqIGNvdW50KSkKKwkgIHsKKwkgICAgcmV0dXJuICgt MSk7CisJICB9CisgICAgICB9CisgICAgICBicmVhazsKKworICAgICAgLyog c3lzX2ZjbnRsNjQgKi8KKyAgICBjYXNlIDIyMToKKyAgICAgIHJlZ2NhY2hl X3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzIsIChnZGJf Ynl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBzd2l0Y2ggKHRtcHUzMikKKwl7 CisJY2FzZSBGX0dFVExLNjQ6CisJICByZWdjYWNoZV9yYXdfcmVhZCAocmVj b3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmczLAorCQkJICAgICAoZ2RiX2J5dGUg KikgJiB0bXB1MzIpOworCSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21l bSAodG1wdTMyLCB0ZGVwLT5zaXplX2Zsb2NrNjQpKQorCSAgICB7CisJICAg ICAgcmV0dXJuICgtMSk7CisJICAgIH0KKwkgIGJyZWFrOworCWNhc2UgRl9T RVRMSzY0OgorCWNhc2UgRl9TRVRMS1c2NDoKKwkgIGJyZWFrOworCWRlZmF1 bHQ6CisJICBnb3RvIHN5c19mY250bDsKKwkgIGJyZWFrOworCX0KKyAgICAg IGJyZWFrOworCisgICAgICAvKiBzeXNfbmlfc3lzY2FsbCAqLworICAgIGNh c2UgMjIyOgorICAgICAgLyogc3lzX25pX3N5c2NhbGwgKi8KKyAgICBjYXNl IDIyMzoKKyAgICAgIC8qIHN5c19nZXR0aWQgKi8KKyAgICBjYXNlIDIyNDoK KyAgICAgIC8qIHN5c19yZWFkYWhlYWQgKi8KKyAgICBjYXNlIDIyNToKKyAg ICAgIC8qIHN5c19zZXR4YXR0ciAqLworICAgIGNhc2UgMjI2OgorICAgICAg Lyogc3lzX2xzZXR4YXR0ciAqLworICAgIGNhc2UgMjI3OgorICAgICAgLyog c3lzX2ZzZXR4YXR0ciAqLworICAgIGNhc2UgMjI4OgorICAgICAgYnJlYWs7 CisKKyAgICAgIC8qIHN5c19nZXR4YXR0ciAqLworICAgIGNhc2UgMjI5Ogor ICAgICAgLyogc3lzX2xnZXR4YXR0ciAqLworICAgIGNhc2UgMjMwOgorICAg ICAgLyogc3lzX2ZnZXR4YXR0ciAqLworICAgIGNhc2UgMjMxOgorICAgICAg cmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJn MywgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmICh0bXB1MzIp CisJeworCSAgdWludDMyX3Qgc2l6ZTsKKwkgIHJlZ2NhY2hlX3Jhd19yZWFk IChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzQsCisJCQkgICAgIChnZGJf Ynl0ZSAqKSAmIHNpemUpOworCSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRk X21lbSAodG1wdTMyLCBzaXplKSkKKwkgICAgeworCSAgICAgIHJldHVybiAo LTEpOworCSAgICB9CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5 c19saXN0eGF0dHIgKi8KKyAgICBjYXNlIDIzMjoKKyAgICAgIC8qIHN5c19s bGlzdHhhdHRyICovCisgICAgY2FzZSAyMzM6CisgICAgICAvKiBzeXNfZmxp c3R4YXR0ciAqLworICAgIGNhc2UgMjM0OgorICAgICAgcmVnY2FjaGVfcmF3 X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRl ICopICYgdG1wdTMyKTsKKyAgICAgIGlmICh0bXB1MzIpCisJeworCSAgdWlu dDMyX3Qgc2l6ZTsKKwkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVn Y2FjaGUsIHRkZXAtPmFyZzMsCisJCQkgICAgIChnZGJfYnl0ZSAqKSAmIHNp emUpOworCSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMy LCBzaXplKSkKKwkgICAgeworCSAgICAgIHJldHVybiAoLTEpOworCSAgICB9 CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19yZW1vdmV4YXR0 ciAqLworICAgIGNhc2UgMjM1OgorICAgICAgLyogc3lzX2xyZW1vdmV4YXR0 ciAqLworICAgIGNhc2UgMjM2OgorICAgICAgLyogc3lzX2ZyZW1vdmV4YXR0 ciAqLworICAgIGNhc2UgMjM3OgorICAgICAgLyogc3lzX3RraWxsICovCisg ICAgY2FzZSAyMzg6CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX3Nl bmRmaWxlNjQgKi8KKyAgICBjYXNlIDIzOToKKyAgICAgIHJlZ2NhY2hlX3Jh d19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzMsIChnZGJfYnl0 ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfbG9mZl90KSkKKwl7CisJICBy ZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lz X2Z1dGV4ICovCisgICAgY2FzZSAyNDA6CisgICAgICAvKiBzeXNfc2NoZWRf c2V0YWZmaW5pdHkgKi8KKyAgICBjYXNlIDI0MToKKyAgICAgIGJyZWFrOwor CisgICAgICAvKiBzeXNfc2NoZWRfZ2V0YWZmaW5pdHkgKi8KKyAgICBjYXNl IDI0MjoKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2Fj aGUsIHRkZXAtPmFyZzMsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAg ICBpZiAodG1wdTMyKQorCXsKKwkgIHVpbnQzMl90IGxlbjsKKwkgIHJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzIsIChn ZGJfYnl0ZSAqKSAmIGxlbik7CisJICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfbWVtICh0bXB1MzIsIGxlbikpCisJICAgIHsKKwkgICAgICByZXR1cm4g KC0xKTsKKwkgICAgfQorCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBz eXNfc2V0X3RocmVhZF9hcmVhICovCisgICAgY2FzZSAyNDM6CisgICAgICBy ZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmcx LCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX2ludCkpCisJ eworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICAg IC8qIHN5c19nZXRfdGhyZWFkX2FyZWEgKi8KKyAgICBjYXNlIDI0NDoKKyAg ICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAt PmFyZzEsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAocmVj b3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfdXNl cl9kZXNjKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVh azsKKworICAgICAgLyogc3lzX2lvX3NldHVwICovCisgICAgY2FzZSAyNDU6 CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0 ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXpl X2xvbmcpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGJyZWFr OworCisgICAgICAvKiBzeXNfaW9fZGVzdHJveSAqLworICAgIGNhc2UgMjQ2 OgorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19pb19nZXRldmVudHMg Ki8KKyAgICBjYXNlIDI0NzoKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChy ZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzQsIChnZGJfYnl0ZSAqKSAmIHRt cHUzMik7CisgICAgICBpZiAodG1wdTMyKQorCXsKKwkgIGludDMyX3QgbnI7 CisJICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVw LT5hcmczLCAoZ2RiX2J5dGUgKikgJiBucik7CisJICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIG5yICogdGRlcC0+c2l6ZV9pb19l dmVudCkpCisJICAgIHsKKwkgICAgICByZXR1cm4gKC0xKTsKKwkgICAgfQor CX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfaW9fc3VibWl0ICov CisgICAgY2FzZSAyNDg6CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVj b3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmczLCAoZ2RiX2J5dGUgKikgJiB0bXB1 MzIpOworICAgICAgaWYgKHRtcHUzMikKKwl7CisJICBpbnQzMl90IGksIG5y OworCSAgdWludDMyX3QgKmlvY2JwOworCSAgcmVnY2FjaGVfcmF3X3JlYWQg KHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYg bnIpOworCSAgaW9jYnAgPSAodWludDMyX3QgKikgYWxsb2NhIChuciAqIHRk ZXAtPnNpemVfaW50KTsKKwkgIGlmICh0YXJnZXRfcmVhZF9tZW1vcnkKKwkg ICAgICAodG1wdTMyLCAoZ2RiX2J5dGUgKikgaW9jYnAsIG5yICogdGRlcC0+ c2l6ZV9pbnQpKQorCSAgICB7CisJICAgICAgaWYgKHJlY29yZF9kZWJ1ZykK KwkJeworCQkgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJ CQkgICAgICAiUHJvY2VzcyByZWNvcmQ6IGVycm9yIHJlYWRpbmcgbWVtb3J5 IGF0IGFkZHIgPSAweCVzIGxlbiA9ICVkLlxuIiwKKwkJCQkgICAgICBwYWRk cl9ueiAodG1wdTMyKSwgbnIgKiB0ZGVwLT5zaXplX2ludCk7CisJCX0KKwkg ICAgICByZXR1cm4gKC0xKTsKKwkgICAgfQorCSAgZm9yIChpID0gMDsgaSA8 IG5yOyBpKyspCisJICAgIHsKKwkgICAgICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfbWVtIChpb2NicFtpXSwgdGRlcC0+c2l6ZV9pb2NiKSkKKwkJewor CQkgIHJldHVybiAoLTEpOworCQl9CisJICAgIH0KKwl9CisgICAgICBicmVh azsKKworICAgICAgLyogc3lzX2lvX2NhbmNlbCAqLworICAgIGNhc2UgMjQ5 OgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwg dGRlcC0+YXJnMywgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6 ZV9pb19ldmVudCkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAg YnJlYWs7CisKKyAgICAgIC8qIHN5c19mYWR2aXNlNjQgKi8KKyAgICBjYXNl IDI1MDoKKyAgICAgIC8qIHN5c19uaV9zeXNjYWxsICovCisgICAgY2FzZSAy NTE6CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX2V4aXRfZ3JvdXAg Ki8KKyAgICBjYXNlIDI1MjoKKyAgICAgIHsKKwlpbnQgcTsKKwl0YXJnZXRf dGVybWluYWxfb3VycyAoKTsKKwlxID0KKwkgIHlxdWVyeSAoXworCQkgICgi VGhlIG5leHQgaW5zdHJ1Y3Rpb24gaXMgc3lzY2FsbCBleGl0X2dyb3VwLiAg SXQgd2lsbCBtYWtlIHRoZSBwcm9ncmFtIGV4aXQuICBEbyB5b3Ugd2FudCB0 byBzdG9wIHRoZSBwcm9ncmFtPyIpKTsKKwl0YXJnZXRfdGVybWluYWxfaW5m ZXJpb3IgKCk7CisJaWYgKHEpCisJICB7CisJICAgIHJldHVybiAoMSk7CisJ ICB9CisgICAgICB9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX2xv b2t1cF9kY29va2llICovCisgICAgY2FzZSAyNTM6CisgICAgICByZWdjYWNo ZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2Ri X2J5dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYgKHRtcHUzMikKKwl7CisJ ICB1aW50MzJfdCBsZW47CisJICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3Jk X3JlZ2NhY2hlLCB0ZGVwLT5hcmczLCAoZ2RiX2J5dGUgKikgJiBsZW4pOwor CSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCBsZW4p KQorCSAgICB7CisJICAgICAgcmV0dXJuICgtMSk7CisJICAgIH0KKwl9Cisg ICAgICBicmVhazsKKworICAgICAgLyogc3lzX2Vwb2xsX2NyZWF0ZSAqLwor ICAgIGNhc2UgMjU0OgorICAgICAgLyogc3lzX2Vwb2xsX2N0bCAqLworICAg IGNhc2UgMjU1OgorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19lcG9s bF93YWl0ICovCisgICAgY2FzZSAyNTY6CisgICAgICByZWdjYWNoZV9yYXdf cmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUg KikgJiB0bXB1MzIpOworICAgICAgaWYgKHRtcHUzMikKKwl7CisJICBpbnQz Ml90IG1heGV2ZW50czsKKwkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRf cmVnY2FjaGUsIHRkZXAtPmFyZzMsCisJCQkgICAgIChnZGJfYnl0ZSAqKSAm IG1heGV2ZW50cyk7CisJICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVt CisJICAgICAgKHRtcHUzMiwgbWF4ZXZlbnRzICogdGRlcC0+c2l6ZV9lcG9s bF9ldmVudCkpCisJICAgIHsKKwkgICAgICByZXR1cm4gKC0xKTsKKwkgICAg fQorCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfcmVtYXBfZmls ZV9wYWdlcyAqLworICAgIGNhc2UgMjU3OgorICAgICAgLyogc3lzX3NldF90 aWRfYWRkcmVzcyAqLworICAgIGNhc2UgMjU4OgorICAgICAgYnJlYWs7CisK KyAgICAgIC8qIHN5c190aW1lcl9jcmVhdGUgKi8KKyAgICBjYXNlIDI1OToK KyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRk ZXAtPmFyZzMsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVf aW50KSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsK KworICAgICAgLyogc3lzX3RpbWVyX3NldHRpbWUgKi8KKyAgICBjYXNlIDI2 MDoKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUs IHRkZXAtPmFyZzQsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNp emVfaXRpbWVyc3BlYykpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAg ICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c190aW1lcl9nZXR0aW1lICovCisg ICAgY2FzZSAyNjE6CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3Jk X3JlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIp OworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMy LCB0ZGVwLT5zaXplX2l0aW1lcnNwZWMpKQorCXsKKwkgIHJldHVybiAoLTEp OworCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfdGltZXJfZ2V0 b3ZlcnJ1biAqLworICAgIGNhc2UgMjYyOgorICAgICAgLyogc3lzX3RpbWVy X2RlbGV0ZSAqLworICAgIGNhc2UgMjYzOgorICAgICAgLyogc3lzX2Nsb2Nr X3NldHRpbWUgKi8KKyAgICBjYXNlIDI2NDoKKyAgICAgIGJyZWFrOworCisg ICAgICAvKiBzeXNfY2xvY2tfZ2V0dGltZSAqLworICAgIGNhc2UgMjY1Ogor ICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRl cC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV90 aW1lc3BlYykpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgYnJl YWs7CisKKyAgICAgIC8qIHN5c19jbG9ja19nZXRyZXMgKi8KKyAgICBjYXNl IDI2NjoKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2Fj aGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAg ICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAt PnNpemVfdGltZXNwZWMpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAg ICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfY2xvY2tfbmFub3NsZWVwICov CisgICAgY2FzZSAyNjc6CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVj b3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmc0LCAoZ2RiX2J5dGUgKikgJiB0bXB1 MzIpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1w dTMyLCB0ZGVwLT5zaXplX3RpbWVzcGVjKSkKKwl7CisJICByZXR1cm4gKC0x KTsKKwl9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX3N0YXRmczY0 ICovCisgICAgY2FzZSAyNjg6CisgICAgICAvKiBzeXNfZnN0YXRmczY0ICov CisgICAgY2FzZSAyNjk6CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVj b3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmczLCAoZ2RiX2J5dGUgKikgJiB0bXB1 MzIpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1w dTMyLCB0ZGVwLT5zaXplX3N0YXRmczY0KSkKKwl7CisJICByZXR1cm4gKC0x KTsKKwl9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX3Rna2lsbCAq LworICAgIGNhc2UgMjcwOgorICAgICAgLyogc3lzX3V0aW1lcyAqLworICAg IGNhc2UgMjcxOgorICAgICAgLyogc3lzX2ZhZHZpc2U2NF82NCAqLworICAg IGNhc2UgMjcyOgorICAgICAgLyogc3lzX25pX3N5c2NhbGwgKi8KKyAgICBj YXNlIDI3MzoKKyAgICAgIC8qIHN5c19tYmluZCAqLworICAgIGNhc2UgMjc0 OgorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19nZXRfbWVtcG9saWN5 ICovCisgICAgY2FzZSAyNzU6CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAo cmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAoZ2RiX2J5dGUgKikgJiB0 bXB1MzIpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo dG1wdTMyLCB0ZGVwLT5zaXplX2ludCkpCisJeworCSAgcmV0dXJuICgtMSk7 CisJfQorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNo ZSwgdGRlcC0+YXJnMiwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAg IGlmICh0bXB1MzIpCisJeworCSAgdWludDMyX3QgbWF4bm9kZTsKKwkgIHJl Z2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzMs CisJCQkgICAgIChnZGJfYnl0ZSAqKSAmIG1heG5vZGUpOworCSAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCBtYXhub2RlICogdGRl cC0+c2l6ZV9sb25nKSkKKwkgICAgeworCSAgICAgIHJldHVybiAoLTEpOwor CSAgICB9CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19zZXRf bWVtcG9saWN5ICovCisgICAgY2FzZSAyNzY6CisgICAgICAvKiBzeXNfbXFf b3BlbiAqLworICAgIGNhc2UgMjc3OgorICAgICAgLyogc3lzX21xX3VubGlu ayAqLworICAgIGNhc2UgMjc4OgorICAgICAgLyogc3lzX21xX3RpbWVkc2Vu ZCAqLworICAgIGNhc2UgMjc5OgorICAgICAgYnJlYWs7CisKKyAgICAgIC8q IHN5c19tcV90aW1lZHJlY2VpdmUgKi8KKyAgICBjYXNlIDI4MDoKKyAgICAg IHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFy ZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAodG1wdTMy KQorCXsKKwkgIHVpbnQzMl90IG1zZ19sZW47CisJICByZWdjYWNoZV9yYXdf cmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmczLAorCQkJICAgICAo Z2RiX2J5dGUgKikgJiBtc2dfbGVuKTsKKwkgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKHRtcHUzMiwgbXNnX2xlbikpCisJICAgIHsKKwkgICAg ICByZXR1cm4gKC0xKTsKKwkgICAgfQorCX0KKyAgICAgIHJlZ2NhY2hlX3Jh d19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzQsIChnZGJfYnl0 ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfaW50KSkKKwl7CisJICByZXR1 cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX21x X25vdGlmeSAqLworICAgIGNhc2UgMjgxOgorICAgICAgYnJlYWs7CisKKyAg ICAgIC8qIHN5c19tcV9nZXRzZXRhdHRyICovCisgICAgY2FzZSAyODI6Cisg ICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVw LT5hcmczLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX21x X2F0dHIpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGJyZWFr OworCisgICAgICAvKiBzeXNfa2V4ZWNfbG9hZCAqLworICAgIGNhc2UgMjgz OgorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c193YWl0aWQgKi8KKyAg ICBjYXNlIDI4NDoKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRf cmVnY2FjaGUsIHRkZXAtPmFyZzMsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7 CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIs IHRkZXAtPnNpemVfc2lnaW5mbykpCisJeworCSAgcmV0dXJuICgtMSk7CisJ fQorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwg dGRlcC0+YXJnNSwgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6 ZV9ydXNhZ2UpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGJy ZWFrOworCisgICAgICAvKiBzeXNfbmlfc3lzY2FsbCAqLworICAgIGNhc2Ug Mjg1OgorICAgICAgLyogc3lzX2FkZF9rZXkgKi8KKyAgICBjYXNlIDI4NjoK KyAgICAgIC8qIHN5c19yZXF1ZXN0X2tleSAqLworICAgIGNhc2UgMjg3Ogor ICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19rZXljdGwgKi8KKyAgICBj YXNlIDI4ODoKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVn Y2FjaGUsIHRkZXAtPmFyZzEsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Cisg ICAgICBpZiAodG1wdTMyID09IDYgfHwgdG1wdTMyID09IDExKQorCXsKKwkg IHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFy ZzMsCisJCQkgICAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisJICBpZiAo dG1wdTMyKQorCSAgICB7CisJICAgICAgdWludDMyX3QgYnVmbGVuOworCSAg ICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAt PmFyZzQsCisJCQkJIChnZGJfYnl0ZSAqKSAmIGJ1Zmxlbik7CisJICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCBidWZsZW4p KQorCQl7CisJCSAgcmV0dXJuICgtMSk7CisJCX0KKwkgICAgfQorCX0KKyAg ICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfaW9wcmlvX3NldCAqLworICAg IGNhc2UgMjg5OgorICAgICAgLyogc3lzX2lvcHJpb19nZXQgKi8KKyAgICBj YXNlIDI5MDoKKyAgICAgIC8qIHN5c19pbm90aWZ5X2luaXQgKi8KKyAgICBj YXNlIDI5MToKKyAgICAgIC8qIHN5c19pbm90aWZ5X2FkZF93YXRjaCAqLwor ICAgIGNhc2UgMjkyOgorICAgICAgLyogc3lzX2lub3RpZnlfcm1fd2F0Y2gg Ki8KKyAgICBjYXNlIDI5MzoKKyAgICAgIC8qIHN5c19taWdyYXRlX3BhZ2Vz ICovCisgICAgY2FzZSAyOTQ6CisgICAgICAvKiBzeXNfb3BlbmF0ICovCisg ICAgY2FzZSAyOTU6CisgICAgICAvKiBzeXNfbWtkaXJhdCAqLworICAgIGNh c2UgMjk2OgorICAgICAgLyogc3lzX21rbm9kYXQgKi8KKyAgICBjYXNlIDI5 NzoKKyAgICAgIC8qIHN5c19mY2hvd25hdCAqLworICAgIGNhc2UgMjk4Ogor ICAgICAgLyogc3lzX2Z1dGltZXNhdCAqLworICAgIGNhc2UgMjk5OgorICAg ICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19mc3RhdGF0NjQgKi8KKyAgICBj YXNlIDMwMDoKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVn Y2FjaGUsIHRkZXAtPmFyZzMsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Cisg ICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRk ZXAtPnNpemVfc3RhdDY0KSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9Cisg ICAgICBicmVhazsKKworICAgICAgLyogc3lzX3VubGlua2F0ICovCisgICAg Y2FzZSAzMDE6CisgICAgICAvKiBzeXNfcmVuYW1lYXQgKi8KKyAgICBjYXNl IDMwMjoKKyAgICAgIC8qIHN5c19saW5rYXQgKi8KKyAgICBjYXNlIDMwMzoK KyAgICAgIC8qIHN5c19zeW1saW5rYXQgKi8KKyAgICBjYXNlIDMwNDoKKyAg ICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfcmVhZGxpbmthdCAqLworICAg IGNhc2UgMzA1OgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9y ZWdjYWNoZSwgdGRlcC0+YXJnMywgKGdkYl9ieXRlICopICYgdG1wdTMyKTsK KyAgICAgIGlmICh0bXB1MzIpCisJeworCSAgaW50MzJfdCBidWZzaXo7CisJ ICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5h cmc0LAorCQkJICAgICAoZ2RiX2J5dGUgKikgJiBidWZzaXopOworCSAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCBidWZzaXopKQor CSAgICB7CisJICAgICAgcmV0dXJuICgtMSk7CisJICAgIH0KKwl9CisgICAg ICBicmVhazsKKworICAgICAgLyogc3lzX2ZjaG1vZGF0ICovCisgICAgY2Fz ZSAzMDY6CisgICAgICAvKiBzeXNfZmFjY2Vzc2F0ICovCisgICAgY2FzZSAz MDc6CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX3BzZWxlY3Q2ICov CisgICAgY2FzZSAzMDg6CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVj b3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5dGUgKikgJiB0bXB1 MzIpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1w dTMyLCB0ZGVwLT5zaXplX2ZkX3NldCkpCisJeworCSAgcmV0dXJuICgtMSk7 CisJfQorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNo ZSwgdGRlcC0+YXJnMywgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAg IGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+ c2l6ZV9mZF9zZXQpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAg IHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFy ZzQsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfZmRfc2V0 KSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICByZWdjYWNoZV9y YXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmc1LCAoZ2RiX2J5 dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX3RpbWVzcGVjKSkKKwl7CisJ ICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKworICAgICAgLyog c3lzX3Bwb2xsICovCisgICAgY2FzZSAzMDk6CisgICAgICByZWdjYWNoZV9y YXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmcxLCAoZ2RiX2J5 dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYgKHRtcHUzMikKKwl7CisJICB1 aW50MzJfdCBuZmRzOworCSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9y ZWdjYWNoZSwgdGRlcC0+YXJnMiwKKwkJCSAgICAgKGdkYl9ieXRlICopICYg bmZkcyk7CisJICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1 MzIsIHRkZXAtPnNpemVfcG9sbGZkICogbmZkcykpCisJICAgIHsKKwkgICAg ICByZXR1cm4gKC0xKTsKKwkgICAgfQorCX0KKyAgICAgIHJlZ2NhY2hlX3Jh d19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzMsIChnZGJfYnl0 ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfdGltZXNwZWMpKQorCXsKKwkg IHJldHVybiAoLTEpOworCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBz eXNfdW5zaGFyZSAqLworICAgIGNhc2UgMzEwOgorICAgICAgLyogc3lzX3Nl dF9yb2J1c3RfbGlzdCAqLworICAgIGNhc2UgMzExOgorICAgICAgYnJlYWs7 CisKKyAgICAgIC8qIHN5c19nZXRfcm9idXN0X2xpc3QgKi8KKyAgICBjYXNl IDMxMjoKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2Fj aGUsIHRkZXAtPmFyZzIsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAg ICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAt PnNpemVfaW50KSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBy ZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmcz LCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5zaXplX2ludCkpCisJ eworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICAg IC8qIHN5c19zcGxpY2UgKi8KKyAgICBjYXNlIDMxMzoKKyAgICAgIHJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzIsIChn ZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfbWVtICh0bXB1MzIsIHRkZXAtPnNpemVfbG9mZl90KSkKKwl7 CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICByZWdjYWNoZV9yYXdfcmVh ZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmc0LCAoZ2RiX2J5dGUgKikg JiB0bXB1MzIpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21l bSAodG1wdTMyLCB0ZGVwLT5zaXplX2xvZmZfdCkpCisJeworCSAgcmV0dXJu ICgtMSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19zeW5j X2ZpbGVfcmFuZ2UgKi8KKyAgICBjYXNlIDMxNDoKKyAgICAgIC8qIHN5c190 ZWUgKi8KKyAgICBjYXNlIDMxNToKKyAgICAgIC8qIHN5c192bXNwbGljZSAq LworICAgIGNhc2UgMzE2OgorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5 c19tb3ZlX3BhZ2VzICovCisgICAgY2FzZSAzMTc6CisgICAgICByZWdjYWNo ZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmc1LCAoZ2Ri X2J5dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYgKHRtcHUzMikKKwl7CisJ ICB1aW50MzJfdCBucl9wYWdlczsKKwkgIHJlZ2NhY2hlX3Jhd19yZWFkIChy ZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzIsCisJCQkgICAgIChnZGJfYnl0 ZSAqKSAmIG5yX3BhZ2VzKTsKKwkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0gKHRtcHUzMiwgbnJfcGFnZXMgKiB0ZGVwLT5zaXplX2ludCkpCisJ ICAgIHsKKwkgICAgICByZXR1cm4gKC0xKTsKKwkgICAgfQorCX0KKyAgICAg IGJyZWFrOworCisgICAgICAvKiBzeXNfZ2V0Y3B1ICovCisgICAgY2FzZSAz MTg6CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hl LCB0ZGVwLT5hcmcxLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCB0ZGVwLT5z aXplX2ludCkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgcmVn Y2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgdGRlcC0+YXJnMiwg KGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgdGRlcC0+c2l6ZV9pbnQpKQorCXsK KwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFk IChyZWNvcmRfcmVnY2FjaGUsIHRkZXAtPmFyZzMsIChnZGJfYnl0ZSAqKSAm IHRtcHUzMik7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVt ICh0bXB1MzIsIHRkZXAtPnNpemVfdWxvbmcgKiAyKSkKKwl7CisJICByZXR1 cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX2Vw b2xsX3B3YWl0ICovCisgICAgY2FzZSAzMTk6CisgICAgICByZWdjYWNoZV9y YXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCB0ZGVwLT5hcmcyLCAoZ2RiX2J5 dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYgKHRtcHUzMikKKwl7CisJICBp bnQzMl90IG1heGV2ZW50czsKKwkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNv cmRfcmVnY2FjaGUsIHRkZXAtPmFyZzMsCisJCQkgICAgIChnZGJfYnl0ZSAq KSAmIG1heGV2ZW50cyk7CisJICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf bWVtCisJICAgICAgKHRtcHUzMiwgbWF4ZXZlbnRzICogdGRlcC0+c2l6ZV9l cG9sbF9ldmVudCkpCisJICAgIHsKKwkgICAgICByZXR1cm4gKC0xKTsKKwkg ICAgfQorCX0KKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAg IHByaW50Zl91bmZpbHRlcmVkIChfCisJCQkgKCJQcm9jZXNzIHJlY29yZCBh bmQgcmVwbGF5IHRhcmdldCBkb2Vzbid0IHN1cHBvcnQgc3lzY2FsbCBudW1i ZXIgMHglMDh4XG4iKSwKKwkJCSB0bXB1MzIpOworICAgICAgcmV0dXJuICgt MSk7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgcmV0dXJuICgwKTsKK30K LS0tIGEvL2Rldi9udWxsCisrKyBiL2xpbnV4LXJlY29yZC5oCkBAIC0wLDAg KzEsMTcxIEBACisvKiBQcm9jZXNzIHJlY29yZCBhbmQgcmVwbGF5IHRhcmdl dCBjb2RlIGZvciBHTlUvTGludXguCisKKyAgIENvcHlyaWdodCAoQykgMjAw OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBm aWxlIGlzIHBhcnQgb2YgR0RCLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhl IExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0u ICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4u ICAqLworCisjaWZuZGVmIF9MSU5VWF9SRUNPUkRfSF8KKyNkZWZpbmUgX0xJ TlVYX1JFQ09SRF9IXworCit0eXBlZGVmIHN0cnVjdCBsaW51eF9yZWNvcmRf dGRlcF9zCit7CisgIC8qIFRoZSBzaXplIG9mIHRoZSB0eXBlIHRoYXQgd2ls bCBiZSB1c2UgaW4gc3lzdGVtIGNhbGwuICAqLworICBpbnQgc2l6ZV9fb2xk X2tlcm5lbF9zdGF0OworICBpbnQgc2l6ZV90bXM7CisgIGludCBzaXplX2xv ZmZfdDsKKyAgaW50IHNpemVfZmxvY2s7CisgIGludCBzaXplX29sZG9sZF91 dHNuYW1lOworICBpbnQgc2l6ZV91c3RhdDsKKyAgaW50IHNpemVfb2xkX3Np Z2FjdGlvbjsKKyAgaW50IHNpemVfb2xkX3NpZ3NldF90OworICBpbnQgc2l6 ZV9ybGltaXQ7CisgIGludCBzaXplX3J1c2FnZTsKKyAgaW50IHNpemVfdGlt ZXZhbDsKKyAgaW50IHNpemVfdGltZXpvbmU7CisgIGludCBzaXplX29sZF9n aWRfdDsKKyAgaW50IHNpemVfb2xkX3VpZF90OworICBpbnQgc2l6ZV9mZF9z ZXQ7CisgIGludCBzaXplX2RpcmVudDsKKyAgaW50IHNpemVfZGlyZW50NjQ7 CisgIGludCBzaXplX3N0YXRmczsKKyAgaW50IHNpemVfc3RhdGZzNjQ7Cisg IGludCBzaXplX3NvY2thZGRyOworICBpbnQgc2l6ZV9pbnQ7CisgIGludCBz aXplX2xvbmc7CisgIGludCBzaXplX3Vsb25nOworICBpbnQgc2l6ZV9tc2do ZHI7CisgIGludCBzaXplX2l0aW1lcnZhbDsKKyAgaW50IHNpemVfc3RhdDsK KyAgaW50IHNpemVfb2xkX3V0c25hbWU7CisgIGludCBzaXplX3N5c2luZm87 CisgIGludCBzaXplX21zcWlkX2RzOworICBpbnQgc2l6ZV9zaG1pZF9kczsK KyAgaW50IHNpemVfbmV3X3V0c25hbWU7CisgIGludCBzaXplX3RpbWV4Owor ICBpbnQgc2l6ZV9tZW1fZHFpbmZvOworICBpbnQgc2l6ZV9pZl9kcWJsazsK KyAgaW50IHNpemVfZnNfcXVvdGFfc3RhdDsKKyAgaW50IHNpemVfdGltZXNw ZWM7CisgIGludCBzaXplX3BvbGxmZDsKKyAgaW50IHNpemVfTkZTX0ZIU0la RTsKKyAgaW50IHNpemVfa25mc2RfZmg7CisgIGludCBzaXplX1RBU0tfQ09N TV9MRU47CisgIGludCBzaXplX3NpZ2FjdGlvbjsKKyAgaW50IHNpemVfc2ln c2V0X3Q7CisgIGludCBzaXplX3NpZ2luZm9fdDsKKyAgaW50IHNpemVfY2Fw X3VzZXJfZGF0YV90OworICBpbnQgc2l6ZV9zdGFja190OworICBpbnQgc2l6 ZV9vZmZfdDsKKyAgaW50IHNpemVfc3RhdDY0OworICBpbnQgc2l6ZV9naWRf dDsKKyAgaW50IHNpemVfdWlkX3Q7CisgIGludCBzaXplX1BBR0VfU0laRTsK KyAgaW50IHNpemVfZmxvY2s2NDsKKyAgaW50IHNpemVfdXNlcl9kZXNjOwor ICBpbnQgc2l6ZV9pb19ldmVudDsKKyAgaW50IHNpemVfaW9jYjsKKyAgaW50 IHNpemVfZXBvbGxfZXZlbnQ7CisgIGludCBzaXplX2l0aW1lcnNwZWM7Cisg IGludCBzaXplX21xX2F0dHI7CisgIGludCBzaXplX3NpZ2luZm87CisKKyAg aW50IHNpemVfdGVybWlvczsKKyAgaW50IHNpemVfdGVybWlvczI7CisgIGlu dCBzaXplX3BpZF90OworICBpbnQgc2l6ZV93aW5zaXplOworICBpbnQgc2l6 ZV9jaGFyOworICBpbnQgc2l6ZV9zZXJpYWxfc3RydWN0OworICBpbnQgc2l6 ZV9zZXJpYWxfaWNvdW50ZXJfc3RydWN0OworICBpbnQgc2l6ZV9oYXllc19l c3BfY29uZmlnOworCisgIC8qIHRoZSB2YWx1ZXMgb2YgdGhlIHNlY29uZCBh cmd1bWVudCBvZiBzeXN0ZW0gY2FsbCAic3lzX2lvY3RsIi4gICovCisgIGlu dCBpb2N0bF9UQ0dFVFM7CisgIGludCBpb2N0bF9UQ1NFVFM7CisgIGludCBp b2N0bF9UQ1NFVFNXOworICBpbnQgaW9jdGxfVENTRVRTRjsKKyAgaW50IGlv Y3RsX1RDR0VUQTsKKyAgaW50IGlvY3RsX1RDU0VUQTsKKyAgaW50IGlvY3Rs X1RDU0VUQVc7CisgIGludCBpb2N0bF9UQ1NFVEFGOworICBpbnQgaW9jdGxf VENTQlJLOworICBpbnQgaW9jdGxfVENYT05DOworICBpbnQgaW9jdGxfVENG TFNIOworICBpbnQgaW9jdGxfVElPQ0VYQ0w7CisgIGludCBpb2N0bF9USU9D TlhDTDsKKyAgaW50IGlvY3RsX1RJT0NTQ1RUWTsKKyAgaW50IGlvY3RsX1RJ T0NHUEdSUDsKKyAgaW50IGlvY3RsX1RJT0NTUEdSUDsKKyAgaW50IGlvY3Rs X1RJT0NPVVRROworICBpbnQgaW9jdGxfVElPQ1NUSTsKKyAgaW50IGlvY3Rs X1RJT0NHV0lOU1o7CisgIGludCBpb2N0bF9USU9DU1dJTlNaOworICBpbnQg aW9jdGxfVElPQ01HRVQ7CisgIGludCBpb2N0bF9USU9DTUJJUzsKKyAgaW50 IGlvY3RsX1RJT0NNQklDOworICBpbnQgaW9jdGxfVElPQ01TRVQ7CisgIGlu dCBpb2N0bF9USU9DR1NPRlRDQVI7CisgIGludCBpb2N0bF9USU9DU1NPRlRD QVI7CisgIGludCBpb2N0bF9GSU9OUkVBRDsKKyAgaW50IGlvY3RsX1RJT0NJ TlE7CisgIGludCBpb2N0bF9USU9DTElOVVg7CisgIGludCBpb2N0bF9USU9D Q09OUzsKKyAgaW50IGlvY3RsX1RJT0NHU0VSSUFMOworICBpbnQgaW9jdGxf VElPQ1NTRVJJQUw7CisgIGludCBpb2N0bF9USU9DUEtUOworICBpbnQgaW9j dGxfRklPTkJJTzsKKyAgaW50IGlvY3RsX1RJT0NOT1RUWTsKKyAgaW50IGlv Y3RsX1RJT0NTRVREOworICBpbnQgaW9jdGxfVElPQ0dFVEQ7CisgIGludCBp b2N0bF9UQ1NCUktQOworICBpbnQgaW9jdGxfVElPQ1RUWUdTVFJVQ1Q7Cisg IGludCBpb2N0bF9USU9DU0JSSzsKKyAgaW50IGlvY3RsX1RJT0NDQlJLOwor ICBpbnQgaW9jdGxfVElPQ0dTSUQ7CisgIGludCBpb2N0bF9UQ0dFVFMyOwor ICBpbnQgaW9jdGxfVENTRVRTMjsKKyAgaW50IGlvY3RsX1RDU0VUU1cyOwor ICBpbnQgaW9jdGxfVENTRVRTRjI7CisgIGludCBpb2N0bF9USU9DR1BUTjsK KyAgaW50IGlvY3RsX1RJT0NTUFRMQ0s7CisgIGludCBpb2N0bF9GSU9OQ0xF WDsKKyAgaW50IGlvY3RsX0ZJT0NMRVg7CisgIGludCBpb2N0bF9GSU9BU1lO QzsKKyAgaW50IGlvY3RsX1RJT0NTRVJDT05GSUc7CisgIGludCBpb2N0bF9U SU9DU0VSR1dJTEQ7CisgIGludCBpb2N0bF9USU9DU0VSU1dJTEQ7CisgIGlu dCBpb2N0bF9USU9DR0xDS1RSTUlPUzsKKyAgaW50IGlvY3RsX1RJT0NTTENL VFJNSU9TOworICBpbnQgaW9jdGxfVElPQ1NFUkdTVFJVQ1Q7CisgIGludCBp b2N0bF9USU9DU0VSR0VUTFNSOworICBpbnQgaW9jdGxfVElPQ1NFUkdFVE1V TFRJOworICBpbnQgaW9jdGxfVElPQ1NFUlNFVE1VTFRJOworICBpbnQgaW9j dGxfVElPQ01JV0FJVDsKKyAgaW50IGlvY3RsX1RJT0NHSUNPVU5UOworICBp bnQgaW9jdGxfVElPQ0dIQVlFU0VTUDsKKyAgaW50IGlvY3RsX1RJT0NTSEFZ RVNFU1A7CisgIGludCBpb2N0bF9GSU9RU0laRTsKKworICAvKiBUaGUgbnVt YmVyIG9mIHRoZSByZWdpc3RlcnMgdGhhdCB1c2UgdG8gYmUgdGhlIGFyZ3Vt ZW50cyBvZiBzeXN0ZW0gY2FsbC4gICovCisgIGludCBhcmcxOworICBpbnQg YXJnMjsKKyAgaW50IGFyZzM7CisgIGludCBhcmc0OworICBpbnQgYXJnNTsK K30gbGludXhfcmVjb3JkX3RkZXBfdDsKKworZXh0ZXJuIGludCByZWNvcmRf bGludXhfc3lzdGVtX2NhbGwgKGludCBudW0sIGxpbnV4X3JlY29yZF90ZGVw X3QgKiB0ZGVwKTsKKworI2VuZGlmIC8qIF9MSU5VWF9SRUNPUkRfSF8gKi8K LS0tIGEvTWFrZWZpbGUuaW4KKysrIGIvTWFrZWZpbGUuaW4KQEAgLTUxNSw3 ICs1MTUsNyBAQAogCXhjb2ZmcmVhZC5vIFwKIAlwcm9sb2d1ZS12YWx1ZS5v IFwKIAlzeW1maWxlLW1lbS5vIFwKLQljb3JlbG93Lm8KKwljb3JlbG93Lm8g bGludXgtcmVjb3JkLm8KIAogIyBIb3N0LWRlcGVuZGVudCBtYWtlZmlsZSBm cmFnbWVudCBjb21lcyBpbiBoZXJlLgogQGhvc3RfbWFrZWZpbGVfZnJhZ0AK QEAgLTEyOTcsNyArMTI5Nyw3IEBACiAJaW5mLXB0cmFjZS5jIGluZi10dHJh Y2UuYyBcCiAJaXJpeDUtbmF0LmMgXAogCWxpYnVud2luZC1mcmFtZS5jIFwK LQlsaW51eC1mb3JrLmMgXAorCWxpbnV4LWZvcmsuYyBsaW51eC1yZWNvcmQu YyBcCiAJbTY4aGMxMS10ZGVwLmMgXAogCW0zMnItdGRlcC5jIFwKIAltMzJy LWxpbnV4LW5hdC5jIG0zMnItbGludXgtdGRlcC5jIFwK ------=_Part_40491_7538264.1226823690953--