From mboxrd@z Thu Jan 1 00:00:00 1970 From: jorgew@jlwg.net To: gcc-gnats@gcc.gnu.org Subject: c/4667: Compiling kernel 2.4.13 with -O2 causes internal compiler error Date: Thu, 25 Oct 2001 16:26:00 -0000 Message-id: <20011024072122.5648.qmail@sourceware.cygnus.com> X-SW-Source: 2001-10/msg00498.html List-Id: >Number: 4667 >Category: c >Synopsis: Compiling kernel 2.4.13 with -O2 causes internal compiler error >Confidential: no >Severity: critical >Priority: high >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Thu Oct 25 16:26:09 PDT 2001 >Closed-Date: >Last-Modified: >Originator: huh? >Release: gcc 3.0.1 >Organization: >Environment: Redhat 7.1, glibc 2.2.4, on a dual pentium III 550 running kernel 2.4.10 >Description: If I select RealTek RTL-8139 ethernet adaptor support I get the following error... Issuing command: gcc -v -save-temps -D__KERNEL__ -I/usr/src/linux-2.4.13/linux/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fomit-frame-pointer -fno-strict-aliasing -fno-common -pipe -mpreferred-stack-boundary=2 -march=i686 -c -o 8139too.o 8139too.c Results in: gcc: Warning: -pipe ignored because -save-temps specified Reading specs from /usr/bin/../lib/gcc-lib/i686-pc-linux-gnu/3.0.1/specs Configured with: ../gcc-3.0.1/configure --prefix=/usr/ --enable-threads Thread model: posix gcc version 3.0.1 /usr/bin/../lib/gcc-lib/i686-pc-linux-gnu/3.0.1/cpp0 -lang-c -v -I/usr/src/linux-2.4.13/linux/include -iprefix /usr/bin/../lib/gcc-lib/i686-pc-linux-gnu/3.0.1/ -D__GNUC__=3 -D__GNUC_MINOR__=0 -D__GNUC_PATCHLEVEL__=1 -D__ELF__ -Dunix -Dlinux -D__ELF__ -D__unix__ -D__linux__ -D__unix -D__linux -Asystem=posix -D__OPTIMIZE__ -D__STDC_HOSTED__=1 -Wall -Wstrict-prototypes -Wno-trigraphs -Acpu=i386 -Amachine=i386 -Di386 -D__i386 -D__i386__ -D__i686 -D__i686__ -D__pentiumpro -D__pentiumpro__ -D__tune_i686__ -D__tune_pentiumpro__ -D__KERNEL__ 8139too.c 8139too.i GNU CPP version 3.0.1 (cpplib) (i386 Linux/ELF) ignoring nonexistent directory "/usr/i686-pc-linux-gnu/include" ignoring nonexistent directory "/usr/i686-pc-linux-gnu/include" ignoring duplicate directory "/usr/lib/gcc-lib/i686-pc-linux-gnu/3.0.1/include" #include "..." search starts here: #include <...> search starts here: /usr/src/linux-2.4.13/linux/include /usr/lib/gcc-lib/i686-pc-linux-gnu/3.0.1/include /usr/local/include /usr/include End of search list. /usr/bin/../lib/gcc-lib/i686-pc-linux-gnu/3.0.1/cc1 -fpreprocessed 8139too.i -quiet -dumpbase 8139too.c -mpreferred-stack-boundary=2 -march=i686 -O2 -Wall -Wstrict-prototypes -Wno-trigraphs -version -fomit-frame-pointer -fno-strict-aliasing -fno-common -o 8139too.s GNU CPP version 3.0.1 (cpplib) (i386 Linux/ELF) GNU C version 3.0.1 (i686-pc-linux-gnu) compiled by GNU C version 3.0.1. 8139too.c: In function `netdev_ethtool_ioctl': 8139too.c:2432: Unrecognizable insn: (insn/i 641 1103 1100 (parallel[ (set (reg:SI 6 ebp) (asm_operands:SI ("addl %3,%1 ; sbbl %0,%0; cmpl %1,%4; sbbl $0,%0") ("=&r") 0[ (reg/v:SI 1 edx [170]) (mem:SI (plus:SI (reg/f:SI 6 ebp) (const_int -356 [0xfffffe9c])) 0) (mem/s:SI (plus:SI (reg:SI 0 eax [178]) (const_int 12 [0xc])) 0) ] [ (asm_input:SI ("1")) (asm_input:SI ("g")) (asm_input:SI ("g")) ] ("/usr/src/linux-2.4.13/linux/include/asm/uaccess.h") 558)) (set (reg/v:SI 1 edx [170]) (asm_operands:SI ("addl %3,%1 ; sbbl %0,%0; cmpl %1,%4; sbbl $0,%0") ("=r") 1[ (reg/v:SI 1 edx [170]) (mem:SI (plus:SI (reg/f:SI 6 ebp) (const_int -356 [0xfffffe9c])) 0) (mem/s:SI (plus:SI (reg:SI 0 eax [178]) (const_int 12 [0xc])) 0) ] [ (asm_input:SI ("1")) (asm_input:SI ("g")) (asm_input:SI ("g")) ] ("/usr/src/linux-2.4.13/linux/include/asm/uaccess.h") 558)) (clobber (reg:QI 19 dirflag)) (clobber (reg:QI 18 fpsr)) (clobber (reg:QI 17 flags)) ] ) -1 (insn_list 627 (insn_list 634 (nil))) (nil)) 8139too.c:2432: Internal compiler error in reload_cse_simplify_operands, at reload1.c:8355 Please submit a full bug report, with preprocessed source if appropriate. See for instructions. >How-To-Repeat: Simply compile the kernel with realtek driver support -- I get this bug with both 2.4.12 and 2.4.13 >Fix: Removing -O2 from commandline seems to fix this. >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/postscript; name="8139too.i" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="8139too.i" IyAxNDUgIjgxMzl0b28uYyIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVk ZS9saW51eC9jb25maWcuaCIgMQoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9p bmNsdWRlL2xpbnV4L2F1dG9jb25mLmgiIDEKIyA1ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGlu dXgvaW5jbHVkZS9saW51eC9jb25maWcuaCIgMgojIDE0NiAiODEzOXRvby5jIiAyCiMgMSAiL3Vz ci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvbW9kdWxlLmgiIDEKIyAxMCAi L3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvbW9kdWxlLmgiCiMgMSAi L3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvY29uZmlnLmgiIDEKIyAx MSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvbW9kdWxlLmgiIDIK IyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9zcGlubG9jay5o IiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvY29u ZmlnLmgiIDEKIyA1ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9z cGlubG9jay5oIiAyCiMgMzkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xp bnV4L3NwaW5sb2NrLmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUv YXNtL3NwaW5sb2NrLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5j bHVkZS9hc20vYXRvbWljLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgv aW5jbHVkZS9saW51eC9jb25maWcuaCIgMQojIDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51 eC9pbmNsdWRlL2FzbS9hdG9taWMuaCIgMgojIDIyICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGlu dXgvaW5jbHVkZS9hc20vYXRvbWljLmgiCnR5cGVkZWYgc3RydWN0IHsgdm9sYXRpbGUgaW50IGNv dW50ZXI7IH0gYXRvbWljX3Q7CiMgNTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNs dWRlL2FzbS9hdG9taWMuaCIKc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWNfYWRkKGludCBp LCBhdG9taWNfdCAqdikKewogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICAg ICAgICAgImxvY2sgOyAiICJhZGRsICUxLCUwIgogICAgICAgICAgICAgICAgOiI9bSIgKHYtPmNv dW50ZXIpCiAgICAgICAgICAgICAgICA6ImlyIiAoaSksICJtIiAodi0+Y291bnRlcikpOwp9CiMg NjkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9hdG9taWMuaCIKc3Rh dGljIF9faW5saW5lX18gdm9pZCBhdG9taWNfc3ViKGludCBpLCBhdG9taWNfdCAqdikKewogICAg ICAgIF9fYXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICAgICAgICAgImxvY2sgOyAiICJzdWJs ICUxLCUwIgogICAgICAgICAgICAgICAgOiI9bSIgKHYtPmNvdW50ZXIpCiAgICAgICAgICAgICAg ICA6ImlyIiAoaSksICJtIiAodi0+Y291bnRlcikpOwp9CiMgODcgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9saW51eC9pbmNsdWRlL2FzbS9hdG9taWMuaCIKc3RhdGljIF9faW5saW5lX18gaW50IGF0 b21pY19zdWJfYW5kX3Rlc3QoaW50IGksIGF0b21pY190ICp2KQp7CiAgICAgICAgdW5zaWduZWQg Y2hhciBjOwoKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAgICAgICAgICJs b2NrIDsgIiAic3VibCAlMiwlMDsgc2V0ZSAlMSIKICAgICAgICAgICAgICAgIDoiPW0iICh2LT5j b3VudGVyKSwgIj1xbSIgKGMpCiAgICAgICAgICAgICAgICA6ImlyIiAoaSksICJtIiAodi0+Y291 bnRlcikgOiAibWVtb3J5Iik7CiAgICAgICAgcmV0dXJuIGM7Cn0KIyAxMDUgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9hdG9taWMuaCIKc3RhdGljIF9faW5saW5lX18g dm9pZCBhdG9taWNfaW5jKGF0b21pY190ICp2KQp7CiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxl X18oCiAgICAgICAgICAgICAgICAibG9jayA7ICIgImluY2wgJTAiCiAgICAgICAgICAgICAgICA6 Ij1tIiAodi0+Y291bnRlcikKICAgICAgICAgICAgICAgIDoibSIgKHYtPmNvdW50ZXIpKTsKfQoj IDEyMCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL2F0b21pYy5oIgpz dGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pY19kZWMoYXRvbWljX3QgKnYpCnsKICAgICAgICBf X2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAgICAgICAgICJsb2NrIDsgIiAiZGVjbCAlMCIK ICAgICAgICAgICAgICAgIDoiPW0iICh2LT5jb3VudGVyKQogICAgICAgICAgICAgICAgOiJtIiAo di0+Y291bnRlcikpOwp9CiMgMTM3ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVk ZS9hc20vYXRvbWljLmgiCnN0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWNfZGVjX2FuZF90ZXN0 KGF0b21pY190ICp2KQp7CiAgICAgICAgdW5zaWduZWQgY2hhciBjOwoKICAgICAgICBfX2FzbV9f IF9fdm9sYXRpbGVfXygKICAgICAgICAgICAgICAgICJsb2NrIDsgIiAiZGVjbCAlMDsgc2V0ZSAl MSIKICAgICAgICAgICAgICAgIDoiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCiAgICAgICAg ICAgICAgICA6Im0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKICAgICAgICByZXR1cm4gYyAh PSAwOwp9CiMgMTU3ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vYXRv bWljLmgiCnN0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWNfaW5jX2FuZF90ZXN0KGF0b21pY190 ICp2KQp7CiAgICAgICAgdW5zaWduZWQgY2hhciBjOwoKICAgICAgICBfX2FzbV9fIF9fdm9sYXRp bGVfXygKICAgICAgICAgICAgICAgICJsb2NrIDsgIiAiaW5jbCAlMDsgc2V0ZSAlMSIKICAgICAg ICAgICAgICAgIDoiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCiAgICAgICAgICAgICAgICA6 Im0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKICAgICAgICByZXR1cm4gYyAhPSAwOwp9CiMg MTc4ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vYXRvbWljLmgiCnN0 YXRpYyBfX2lubGluZV9fIGludCBhdG9taWNfYWRkX25lZ2F0aXZlKGludCBpLCBhdG9taWNfdCAq dikKewogICAgICAgIHVuc2lnbmVkIGNoYXIgYzsKCiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxl X18oCiAgICAgICAgICAgICAgICAibG9jayA7ICIgImFkZGwgJTIsJTA7IHNldHMgJTEiCiAgICAg ICAgICAgICAgICA6Ij1tIiAodi0+Y291bnRlciksICI9cW0iIChjKQogICAgICAgICAgICAgICAg OiJpciIgKGkpLCAibSIgKHYtPmNvdW50ZXIpIDogIm1lbW9yeSIpOwogICAgICAgIHJldHVybiBj Owp9CiMgNSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3NwaW5sb2Nr LmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vcndsb2Nr LmgiIDEKIyA2ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vc3Bpbmxv Y2suaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9wYWdl LmgiIDEKIyAxMiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3BhZ2Uu aCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9jb25maWcu aCIgMQojIDEzICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vcGFnZS5o IiAyCiMgNDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9wYWdlLmgi CnR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwdGVfbG93OyB9IHB0ZV90Owp0eXBlZGVm IHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcG1kOyB9IHBtZF90Owp0eXBlZGVmIHN0cnVjdCB7IHVu c2lnbmVkIGxvbmcgcGdkOyB9IHBnZF90OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBs b25nIHBncHJvdDsgfSBwZ3Byb3RfdDsKIyAxMDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51 eC9pbmNsdWRlL2FzbS9wYWdlLmgiCnN0YXRpYyBfX2lubGluZV9fIGludCBnZXRfb3JkZXIodW5z aWduZWQgbG9uZyBzaXplKQp7CiAgICAgICAgaW50IG9yZGVyOwoKICAgICAgICBzaXplID0gKHNp emUtMSkgPj4gKDEyIC0xKTsKICAgICAgICBvcmRlciA9IC0xOwogICAgICAgIGRvIHsKICAgICAg ICAgICAgICAgIHNpemUgPj49IDE7CiAgICAgICAgICAgICAgICBvcmRlcisrOwogICAgICAgIH0g d2hpbGUgKHNpemUpOwogICAgICAgIHJldHVybiBvcmRlcjsKfQojIDcgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9zcGlubG9jay5oIiAyCiMgMSAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvY29uZmlnLmgiIDEKIyA4ICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vc3BpbmxvY2suaCIgMgoKZXh0ZXJuIGludCBw cmludGsoY29uc3QgY2hhciAqIGZtdCwgLi4uKQogICAgICAgIF9fYXR0cmlidXRlX18gKChmb3Jt YXQgKHByaW50ZiwgMSwgMikpKTsKIyAyNiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2lu Y2x1ZGUvYXNtL3NwaW5sb2NrLmgiCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICB2b2xhdGlsZSB1 bnNpZ25lZCBpbnQgbG9jazsKCgoKfSBzcGlubG9ja190OwojIDczICIvdXNyL3NyYy9saW51eC0y LjQuMTMvbGludXgvaW5jbHVkZS9hc20vc3BpbmxvY2suaCIKc3RhdGljIGlubGluZSBpbnQgc3Bp bl90cnlsb2NrKHNwaW5sb2NrX3QgKmxvY2spCnsKICAgICAgICBjaGFyIG9sZHZhbDsKICAgICAg ICBfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAgICAgICAgICJ4Y2hnYiAlYjAsJTEiCiAg ICAgICAgICAgICAgICA6Ij1xIiAob2xkdmFsKSwgIj1tIiAobG9jay0+bG9jaykKICAgICAgICAg ICAgICAgIDoiMCIgKDApIDogIm1lbW9yeSIpOwogICAgICAgIHJldHVybiBvbGR2YWwgPiAwOwp9 CgpzdGF0aWMgaW5saW5lIHZvaWQgc3Bpbl9sb2NrKHNwaW5sb2NrX3QgKmxvY2spCnsKIyA5MyAi L3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgiCiAgICAg ICAgX19hc21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAgICAgICAgICAiXG4xOlx0IiAibG9jayA7 IGRlY2IgJTBcblx0IiAianMgMmZcbiIgIi5zZWN0aW9uIC50ZXh0LmxvY2ssXCJheFwiXG4iICIy Olx0IiAiY21wYiAkMCwlMFxuXHQiICJyZXA7bm9wXG5cdCIgImpsZSAyYlxuXHQiICJqbXAgMWJc biIgIi5wcmV2aW91cyIKICAgICAgICAgICAgICAgIDoiPW0iIChsb2NrLT5sb2NrKSA6IDogIm1l bW9yeSIpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgc3Bpbl91bmxvY2soc3BpbmxvY2tfdCAqbG9j aykKewoKCgoKCgogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICAgICAgICAg Im1vdmIgJDEsJTAiCiAgICAgICAgICAgICAgICA6Ij1tIiAobG9jay0+bG9jaykgOiA6ICJtZW1v cnkiKTsKfQojIDEyMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3Nw aW5sb2NrLmgiCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQg bG9jazsKCgoKfSByd2xvY2tfdDsKIyAxNTEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9p bmNsdWRlL2FzbS9zcGlubG9jay5oIgpzdGF0aWMgaW5saW5lIHZvaWQgcmVhZF9sb2NrKHJ3bG9j a190ICpydykKewoKCgoKICAgICAgICBkbyB7IGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChydykp IGFzbSB2b2xhdGlsZSgibG9jayA7ICIgInN1YmwgJDEsJTBcblx0IiAianMgMmZcbiIgIjE6XG4i ICIuc2VjdGlvbiAudGV4dC5sb2NrLFwiYXhcIlxuIiAiMjpcdHB1c2hsICUlZWF4XG5cdCIgImxl YWwgJTAsJSVlYXhcblx0IiAiY2FsbCAiICJfX3JlYWRfbG9ja19mYWlsZWQiICJcblx0IiAicG9w bCAlJWVheFxuXHQiICJqbXAgMWJcbiIgIi5wcmV2aW91cyIgOiI9bSIgKCoodm9sYXRpbGUgaW50 ICopcncpIDogOiAibWVtb3J5Iik7IGVsc2UgYXNtIHZvbGF0aWxlKCJsb2NrIDsgIiAic3VibCAk MSwoJTApXG5cdCIgImpzIDJmXG4iICIxOlxuIiAiLnNlY3Rpb24gLnRleHQubG9jayxcImF4XCJc biIgIjI6XHRjYWxsICIgIl9fcmVhZF9sb2NrX2ZhaWxlZCIgIlxuXHQiICJqbXAgMWJcbiIgIi5w cmV2aW91cyIgOjoiYSIgKHJ3KSA6ICJtZW1vcnkiKTsgfSB3aGlsZSAoMCk7Cn0KCnN0YXRpYyBp bmxpbmUgdm9pZCB3cml0ZV9sb2NrKHJ3bG9ja190ICpydykKewoKCgoKICAgICAgICBkbyB7IGlm IChfX2J1aWx0aW5fY29uc3RhbnRfcChydykpIGFzbSB2b2xhdGlsZSgibG9jayA7ICIgInN1Ymwg JCIgIjB4MDEwMDAwMDAiICIsKCUwKVxuXHQiICJqbnogMmZcbiIgIjE6XG4iICIuc2VjdGlvbiAu dGV4dC5sb2NrLFwiYXhcIlxuIiAiMjpcdHB1c2hsICUlZWF4XG5cdCIgImxlYWwgJTAsJSVlYXhc blx0IiAiY2FsbCAiICJfX3dyaXRlX2xvY2tfZmFpbGVkIiAiXG5cdCIgInBvcGwgJSVlYXhcblx0 IiAiam1wIDFiXG4iICIucHJldmlvdXMiIDoiPW0iICgqKHZvbGF0aWxlIGludCAqKXJ3KSA6IDog Im1lbW9yeSIpOyBlbHNlIGFzbSB2b2xhdGlsZSgibG9jayA7ICIgInN1YmwgJCIgIjB4MDEwMDAw MDAiICIsKCUwKVxuXHQiICJqbnogMmZcbiIgIjE6XG4iICIuc2VjdGlvbiAudGV4dC5sb2NrLFwi YXhcIlxuIiAiMjpcdGNhbGwgIiAiX193cml0ZV9sb2NrX2ZhaWxlZCIgIlxuXHQiICJqbXAgMWJc biIgIi5wcmV2aW91cyIgOjoiYSIgKHJ3KSA6ICJtZW1vcnkiKTsgfSB3aGlsZSAoMCk7Cn0KCgoK CnN0YXRpYyBpbmxpbmUgaW50IHdyaXRlX3RyeWxvY2socndsb2NrX3QgKmxvY2spCnsKICAgICAg ICBhdG9taWNfdCAqY291bnQgPSAoYXRvbWljX3QgKilsb2NrOwogICAgICAgIGlmIChhdG9taWNf c3ViX2FuZF90ZXN0KDB4MDEwMDAwMDAsIGNvdW50KSkKICAgICAgICAgICAgICAgIHJldHVybiAx OwogICAgICAgIGF0b21pY19hZGQoMHgwMTAwMDAwMCwgY291bnQpOwogICAgICAgIHJldHVybiAw Owp9CiMgNDAgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3NwaW5s b2NrLmgiIDIKIyAxMzcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4 L3NwaW5sb2NrLmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNt L2F0b21pYy5oIiAxCiMgMTM4ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9s aW51eC9zcGlubG9jay5oIiAyCmV4dGVybiBpbnQgYXRvbWljX2RlY19hbmRfbG9jayhhdG9taWNf dCAqYXRvbWljLCBzcGlubG9ja190ICpsb2NrKTsKIyAxMiAiL3Vzci9zcmMvbGludXgtMi40LjEz L2xpbnV4L2luY2x1ZGUvbGludXgvbW9kdWxlLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQu MTMvbGludXgvaW5jbHVkZS9saW51eC9saXN0LmgiIDEKCgoKCgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3ByZWZldGNoLmgiIDEKIyAxMyAiL3Vzci9zcmMv bGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvcHJlZmV0Y2guaCIKIyAxICIvdXNyL3Ny Yy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgiIDEKIyAxMCAiL3Vz ci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIgojIDEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS92bTg2LmgiIDEKIyA2OCAiL3Vz ci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3ZtODYuaCIKc3RydWN0IHZtODZf cmVncyB7CgoKCiAgICAgICAgbG9uZyBlYng7CiAgICAgICAgbG9uZyBlY3g7CiAgICAgICAgbG9u ZyBlZHg7CiAgICAgICAgbG9uZyBlc2k7CiAgICAgICAgbG9uZyBlZGk7CiAgICAgICAgbG9uZyBl YnA7CiAgICAgICAgbG9uZyBlYXg7CiAgICAgICAgbG9uZyBfX251bGxfZHM7CiAgICAgICAgbG9u ZyBfX251bGxfZXM7CiAgICAgICAgbG9uZyBfX251bGxfZnM7CiAgICAgICAgbG9uZyBfX251bGxf Z3M7CiAgICAgICAgbG9uZyBvcmlnX2VheDsKICAgICAgICBsb25nIGVpcDsKICAgICAgICB1bnNp Z25lZCBzaG9ydCBjcywgX19jc2g7CiAgICAgICAgbG9uZyBlZmxhZ3M7CiAgICAgICAgbG9uZyBl c3A7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc3MsIF9fc3NoOwoKCgogICAgICAgIHVuc2lnbmVk IHNob3J0IGVzLCBfX2VzaDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBkcywgX19kc2g7CiAgICAg ICAgdW5zaWduZWQgc2hvcnQgZnMsIF9fZnNoOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGdzLCBf X2dzaDsKfTsKCnN0cnVjdCByZXZlY3RvcmVkX3N0cnVjdCB7CiAgICAgICAgdW5zaWduZWQgbG9u ZyBfX21hcFs4XTsKfTsKCnN0cnVjdCB2bTg2X3N0cnVjdCB7CiAgICAgICAgc3RydWN0IHZtODZf cmVncyByZWdzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgICAgICAgdW5zaWduZWQg bG9uZyBzY3JlZW5fYml0bWFwOwogICAgICAgIHVuc2lnbmVkIGxvbmcgY3B1X3R5cGU7CiAgICAg ICAgc3RydWN0IHJldmVjdG9yZWRfc3RydWN0IGludF9yZXZlY3RvcmVkOwogICAgICAgIHN0cnVj dCByZXZlY3RvcmVkX3N0cnVjdCBpbnQyMV9yZXZlY3RvcmVkOwp9OwoKCgoKCgpzdHJ1Y3Qgdm04 NnBsdXNfaW5mb19zdHJ1Y3QgewogICAgICAgIHVuc2lnbmVkIGxvbmcgZm9yY2VfcmV0dXJuX2Zv cl9waWM6MTsKICAgICAgICB1bnNpZ25lZCBsb25nIHZtODZkYmdfYWN0aXZlOjE7CiAgICAgICAg dW5zaWduZWQgbG9uZyB2bTg2ZGJnX1RGcGVuZGlnOjE7CiAgICAgICAgdW5zaWduZWQgbG9uZyB1 bnVzZWQ6Mjg7CiAgICAgICAgdW5zaWduZWQgbG9uZyBpc192bTg2cHVzOjE7CiAgICAgICAgdW5z aWduZWQgY2hhciB2bTg2ZGJnX2ludHh4dGFiWzMyXTsKfTsKCnN0cnVjdCB2bTg2cGx1c19zdHJ1 Y3QgewogICAgICAgIHN0cnVjdCB2bTg2X3JlZ3MgcmVnczsKICAgICAgICB1bnNpZ25lZCBsb25n IGZsYWdzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2NyZWVuX2JpdG1hcDsKICAgICAgICB1bnNp Z25lZCBsb25nIGNwdV90eXBlOwogICAgICAgIHN0cnVjdCByZXZlY3RvcmVkX3N0cnVjdCBpbnRf cmV2ZWN0b3JlZDsKICAgICAgICBzdHJ1Y3QgcmV2ZWN0b3JlZF9zdHJ1Y3QgaW50MjFfcmV2ZWN0 b3JlZDsKICAgICAgICBzdHJ1Y3Qgdm04NnBsdXNfaW5mb19zdHJ1Y3Qgdm04NnBsdXM7Cn07CiMg MTQ1ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vdm04Ni5oIgpzdHJ1 Y3Qga2VybmVsX3ZtODZfcmVncyB7CgoKCiAgICAgICAgbG9uZyBlYng7CiAgICAgICAgbG9uZyBl Y3g7CiAgICAgICAgbG9uZyBlZHg7CiAgICAgICAgbG9uZyBlc2k7CiAgICAgICAgbG9uZyBlZGk7 CiAgICAgICAgbG9uZyBlYnA7CiAgICAgICAgbG9uZyBlYXg7CiAgICAgICAgbG9uZyBfX251bGxf ZHM7CiAgICAgICAgbG9uZyBfX251bGxfZXM7CiAgICAgICAgbG9uZyBvcmlnX2VheDsKICAgICAg ICBsb25nIGVpcDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBjcywgX19jc2g7CiAgICAgICAgbG9u ZyBlZmxhZ3M7CiAgICAgICAgbG9uZyBlc3A7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc3MsIF9f c3NoOwoKCgogICAgICAgIHVuc2lnbmVkIHNob3J0IGVzLCBfX2VzaDsKICAgICAgICB1bnNpZ25l ZCBzaG9ydCBkcywgX19kc2g7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgZnMsIF9fZnNoOwogICAg ICAgIHVuc2lnbmVkIHNob3J0IGdzLCBfX2dzaDsKfTsKCnN0cnVjdCBrZXJuZWxfdm04Nl9zdHJ1 Y3QgewogICAgICAgIHN0cnVjdCBrZXJuZWxfdm04Nl9yZWdzIHJlZ3M7CiMgMTg0ICIvdXNyL3Ny Yy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vdm04Ni5oIgogICAgICAgIHVuc2lnbmVk IGxvbmcgZmxhZ3M7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzY3JlZW5fYml0bWFwOwogICAgICAg IHVuc2lnbmVkIGxvbmcgY3B1X3R5cGU7CiAgICAgICAgc3RydWN0IHJldmVjdG9yZWRfc3RydWN0 IGludF9yZXZlY3RvcmVkOwogICAgICAgIHN0cnVjdCByZXZlY3RvcmVkX3N0cnVjdCBpbnQyMV9y ZXZlY3RvcmVkOwogICAgICAgIHN0cnVjdCB2bTg2cGx1c19pbmZvX3N0cnVjdCB2bTg2cGx1czsK ICAgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVnczMyOwojIDIwMSAiL3Vzci9zcmMvbGludXgtMi40 LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3ZtODYuaCIKfTsKCnZvaWQgaGFuZGxlX3ZtODZfZmF1bHQo c3RydWN0IGtlcm5lbF92bTg2X3JlZ3MgKiwgbG9uZyk7CmludCBoYW5kbGVfdm04Nl90cmFwKHN0 cnVjdCBrZXJuZWxfdm04Nl9yZWdzICosIGxvbmcsIGludCk7CiMgMTEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCIgMgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9tYXRoX2VtdS5oIiAxCgoKCiMgMSAiL3Vzci9z cmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaCIgMQojIDE4ICIv dXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vc2lnY29udGV4dC5oIgpzdHJ1 Y3QgX2ZwcmVnIHsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzaWduaWZpY2FuZFs0XTsKICAgICAg ICB1bnNpZ25lZCBzaG9ydCBleHBvbmVudDsKfTsKCnN0cnVjdCBfZnB4cmVnIHsKICAgICAgICB1 bnNpZ25lZCBzaG9ydCBzaWduaWZpY2FuZFs0XTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBleHBv bmVudDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBwYWRkaW5nWzNdOwp9OwoKc3RydWN0IF94bW1y ZWcgewogICAgICAgIHVuc2lnbmVkIGxvbmcgZWxlbWVudFs0XTsKfTsKCnN0cnVjdCBfZnBzdGF0 ZSB7CgogICAgICAgIHVuc2lnbmVkIGxvbmcgY3c7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzdzsK ICAgICAgICB1bnNpZ25lZCBsb25nIHRhZzsKICAgICAgICB1bnNpZ25lZCBsb25nIGlwb2ZmOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgY3NzZWw7CiAgICAgICAgdW5zaWduZWQgbG9uZyBkYXRhb2Zm OwogICAgICAgIHVuc2lnbmVkIGxvbmcgZGF0YXNlbDsKICAgICAgICBzdHJ1Y3QgX2ZwcmVnIF9z dFs4XTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzdGF0dXM7CiAgICAgICAgdW5zaWduZWQgc2hv cnQgbWFnaWM7CgoKICAgICAgICB1bnNpZ25lZCBsb25nIF9meHNyX2Vudls2XTsKICAgICAgICB1 bnNpZ25lZCBsb25nIG14Y3NyOwogICAgICAgIHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWQ7CiAgICAg ICAgc3RydWN0IF9mcHhyZWcgX2Z4c3Jfc3RbOF07CiAgICAgICAgc3RydWN0IF94bW1yZWcgX3ht bVs4XTsKICAgICAgICB1bnNpZ25lZCBsb25nIHBhZGRpbmdbNTZdOwp9OwoKCgpzdHJ1Y3Qgc2ln Y29udGV4dCB7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgZ3MsIF9fZ3NoOwogICAgICAgIHVuc2ln bmVkIHNob3J0IGZzLCBfX2ZzaDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBlcywgX19lc2g7CiAg ICAgICAgdW5zaWduZWQgc2hvcnQgZHMsIF9fZHNoOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZWRp OwogICAgICAgIHVuc2lnbmVkIGxvbmcgZXNpOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZWJwOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgZXNwOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZWJ4OwogICAg ICAgIHVuc2lnbmVkIGxvbmcgZWR4OwogICAgICAgIHVuc2lnbmVkIGxvbmcgZWN4OwogICAgICAg IHVuc2lnbmVkIGxvbmcgZWF4OwogICAgICAgIHVuc2lnbmVkIGxvbmcgdHJhcG5vOwogICAgICAg IHVuc2lnbmVkIGxvbmcgZXJyOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZWlwOwogICAgICAgIHVu c2lnbmVkIHNob3J0IGNzLCBfX2NzaDsKICAgICAgICB1bnNpZ25lZCBsb25nIGVmbGFnczsKICAg ICAgICB1bnNpZ25lZCBsb25nIGVzcF9hdF9zaWduYWw7CiAgICAgICAgdW5zaWduZWQgc2hvcnQg c3MsIF9fc3NoOwogICAgICAgIHN0cnVjdCBfZnBzdGF0ZSAqIGZwc3RhdGU7CiAgICAgICAgdW5z aWduZWQgbG9uZyBvbGRtYXNrOwogICAgICAgIHVuc2lnbmVkIGxvbmcgY3IyOwp9OwojIDUgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9tYXRoX2VtdS5oIiAyCgppbnQg cmVzdG9yZV9pMzg3X3NvZnQodm9pZCAqczM4Nywgc3RydWN0IF9mcHN0YXRlICpidWYpOwppbnQg c2F2ZV9pMzg3X3NvZnQodm9pZCAqczM4Nywgc3RydWN0IF9mcHN0YXRlICogYnVmKTsKCgoKCgpz dHJ1Y3QgaW5mbyB7CiAgICAgICAgbG9uZyBfX19vcmlnX2VpcDsKICAgICAgICBsb25nIF9fX2Vi eDsKICAgICAgICBsb25nIF9fX2VjeDsKICAgICAgICBsb25nIF9fX2VkeDsKICAgICAgICBsb25n IF9fX2VzaTsKICAgICAgICBsb25nIF9fX2VkaTsKICAgICAgICBsb25nIF9fX2VicDsKICAgICAg ICBsb25nIF9fX2VheDsKICAgICAgICBsb25nIF9fX2RzOwogICAgICAgIGxvbmcgX19fZXM7CiAg ICAgICAgbG9uZyBfX19vcmlnX2VheDsKICAgICAgICBsb25nIF9fX2VpcDsKICAgICAgICBsb25n IF9fX2NzOwogICAgICAgIGxvbmcgX19fZWZsYWdzOwogICAgICAgIGxvbmcgX19fZXNwOwogICAg ICAgIGxvbmcgX19fc3M7CiAgICAgICAgbG9uZyBfX192bTg2X2VzOwogICAgICAgIGxvbmcgX19f dm04Nl9kczsKICAgICAgICBsb25nIF9fX3ZtODZfZnM7CiAgICAgICAgbG9uZyBfX192bTg2X2dz Owp9OwojIDEyICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vcHJvY2Vz c29yLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vc2Vn bWVudC5oIiAxCiMgMTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9w cm9jZXNzb3IuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2Fz bS9wYWdlLmgiIDEKIyAxNCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNt L3Byb2Nlc3Nvci5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUv YXNtL3R5cGVzLmgiIDEKCgoKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1bW9kZV90OwoKCgoKCgp0 eXBlZGVmIF9fc2lnbmVkX18gY2hhciBfX3M4Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191ODsK CnR5cGVkZWYgX19zaWduZWRfXyBzaG9ydCBfX3MxNjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBf X3UxNjsKCnR5cGVkZWYgX19zaWduZWRfXyBpbnQgX19zMzI7CnR5cGVkZWYgdW5zaWduZWQgaW50 IF9fdTMyOwoKCnR5cGVkZWYgX19zaWduZWRfXyBsb25nIGxvbmcgX19zNjQ7CnR5cGVkZWYgdW5z aWduZWQgbG9uZyBsb25nIF9fdTY0OwoKCgoKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMv bGludXgvaW5jbHVkZS9saW51eC9jb25maWcuaCIgMQojIDMxICIvdXNyL3NyYy9saW51eC0yLjQu MTMvbGludXgvaW5jbHVkZS9hc20vdHlwZXMuaCIgMgoKdHlwZWRlZiBzaWduZWQgY2hhciBzODsK dHlwZWRlZiB1bnNpZ25lZCBjaGFyIHU4OwoKdHlwZWRlZiBzaWduZWQgc2hvcnQgczE2Owp0eXBl ZGVmIHVuc2lnbmVkIHNob3J0IHUxNjsKCnR5cGVkZWYgc2lnbmVkIGludCBzMzI7CnR5cGVkZWYg dW5zaWduZWQgaW50IHUzMjsKCnR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBzNjQ7CnR5cGVkZWYg dW5zaWduZWQgbG9uZyBsb25nIHU2NDsKIyA1MSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4 L2luY2x1ZGUvYXNtL3R5cGVzLmgiCnR5cGVkZWYgdTMyIGRtYV9hZGRyX3Q7Cgp0eXBlZGVmIHU2 NCBkbWE2NF9hZGRyX3Q7CiMgMTUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRl L2FzbS9wcm9jZXNzb3IuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNs dWRlL2FzbS9zaWdjb250ZXh0LmgiIDEKIyAxNiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4 L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xp bnV4L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaCIgMQojIDE3ICIvdXNyL3NyYy9saW51eC0yLjQu MTMvbGludXgvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9jYWNoZS5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvY29uZmlnLmgiIDEKIyA1ICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9jYWNoZS5oIiAyCiMgMSAiL3Vzci9zcmMv bGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL2NhY2hlLmgiIDEKCgoKCgoKIyAxICIvdXNy L3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9jb25maWcuaCIgMQojIDggIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9jYWNoZS5oIiAyCiMgNiAiL3Vz ci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvY2FjaGUuaCIgMgojIDE4ICIv dXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgiIDIKIyAx ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9jb25maWcuaCIgMQoj IDE5ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgi IDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC90aHJlYWRz LmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9j b25maWcuaCIgMQojIDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4 L3RocmVhZHMuaCIgMgojIDIwICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9h c20vcHJvY2Vzc29yLmgiIDIKIyAzMyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1 ZGUvYXNtL3Byb2Nlc3Nvci5oIgpzdHJ1Y3QgY3B1aW5mb194ODYgewogICAgICAgIF9fdTggeDg2 OwogICAgICAgIF9fdTggeDg2X3ZlbmRvcjsKICAgICAgICBfX3U4IHg4Nl9tb2RlbDsKICAgICAg ICBfX3U4IHg4Nl9tYXNrOwogICAgICAgIGNoYXIgd3Bfd29ya3Nfb2s7CiAgICAgICAgY2hhciBo bHRfd29ya3Nfb2s7CiAgICAgICAgY2hhciBoYXJkX21hdGg7CiAgICAgICAgY2hhciByZnU7CiAg ICAgICAgaW50IGNwdWlkX2xldmVsOwogICAgICAgIF9fdTMyIHg4Nl9jYXBhYmlsaXR5WzRdOwog ICAgICAgIGNoYXIgeDg2X3ZlbmRvcl9pZFsxNl07CiAgICAgICAgY2hhciB4ODZfbW9kZWxfaWRb NjRdOwogICAgICAgIGludCB4ODZfY2FjaGVfc2l6ZTsKCiAgICAgICAgaW50IGZkaXZfYnVnOwog ICAgICAgIGludCBmMDBmX2J1ZzsKICAgICAgICBpbnQgY29tYV9idWc7CiAgICAgICAgdW5zaWdu ZWQgbG9uZyBsb29wc19wZXJfamlmZnk7CiAgICAgICAgdW5zaWduZWQgbG9uZyAqcGdkX3F1aWNr OwogICAgICAgIHVuc2lnbmVkIGxvbmcgKnBtZF9xdWljazsKICAgICAgICB1bnNpZ25lZCBsb25n ICpwdGVfcXVpY2s7CiAgICAgICAgdW5zaWduZWQgbG9uZyBwZ3RhYmxlX2NhY2hlX3N6Owp9IF9f YXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKCgxIDw8ICgoNSkpKSkpKTsKIyA3MiAiL3Vzci9zcmMv bGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIgpleHRlcm4gc3RydWN0 IGNwdWluZm9feDg2IGJvb3RfY3B1X2RhdGE7CmV4dGVybiBzdHJ1Y3QgdHNzX3N0cnVjdCBpbml0 X3Rzc1szMl07CgoKZXh0ZXJuIHN0cnVjdCBjcHVpbmZvX3g4NiBjcHVfZGF0YVtdOwojIDk0ICIv dXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgiCmV4dGVy biBjaGFyIGlnbm9yZV9pcnExMzsKCmV4dGVybiB2b2lkIGlkZW50aWZ5X2NwdShzdHJ1Y3QgY3B1 aW5mb194ODYgKik7CmV4dGVybiB2b2lkIHByaW50X2NwdV9pbmZvKHN0cnVjdCBjcHVpbmZvX3g4 NiAqKTsKZXh0ZXJuIHZvaWQgZG9kZ3lfdHNjKHZvaWQpOwojIDEyNCAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIgpzdGF0aWMgaW5saW5lIHZvaWQg Y3B1aWQoaW50IG9wLCBpbnQgKmVheCwgaW50ICplYngsIGludCAqZWN4LCBpbnQgKmVkeCkKewog ICAgICAgIF9fYXNtX18oImNwdWlkIgogICAgICAgICAgICAgICAgOiAiPWEiICgqZWF4KSwKICAg ICAgICAgICAgICAgICAgIj1iIiAoKmVieCksCiAgICAgICAgICAgICAgICAgICI9YyIgKCplY3gp LAogICAgICAgICAgICAgICAgICAiPWQiICgqZWR4KQogICAgICAgICAgICAgICAgOiAiMCIgKG9w KSk7Cn0KCgoKCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNwdWlkX2VheCh1bnNpZ25lZCBp bnQgb3ApCnsKICAgICAgICB1bnNpZ25lZCBpbnQgZWF4OwoKICAgICAgICBfX2FzbV9fKCJjcHVp ZCIKICAgICAgICAgICAgICAgIDogIj1hIiAoZWF4KQogICAgICAgICAgICAgICAgOiAiMCIgKG9w KQogICAgICAgICAgICAgICAgOiAiYngiLCAiY3giLCAiZHgiKTsKICAgICAgICByZXR1cm4gZWF4 Owp9CnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNwdWlkX2VieCh1bnNpZ25lZCBpbnQgb3Ap CnsKICAgICAgICB1bnNpZ25lZCBpbnQgZWF4LCBlYng7CgogICAgICAgIF9fYXNtX18oImNwdWlk IgogICAgICAgICAgICAgICAgOiAiPWEiIChlYXgpLCAiPWIiIChlYngpCiAgICAgICAgICAgICAg ICA6ICIwIiAob3ApCiAgICAgICAgICAgICAgICA6ICJjeCIsICJkeCIgKTsKICAgICAgICByZXR1 cm4gZWJ4Owp9CnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNwdWlkX2VjeCh1bnNpZ25lZCBp bnQgb3ApCnsKICAgICAgICB1bnNpZ25lZCBpbnQgZWF4LCBlY3g7CgogICAgICAgIF9fYXNtX18o ImNwdWlkIgogICAgICAgICAgICAgICAgOiAiPWEiIChlYXgpLCAiPWMiIChlY3gpCiAgICAgICAg ICAgICAgICA6ICIwIiAob3ApCiAgICAgICAgICAgICAgICA6ICJieCIsICJkeCIgKTsKICAgICAg ICByZXR1cm4gZWN4Owp9CnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNwdWlkX2VkeCh1bnNp Z25lZCBpbnQgb3ApCnsKICAgICAgICB1bnNpZ25lZCBpbnQgZWF4LCBlZHg7CgogICAgICAgIF9f YXNtX18oImNwdWlkIgogICAgICAgICAgICAgICAgOiAiPWEiIChlYXgpLCAiPWQiIChlZHgpCiAg ICAgICAgICAgICAgICA6ICIwIiAob3ApCiAgICAgICAgICAgICAgICA6ICJieCIsICJjeCIpOwog ICAgICAgIHJldHVybiBlZHg7Cn0KIyAxOTkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9p bmNsdWRlL2FzbS9wcm9jZXNzb3IuaCIKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbW11X2NyNF9mZWF0 dXJlczsKCnN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfaW5fY3I0ICh1bnNpZ25lZCBsb25nIG1hc2sp CnsKICAgICAgICBtbXVfY3I0X2ZlYXR1cmVzIHw9IG1hc2s7CiAgICAgICAgX19hc21fXygibW92 bCAlJWNyNCwlJWVheFxuXHQiCiAgICAgICAgICAgICAgICAib3JsICUwLCUlZWF4XG5cdCIKICAg ICAgICAgICAgICAgICJtb3ZsICUlZWF4LCUlY3I0XG4iCiAgICAgICAgICAgICAgICA6IDogImly ZyIgKG1hc2spCiAgICAgICAgICAgICAgICA6ImF4Iik7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBj bGVhcl9pbl9jcjQgKHVuc2lnbmVkIGxvbmcgbWFzaykKewogICAgICAgIG1tdV9jcjRfZmVhdHVy ZXMgJj0gfm1hc2s7CiAgICAgICAgX19hc21fXygibW92bCAlJWNyNCwlJWVheFxuXHQiCiAgICAg ICAgICAgICAgICAiYW5kbCAlMCwlJWVheFxuXHQiCiAgICAgICAgICAgICAgICAibW92bCAlJWVh eCwlJWNyNFxuIgogICAgICAgICAgICAgICAgOiA6ICJpcmciICh+bWFzaykKICAgICAgICAgICAg ICAgIDoiYXgiKTsKfQojIDI1NiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUv YXNtL3Byb2Nlc3Nvci5oIgpleHRlcm4gaW50IE1DQV9idXM7CgoKCmV4dGVybiB1bnNpZ25lZCBp bnQgbWFjaGluZV9pZDsKZXh0ZXJuIHVuc2lnbmVkIGludCBtYWNoaW5lX3N1Ym1vZGVsX2lkOwpl eHRlcm4gdW5zaWduZWQgaW50IEJJT1NfcmV2aXNpb247CmV4dGVybiB1bnNpZ25lZCBpbnQgbWNh X3BlbnRpdW1fZmxhZzsKIyAyODIgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRl L2FzbS9wcm9jZXNzb3IuaCIKc3RydWN0IGkzODdfZnNhdmVfc3RydWN0IHsKICAgICAgICBsb25n IGN3ZDsKICAgICAgICBsb25nIHN3ZDsKICAgICAgICBsb25nIHR3ZDsKICAgICAgICBsb25nIGZp cDsKICAgICAgICBsb25nIGZjczsKICAgICAgICBsb25nIGZvbzsKICAgICAgICBsb25nIGZvczsK ICAgICAgICBsb25nIHN0X3NwYWNlWzIwXTsKICAgICAgICBsb25nIHN0YXR1czsKfTsKCnN0cnVj dCBpMzg3X2Z4c2F2ZV9zdHJ1Y3QgewogICAgICAgIHVuc2lnbmVkIHNob3J0IGN3ZDsKICAgICAg ICB1bnNpZ25lZCBzaG9ydCBzd2Q7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgdHdkOwogICAgICAg IHVuc2lnbmVkIHNob3J0IGZvcDsKICAgICAgICBsb25nIGZpcDsKICAgICAgICBsb25nIGZjczsK ICAgICAgICBsb25nIGZvbzsKICAgICAgICBsb25nIGZvczsKICAgICAgICBsb25nIG14Y3NyOwog ICAgICAgIGxvbmcgcmVzZXJ2ZWQ7CiAgICAgICAgbG9uZyBzdF9zcGFjZVszMl07CiAgICAgICAg bG9uZyB4bW1fc3BhY2VbMzJdOwogICAgICAgIGxvbmcgcGFkZGluZ1s1Nl07Cn0gX19hdHRyaWJ1 dGVfXyAoKGFsaWduZWQgKDE2KSkpOwoKc3RydWN0IGkzODdfc29mdF9zdHJ1Y3QgewogICAgICAg IGxvbmcgY3dkOwogICAgICAgIGxvbmcgc3dkOwogICAgICAgIGxvbmcgdHdkOwogICAgICAgIGxv bmcgZmlwOwogICAgICAgIGxvbmcgZmNzOwogICAgICAgIGxvbmcgZm9vOwogICAgICAgIGxvbmcg Zm9zOwogICAgICAgIGxvbmcgc3Rfc3BhY2VbMjBdOwogICAgICAgIHVuc2lnbmVkIGNoYXIgZnRv cCwgY2hhbmdlZCwgbG9va2FoZWFkLCBub191cGRhdGUsIHJtLCBhbGltaXQ7CiAgICAgICAgc3Ry dWN0IGluZm8gKmluZm87CiAgICAgICAgdW5zaWduZWQgbG9uZyBlbnRyeV9laXA7Cn07Cgp1bmlv biBpMzg3X3VuaW9uIHsKICAgICAgICBzdHJ1Y3QgaTM4N19mc2F2ZV9zdHJ1Y3QgZnNhdmU7CiAg ICAgICAgc3RydWN0IGkzODdfZnhzYXZlX3N0cnVjdCBmeHNhdmU7CiAgICAgICAgc3RydWN0IGkz ODdfc29mdF9zdHJ1Y3Qgc29mdDsKfTsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICB1bnNpZ25l ZCBsb25nIHNlZzsKfSBtbV9zZWdtZW50X3Q7CgpzdHJ1Y3QgdHNzX3N0cnVjdCB7CiAgICAgICAg dW5zaWduZWQgc2hvcnQgYmFja19saW5rLF9fYmxoOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZXNw MDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzczAsX19zczBoOwogICAgICAgIHVuc2lnbmVkIGxv bmcgZXNwMTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzczEsX19zczFoOwogICAgICAgIHVuc2ln bmVkIGxvbmcgZXNwMjsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzczIsX19zczJoOwogICAgICAg IHVuc2lnbmVkIGxvbmcgX19jcjM7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlaXA7CiAgICAgICAg dW5zaWduZWQgbG9uZyBlZmxhZ3M7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlYXgsZWN4LGVkeCxl Yng7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlc3A7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlYnA7 CiAgICAgICAgdW5zaWduZWQgbG9uZyBlc2k7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlZGk7CiAg ICAgICAgdW5zaWduZWQgc2hvcnQgZXMsIF9fZXNoOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGNz LCBfX2NzaDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzcywgX19zc2g7CiAgICAgICAgdW5zaWdu ZWQgc2hvcnQgZHMsIF9fZHNoOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGZzLCBfX2ZzaDsKICAg ICAgICB1bnNpZ25lZCBzaG9ydCBncywgX19nc2g7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgbGR0 LCBfX2xkdGg7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgdHJhY2UsIGJpdG1hcDsKICAgICAgICB1 bnNpZ25lZCBsb25nIGlvX2JpdG1hcFszMiArMV07CgoKCiAgICAgICAgdW5zaWduZWQgbG9uZyBf X2NhY2hlbGluZV9maWxsZXJbNV07Cn07CgpzdHJ1Y3QgdGhyZWFkX3N0cnVjdCB7CiAgICAgICAg dW5zaWduZWQgbG9uZyBlc3AwOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZWlwOwogICAgICAgIHVu c2lnbmVkIGxvbmcgZXNwOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZnM7CiAgICAgICAgdW5zaWdu ZWQgbG9uZyBnczsKCiAgICAgICAgdW5zaWduZWQgbG9uZyBkZWJ1Z3JlZ1s4XTsKCiAgICAgICAg dW5zaWduZWQgbG9uZyBjcjIsIHRyYXBfbm8sIGVycm9yX2NvZGU7CgogICAgICAgIHVuaW9uIGkz ODdfdW5pb24gaTM4NzsKCiAgICAgICAgc3RydWN0IHZtODZfc3RydWN0ICogdm04Nl9pbmZvOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgc2NyZWVuX2JpdG1hcDsKICAgICAgICB1bnNpZ25lZCBsb25n IHY4NmZsYWdzLCB2ODZtYXNrLCB2ODZtb2RlLCBzYXZlZF9lc3AwOwoKICAgICAgICBpbnQgaW9w ZXJtOwogICAgICAgIHVuc2lnbmVkIGxvbmcgaW9fYml0bWFwWzMyICsxXTsKfTsKIyA0MjQgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCIKc3RydWN0 IHRhc2tfc3RydWN0OwpzdHJ1Y3QgbW1fc3RydWN0OwoKCmV4dGVybiB2b2lkIHJlbGVhc2VfdGhy ZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKCgoKZXh0ZXJuIGludCBrZXJuZWxfdGhyZWFkKGlu dCAoKmZuKSh2b2lkICopLCB2b2lkICogYXJnLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKCgpleHRl cm4gdm9pZCBjb3B5X3NlZ21lbnRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IG1tX3N0 cnVjdCAqIG1tKTsKZXh0ZXJuIHZvaWQgcmVsZWFzZV9zZWdtZW50cyhzdHJ1Y3QgbW1fc3RydWN0 ICogbW0pOwoKCgoKc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRocmVhZF9zYXZlZF9wYyhz dHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdCkKewogICAgICAgIHJldHVybiAoKHVuc2lnbmVkIGxvbmcg Kil0LT5lc3ApWzNdOwp9Cgp1bnNpZ25lZCBsb25nIGdldF93Y2hhbihzdHJ1Y3QgdGFza19zdHJ1 Y3QgKnApOwojIDQ1OCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3By b2Nlc3Nvci5oIgpzdHJ1Y3QgbWljcm9jb2RlIHsKICAgICAgICB1bnNpZ25lZCBpbnQgaGRydmVy OwogICAgICAgIHVuc2lnbmVkIGludCByZXY7CiAgICAgICAgdW5zaWduZWQgaW50IGRhdGU7CiAg ICAgICAgdW5zaWduZWQgaW50IHNpZzsKICAgICAgICB1bnNpZ25lZCBpbnQgY2tzdW07CiAgICAg ICAgdW5zaWduZWQgaW50IGxkcnZlcjsKICAgICAgICB1bnNpZ25lZCBpbnQgcGY7CiAgICAgICAg dW5zaWduZWQgaW50IHJlc2VydmVkWzVdOwogICAgICAgIHVuc2lnbmVkIGludCBiaXRzWzUwMF07 Cn07CgoKCgoKc3RhdGljIGlubGluZSB2b2lkIHJlcF9ub3Aodm9pZCkKewogICAgICAgIF9fYXNt X18gX192b2xhdGlsZV9fKCJyZXA7bm9wIik7Cn0KCgoKCgoKCmV4dGVybiBpbmxpbmUgdm9pZCBw cmVmZXRjaChjb25zdCB2b2lkICp4KQp7CiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJw cmVmZXRjaG50YSAoJTApIiA6IDogInIiKHgpKTsKfQojIDE0ICIvdXNyL3NyYy9saW51eC0yLjQu MTMvbGludXgvaW5jbHVkZS9saW51eC9wcmVmZXRjaC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL2NhY2hlLmgiIDEKIyAxNSAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvcHJlZmV0Y2guaCIgMgojIDQ4ICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9wcmVmZXRjaC5oIgpzdGF0aWMgaW5saW5l IHZvaWQgcHJlZmV0Y2h3KGNvbnN0IHZvaWQgKngpIHs7fQojIDcgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2xpc3QuaCIgMgojIDE4ICIvdXNyL3NyYy9saW51eC0y LjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9saXN0LmgiCnN0cnVjdCBsaXN0X2hlYWQgewogICAg ICAgIHN0cnVjdCBsaXN0X2hlYWQgKm5leHQsICpwcmV2Owp9OwojIDM3ICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9saXN0LmgiCnN0YXRpYyBfX2lubGluZV9fIHZv aWQgX19saXN0X2FkZChzdHJ1Y3QgbGlzdF9oZWFkICogbmV3LAogICAgICAgIHN0cnVjdCBsaXN0 X2hlYWQgKiBwcmV2LAogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKiBuZXh0KQp7CiAgICAgICAg bmV4dC0+cHJldiA9IG5ldzsKICAgICAgICBuZXctPm5leHQgPSBuZXh0OwogICAgICAgIG5ldy0+ cHJldiA9IHByZXY7CiAgICAgICAgcHJldi0+bmV4dCA9IG5ldzsKfQojIDU1ICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9saXN0LmgiCnN0YXRpYyBfX2lubGluZV9f IHZvaWQgbGlzdF9hZGQoc3RydWN0IGxpc3RfaGVhZCAqbmV3LCBzdHJ1Y3QgbGlzdF9oZWFkICpo ZWFkKQp7CiAgICAgICAgX19saXN0X2FkZChuZXcsIGhlYWQsIGhlYWQtPm5leHQpOwp9CiMgNjgg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2xpc3QuaCIKc3RhdGlj IF9faW5saW5lX18gdm9pZCBsaXN0X2FkZF90YWlsKHN0cnVjdCBsaXN0X2hlYWQgKm5ldywgc3Ry dWN0IGxpc3RfaGVhZCAqaGVhZCkKewogICAgICAgIF9fbGlzdF9hZGQobmV3LCBoZWFkLT5wcmV2 LCBoZWFkKTsKfQojIDgwICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51 eC9saXN0LmgiCnN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19saXN0X2RlbChzdHJ1Y3QgbGlzdF9o ZWFkICogcHJldiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBsaXN0 X2hlYWQgKiBuZXh0KQp7CiAgICAgICAgbmV4dC0+cHJldiA9IHByZXY7CiAgICAgICAgcHJldi0+ bmV4dCA9IG5leHQ7Cn0KCgoKCgoKc3RhdGljIF9faW5saW5lX18gdm9pZCBsaXN0X2RlbChzdHJ1 Y3QgbGlzdF9oZWFkICplbnRyeSkKewogICAgICAgIF9fbGlzdF9kZWwoZW50cnktPnByZXYsIGVu dHJ5LT5uZXh0KTsKfQoKCgoKCnN0YXRpYyBfX2lubGluZV9fIHZvaWQgbGlzdF9kZWxfaW5pdChz dHJ1Y3QgbGlzdF9oZWFkICplbnRyeSkKewogICAgICAgIF9fbGlzdF9kZWwoZW50cnktPnByZXYs IGVudHJ5LT5uZXh0KTsKICAgICAgICBkbyB7IChlbnRyeSktPm5leHQgPSAoZW50cnkpOyAoZW50 cnkpLT5wcmV2ID0gKGVudHJ5KTsgfSB3aGlsZSAoMCk7Cn0KCgoKCgpzdGF0aWMgX19pbmxpbmVf XyBpbnQgbGlzdF9lbXB0eShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQp7CiAgICAgICAgcmV0dXJu IGhlYWQtPm5leHQgPT0gaGVhZDsKfQoKCgoKCgpzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGxpc3Rf c3BsaWNlKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCnsK ICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpmaXJzdCA9IGxpc3QtPm5leHQ7CgogICAgICAgIGlm IChmaXJzdCAhPSBsaXN0KSB7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsYXN0 ID0gbGlzdC0+cHJldjsKICAgICAgICAgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmF0ID0gaGVh ZC0+bmV4dDsKCiAgICAgICAgICAgICAgICBmaXJzdC0+cHJldiA9IGhlYWQ7CiAgICAgICAgICAg ICAgICBoZWFkLT5uZXh0ID0gZmlyc3Q7CgogICAgICAgICAgICAgICAgbGFzdC0+bmV4dCA9IGF0 OwogICAgICAgICAgICAgICAgYXQtPnByZXYgPSBsYXN0OwogICAgICAgIH0KfQojIDEzICIvdXNy L3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9tb2R1bGUuaCIgMgojIDI1ICIv dXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9tb2R1bGUuaCIKIyAxICIv dXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vYXRvbWljLmgiIDEKIyAyNiAi L3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvbW9kdWxlLmgiIDIKCgpz dHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5OwoKCnN0cnVjdCBrZXJuZWxfc3ltCnsKICAgICAg ICB1bnNpZ25lZCBsb25nIHZhbHVlOwogICAgICAgIGNoYXIgbmFtZVs2MF07Cn07CgpzdHJ1Y3Qg bW9kdWxlX3N5bWJvbAp7CiAgICAgICAgdW5zaWduZWQgbG9uZyB2YWx1ZTsKICAgICAgICBjb25z dCBjaGFyICpuYW1lOwp9OwoKc3RydWN0IG1vZHVsZV9yZWYKewogICAgICAgIHN0cnVjdCBtb2R1 bGUgKmRlcDsKICAgICAgICBzdHJ1Y3QgbW9kdWxlICpyZWY7CiAgICAgICAgc3RydWN0IG1vZHVs ZV9yZWYgKm5leHRfcmVmOwp9OwoKCnN0cnVjdCBtb2R1bGVfcGVyc2lzdDsKCnN0cnVjdCBtb2R1 bGUKewogICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZV9vZl9zdHJ1Y3Q7CiAgICAgICAgc3RydWN0 IG1vZHVsZSAqbmV4dDsKICAgICAgICBjb25zdCBjaGFyICpuYW1lOwogICAgICAgIHVuc2lnbmVk IGxvbmcgc2l6ZTsKCiAgICAgICAgdW5pb24KICAgICAgICB7CiAgICAgICAgICAgICAgICBhdG9t aWNfdCB1c2Vjb3VudDsKICAgICAgICAgICAgICAgIGxvbmcgcGFkOwogICAgICAgIH0gdWM7Cgog ICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CgogICAgICAgIHVuc2lnbmVkIG5zeW1zOwogICAg ICAgIHVuc2lnbmVkIG5kZXBzOwoKICAgICAgICBzdHJ1Y3QgbW9kdWxlX3N5bWJvbCAqc3ltczsK ICAgICAgICBzdHJ1Y3QgbW9kdWxlX3JlZiAqZGVwczsKICAgICAgICBzdHJ1Y3QgbW9kdWxlX3Jl ZiAqcmVmczsKICAgICAgICBpbnQgKCppbml0KSh2b2lkKTsKICAgICAgICB2b2lkICgqY2xlYW51 cCkodm9pZCk7CiAgICAgICAgY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZXhf dGFibGVfc3RhcnQ7CiAgICAgICAgY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAq ZXhfdGFibGVfZW5kOwoKCgoKCgogICAgICAgIGNvbnN0IHN0cnVjdCBtb2R1bGVfcGVyc2lzdCAq cGVyc2lzdF9zdGFydDsKICAgICAgICBjb25zdCBzdHJ1Y3QgbW9kdWxlX3BlcnNpc3QgKnBlcnNp c3RfZW5kOwogICAgICAgIGludCAoKmNhbl91bmxvYWQpKHZvaWQpOwogICAgICAgIGludCBydW5z aXplOwogICAgICAgIGNvbnN0IGNoYXIgKmthbGxzeW1zX3N0YXJ0OwogICAgICAgIGNvbnN0IGNo YXIgKmthbGxzeW1zX2VuZDsKICAgICAgICBjb25zdCBjaGFyICphcmNoZGF0YV9zdGFydDsKICAg ICAgICBjb25zdCBjaGFyICphcmNoZGF0YV9lbmQ7CiAgICAgICAgY29uc3QgY2hhciAqa2VybmVs X2RhdGE7Cn07CgpzdHJ1Y3QgbW9kdWxlX2luZm8KewogICAgICAgIHVuc2lnbmVkIGxvbmcgYWRk cjsKICAgICAgICB1bnNpZ25lZCBsb25nIHNpemU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFn czsKICAgICAgICBsb25nIHVzZWNvdW50Owp9OwojIDE4MyAiL3Vzci9zcmMvbGludXgtMi40LjEz L2xpbnV4L2luY2x1ZGUvbGludXgvbW9kdWxlLmgiCmV4dGVybiB2b2lkIGludGVyX21vZHVsZV9y ZWdpc3Rlcihjb25zdCBjaGFyICosIHN0cnVjdCBtb2R1bGUgKiwgY29uc3Qgdm9pZCAqKTsKZXh0 ZXJuIHZvaWQgaW50ZXJfbW9kdWxlX3VucmVnaXN0ZXIoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGNv bnN0IHZvaWQgKmludGVyX21vZHVsZV9nZXQoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGNvbnN0IHZv aWQgKmludGVyX21vZHVsZV9nZXRfcmVxdWVzdChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7 CmV4dGVybiB2b2lkIGludGVyX21vZHVsZV9wdXQoY29uc3QgY2hhciAqKTsKCnN0cnVjdCBpbnRl cl9tb2R1bGVfZW50cnkgewogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKICAgICAgICBj b25zdCBjaGFyICppbV9uYW1lOwogICAgICAgIHN0cnVjdCBtb2R1bGUgKm93bmVyOwogICAgICAg IGNvbnN0IHZvaWQgKnVzZXJkYXRhOwp9OwoKZXh0ZXJuIGludCB0cnlfaW5jX21vZF9jb3VudChz dHJ1Y3QgbW9kdWxlICptb2QpOwojIDMyNSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2lu Y2x1ZGUvbGludXgvbW9kdWxlLmgiCmV4dGVybiBzdHJ1Y3QgbW9kdWxlICptb2R1bGVfbGlzdDsK IyAxNDcgIjgxMzl0b28uYyIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNs dWRlL2xpbnV4L2tlcm5lbC5oIiAxCiMgMTAgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9p bmNsdWRlL2xpbnV4L2tlcm5lbC5oIgojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51 eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiMgNDMgIi91c3IvbGliL2djYy1saWIv aTY4Ni1wYy1saW51eC1nbnUvMy4wLjEvaW5jbHVkZS9zdGRhcmcuaCIgMwp0eXBlZGVmIF9fYnVp bHRpbl92YV9saXN0IF9fZ251Y192YV9saXN0OwojIDExMCAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2 LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGFyZy5oIiAzCnR5cGVkZWYgX19nbnVjX3Zh X2xpc3QgdmFfbGlzdDsKIyAxMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUv bGludXgva2VybmVsLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVk ZS9saW51eC9saW5rYWdlLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgv aW5jbHVkZS9saW51eC9jb25maWcuaCIgMQojIDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51 eC9pbmNsdWRlL2xpbnV4L2xpbmthZ2UuaCIgMgojIDEyICIvdXNyL3NyYy9saW51eC0yLjQuMTMv bGludXgvaW5jbHVkZS9saW51eC9rZXJuZWwuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4x My9saW51eC9pbmNsdWRlL2xpbnV4L3N0ZGRlZi5oIiAxCiMgMTMgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvdHlwZXMuaCIgMQoKCgoKIyAxICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9jb25maWcuaCIgMQojIDYgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3R5cGVzLmgiIDIKCgojIDEgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3Bvc2l4X3R5cGVzLmgiIDEKCgoK IyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9zdGRkZWYuaCIg MQojIDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3Bvc2l4X3R5 cGVzLmgiIDIKIyAzNiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgv cG9zaXhfdHlwZXMuaCIKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIHVuc2lnbmVkIGxvbmcgZmRz X2JpdHMgWygxMDI0Lyg4ICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSldOwp9IF9fa2VybmVsX2Zk X3NldDsKCgp0eXBlZGVmIHZvaWQgKCpfX2tlcm5lbF9zaWdoYW5kbGVyX3QpKGludCk7CgoKdHlw ZWRlZiBpbnQgX19rZXJuZWxfa2V5X3Q7CgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51 eC9pbmNsdWRlL2FzbS9wb3NpeF90eXBlcy5oIiAxCiMgMTAgIi91c3Ivc3JjL2xpbnV4LTIuNC4x My9saW51eC9pbmNsdWRlL2FzbS9wb3NpeF90eXBlcy5oIgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0 IF9fa2VybmVsX2Rldl90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX19rZXJuZWxfaW5vX3Q7CnR5 cGVkZWYgdW5zaWduZWQgc2hvcnQgX19rZXJuZWxfbW9kZV90Owp0eXBlZGVmIHVuc2lnbmVkIHNo b3J0IF9fa2VybmVsX25saW5rX3Q7CnR5cGVkZWYgbG9uZyBfX2tlcm5lbF9vZmZfdDsKdHlwZWRl ZiBpbnQgX19rZXJuZWxfcGlkX3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19rZXJuZWxfaXBj X3BpZF90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fa2VybmVsX3VpZF90Owp0eXBlZGVmIHVu c2lnbmVkIHNob3J0IF9fa2VybmVsX2dpZF90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX2tlcm5l bF9zaXplX3Q7CnR5cGVkZWYgaW50IF9fa2VybmVsX3NzaXplX3Q7CnR5cGVkZWYgaW50IF9fa2Vy bmVsX3B0cmRpZmZfdDsKdHlwZWRlZiBsb25nIF9fa2VybmVsX3RpbWVfdDsKdHlwZWRlZiBsb25n IF9fa2VybmVsX3N1c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgX19rZXJuZWxfY2xvY2tfdDsKdHlw ZWRlZiBpbnQgX19rZXJuZWxfZGFkZHJfdDsKdHlwZWRlZiBjaGFyICogX19rZXJuZWxfY2FkZHJf dDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tlcm5lbF91aWQxNl90Owp0eXBlZGVmIHVuc2ln bmVkIHNob3J0IF9fa2VybmVsX2dpZDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fa2VybmVs X3VpZDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fa2VybmVsX2dpZDMyX3Q7Cgp0eXBlZGVm IHVuc2lnbmVkIHNob3J0IF9fa2VybmVsX29sZF91aWRfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9y dCBfX2tlcm5lbF9vbGRfZ2lkX3Q7CgoKdHlwZWRlZiBsb25nIGxvbmcgX19rZXJuZWxfbG9mZl90 OwoKCnR5cGVkZWYgc3RydWN0IHsKCiAgICAgICAgaW50IHZhbFsyXTsKCgoKfSBfX2tlcm5lbF9m c2lkX3Q7CiMgNDcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3Bv c2l4X3R5cGVzLmgiIDIKIyA5ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9s aW51eC90eXBlcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUv YXNtL3R5cGVzLmgiIDEKIyAxMCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUv bGludXgvdHlwZXMuaCIgMgoKCgp0eXBlZGVmIF9fa2VybmVsX2ZkX3NldCBmZF9zZXQ7CnR5cGVk ZWYgX19rZXJuZWxfZGV2X3QgZGV2X3Q7CnR5cGVkZWYgX19rZXJuZWxfaW5vX3QgaW5vX3Q7CnR5 cGVkZWYgX19rZXJuZWxfbW9kZV90IG1vZGVfdDsKdHlwZWRlZiBfX2tlcm5lbF9ubGlua190IG5s aW5rX3Q7CnR5cGVkZWYgX19rZXJuZWxfb2ZmX3Qgb2ZmX3Q7CnR5cGVkZWYgX19rZXJuZWxfcGlk X3QgcGlkX3Q7CnR5cGVkZWYgX19rZXJuZWxfZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVmIF9fa2Vy bmVsX2tleV90IGtleV90Owp0eXBlZGVmIF9fa2VybmVsX3N1c2Vjb25kc190IHN1c2Vjb25kc190 OwoKCnR5cGVkZWYgX19rZXJuZWxfdWlkMzJfdCB1aWRfdDsKdHlwZWRlZiBfX2tlcm5lbF9naWQz Ml90IGdpZF90Owp0eXBlZGVmIF9fa2VybmVsX3VpZDE2X3QgdWlkMTZfdDsKdHlwZWRlZiBfX2tl cm5lbF9naWQxNl90IGdpZDE2X3Q7CgoKCnR5cGVkZWYgX19rZXJuZWxfb2xkX3VpZF90IG9sZF91 aWRfdDsKdHlwZWRlZiBfX2tlcm5lbF9vbGRfZ2lkX3Qgb2xkX2dpZF90OwojIDQ1ICIvdXNyL3Ny Yy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC90eXBlcy5oIgp0eXBlZGVmIF9fa2Vy bmVsX2xvZmZfdCBsb2ZmX3Q7CiMgNTQgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNs dWRlL2xpbnV4L3R5cGVzLmgiCnR5cGVkZWYgX19rZXJuZWxfc2l6ZV90IHNpemVfdDsKCgoKCnR5 cGVkZWYgX19rZXJuZWxfc3NpemVfdCBzc2l6ZV90OwoKCgoKdHlwZWRlZiBfX2tlcm5lbF9wdHJk aWZmX3QgcHRyZGlmZl90OwoKCgoKdHlwZWRlZiBfX2tlcm5lbF90aW1lX3QgdGltZV90OwoKCgoK dHlwZWRlZiBfX2tlcm5lbF9jbG9ja190IGNsb2NrX3Q7CgoKCgp0eXBlZGVmIF9fa2VybmVsX2Nh ZGRyX3QgY2FkZHJfdDsKCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVfY2hhcjsKdHlwZWRlZiB1 bnNpZ25lZCBzaG9ydCB1X3Nob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDsKdHlwZWRl ZiB1bnNpZ25lZCBsb25nIHVfbG9uZzsKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdW5jaGFyOwp0 eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVzaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsK dHlwZWRlZiB1bnNpZ25lZCBsb25nIHVsb25nOwoKCgoKdHlwZWRlZiBfX3U4IHVfaW50OF90Owp0 eXBlZGVmIF9fczggaW50OF90Owp0eXBlZGVmIF9fdTE2IHVfaW50MTZfdDsKdHlwZWRlZiBfX3Mx NiBpbnQxNl90Owp0eXBlZGVmIF9fdTMyIHVfaW50MzJfdDsKdHlwZWRlZiBfX3MzMiBpbnQzMl90 OwoKCgp0eXBlZGVmIF9fdTggdWludDhfdDsKdHlwZWRlZiBfX3UxNiB1aW50MTZfdDsKdHlwZWRl ZiBfX3UzMiB1aW50MzJfdDsKCgp0eXBlZGVmIF9fdTY0IHVpbnQ2NF90Owp0eXBlZGVmIF9fdTY0 IHVfaW50NjRfdDsKdHlwZWRlZiBfX3M2NCBpbnQ2NF90OwojIDEyMyAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvdHlwZXMuaCIKc3RydWN0IHVzdGF0IHsKICAgICAg ICBfX2tlcm5lbF9kYWRkcl90IGZfdGZyZWU7CiAgICAgICAgX19rZXJuZWxfaW5vX3QgZl90aW5v ZGU7CiAgICAgICAgY2hhciBmX2ZuYW1lWzZdOwogICAgICAgIGNoYXIgZl9mcGFja1s2XTsKfTsK IyAxNCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgva2VybmVsLmgi IDIKIyA0OSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgva2VybmVs LmgiCnN0cnVjdCBjb21wbGV0aW9uOwoKZXh0ZXJuIHN0cnVjdCBub3RpZmllcl9ibG9jayAqcGFu aWNfbm90aWZpZXJfbGlzdDsKICAgICAgICAgICB2b2lkIHBhbmljKGNvbnN0IGNoYXIgKiBmbXQs IC4uLikKICAgICAgICBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4sIGZvcm1hdCAocHJpbnRmLCAx LCAyKSkpOwogICAgICAgICAgIHZvaWQgZG9fZXhpdChsb25nIGVycm9yX2NvZGUpCiAgICAgICAg X19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKICAgICAgICAgICB2b2lkIGNvbXBsZXRlX2FuZF9l eGl0KHN0cnVjdCBjb21wbGV0aW9uICosIGxvbmcpCiAgICAgICAgX19hdHRyaWJ1dGVfXygobm9y ZXR1cm4pKTsKZXh0ZXJuIGludCBhYnMoaW50KTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2ltcGxl X3N0cnRvdWwoY29uc3QgY2hhciAqLGNoYXIgKiosdW5zaWduZWQgaW50KTsKZXh0ZXJuIGxvbmcg c2ltcGxlX3N0cnRvbChjb25zdCBjaGFyICosY2hhciAqKix1bnNpZ25lZCBpbnQpOwpleHRlcm4g dW5zaWduZWQgbG9uZyBsb25nIHNpbXBsZV9zdHJ0b3VsbChjb25zdCBjaGFyICosY2hhciAqKix1 bnNpZ25lZCBpbnQpOwpleHRlcm4gbG9uZyBsb25nIHNpbXBsZV9zdHJ0b2xsKGNvbnN0IGNoYXIg KixjaGFyICoqLHVuc2lnbmVkIGludCk7CmV4dGVybiBpbnQgc3ByaW50ZihjaGFyICogYnVmLCBj b25zdCBjaGFyICogZm10LCAuLi4pOwpleHRlcm4gaW50IHZzcHJpbnRmKGNoYXIgKmJ1ZiwgY29u c3QgY2hhciAqLCB2YV9saXN0KTsKZXh0ZXJuIGludCBzbnByaW50ZihjaGFyICogYnVmLCBzaXpl X3Qgc2l6ZSwgY29uc3QgY2hhciAqZm10LCAuLi4pOwpleHRlcm4gaW50IHZzbnByaW50ZihjaGFy ICpidWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncyk7CgpleHRl cm4gaW50IHNzY2FuZihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKQogICAgICAgIF9f YXR0cmlidXRlX18gKChmb3JtYXQgKHNjYW5mLDIsMykpKTsKZXh0ZXJuIGludCB2c3NjYW5mKGNv bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCB2YV9saXN0KTsKCmV4dGVybiBpbnQgZ2V0X29wdGlv bihjaGFyICoqc3RyLCBpbnQgKnBpbnQpOwpleHRlcm4gY2hhciAqZ2V0X29wdGlvbnMoY2hhciAq c3RyLCBpbnQgbmludHMsIGludCAqaW50cyk7CmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgbWVt cGFyc2UoY2hhciAqcHRyLCBjaGFyICoqcmV0cHRyKTsKZXh0ZXJuIHZvaWQgZGV2X3Byb2JlX2xv Y2sodm9pZCk7CmV4dGVybiB2b2lkIGRldl9wcm9iZV91bmxvY2sodm9pZCk7CgpleHRlcm4gaW50 IHNlc3Npb25fb2ZfcGdycChpbnQgcGdycCk7CgogX19hdHRyaWJ1dGVfXygocmVncGFybSgwKSkp IGludCBwcmludGsoY29uc3QgY2hhciAqIGZtdCwgLi4uKQogICAgICAgIF9fYXR0cmlidXRlX18g KChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKCmV4dGVybiBpbnQgY29uc29sZV9sb2dsZXZlbDsK CnN0YXRpYyBpbmxpbmUgdm9pZCBjb25zb2xlX3NpbGVudCh2b2lkKQp7CiAgICAgICAgY29uc29s ZV9sb2dsZXZlbCA9IDA7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBjb25zb2xlX3ZlcmJvc2Uodm9p ZCkKewogICAgICAgIGlmIChjb25zb2xlX2xvZ2xldmVsKQogICAgICAgICAgICAgICAgY29uc29s ZV9sb2dsZXZlbCA9IDE1Owp9CgpleHRlcm4gdm9pZCBidXN0X3NwaW5sb2NrcyhpbnQgeWVzKTsK ZXh0ZXJuIGludCBvb3BzX2luX3Byb2dyZXNzOwoKZXh0ZXJuIGludCB0YWludGVkOwpleHRlcm4g Y29uc3QgY2hhciAqcHJpbnRfdGFpbnRlZCh2b2lkKTsKIyAxNjAgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oIgpzdHJ1Y3Qgc3lzaW5mbyB7CiAgICAg ICAgbG9uZyB1cHRpbWU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBsb2Fkc1szXTsKICAgICAgICB1 bnNpZ25lZCBsb25nIHRvdGFscmFtOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZnJlZXJhbTsKICAg ICAgICB1bnNpZ25lZCBsb25nIHNoYXJlZHJhbTsKICAgICAgICB1bnNpZ25lZCBsb25nIGJ1ZmZl cnJhbTsKICAgICAgICB1bnNpZ25lZCBsb25nIHRvdGFsc3dhcDsKICAgICAgICB1bnNpZ25lZCBs b25nIGZyZWVzd2FwOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHByb2NzOwogICAgICAgIHVuc2ln bmVkIHNob3J0IHBhZDsKICAgICAgICB1bnNpZ25lZCBsb25nIHRvdGFsaGlnaDsKICAgICAgICB1 bnNpZ25lZCBsb25nIGZyZWVoaWdoOwogICAgICAgIHVuc2lnbmVkIGludCBtZW1fdW5pdDsKICAg ICAgICBjaGFyIF9mWzIwLTIqc2l6ZW9mKGxvbmcpLXNpemVvZihpbnQpXTsKfTsKIyAxNDggIjgx Mzl0b28uYyIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4 L3BjaS5oIiAxCiMgMjc2ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51 eC9wY2kuaCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9w Y2lfaWRzLmgiIDEKIyAyNzcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xp bnV4L3BjaS5oIiAyCiMgMjk5ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9s aW51eC9wY2kuaCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51 eC90eXBlcy5oIiAxCiMgMzAwICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9s aW51eC9wY2kuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xp bnV4L2NvbmZpZy5oIiAxCiMgMzAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVk ZS9saW51eC9wY2kuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRl L2xpbnV4L2lvcG9ydC5oIiAxCiMgMTUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNs dWRlL2xpbnV4L2lvcG9ydC5oIgpzdHJ1Y3QgcmVzb3VyY2UgewogICAgICAgIGNvbnN0IGNoYXIg Km5hbWU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kOwogICAgICAgIHVuc2lnbmVk IGxvbmcgZmxhZ3M7CiAgICAgICAgc3RydWN0IHJlc291cmNlICpwYXJlbnQsICpzaWJsaW5nLCAq Y2hpbGQ7Cn07CgpzdHJ1Y3QgcmVzb3VyY2VfbGlzdCB7CiAgICAgICAgc3RydWN0IHJlc291cmNl X2xpc3QgKm5leHQ7CiAgICAgICAgc3RydWN0IHJlc291cmNlICpyZXM7CiAgICAgICAgc3RydWN0 IHBjaV9kZXYgKmRldjsKfTsKIyA4MyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1 ZGUvbGludXgvaW9wb3J0LmgiCmV4dGVybiBzdHJ1Y3QgcmVzb3VyY2UgaW9wb3J0X3Jlc291cmNl OwpleHRlcm4gc3RydWN0IHJlc291cmNlIGlvbWVtX3Jlc291cmNlOwoKZXh0ZXJuIGludCBnZXRf cmVzb3VyY2VfbGlzdChzdHJ1Y3QgcmVzb3VyY2UgKiwgY2hhciAqYnVmLCBpbnQgc2l6ZSk7Cgpl eHRlcm4gaW50IGNoZWNrX3Jlc291cmNlKHN0cnVjdCByZXNvdXJjZSAqcm9vdCwgdW5zaWduZWQg bG9uZywgdW5zaWduZWQgbG9uZyk7CmV4dGVybiBpbnQgcmVxdWVzdF9yZXNvdXJjZShzdHJ1Y3Qg cmVzb3VyY2UgKnJvb3QsIHN0cnVjdCByZXNvdXJjZSAqbmV3KTsKZXh0ZXJuIGludCByZWxlYXNl X3Jlc291cmNlKHN0cnVjdCByZXNvdXJjZSAqbmV3KTsKZXh0ZXJuIGludCBhbGxvY2F0ZV9yZXNv dXJjZShzdHJ1Y3QgcmVzb3VyY2UgKnJvb3QsIHN0cnVjdCByZXNvdXJjZSAqbmV3LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG1pbiwgdW5zaWduZWQgbG9uZyBtYXgsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBhbGlnbiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB2b2lkICgqYWxpZ25mKSh2b2lkICosIHN0cnVjdCByZXNvdXJjZSAq LCB1bnNpZ25lZCBsb25nKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphbGln bmZfZGF0YSk7CgoKCgoKZXh0ZXJuIHN0cnVjdCByZXNvdXJjZSAqIF9fcmVxdWVzdF9yZWdpb24o c3RydWN0IHJlc291cmNlICosIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbiwg Y29uc3QgY2hhciAqbmFtZSk7CgoKCgoKCgpleHRlcm4gaW50IF9fY2hlY2tfcmVnaW9uKHN0cnVj dCByZXNvdXJjZSAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKZXh0ZXJuIHZvaWQg X19yZWxlYXNlX3JlZ2lvbihzdHJ1Y3QgcmVzb3VyY2UgKiwgdW5zaWduZWQgbG9uZywgdW5zaWdu ZWQgbG9uZyk7CgoKCgoKZXh0ZXJuIHZvaWQgYXV0b2lycV9zZXR1cChpbnQgd2FpdHRpbWUpOwpl eHRlcm4gaW50IGF1dG9pcnFfcmVwb3J0KGludCB3YWl0dGltZSk7CiMgMzAyICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9wY2kuaCIgMgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2xpc3QuaCIgMQojIDMwMyAiL3Vzci9zcmMv bGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvcGNpLmgiIDIKIyAxICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9lcnJuby5oIiAxCgoKCiMgMSAiL3Vzci9z cmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL2Vycm5vLmgiIDEKIyA1ICIvdXNyL3Ny Yy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9lcnJuby5oIiAyCiMgMzA0ICIvdXNy L3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9wY2kuaCIgMgoKCmVudW0gcGNp X21tYXBfc3RhdGUgewogICAgICAgIHBjaV9tbWFwX2lvLAogICAgICAgIHBjaV9tbWFwX21lbQp9 OwojIDMzNiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvcGNpLmgi CnN0cnVjdCBwY2lfZGV2IHsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGdsb2JhbF9saXN0Owog ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgYnVzX2xpc3Q7CiAgICAgICAgc3RydWN0IHBjaV9idXMg KmJ1czsKICAgICAgICBzdHJ1Y3QgcGNpX2J1cyAqc3Vib3JkaW5hdGU7CgogICAgICAgIHZvaWQg KnN5c2RhdGE7CiAgICAgICAgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jZW50OwoKICAgICAg ICB1bnNpZ25lZCBpbnQgZGV2Zm47CiAgICAgICAgdW5zaWduZWQgc2hvcnQgdmVuZG9yOwogICAg ICAgIHVuc2lnbmVkIHNob3J0IGRldmljZTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzdWJzeXN0 ZW1fdmVuZG9yOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHN1YnN5c3RlbV9kZXZpY2U7CiAgICAg ICAgdW5zaWduZWQgaW50IGNsYXNzOwogICAgICAgIHU4IGhkcl90eXBlOwogICAgICAgIHU4IHJv bV9iYXNlX3JlZzsKCiAgICAgICAgc3RydWN0IHBjaV9kcml2ZXIgKmRyaXZlcjsKICAgICAgICB2 b2lkICpkcml2ZXJfZGF0YTsKICAgICAgICB1NjQgZG1hX21hc2s7CgoKCgoKICAgICAgICB1MzIg Y3VycmVudF9zdGF0ZTsKCgoKCiAgICAgICAgdW5zaWduZWQgc2hvcnQgdmVuZG9yX2NvbXBhdGli bGVbNF07CiAgICAgICAgdW5zaWduZWQgc2hvcnQgZGV2aWNlX2NvbXBhdGlibGVbNF07CgoKCgoK ICAgICAgICB1bnNpZ25lZCBpbnQgaXJxOwogICAgICAgIHN0cnVjdCByZXNvdXJjZSByZXNvdXJj ZVsxMl07CiAgICAgICAgc3RydWN0IHJlc291cmNlIGRtYV9yZXNvdXJjZVsyXTsKICAgICAgICBz dHJ1Y3QgcmVzb3VyY2UgaXJxX3Jlc291cmNlWzJdOwoKICAgICAgICBjaGFyIG5hbWVbODBdOwog ICAgICAgIGNoYXIgc2xvdF9uYW1lWzhdOwogICAgICAgIGludCBhY3RpdmU7CiAgICAgICAgaW50 IHJvOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHJlZ3M7CgogICAgICAgIGludCAoKnByZXBhcmUp KHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogICAgICAgIGludCAoKmFjdGl2YXRlKShzdHJ1Y3QgcGNp X2RldiAqZGV2KTsKICAgICAgICBpbnQgKCpkZWFjdGl2YXRlKShzdHJ1Y3QgcGNpX2RldiAqZGV2 KTsKfTsKIyA0MDcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3Bj aS5oIgpzdHJ1Y3QgcGNpX2J1cyB7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBub2RlOwogICAg ICAgIHN0cnVjdCBwY2lfYnVzICpwYXJlbnQ7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBjaGls ZHJlbjsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGRldmljZXM7CiAgICAgICAgc3RydWN0IHBj aV9kZXYgKnNlbGY7CiAgICAgICAgc3RydWN0IHJlc291cmNlICpyZXNvdXJjZVs0XTsKCiAgICAg ICAgc3RydWN0IHBjaV9vcHMgKm9wczsKICAgICAgICB2b2lkICpzeXNkYXRhOwogICAgICAgIHN0 cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY2RpcjsKCiAgICAgICAgdW5zaWduZWQgY2hhciBudW1i ZXI7CiAgICAgICAgdW5zaWduZWQgY2hhciBwcmltYXJ5OwogICAgICAgIHVuc2lnbmVkIGNoYXIg c2Vjb25kYXJ5OwogICAgICAgIHVuc2lnbmVkIGNoYXIgc3Vib3JkaW5hdGU7CgogICAgICAgIGNo YXIgbmFtZVs0OF07CiAgICAgICAgdW5zaWduZWQgc2hvcnQgdmVuZG9yOwogICAgICAgIHVuc2ln bmVkIHNob3J0IGRldmljZTsKICAgICAgICB1bnNpZ25lZCBpbnQgc2VyaWFsOwogICAgICAgIHVu c2lnbmVkIGNoYXIgcG5wdmVyOwogICAgICAgIHVuc2lnbmVkIGNoYXIgcHJvZHVjdHZlcjsKICAg ICAgICB1bnNpZ25lZCBjaGFyIGNoZWNrc3VtOwogICAgICAgIHVuc2lnbmVkIGNoYXIgcGFkMTsK fTsKCgoKZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgcGNpX3Jvb3RfYnVzZXM7CmV4dGVybiBzdHJ1 Y3QgbGlzdF9oZWFkIHBjaV9kZXZpY2VzOwojIDQ1MiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xp bnV4L2luY2x1ZGUvbGludXgvcGNpLmgiCnN0cnVjdCBwY2lfb3BzIHsKICAgICAgICBpbnQgKCpy ZWFkX2J5dGUpKHN0cnVjdCBwY2lfZGV2ICosIGludCB3aGVyZSwgdTggKnZhbCk7CiAgICAgICAg aW50ICgqcmVhZF93b3JkKShzdHJ1Y3QgcGNpX2RldiAqLCBpbnQgd2hlcmUsIHUxNiAqdmFsKTsK ICAgICAgICBpbnQgKCpyZWFkX2R3b3JkKShzdHJ1Y3QgcGNpX2RldiAqLCBpbnQgd2hlcmUsIHUz MiAqdmFsKTsKICAgICAgICBpbnQgKCp3cml0ZV9ieXRlKShzdHJ1Y3QgcGNpX2RldiAqLCBpbnQg d2hlcmUsIHU4IHZhbCk7CiAgICAgICAgaW50ICgqd3JpdGVfd29yZCkoc3RydWN0IHBjaV9kZXYg KiwgaW50IHdoZXJlLCB1MTYgdmFsKTsKICAgICAgICBpbnQgKCp3cml0ZV9kd29yZCkoc3RydWN0 IHBjaV9kZXYgKiwgaW50IHdoZXJlLCB1MzIgdmFsKTsKfTsKCnN0cnVjdCBwYnVzX3NldF9yYW5n ZXNfZGF0YQp7CiAgICAgICAgaW50IGZvdW5kX3ZnYTsKICAgICAgICB1bnNpZ25lZCBsb25nIGlv X3N0YXJ0LCBpb19lbmQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBtZW1fc3RhcnQsIG1lbV9lbmQ7 Cn07CgpzdHJ1Y3QgcGNpX2RldmljZV9pZCB7CiAgICAgICAgdW5zaWduZWQgaW50IHZlbmRvciwg ZGV2aWNlOwogICAgICAgIHVuc2lnbmVkIGludCBzdWJ2ZW5kb3IsIHN1YmRldmljZTsKICAgICAg ICB1bnNpZ25lZCBpbnQgY2xhc3MsIGNsYXNzX21hc2s7CiAgICAgICAgdW5zaWduZWQgbG9uZyBk cml2ZXJfZGF0YTsKfTsKCnN0cnVjdCBwY2lfZHJpdmVyIHsKICAgICAgICBzdHJ1Y3QgbGlzdF9o ZWFkIG5vZGU7CiAgICAgICAgY2hhciAqbmFtZTsKICAgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2Rl dmljZV9pZCAqaWRfdGFibGU7CiAgICAgICAgaW50ICgqcHJvYmUpIChzdHJ1Y3QgcGNpX2RldiAq ZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpOwogICAgICAgIHZvaWQgKCpyZW1v dmUpIChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKICAgICAgICBpbnQgKCpzYXZlX3N0YXRlKSAoc3Ry dWN0IHBjaV9kZXYgKmRldiwgdTMyIHN0YXRlKTsKICAgICAgICBpbnQgKCpzdXNwZW5kKShzdHJ1 Y3QgcGNpX2RldiAqZGV2LCB1MzIgc3RhdGUpOwogICAgICAgIGludCAoKnJlc3VtZSkgKHN0cnVj dCBwY2lfZGV2ICpkZXYpOwogICAgICAgIGludCAoKmVuYWJsZV93YWtlKSAoc3RydWN0IHBjaV9k ZXYgKmRldiwgdTMyIHN0YXRlLCBpbnQgZW5hYmxlKTsKfTsKIyA0OTQgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3BjaS5oIgp2b2lkIHBjaWJpb3NfaW5pdCh2b2lk KTsKdm9pZCBwY2liaW9zX2ZpeHVwX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqKTsKaW50IHBjaWJpb3Nf ZW5hYmxlX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqKTsKY2hhciAqcGNpYmlvc19zZXR1cCAoY2hh ciAqc3RyKTsKCgp2b2lkIHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqLCBzdHJ1Y3QgcmVz b3VyY2UgKiwgdW5zaWduZWQgbG9uZyk7CnZvaWQgcGNpYmlvc191cGRhdGVfcmVzb3VyY2Uoc3Ry dWN0IHBjaV9kZXYgKiwgc3RydWN0IHJlc291cmNlICosCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHJlc291cmNlICosIGludCk7CnZvaWQgcGNpYmlvc191cGRhdGVfaXJxKHN0 cnVjdCBwY2lfZGV2ICosIGludCBpcnEpOwp2b2lkIHBjaWJpb3NfZml4dXBfcGJ1c19yYW5nZXMo c3RydWN0IHBjaV9idXMgKiwgc3RydWN0IHBidXNfc2V0X3Jhbmdlc19kYXRhICopOwoKCgppbnQg cGNpYmlvc19wcmVzZW50KHZvaWQpOwppbnQgcGNpYmlvc19yZWFkX2NvbmZpZ19ieXRlICh1bnNp Z25lZCBjaGFyIGJ1cywgdW5zaWduZWQgY2hhciBkZXZfZm4sCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGNoYXIgd2hlcmUsIHVuc2lnbmVkIGNoYXIgKnZhbCk7CmludCBw Y2liaW9zX3JlYWRfY29uZmlnX3dvcmQgKHVuc2lnbmVkIGNoYXIgYnVzLCB1bnNpZ25lZCBjaGFy IGRldl9mbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciB3aGVy ZSwgdW5zaWduZWQgc2hvcnQgKnZhbCk7CmludCBwY2liaW9zX3JlYWRfY29uZmlnX2R3b3JkICh1 bnNpZ25lZCBjaGFyIGJ1cywgdW5zaWduZWQgY2hhciBkZXZfZm4sCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHdoZXJlLCB1bnNpZ25lZCBpbnQgKnZhbCk7Cmlu dCBwY2liaW9zX3dyaXRlX2NvbmZpZ19ieXRlICh1bnNpZ25lZCBjaGFyIGJ1cywgdW5zaWduZWQg Y2hhciBkZXZfZm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFy IHdoZXJlLCB1bnNpZ25lZCBjaGFyIHZhbCk7CmludCBwY2liaW9zX3dyaXRlX2NvbmZpZ193b3Jk ICh1bnNpZ25lZCBjaGFyIGJ1cywgdW5zaWduZWQgY2hhciBkZXZfZm4sCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHdoZXJlLCB1bnNpZ25lZCBzaG9ydCB2YWwp OwppbnQgcGNpYmlvc193cml0ZV9jb25maWdfZHdvcmQgKHVuc2lnbmVkIGNoYXIgYnVzLCB1bnNp Z25lZCBjaGFyIGRldl9mbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l ZCBjaGFyIHdoZXJlLCB1bnNpZ25lZCBpbnQgdmFsKTsKaW50IHBjaWJpb3NfZmluZF9jbGFzcyAo dW5zaWduZWQgaW50IGNsYXNzX2NvZGUsIHVuc2lnbmVkIHNob3J0IGluZGV4LCB1bnNpZ25lZCBj aGFyICpidXMsIHVuc2lnbmVkIGNoYXIgKmRldl9mbik7CmludCBwY2liaW9zX2ZpbmRfZGV2aWNl ICh1bnNpZ25lZCBzaG9ydCB2ZW5kb3IsIHVuc2lnbmVkIHNob3J0IGRldl9pZCwKICAgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGluZGV4LCB1bnNpZ25lZCBjaGFyICpidXMs CiAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXZfZm4pOwoKCgp2b2lk IHBjaV9pbml0KHZvaWQpOwppbnQgcGNpX2J1c19leGlzdHMoY29uc3Qgc3RydWN0IGxpc3RfaGVh ZCAqbGlzdCwgaW50IG5yKTsKc3RydWN0IHBjaV9idXMgKnBjaV9zY2FuX2J1cyhpbnQgYnVzLCBz dHJ1Y3QgcGNpX29wcyAqb3BzLCB2b2lkICpzeXNkYXRhKTsKc3RydWN0IHBjaV9idXMgKnBjaV9h bGxvY19wcmltYXJ5X2J1cyhpbnQgYnVzKTsKc3RydWN0IHBjaV9kZXYgKnBjaV9zY2FuX3Nsb3Qo c3RydWN0IHBjaV9kZXYgKnRlbXApOwppbnQgcGNpX3Byb2NfYXR0YWNoX2RldmljZShzdHJ1Y3Qg cGNpX2RldiAqZGV2KTsKaW50IHBjaV9wcm9jX2RldGFjaF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYg KmRldik7CnZvaWQgcGNpX25hbWVfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwpjaGFyICpw Y2lfY2xhc3NfbmFtZSh1MzIgY2xhc3MpOwp2b2lkIHBjaV9yZWFkX2JyaWRnZV9iYXNlcyhzdHJ1 Y3QgcGNpX2J1cyAqY2hpbGQpOwpzdHJ1Y3QgcmVzb3VyY2UgKnBjaV9maW5kX3BhcmVudF9yZXNv dXJjZShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcyk7Cmlu dCBwY2lfc2V0dXBfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwppbnQgcGNpX2dldF9pbnRl cnJ1cHRfcGluKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBwY2lfZGV2ICoqYnJpZGdlKTsK CgoKc3RydWN0IHBjaV9kZXYgKnBjaV9maW5kX2RldmljZSAodW5zaWduZWQgaW50IHZlbmRvciwg dW5zaWduZWQgaW50IGRldmljZSwgY29uc3Qgc3RydWN0IHBjaV9kZXYgKmZyb20pOwpzdHJ1Y3Qg cGNpX2RldiAqcGNpX2ZpbmRfc3Vic3lzICh1bnNpZ25lZCBpbnQgdmVuZG9yLCB1bnNpZ25lZCBp bnQgZGV2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg c3NfdmVuZG9yLCB1bnNpZ25lZCBpbnQgc3NfZGV2aWNlLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZnJvbSk7CnN0cnVjdCBwY2lfZGV2ICpw Y2lfZmluZF9jbGFzcyAodW5zaWduZWQgaW50IGNsYXNzLCBjb25zdCBzdHJ1Y3QgcGNpX2RldiAq ZnJvbSk7CnN0cnVjdCBwY2lfZGV2ICpwY2lfZmluZF9zbG90ICh1bnNpZ25lZCBpbnQgYnVzLCB1 bnNpZ25lZCBpbnQgZGV2Zm4pOwppbnQgcGNpX2ZpbmRfY2FwYWJpbGl0eSAoc3RydWN0IHBjaV9k ZXYgKmRldiwgaW50IGNhcCk7CgppbnQgcGNpX3JlYWRfY29uZmlnX2J5dGUoc3RydWN0IHBjaV9k ZXYgKmRldiwgaW50IHdoZXJlLCB1OCAqdmFsKTsKaW50IHBjaV9yZWFkX2NvbmZpZ193b3JkKHN0 cnVjdCBwY2lfZGV2ICpkZXYsIGludCB3aGVyZSwgdTE2ICp2YWwpOwppbnQgcGNpX3JlYWRfY29u ZmlnX2R3b3JkKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCB3aGVyZSwgdTMyICp2YWwpOwppbnQg cGNpX3dyaXRlX2NvbmZpZ19ieXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCB3aGVyZSwgdTgg dmFsKTsKaW50IHBjaV93cml0ZV9jb25maWdfd29yZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQg d2hlcmUsIHUxNiB2YWwpOwppbnQgcGNpX3dyaXRlX2NvbmZpZ19kd29yZChzdHJ1Y3QgcGNpX2Rl diAqZGV2LCBpbnQgd2hlcmUsIHUzMiB2YWwpOwoKaW50IHBjaV9lbmFibGVfZGV2aWNlKHN0cnVj dCBwY2lfZGV2ICpkZXYpOwp2b2lkIHBjaV9kaXNhYmxlX2RldmljZShzdHJ1Y3QgcGNpX2RldiAq ZGV2KTsKdm9pZCBwY2lfc2V0X21hc3RlcihzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKaW50IHBjaV9z ZXRfZG1hX21hc2soc3RydWN0IHBjaV9kZXYgKmRldiwgdTY0IG1hc2spOwppbnQgcGNpX2RhY19z ZXRfZG1hX21hc2soc3RydWN0IHBjaV9kZXYgKmRldiwgdTY0IG1hc2spOwppbnQgcGNpX2Fzc2ln bl9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgaSk7CgoKaW50IHBjaV9zYXZlX3N0 YXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHUzMiAqYnVmZmVyKTsKaW50IHBjaV9yZXN0b3JlX3N0 YXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHUzMiAqYnVmZmVyKTsKaW50IHBjaV9zZXRfcG93ZXJf c3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHN0YXRlKTsKaW50IHBjaV9lbmFibGVfd2Fr ZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1MzIgc3RhdGUsIGludCBlbmFibGUpOwoKCgppbnQgcGNp X2NsYWltX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICosIGludCk7CnZvaWQgcGNpX2Fzc2lnbl91 bmFzc2lnbmVkX3Jlc291cmNlcyh2b2lkKTsKdm9pZCBwZGV2X2VuYWJsZV9kZXZpY2Uoc3RydWN0 IHBjaV9kZXYgKik7CnZvaWQgcGRldl9zb3J0X3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2RldiAqLCBz dHJ1Y3QgcmVzb3VyY2VfbGlzdCAqLCB1MzIpOwp1bnNpZ25lZCBsb25nIHBjaV9icmlkZ2VfY2hl Y2tfaW8oc3RydWN0IHBjaV9kZXYgKik7CnZvaWQgcGNpX2ZpeHVwX2lycXModTggKCopKHN0cnVj dCBwY2lfZGV2ICosIHU4ICopLAogICAgICAgICAgICAgICAgICAgIGludCAoKikoc3RydWN0IHBj aV9kZXYgKiwgdTgsIHU4KSk7CgppbnQgcGNpX3JlcXVlc3RfcmVnaW9ucyhzdHJ1Y3QgcGNpX2Rl diAqLCBjaGFyICopOwp2b2lkIHBjaV9yZWxlYXNlX3JlZ2lvbnMoc3RydWN0IHBjaV9kZXYgKik7 CgoKaW50IHBjaV9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHBjaV9kcml2ZXIgKik7CnZvaWQgcGNp X3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBwY2lfZHJpdmVyICopOwp2b2lkIHBjaV9pbnNlcnRf ZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICosIHN0cnVjdCBwY2lfYnVzICopOwp2b2lkIHBjaV9yZW1v dmVfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICopOwpzdHJ1Y3QgcGNpX2RyaXZlciAqcGNpX2Rldl9k cml2ZXIoY29uc3Qgc3RydWN0IHBjaV9kZXYgKik7CmNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lk ICpwY2lfbWF0Y2hfZGV2aWNlKGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZHMsIGNvbnN0 IHN0cnVjdCBwY2lfZGV2ICpkZXYpOwoKCnN0cnVjdCBwY2lfcG9vbCAqcGNpX3Bvb2xfY3JlYXRl IChjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgcGNpX2RldiAqZGV2LAogICAgICAgICAgICAgICAg c2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbiwgc2l6ZV90IGFsbG9jYXRpb24sIGludCBmbGFncyk7 CnZvaWQgcGNpX3Bvb2xfZGVzdHJveSAoc3RydWN0IHBjaV9wb29sICpwb29sKTsKCnZvaWQgKnBj aV9wb29sX2FsbG9jIChzdHJ1Y3QgcGNpX3Bvb2wgKnBvb2wsIGludCBmbGFncywgZG1hX2FkZHJf dCAqaGFuZGxlKTsKdm9pZCBwY2lfcG9vbF9mcmVlIChzdHJ1Y3QgcGNpX3Bvb2wgKnBvb2wsIHZv aWQgKnZhZGRyLCBkbWFfYWRkcl90IGFkZHIpOwoKCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40 LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3BjaS5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40 LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvY29uZmlnLmgiIDEKIyA1ICIvdXNyL3NyYy9saW51eC0y LjQuMTMvbGludXgvaW5jbHVkZS9hc20vcGNpLmgiIDIKIyAxMyAiL3Vzci9zcmMvbGludXgtMi40 LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3BjaS5oIgpleHRlcm4gdW5zaWduZWQgaW50IHBjaWJpb3Nf YXNzaWduX2FsbF9idXNzZXModm9pZCk7CgoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBwY2lfbWVt X3N0YXJ0OwoKCgp2b2lkIHBjaWJpb3Nfc2V0X21hc3RlcihzdHJ1Y3QgcGNpX2RldiAqZGV2KTsK dm9pZCBwY2liaW9zX3BlbmFsaXplX2lzYV9pcnEoaW50IGlycSk7CgoKCgoKIyAxICIvdXNyL3Ny Yy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC90eXBlcy5oIiAxCiMgMzAgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9wY2kuaCIgMgojIDEgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3NsYWIuaCIgMQojIDEyICIvdXNyL3Ny Yy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9zbGFiLmgiCnR5cGVkZWYgc3RydWN0 IGttZW1fY2FjaGVfcyBrbWVtX2NhY2hlX3Q7CgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9s aW51eC9pbmNsdWRlL2xpbnV4L21tLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMv bGludXgvaW5jbHVkZS9saW51eC9zY2hlZC5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40 LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3BhcmFtLmgiIDEKIyA1ICIvdXNyL3NyYy9saW51eC0yLjQu MTMvbGludXgvaW5jbHVkZS9saW51eC9zY2hlZC5oIiAyCgpleHRlcm4gdW5zaWduZWQgbG9uZyBl dmVudDsKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvY29u ZmlnLmgiIDEKIyA5ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9z Y2hlZC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgv YmluZm10cy5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUv bGludXgvcHRyYWNlLmgiIDEKIyAyNCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1 ZGUvbGludXgvcHRyYWNlLmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1 ZGUvYXNtL3B0cmFjZS5oIiAxCiMgMjYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNs dWRlL2FzbS9wdHJhY2UuaCIKc3RydWN0IHB0X3JlZ3MgewogICAgICAgIGxvbmcgZWJ4OwogICAg ICAgIGxvbmcgZWN4OwogICAgICAgIGxvbmcgZWR4OwogICAgICAgIGxvbmcgZXNpOwogICAgICAg IGxvbmcgZWRpOwogICAgICAgIGxvbmcgZWJwOwogICAgICAgIGxvbmcgZWF4OwogICAgICAgIGlu dCB4ZHM7CiAgICAgICAgaW50IHhlczsKICAgICAgICBsb25nIG9yaWdfZWF4OwogICAgICAgIGxv bmcgZWlwOwogICAgICAgIGludCB4Y3M7CiAgICAgICAgbG9uZyBlZmxhZ3M7CiAgICAgICAgbG9u ZyBlc3A7CiAgICAgICAgaW50IHhzczsKfTsKIyA2MCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xp bnV4L2luY2x1ZGUvYXNtL3B0cmFjZS5oIgpleHRlcm4gdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0 X3JlZ3MgKik7CiMgMjUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4 L3B0cmFjZS5oIiAyCiMgNSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGlu dXgvYmluZm10cy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUv bGludXgvY2FwYWJpbGl0eS5oIiAxCiMgMTYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9p bmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGlu dXgvaW5jbHVkZS9saW51eC90eXBlcy5oIiAxCiMgMTcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9s aW51eC9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDEKIyA5ICIvdXNyL3NyYy9saW51eC0yLjQu MTMvbGludXgvaW5jbHVkZS9saW51eC9mcy5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9s aW51eC9pbmNsdWRlL2xpbnV4L2NvbmZpZy5oIiAxCiMgMTAgIi91c3Ivc3JjL2xpbnV4LTIuNC4x My9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMv bGludXgvaW5jbHVkZS9saW51eC9saW5rYWdlLmgiIDEKIyAxMSAiL3Vzci9zcmMvbGludXgtMi40 LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4x My9saW51eC9pbmNsdWRlL2xpbnV4L2xpbWl0cy5oIiAxCiMgMTIgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQu MTMvbGludXgvaW5jbHVkZS9saW51eC93YWl0LmgiIDEKIyAxMyAiL3Vzci9zcmMvbGludXgtMi40 LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvd2FpdC5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4x My9saW51eC9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oIiAxCiMgMTQgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3dhaXQuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2xpc3QuaCIgMQojIDE1ICIvdXNyL3NyYy9saW51eC0y LjQuMTMvbGludXgvaW5jbHVkZS9saW51eC93YWl0LmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9zdGRkZWYuaCIgMQojIDE2ICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC93YWl0LmgiIDIKIyAxICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9zcGlubG9jay5oIiAxCiMgMTcgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3dhaXQuaCIgMgojIDEgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2NvbmZpZy5oIiAxCiMgMTggIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3dhaXQuaCIgMgoKIyAxICIvdXNy L3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vcGFnZS5oIiAxCiMgMjAgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3dhaXQuaCIgMgojIDEgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCIgMQojIDIxICIv dXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC93YWl0LmgiIDIKIyAzMSAi L3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvd2FpdC5oIgpzdHJ1Y3Qg X193YWl0X3F1ZXVlIHsKICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3M7CgogICAgICAgIHN0cnVj dCB0YXNrX3N0cnVjdCAqIHRhc2s7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCB0YXNrX2xpc3Q7 CgoKCgp9Owp0eXBlZGVmIHN0cnVjdCBfX3dhaXRfcXVldWUgd2FpdF9xdWV1ZV90OwojIDc3ICIv dXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC93YWl0LmgiCnN0cnVjdCBf X3dhaXRfcXVldWVfaGVhZCB7CiAgICAgICAgc3BpbmxvY2tfdCBsb2NrOwogICAgICAgIHN0cnVj dCBsaXN0X2hlYWQgdGFza19saXN0OwoKCgoKfTsKdHlwZWRlZiBzdHJ1Y3QgX193YWl0X3F1ZXVl X2hlYWQgd2FpdF9xdWV1ZV9oZWFkX3Q7CiMgMTU1ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGlu dXgvaW5jbHVkZS9saW51eC93YWl0LmgiCnN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3dhaXRxdWV1 ZV9oZWFkKHdhaXRfcXVldWVfaGVhZF90ICpxKQp7CgoKCgogICAgICAgIHEtPmxvY2sgPSAoc3Bp bmxvY2tfdCkgeyAxIH07CiAgICAgICAgZG8geyAoJnEtPnRhc2tfbGlzdCktPm5leHQgPSAoJnEt PnRhc2tfbGlzdCk7ICgmcS0+dGFza19saXN0KS0+cHJldiA9ICgmcS0+dGFza19saXN0KTsgfSB3 aGlsZSAoMCk7CgoKCgp9CgpzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF93YWl0cXVldWVfZW50cnko d2FpdF9xdWV1ZV90ICpxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCnsKCgoKCiAgICAgICAgcS0+ ZmxhZ3MgPSAwOwogICAgICAgIHEtPnRhc2sgPSBwOwoKCgp9CgpzdGF0aWMgaW5saW5lIGludCB3 YWl0cXVldWVfYWN0aXZlKHdhaXRfcXVldWVfaGVhZF90ICpxKQp7CgoKCgoKCiAgICAgICAgcmV0 dXJuICFsaXN0X2VtcHR5KCZxLT50YXNrX2xpc3QpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgX19h ZGRfd2FpdF9xdWV1ZSh3YWl0X3F1ZXVlX2hlYWRfdCAqaGVhZCwgd2FpdF9xdWV1ZV90ICpuZXcp CnsKIyAyMDMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3dhaXQu aCIKICAgICAgICBsaXN0X2FkZCgmbmV3LT50YXNrX2xpc3QsICZoZWFkLT50YXNrX2xpc3QpOwp9 CgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgX19hZGRfd2FpdF9xdWV1ZV90YWlsKHdhaXRfcXVldWVf aGVhZF90ICpoZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB3YWl0X3F1ZXVlX3QgKm5ldykKewojIDIyMCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xp bnV4L2luY2x1ZGUvbGludXgvd2FpdC5oIgogICAgICAgIGxpc3RfYWRkX3RhaWwoJm5ldy0+dGFz a19saXN0LCAmaGVhZC0+dGFza19saXN0KTsKfQoKc3RhdGljIGlubGluZSB2b2lkIF9fcmVtb3Zl X3dhaXRfcXVldWUod2FpdF9xdWV1ZV9oZWFkX3QgKmhlYWQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdF9xdWV1ZV90ICpvbGQpCnsK CgoKCgogICAgICAgIGxpc3RfZGVsKCZvbGQtPnRhc2tfbGlzdCk7Cn0KIyAxMyAiL3Vzci9zcmMv bGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3R5cGVzLmgiIDEKIyAxNCAiL3Vzci9zcmMv bGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3Zmcy5oIiAxCgoKCiMgMSAiL3Vzci9zcmMv bGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3N0YXRmcy5oIiAxCgoKCgoKIyAxICIvdXNy L3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC90eXBlcy5oIiAxCiMgNyAiL3Vz ci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3N0YXRmcy5oIiAyCgp0eXBlZGVm IF9fa2VybmVsX2ZzaWRfdCBmc2lkX3Q7CgoKCnN0cnVjdCBzdGF0ZnMgewogICAgICAgIGxvbmcg Zl90eXBlOwogICAgICAgIGxvbmcgZl9ic2l6ZTsKICAgICAgICBsb25nIGZfYmxvY2tzOwogICAg ICAgIGxvbmcgZl9iZnJlZTsKICAgICAgICBsb25nIGZfYmF2YWlsOwogICAgICAgIGxvbmcgZl9m aWxlczsKICAgICAgICBsb25nIGZfZmZyZWU7CiAgICAgICAgX19rZXJuZWxfZnNpZF90IGZfZnNp ZDsKICAgICAgICBsb25nIGZfbmFtZWxlbjsKICAgICAgICBsb25nIGZfc3BhcmVbNl07Cn07CiMg NSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvdmZzLmgiIDIKIyAx NSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L25ldC5oIiAxCiMgMjEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L25ldC5oIgojIDEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2NvbmZpZy5oIiAxCiMgMjIg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L25ldC5oIiAyCiMgMSAi L3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc29ja2V0LmgiIDEKCgoK CgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9zb2NrZXQuaCIg MQoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9zb2NraW9z LmgiIDEKIyA1ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vc29ja2V0 LmgiIDIKIyA3ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9zb2Nr ZXQuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3Nv Y2tpb3MuaCIgMQojIDIxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51 eC9zb2NraW9zLmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNt L3NvY2tpb3MuaCIgMQojIDIyICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9s aW51eC9zb2NraW9zLmgiIDIKIyA4ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVk ZS9saW51eC9zb2NrZXQuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNs dWRlL2xpbnV4L3Vpby5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2lu Y2x1ZGUvbGludXgvdHlwZXMuaCIgMQojIDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9p bmNsdWRlL2xpbnV4L3Vpby5oIiAyCiMgMTkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9p bmNsdWRlL2xpbnV4L3Vpby5oIgpzdHJ1Y3QgaW92ZWMKewogICAgICAgIHZvaWQgKmlvdl9iYXNl OwogICAgICAgIF9fa2VybmVsX3NpemVfdCBpb3ZfbGVuOwp9OwojIDkgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3NvY2tldC5oIiAyCiMgMSAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvdHlwZXMuaCIgMQojIDEwICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9zb2NrZXQuaCIgMgoKdHlwZWRlZiB1bnNp Z25lZCBzaG9ydCBzYV9mYW1pbHlfdDsKCgoKCgpzdHJ1Y3Qgc29ja2FkZHIgewogICAgICAgIHNh X2ZhbWlseV90IHNhX2ZhbWlseTsKICAgICAgICBjaGFyIHNhX2RhdGFbMTRdOwp9OwoKc3RydWN0 IGxpbmdlciB7CiAgICAgICAgaW50IGxfb25vZmY7CiAgICAgICAgaW50IGxfbGluZ2VyOwp9OwoK CgoKCgoKc3RydWN0IG1zZ2hkciB7CiAgICAgICAgdm9pZCAqIG1zZ19uYW1lOwogICAgICAgIGlu dCBtc2dfbmFtZWxlbjsKICAgICAgICBzdHJ1Y3QgaW92ZWMgKiBtc2dfaW92OwogICAgICAgIF9f a2VybmVsX3NpemVfdCBtc2dfaW92bGVuOwogICAgICAgIHZvaWQgKiBtc2dfY29udHJvbDsKICAg ICAgICBfX2tlcm5lbF9zaXplX3QgbXNnX2NvbnRyb2xsZW47CiAgICAgICAgdW5zaWduZWQgbXNn X2ZsYWdzOwp9OwoKCgoKCgoKc3RydWN0IGNtc2doZHIgewogICAgICAgIF9fa2VybmVsX3NpemVf dCBjbXNnX2xlbjsKICAgICAgICBpbnQgY21zZ19sZXZlbDsKICAgICAgICBpbnQgY21zZ190eXBl Owp9OwojIDEwMiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc29j a2V0LmgiCnN0YXRpYyBpbmxpbmUgc3RydWN0IGNtc2doZHIgKiBfX2Ntc2dfbnh0aGRyKHZvaWQg Kl9fY3RsLCBfX2tlcm5lbF9zaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjbXNnaGRyICpfX2Ntc2cpCnsKICAgICAgICBz dHJ1Y3QgY21zZ2hkciAqIF9fcHRyOwoKICAgICAgICBfX3B0ciA9IChzdHJ1Y3QgY21zZ2hkciop KCgodW5zaWduZWQgY2hhciAqKSBfX2Ntc2cpICsgKCAoKF9fY21zZy0+Y21zZ19sZW4pK3NpemVv Zihsb25nKS0xKSAmIH4oc2l6ZW9mKGxvbmcpLTEpICkpOwogICAgICAgIGlmICgodW5zaWduZWQg bG9uZykoKGNoYXIqKShfX3B0cisxKSAtIChjaGFyICopIF9fY3RsKSA+IF9fc2l6ZSkKICAgICAg ICAgICAgICAgIHJldHVybiAoc3RydWN0IGNtc2doZHIgKikwOwoKICAgICAgICByZXR1cm4gX19w dHI7Cn0KCnN0YXRpYyBpbmxpbmUgc3RydWN0IGNtc2doZHIgKiBjbXNnX254dGhkciAoc3RydWN0 IG1zZ2hkciAqX19tc2csIHN0cnVjdCBjbXNnaGRyICpfX2Ntc2cpCnsKICAgICAgICByZXR1cm4g X19jbXNnX254dGhkcihfX21zZy0+bXNnX2NvbnRyb2wsIF9fbXNnLT5tc2dfY29udHJvbGxlbiwg X19jbXNnKTsKfQoKCgoKCgoKc3RydWN0IHVjcmVkIHsKICAgICAgICBfX3UzMiBwaWQ7CiAgICAg ICAgX191MzIgdWlkOwogICAgICAgIF9fdTMyIGdpZDsKfTsKIyAyNDUgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3NvY2tldC5oIgpleHRlcm4gaW50IG1lbWNweV9m cm9taW92ZWModW5zaWduZWQgY2hhciAqa2RhdGEsIHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgbGVu KTsKZXh0ZXJuIGludCBtZW1jcHlfZnJvbWlvdmVjZW5kKHVuc2lnbmVkIGNoYXIgKmtkYXRhLCBz dHJ1Y3QgaW92ZWMgKmlvdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zm c2V0LCBpbnQgbGVuKTsKZXh0ZXJuIGludCBjc3VtX3BhcnRpYWxfY29weV9mcm9taW92ZWNlbmQo dW5zaWduZWQgY2hhciAqa2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBpb3ZlYyAqaW92LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBpbnQgbGVuLCBpbnQgKmNzdW1wKTsKCmV4dGVybiBpbnQgdmVyaWZ5 X2lvdmVjKHN0cnVjdCBtc2doZHIgKm0sIHN0cnVjdCBpb3ZlYyAqaW92LCBjaGFyICphZGRyZXNz LCBpbnQgbW9kZSk7CmV4dGVybiBpbnQgbWVtY3B5X3RvaW92ZWMoc3RydWN0IGlvdmVjICp2LCB1 bnNpZ25lZCBjaGFyICprZGF0YSwgaW50IGxlbik7CmV4dGVybiB2b2lkIG1lbWNweV90b2tlcm5l bGlvdmVjKHN0cnVjdCBpb3ZlYyAqaW92LCB1bnNpZ25lZCBjaGFyICprZGF0YSwgaW50IGxlbik7 CmV4dGVybiBpbnQgbW92ZV9hZGRyX3RvX3VzZXIodm9pZCAqa2FkZHIsIGludCBrbGVuLCB2b2lk ICp1YWRkciwgaW50ICp1bGVuKTsKZXh0ZXJuIGludCBtb3ZlX2FkZHJfdG9fa2VybmVsKHZvaWQg KnVhZGRyLCBpbnQgdWxlbiwgdm9pZCAqa2FkZHIpOwpleHRlcm4gaW50IHB1dF9jbXNnKHN0cnVj dCBtc2doZHIqLCBpbnQgbGV2ZWwsIGludCB0eXBlLCBpbnQgbGVuLCB2b2lkICpkYXRhKTsKIyAy MyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvbmV0LmgiIDIKIyAx ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC93YWl0LmgiIDEKIyAy NCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvbmV0LmgiIDIKCnN0 cnVjdCBwb2xsX3RhYmxlX3N0cnVjdDsKIyA0OSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4 L2luY2x1ZGUvbGludXgvbmV0LmgiCnR5cGVkZWYgZW51bSB7CiAgU1NfRlJFRSA9IDAsCiAgU1Nf VU5DT05ORUNURUQsCiAgU1NfQ09OTkVDVElORywKICBTU19DT05ORUNURUQsCiAgU1NfRElTQ09O TkVDVElORwp9IHNvY2tldF9zdGF0ZTsKIyA2NSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4 L2luY2x1ZGUvbGludXgvbmV0LmgiCnN0cnVjdCBzb2NrZXQKewogICAgICAgIHNvY2tldF9zdGF0 ZSBzdGF0ZTsKCiAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKICAgICAgICBzdHJ1Y3QgcHJv dG9fb3BzICpvcHM7CiAgICAgICAgc3RydWN0IGlub2RlICppbm9kZTsKICAgICAgICBzdHJ1Y3Qg ZmFzeW5jX3N0cnVjdCAqZmFzeW5jX2xpc3Q7CiAgICAgICAgc3RydWN0IGZpbGUgKmZpbGU7CiAg ICAgICAgc3RydWN0IHNvY2sgKnNrOwogICAgICAgIHdhaXRfcXVldWVfaGVhZF90IHdhaXQ7Cgog ICAgICAgIHNob3J0IHR5cGU7CiAgICAgICAgdW5zaWduZWQgY2hhciBwYXNzY3JlZDsKfTsKCgoK c3RydWN0IHNjbV9jb29raWU7CnN0cnVjdCB2bV9hcmVhX3N0cnVjdDsKc3RydWN0IHBhZ2U7Cgpz dHJ1Y3QgcHJvdG9fb3BzIHsKICBpbnQgZmFtaWx5OwoKICBpbnQgKCpyZWxlYXNlKSAoc3RydWN0 IHNvY2tldCAqc29jayk7CiAgaW50ICgqYmluZCkgKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVj dCBzb2NrYWRkciAqdW15YWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NrYWRk cl9sZW4pOwogIGludCAoKmNvbm5lY3QpIChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29j a2FkZHIgKnVzZXJ2YWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NrYWRkcl9s ZW4sIGludCBmbGFncyk7CiAgaW50ICgqc29ja2V0cGFpcikgKHN0cnVjdCBzb2NrZXQgKnNvY2sx LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrMik7CiAgaW50ICgqYWNjZXB0KSAoc3RydWN0IHNvY2tldCAq c29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jaywKICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBmbGFncyk7CiAgaW50ICgqZ2V0bmFtZSkgKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBz b2NrYWRkciAqdWFkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnVzb2NrYWRkcl9s ZW4sIGludCBwZWVyKTsKICB1bnNpZ25lZCBpbnQgKCpwb2xsKSAoc3RydWN0IGZpbGUgKmZpbGUs IHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCk7CiAg aW50ICgqaW9jdGwpIChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLAogICAg ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBhcmcpOwogIGludCAoKmxpc3Rlbikg KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZW4pOwogIGludCAoKnNodXRkb3duKSAoc3RydWN0 IHNvY2tldCAqc29jaywgaW50IGZsYWdzKTsKICBpbnQgKCpzZXRzb2Nrb3B0KSAoc3RydWN0IHNv Y2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKICAgICAgICAgICAgICAgICAgICAg ICAgIGNoYXIgKm9wdHZhbCwgaW50IG9wdGxlbik7CiAgaW50ICgqZ2V0c29ja29wdCkgKHN0cnVj dCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAgICAgICAgICAgICAgICAg ICAgICAgICBjaGFyICpvcHR2YWwsIGludCAqb3B0bGVuKTsKICBpbnQgKCpzZW5kbXNnKSAoc3Ry dWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgaW50IHRvdGFsX2xlbiwgc3RydWN0 IHNjbV9jb29raWUgKnNjbSk7CiAgaW50ICgqcmVjdm1zZykgKHN0cnVjdCBzb2NrZXQgKnNvY2ss IHN0cnVjdCBtc2doZHIgKm0sIGludCB0b3RhbF9sZW4sIGludCBmbGFncywgc3RydWN0IHNjbV9j b29raWUgKnNjbSk7CiAgaW50ICgqbW1hcCkgKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29j a2V0ICpzb2NrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEpOwogIHNzaXplX3QgKCpzZW5k cGFnZSkgKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2Zmc2V0 LCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKTsKfTsKCnN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5CnsK ICAgICAgICBpbnQgZmFtaWx5OwogICAgICAgIGludCAoKmNyZWF0ZSkoc3RydWN0IHNvY2tldCAq c29jaywgaW50IHByb3RvY29sKTsKCgogICAgICAgIHNob3J0IGF1dGhlbnRpY2F0aW9uOwogICAg ICAgIHNob3J0IGVuY3J5cHRpb247CiAgICAgICAgc2hvcnQgZW5jcnlwdF9uZXQ7Cn07CgpzdHJ1 Y3QgbmV0X3Byb3RvCnsKICAgICAgICBjb25zdCBjaGFyICpuYW1lOwogICAgICAgIHZvaWQgKCpp bml0X2Z1bmMpKHN0cnVjdCBuZXRfcHJvdG8gKik7Cn07CgpleHRlcm4gaW50IHNvY2tfd2FrZV9h c3luYyhzdHJ1Y3Qgc29ja2V0ICpzaywgaW50IGhvdywgaW50IGJhbmQpOwpleHRlcm4gaW50IHNv Y2tfcmVnaXN0ZXIoc3RydWN0IG5ldF9wcm90b19mYW1pbHkgKmZhbSk7CmV4dGVybiBpbnQgc29j a191bnJlZ2lzdGVyKGludCBmYW1pbHkpOwpleHRlcm4gc3RydWN0IHNvY2tldCAqc29ja19hbGxv Yyh2b2lkKTsKZXh0ZXJuIGludCBzb2NrX2NyZWF0ZShpbnQgZmFtaWx5LCBpbnQgdHlwZSwgaW50 IHByb3RvLCBzdHJ1Y3Qgc29ja2V0ICoqKTsKZXh0ZXJuIHZvaWQgc29ja19yZWxlYXNlKHN0cnVj dCBzb2NrZXQgKik7CmV4dGVybiBpbnQgc29ja19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKiwgc3Ry dWN0IG1zZ2hkciAqbSwgaW50IGxlbik7CmV4dGVybiBpbnQgc29ja19yZWN2bXNnKHN0cnVjdCBz b2NrZXQgKiwgc3RydWN0IG1zZ2hkciAqbSwgaW50IGxlbiwgaW50IGZsYWdzKTsKZXh0ZXJuIGlu dCBzb2NrX3JlYWR2X3dyaXRldihpbnQgdHlwZSwgc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVj dCBmaWxlICogZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0 cnVjdCBpb3ZlYyAqIGlvdiwgbG9uZyBjb3VudCwgbG9uZyBzaXplKTsKCmV4dGVybiBpbnQgbmV0 X3JhdGVsaW1pdCh2b2lkKTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbmV0X3JhbmRvbSh2b2lkKTsK ZXh0ZXJuIHZvaWQgbmV0X3NyYW5kb20odW5zaWduZWQgbG9uZyk7CiMgMTYgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9rZGV2X3QuaCIgMQojIDY3ICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9rZGV2X3QuaCIKdHlwZWRlZiB1bnNpZ25l ZCBzaG9ydCBrZGV2X3Q7CiMgNzYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRl L2xpbnV4L2tkZXZfdC5oIgpleHRlcm4gY29uc3QgY2hhciAqIGtkZXZuYW1lKGtkZXZfdCk7CgoK CgoKCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGtkZXZfdF90b19ucihrZGV2X3QgZGV2KSB7 CiAgICAgICAgcmV0dXJuICgoKHVuc2lnbmVkIGludCkgKChkZXYpID4+IDgpKTw8OCkgfCAoKHVu c2lnbmVkIGludCkgKChkZXYpICYgKCgxVSA8PCA4KSAtIDEpKSk7Cn0KCnN0YXRpYyBpbmxpbmUg a2Rldl90IHRvX2tkZXZfdChpbnQgZGV2KQp7CiAgICAgICAgaW50IG1ham9yLCBtaW5vcjsKIyA5 OCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgva2Rldl90LmgiCiAg ICAgICAgbWFqb3IgPSAoZGV2ID4+IDgpOwogICAgICAgIG1pbm9yID0gKGRldiAmIDB4ZmYpOwoK ICAgICAgICByZXR1cm4gKCgobWFqb3IpIDw8IDgpIHwgKG1pbm9yKSk7Cn0KIyAxNyAiL3Vzci9z cmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2lvY3RsLmgiIDEKCgoKIyAxICIvdXNy L3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vaW9jdGwuaCIgMQojIDUgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2lvY3RsLmgiIDIKIyAxOCAiL3Vz ci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2xpc3QuaCIgMQojIDE5ICIvdXNy L3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9z cmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvZGNhY2hlLmgiIDEKCgoKCgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9hdG9taWMuaCIgMQojIDcg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oIiAyCiMg MSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvbW91bnQuaCIgMQoj IDE5ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9tb3VudC5oIgpz dHJ1Y3QgdmZzbW91bnQKewogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgbW50X2hhc2g7CiAgICAg ICAgc3RydWN0IHZmc21vdW50ICptbnRfcGFyZW50OwogICAgICAgIHN0cnVjdCBkZW50cnkgKm1u dF9tb3VudHBvaW50OwogICAgICAgIHN0cnVjdCBkZW50cnkgKm1udF9yb290OwogICAgICAgIHN0 cnVjdCBzdXBlcl9ibG9jayAqbW50X3NiOwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgbW50X21v dW50czsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIG1udF9jaGlsZDsKICAgICAgICBhdG9taWNf dCBtbnRfY291bnQ7CiAgICAgICAgaW50IG1udF9mbGFnczsKICAgICAgICBjaGFyICptbnRfZGV2 bmFtZTsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIG1udF9saXN0Owp9OwoKc3RhdGljIGlubGlu ZSBzdHJ1Y3QgdmZzbW91bnQgKm1udGdldChzdHJ1Y3QgdmZzbW91bnQgKm1udCkKewogICAgICAg IGlmIChtbnQpCiAgICAgICAgICAgICAgICBhdG9taWNfaW5jKCZtbnQtPm1udF9jb3VudCk7CiAg ICAgICAgcmV0dXJuIG1udDsKfQoKZXh0ZXJuIHZvaWQgX19tbnRwdXQoc3RydWN0IHZmc21vdW50 ICptbnQpOwoKc3RhdGljIGlubGluZSB2b2lkIG1udHB1dChzdHJ1Y3QgdmZzbW91bnQgKm1udCkK ewogICAgICAgIGlmIChtbnQpIHsKICAgICAgICAgICAgICAgIGlmIChhdG9taWNfZGVjX2FuZF90 ZXN0KCZtbnQtPm1udF9jb3VudCkpCiAgICAgICAgICAgICAgICAgICAgICAgIF9fbW50cHV0KG1u dCk7CiAgICAgICAgfQp9CiMgOCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUv bGludXgvZGNhY2hlLmgiIDIKIyAyNCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1 ZGUvbGludXgvZGNhY2hlLmgiCnN0cnVjdCBxc3RyIHsKICAgICAgICBjb25zdCB1bnNpZ25lZCBj aGFyICogbmFtZTsKICAgICAgICB1bnNpZ25lZCBpbnQgbGVuOwogICAgICAgIHVuc2lnbmVkIGlu dCBoYXNoOwp9OwoKc3RydWN0IGRlbnRyeV9zdGF0X3QgewogICAgICAgIGludCBucl9kZW50cnk7 CiAgICAgICAgaW50IG5yX3VudXNlZDsKICAgICAgICBpbnQgYWdlX2xpbWl0OwogICAgICAgIGlu dCB3YW50X3BhZ2VzOwogICAgICAgIGludCBkdW1teVsyXTsKfTsKZXh0ZXJuIHN0cnVjdCBkZW50 cnlfc3RhdF90IGRlbnRyeV9zdGF0OwoKCgoKCgpzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBs b25nIHBhcnRpYWxfbmFtZV9oYXNoKHVuc2lnbmVkIGxvbmcgYywgdW5zaWduZWQgbG9uZyBwcmV2 aGFzaCkKewogICAgICAgIHJldHVybiAocHJldmhhc2ggKyAoYyA8PCA0KSArIChjID4+IDQpKSAq IDExOwp9CgoKc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBlbmRfbmFtZV9oYXNoKHVu c2lnbmVkIGxvbmcgaGFzaCkKewogICAgICAgIHJldHVybiAodW5zaWduZWQgaW50KSBoYXNoOwp9 CgoKc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IGZ1bGxfbmFtZV9oYXNoKGNvbnN0IHVu c2lnbmVkIGNoYXIgKiBuYW1lLCB1bnNpZ25lZCBpbnQgbGVuKQp7CiAgICAgICAgdW5zaWduZWQg bG9uZyBoYXNoID0gMDsKICAgICAgICB3aGlsZSAobGVuLS0pCiAgICAgICAgICAgICAgICBoYXNo ID0gcGFydGlhbF9uYW1lX2hhc2goKm5hbWUrKywgaGFzaCk7CiAgICAgICAgcmV0dXJuIGVuZF9u YW1lX2hhc2goaGFzaCk7Cn0KCgoKc3RydWN0IGRlbnRyeSB7CiAgICAgICAgYXRvbWljX3QgZF9j b3VudDsKICAgICAgICB1bnNpZ25lZCBpbnQgZF9mbGFnczsKICAgICAgICBzdHJ1Y3QgaW5vZGUg KiBkX2lub2RlOwogICAgICAgIHN0cnVjdCBkZW50cnkgKiBkX3BhcmVudDsKICAgICAgICBzdHJ1 Y3QgbGlzdF9oZWFkIGRfaGFzaDsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGRfbHJ1OwogICAg ICAgIHN0cnVjdCBsaXN0X2hlYWQgZF9jaGlsZDsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGRf c3ViZGlyczsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGRfYWxpYXM7CiAgICAgICAgaW50IGRf bW91bnRlZDsKICAgICAgICBzdHJ1Y3QgcXN0ciBkX25hbWU7CiAgICAgICAgdW5zaWduZWQgbG9u ZyBkX3RpbWU7CiAgICAgICAgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zICpkX29wOwogICAgICAg IHN0cnVjdCBzdXBlcl9ibG9jayAqIGRfc2I7CiAgICAgICAgdW5zaWduZWQgbG9uZyBkX3Zmc19m bGFnczsKICAgICAgICB2b2lkICogZF9mc2RhdGE7CiAgICAgICAgdW5zaWduZWQgY2hhciBkX2lu YW1lWzE2XTsKfTsKCnN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyB7CiAgICAgICAgaW50ICgqZF9y ZXZhbGlkYXRlKShzdHJ1Y3QgZGVudHJ5ICosIGludCk7CiAgICAgICAgaW50ICgqZF9oYXNoKSAo c3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgcXN0ciAqKTsKICAgICAgICBpbnQgKCpkX2NvbXBhcmUp IChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBxc3RyICosIHN0cnVjdCBxc3RyICopOwogICAgICAg IGludCAoKmRfZGVsZXRlKShzdHJ1Y3QgZGVudHJ5ICopOwogICAgICAgIHZvaWQgKCpkX3JlbGVh c2UpKHN0cnVjdCBkZW50cnkgKik7CiAgICAgICAgdm9pZCAoKmRfaXB1dCkoc3RydWN0IGRlbnRy eSAqLCBzdHJ1Y3QgaW5vZGUgKik7Cn07CiMgMTI3ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGlu dXgvaW5jbHVkZS9saW51eC9kY2FjaGUuaCIKZXh0ZXJuIHNwaW5sb2NrX3QgZGNhY2hlX2xvY2s7 CiMgMTQ2ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9kY2FjaGUu aCIKc3RhdGljIF9faW5saW5lX18gdm9pZCBkX2Ryb3Aoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSkK ewogICAgICAgIHNwaW5fbG9jaygmZGNhY2hlX2xvY2spOwogICAgICAgIGxpc3RfZGVsKCZkZW50 cnktPmRfaGFzaCk7CiAgICAgICAgZG8geyAoJmRlbnRyeS0+ZF9oYXNoKS0+bmV4dCA9ICgmZGVu dHJ5LT5kX2hhc2gpOyAoJmRlbnRyeS0+ZF9oYXNoKS0+cHJldiA9ICgmZGVudHJ5LT5kX2hhc2gp OyB9IHdoaWxlICgwKTsKICAgICAgICBzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOwp9CgpzdGF0 aWMgX19pbmxpbmVfXyBpbnQgZG5hbWVfZXh0ZXJuYWwoc3RydWN0IGRlbnRyeSAqZCkKewogICAg ICAgIHJldHVybiBkLT5kX25hbWUubmFtZSAhPSBkLT5kX2luYW1lOwp9CgoKCgpleHRlcm4gdm9p ZCBkX2luc3RhbnRpYXRlKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlub2RlICopOwpleHRlcm4g dm9pZCBkX2RlbGV0ZShzdHJ1Y3QgZGVudHJ5ICopOwoKCmV4dGVybiBzdHJ1Y3QgZGVudHJ5ICog ZF9hbGxvYyhzdHJ1Y3QgZGVudHJ5ICosIGNvbnN0IHN0cnVjdCBxc3RyICopOwpleHRlcm4gdm9p ZCBzaHJpbmtfZGNhY2hlX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKZXh0ZXJuIHZvaWQgc2hy aW5rX2RjYWNoZV9wYXJlbnQoc3RydWN0IGRlbnRyeSAqKTsKZXh0ZXJuIGludCBkX2ludmFsaWRh dGUoc3RydWN0IGRlbnRyeSAqKTsKCgpzdHJ1Y3Qgem9uZV9zdHJ1Y3Q7CgpleHRlcm4gaW50IHNo cmlua19kY2FjaGVfbWVtb3J5KGludCwgdW5zaWduZWQgaW50KTsKZXh0ZXJuIHZvaWQgcHJ1bmVf ZGNhY2hlKGludCk7CgoKZXh0ZXJuIGludCBzaHJpbmtfaWNhY2hlX21lbW9yeShpbnQsIGludCk7 CmV4dGVybiB2b2lkIHBydW5lX2ljYWNoZShpbnQpOwoKCmV4dGVybiBpbnQgc2hyaW5rX2RxY2Fj aGVfbWVtb3J5KGludCwgdW5zaWduZWQgaW50KTsKCgpleHRlcm4gc3RydWN0IGRlbnRyeSAqIGRf YWxsb2Nfcm9vdChzdHJ1Y3QgaW5vZGUgKik7CgoKZXh0ZXJuIHZvaWQgZF9nZW5vY2lkZShzdHJ1 Y3QgZGVudHJ5ICopOwoKZXh0ZXJuIHN0cnVjdCBkZW50cnkgKmRfZmluZF9hbGlhcyhzdHJ1Y3Qg aW5vZGUgKik7CmV4dGVybiB2b2lkIGRfcHJ1bmVfYWxpYXNlcyhzdHJ1Y3QgaW5vZGUgKik7CgoK ZXh0ZXJuIGludCBoYXZlX3N1Ym1vdW50cyhzdHJ1Y3QgZGVudHJ5ICopOwoKCgoKZXh0ZXJuIHZv aWQgZF9yZWhhc2goc3RydWN0IGRlbnRyeSAqKTsKIyAyMTAgIi91c3Ivc3JjL2xpbnV4LTIuNC4x My9saW51eC9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oIgpzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGRf YWRkKHN0cnVjdCBkZW50cnkgKiBlbnRyeSwgc3RydWN0IGlub2RlICogaW5vZGUpCnsKICAgICAg ICBkX2luc3RhbnRpYXRlKGVudHJ5LCBpbm9kZSk7CiAgICAgICAgZF9yZWhhc2goZW50cnkpOwp9 CgoKZXh0ZXJuIHZvaWQgZF9tb3ZlKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGRlbnRyeSAqKTsK CgpleHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfbG9va3VwKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0 IHFzdHIgKik7CgoKZXh0ZXJuIGludCBkX3ZhbGlkYXRlKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0 IGRlbnRyeSAqKTsKCmV4dGVybiBjaGFyICogX19kX3BhdGgoc3RydWN0IGRlbnRyeSAqLCBzdHJ1 Y3QgdmZzbW91bnQgKiwgc3RydWN0IGRlbnRyeSAqLAogICAgICAgIHN0cnVjdCB2ZnNtb3VudCAq LCBjaGFyICosIGludCk7CiMgMjQzICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVk ZS9saW51eC9kY2FjaGUuaCIKc3RhdGljIF9faW5saW5lX18gc3RydWN0IGRlbnRyeSAqIGRnZXQo c3RydWN0IGRlbnRyeSAqZGVudHJ5KQp7CiAgICAgICAgaWYgKGRlbnRyeSkgewogICAgICAgICAg ICAgICAgaWYgKCEoKCZkZW50cnktPmRfY291bnQpLT5jb3VudGVyKSkKICAgICAgICAgICAgICAg ICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIi5ieXRlIDB4MGYsMHgwYiIpOwogICAgICAg ICAgICAgICAgYXRvbWljX2luYygmZGVudHJ5LT5kX2NvdW50KTsKICAgICAgICB9CiAgICAgICAg cmV0dXJuIGRlbnRyeTsKfQoKZXh0ZXJuIHN0cnVjdCBkZW50cnkgKiBkZ2V0X2xvY2tlZChzdHJ1 Y3QgZGVudHJ5ICopOwojIDI2MiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUv bGludXgvZGNhY2hlLmgiCnN0YXRpYyBfX2lubGluZV9fIGludCBkX3VuaGFzaGVkKHN0cnVjdCBk ZW50cnkgKmRlbnRyeSkKewogICAgICAgIHJldHVybiBsaXN0X2VtcHR5KCZkZW50cnktPmRfaGFz aCk7Cn0KCmV4dGVybiB2b2lkIGRwdXQoc3RydWN0IGRlbnRyeSAqKTsKCnN0YXRpYyBfX2lubGlu ZV9fIGludCBkX21vdW50cG9pbnQoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQp7CiAgICAgICAgcmV0 dXJuIGRlbnRyeS0+ZF9tb3VudGVkOwp9CgpleHRlcm4gc3RydWN0IHZmc21vdW50ICpsb29rdXBf bW50KHN0cnVjdCB2ZnNtb3VudCAqLCBzdHJ1Y3QgZGVudHJ5ICopOwojIDIwICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc3RhdC5oIiAxCgoKCgoKIyAxICIvdXNyL3Ny Yy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vc3RhdC5oIiAxCgoKCnN0cnVjdCBfX29s ZF9rZXJuZWxfc3RhdCB7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc3RfZGV2OwogICAgICAgIHVu c2lnbmVkIHNob3J0IHN0X2lubzsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzdF9tb2RlOwogICAg ICAgIHVuc2lnbmVkIHNob3J0IHN0X25saW5rOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHN0X3Vp ZDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzdF9naWQ7CiAgICAgICAgdW5zaWduZWQgc2hvcnQg c3RfcmRldjsKICAgICAgICB1bnNpZ25lZCBsb25nIHN0X3NpemU7CiAgICAgICAgdW5zaWduZWQg bG9uZyBzdF9hdGltZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHN0X210aW1lOwogICAgICAgIHVu c2lnbmVkIGxvbmcgc3RfY3RpbWU7Cn07CgpzdHJ1Y3Qgc3RhdCB7CiAgICAgICAgdW5zaWduZWQg c2hvcnQgc3RfZGV2OwogICAgICAgIHVuc2lnbmVkIHNob3J0IF9fcGFkMTsKICAgICAgICB1bnNp Z25lZCBsb25nIHN0X2lubzsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzdF9tb2RlOwogICAgICAg IHVuc2lnbmVkIHNob3J0IHN0X25saW5rOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHN0X3VpZDsK ICAgICAgICB1bnNpZ25lZCBzaG9ydCBzdF9naWQ7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc3Rf cmRldjsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBfX3BhZDI7CiAgICAgICAgdW5zaWduZWQgbG9u ZyBzdF9zaXplOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc3RfYmxrc2l6ZTsKICAgICAgICB1bnNp Z25lZCBsb25nIHN0X2Jsb2NrczsKICAgICAgICB1bnNpZ25lZCBsb25nIHN0X2F0aW1lOwogICAg ICAgIHVuc2lnbmVkIGxvbmcgX191bnVzZWQxOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc3RfbXRp bWU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBfX3VudXNlZDI7CiAgICAgICAgdW5zaWduZWQgbG9u ZyBzdF9jdGltZTsKICAgICAgICB1bnNpZ25lZCBsb25nIF9fdW51c2VkMzsKICAgICAgICB1bnNp Z25lZCBsb25nIF9fdW51c2VkNDsKICAgICAgICB1bnNpZ25lZCBsb25nIF9fdW51c2VkNTsKfTsK CgoKCnN0cnVjdCBzdGF0NjQgewogICAgICAgIHVuc2lnbmVkIHNob3J0IHN0X2RldjsKICAgICAg ICB1bnNpZ25lZCBjaGFyIF9fcGFkMFsxMF07CgoKICAgICAgICB1bnNpZ25lZCBsb25nIF9fc3Rf aW5vOwoKICAgICAgICB1bnNpZ25lZCBpbnQgc3RfbW9kZTsKICAgICAgICB1bnNpZ25lZCBpbnQg c3Rfbmxpbms7CgogICAgICAgIHVuc2lnbmVkIGxvbmcgc3RfdWlkOwogICAgICAgIHVuc2lnbmVk IGxvbmcgc3RfZ2lkOwoKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzdF9yZGV2OwogICAgICAgIHVu c2lnbmVkIGNoYXIgX19wYWQzWzEwXTsKCiAgICAgICAgbG9uZyBsb25nIHN0X3NpemU7CiAgICAg ICAgdW5zaWduZWQgbG9uZyBzdF9ibGtzaXplOwoKICAgICAgICB1bnNpZ25lZCBsb25nIHN0X2Js b2NrczsKICAgICAgICB1bnNpZ25lZCBsb25nIF9fcGFkNDsKCiAgICAgICAgdW5zaWduZWQgbG9u ZyBzdF9hdGltZTsKICAgICAgICB1bnNpZ25lZCBsb25nIF9fcGFkNTsKCiAgICAgICAgdW5zaWdu ZWQgbG9uZyBzdF9tdGltZTsKICAgICAgICB1bnNpZ25lZCBsb25nIF9fcGFkNjsKCiAgICAgICAg dW5zaWduZWQgbG9uZyBzdF9jdGltZTsKICAgICAgICB1bnNpZ25lZCBsb25nIF9fcGFkNzsKCiAg ICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHN0X2lubzsKfTsKIyA3ICIvdXNyL3NyYy9saW51eC0y LjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9zdGF0LmgiIDIKIyAyMSAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2NhY2hlLmgiIDEKIyAyMiAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3N0ZGRlZi5oIiAxCiMgMjMgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9zdHJpbmcuaCIgMQoKCgoKCgoKIyAxICIvdXNyL3Ny Yy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC90eXBlcy5oIiAxCiMgOSAiL3Vzci9z cmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc3RyaW5nLmgiIDIKIyAxICIvdXNy L3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9zdGRkZWYuaCIgMQojIDEwICIv dXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9zdHJpbmcuaCIgMgoKCgoK CmV4dGVybiBjaGFyICogX19fc3RydG9rOwpleHRlcm4gY2hhciAqIHN0cnBicmsoY29uc3QgY2hh ciAqLGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICogc3RydG9rKGNoYXIgKixjb25zdCBjaGFy ICopOwpleHRlcm4gY2hhciAqIHN0cnNlcChjaGFyICoqLGNvbnN0IGNoYXIgKik7CmV4dGVybiBf X2tlcm5lbF9zaXplX3Qgc3Ryc3BuKGNvbnN0IGNoYXIgKixjb25zdCBjaGFyICopOwoKCgoKCiMg MSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3N0cmluZy5oIiAxCgoK CgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2NvbmZpZy5o IiAxCiMgNiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3N0cmluZy5o IiAyCiMgMzMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9zdHJpbmcu aCIKc3RhdGljIGlubGluZSBjaGFyICogc3RyY3B5KGNoYXIgKiBkZXN0LGNvbnN0IGNoYXIgKnNy YykKewppbnQgZDAsIGQxLCBkMjsKX19hc21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAgIjE6XHRs b2RzYlxuXHQiCiAgICAgICAgInN0b3NiXG5cdCIKICAgICAgICAidGVzdGIgJSVhbCwlJWFsXG5c dCIKICAgICAgICAiam5lIDFiIgogICAgICAgIDogIj0mUyIgKGQwKSwgIj0mRCIgKGQxKSwgIj0m YSIgKGQyKQogICAgICAgIDoiMCIgKHNyYyksIjEiIChkZXN0KSA6ICJtZW1vcnkiKTsKcmV0dXJu IGRlc3Q7Cn0KCgpzdGF0aWMgaW5saW5lIGNoYXIgKiBzdHJuY3B5KGNoYXIgKiBkZXN0LGNvbnN0 IGNoYXIgKnNyYyxzaXplX3QgY291bnQpCnsKaW50IGQwLCBkMSwgZDIsIGQzOwpfX2FzbV9fIF9f dm9sYXRpbGVfXygKICAgICAgICAiMTpcdGRlY2wgJTJcblx0IgogICAgICAgICJqcyAyZlxuXHQi CiAgICAgICAgImxvZHNiXG5cdCIKICAgICAgICAic3Rvc2Jcblx0IgogICAgICAgICJ0ZXN0YiAl JWFsLCUlYWxcblx0IgogICAgICAgICJqbmUgMWJcblx0IgogICAgICAgICJyZXBcblx0IgogICAg ICAgICJzdG9zYlxuIgogICAgICAgICIyOiIKICAgICAgICA6ICI9JlMiIChkMCksICI9JkQiIChk MSksICI9JmMiIChkMiksICI9JmEiIChkMykKICAgICAgICA6IjAiIChzcmMpLCIxIiAoZGVzdCks IjIiIChjb3VudCkgOiAibWVtb3J5Iik7CnJldHVybiBkZXN0Owp9CgoKc3RhdGljIGlubGluZSBj aGFyICogc3RyY2F0KGNoYXIgKiBkZXN0LGNvbnN0IGNoYXIgKiBzcmMpCnsKaW50IGQwLCBkMSwg ZDIsIGQzOwpfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAicmVwbmVcblx0IgogICAgICAg ICJzY2FzYlxuXHQiCiAgICAgICAgImRlY2wgJTFcbiIKICAgICAgICAiMTpcdGxvZHNiXG5cdCIK ICAgICAgICAic3Rvc2Jcblx0IgogICAgICAgICJ0ZXN0YiAlJWFsLCUlYWxcblx0IgogICAgICAg ICJqbmUgMWIiCiAgICAgICAgOiAiPSZTIiAoZDApLCAiPSZEIiAoZDEpLCAiPSZhIiAoZDIpLCAi PSZjIiAoZDMpCiAgICAgICAgOiAiMCIgKHNyYyksICIxIiAoZGVzdCksICIyIiAoMCksICIzIiAo MHhmZmZmZmZmZik6Im1lbW9yeSIpOwpyZXR1cm4gZGVzdDsKfQoKCnN0YXRpYyBpbmxpbmUgY2hh ciAqIHN0cm5jYXQoY2hhciAqIGRlc3QsY29uc3QgY2hhciAqIHNyYyxzaXplX3QgY291bnQpCnsK aW50IGQwLCBkMSwgZDIsIGQzOwpfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAicmVwbmVc blx0IgogICAgICAgICJzY2FzYlxuXHQiCiAgICAgICAgImRlY2wgJTFcblx0IgogICAgICAgICJt b3ZsICU4LCUzXG4iCiAgICAgICAgIjE6XHRkZWNsICUzXG5cdCIKICAgICAgICAianMgMmZcblx0 IgogICAgICAgICJsb2RzYlxuXHQiCiAgICAgICAgInN0b3NiXG5cdCIKICAgICAgICAidGVzdGIg JSVhbCwlJWFsXG5cdCIKICAgICAgICAiam5lIDFiXG4iCiAgICAgICAgIjI6XHR4b3JsICUyLCUy XG5cdCIKICAgICAgICAic3Rvc2IiCiAgICAgICAgOiAiPSZTIiAoZDApLCAiPSZEIiAoZDEpLCAi PSZhIiAoZDIpLCAiPSZjIiAoZDMpCiAgICAgICAgOiAiMCIgKHNyYyksIjEiIChkZXN0KSwiMiIg KDApLCIzIiAoMHhmZmZmZmZmZiksICJnIiAoY291bnQpCiAgICAgICAgOiAibWVtb3J5Iik7CnJl dHVybiBkZXN0Owp9CgoKc3RhdGljIGlubGluZSBpbnQgc3RyY21wKGNvbnN0IGNoYXIgKiBjcyxj b25zdCBjaGFyICogY3QpCnsKaW50IGQwLCBkMTsKcmVnaXN0ZXIgaW50IF9fcmVzOwpfX2FzbV9f IF9fdm9sYXRpbGVfXygKICAgICAgICAiMTpcdGxvZHNiXG5cdCIKICAgICAgICAic2Nhc2Jcblx0 IgogICAgICAgICJqbmUgMmZcblx0IgogICAgICAgICJ0ZXN0YiAlJWFsLCUlYWxcblx0IgogICAg ICAgICJqbmUgMWJcblx0IgogICAgICAgICJ4b3JsICUlZWF4LCUlZWF4XG5cdCIKICAgICAgICAi am1wIDNmXG4iCiAgICAgICAgIjI6XHRzYmJsICUlZWF4LCUlZWF4XG5cdCIKICAgICAgICAib3Ji ICQxLCUlYWxcbiIKICAgICAgICAiMzoiCiAgICAgICAgOiI9YSIgKF9fcmVzKSwgIj0mUyIgKGQw KSwgIj0mRCIgKGQxKQogICAgICAgICAgICAgICAgICAgICA6IjEiIChjcyksIjIiIChjdCkpOwpy ZXR1cm4gX19yZXM7Cn0KCgpzdGF0aWMgaW5saW5lIGludCBzdHJuY21wKGNvbnN0IGNoYXIgKiBj cyxjb25zdCBjaGFyICogY3Qsc2l6ZV90IGNvdW50KQp7CnJlZ2lzdGVyIGludCBfX3JlczsKaW50 IGQwLCBkMSwgZDI7Cl9fYXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICIxOlx0ZGVjbCAlM1xu XHQiCiAgICAgICAgImpzIDJmXG5cdCIKICAgICAgICAibG9kc2Jcblx0IgogICAgICAgICJzY2Fz YlxuXHQiCiAgICAgICAgImpuZSAzZlxuXHQiCiAgICAgICAgInRlc3RiICUlYWwsJSVhbFxuXHQi CiAgICAgICAgImpuZSAxYlxuIgogICAgICAgICIyOlx0eG9ybCAlJWVheCwlJWVheFxuXHQiCiAg ICAgICAgImptcCA0ZlxuIgogICAgICAgICIzOlx0c2JibCAlJWVheCwlJWVheFxuXHQiCiAgICAg ICAgIm9yYiAkMSwlJWFsXG4iCiAgICAgICAgIjQ6IgogICAgICAgICAgICAgICAgICAgICA6Ij1h IiAoX19yZXMpLCAiPSZTIiAoZDApLCAiPSZEIiAoZDEpLCAiPSZjIiAoZDIpCiAgICAgICAgICAg ICAgICAgICAgIDoiMSIgKGNzKSwiMiIgKGN0KSwiMyIgKGNvdW50KSk7CnJldHVybiBfX3JlczsK fQoKCnN0YXRpYyBpbmxpbmUgY2hhciAqIHN0cmNocihjb25zdCBjaGFyICogcywgaW50IGMpCnsK aW50IGQwOwpyZWdpc3RlciBjaGFyICogX19yZXM7Cl9fYXNtX18gX192b2xhdGlsZV9fKAogICAg ICAgICJtb3ZiICUlYWwsJSVhaFxuIgogICAgICAgICIxOlx0bG9kc2Jcblx0IgogICAgICAgICJj bXBiICUlYWgsJSVhbFxuXHQiCiAgICAgICAgImplIDJmXG5cdCIKICAgICAgICAidGVzdGIgJSVh bCwlJWFsXG5cdCIKICAgICAgICAiam5lIDFiXG5cdCIKICAgICAgICAibW92bCAkMSwlMVxuIgog ICAgICAgICIyOlx0bW92bCAlMSwlMFxuXHQiCiAgICAgICAgImRlY2wgJTAiCiAgICAgICAgOiI9 YSIgKF9fcmVzKSwgIj0mUyIgKGQwKSA6ICIxIiAocyksIjAiIChjKSk7CnJldHVybiBfX3JlczsK fQoKCnN0YXRpYyBpbmxpbmUgY2hhciAqIHN0cnJjaHIoY29uc3QgY2hhciAqIHMsIGludCBjKQp7 CmludCBkMCwgZDE7CnJlZ2lzdGVyIGNoYXIgKiBfX3JlczsKX19hc21fXyBfX3ZvbGF0aWxlX18o CiAgICAgICAgIm1vdmIgJSVhbCwlJWFoXG4iCiAgICAgICAgIjE6XHRsb2RzYlxuXHQiCiAgICAg ICAgImNtcGIgJSVhaCwlJWFsXG5cdCIKICAgICAgICAiam5lIDJmXG5cdCIKICAgICAgICAibGVh bCAtMSglJWVzaSksJTBcbiIKICAgICAgICAiMjpcdHRlc3RiICUlYWwsJSVhbFxuXHQiCiAgICAg ICAgImpuZSAxYiIKICAgICAgICA6Ij1nIiAoX19yZXMpLCAiPSZTIiAoZDApLCAiPSZhIiAoZDEp IDoiMCIgKDApLCIxIiAocyksIjIiIChjKSk7CnJldHVybiBfX3JlczsKfQoKCnN0YXRpYyBpbmxp bmUgc2l6ZV90IHN0cmxlbihjb25zdCBjaGFyICogcykKewppbnQgZDA7CnJlZ2lzdGVyIGludCBf X3JlczsKX19hc21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAgInJlcG5lXG5cdCIKICAgICAgICAi c2Nhc2Jcblx0IgogICAgICAgICJub3RsICUwXG5cdCIKICAgICAgICAiZGVjbCAlMCIKICAgICAg ICA6Ij1jIiAoX19yZXMpLCAiPSZEIiAoZDApIDoiMSIgKHMpLCJhIiAoMCksICIwIiAoMHhmZmZm ZmZmZikpOwpyZXR1cm4gX19yZXM7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCAqIF9fbWVtY3B5KHZv aWQgKiB0bywgY29uc3Qgdm9pZCAqIGZyb20sIHNpemVfdCBuKQp7CmludCBkMCwgZDEsIGQyOwpf X2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAicmVwIDsgbW92c2xcblx0IgogICAgICAgICJ0 ZXN0YiAkMiwlYjRcblx0IgogICAgICAgICJqZSAxZlxuXHQiCiAgICAgICAgIm1vdnN3XG4iCiAg ICAgICAgIjE6XHR0ZXN0YiAkMSwlYjRcblx0IgogICAgICAgICJqZSAyZlxuXHQiCiAgICAgICAg Im1vdnNiXG4iCiAgICAgICAgIjI6IgogICAgICAgIDogIj0mYyIgKGQwKSwgIj0mRCIgKGQxKSwg Ij0mUyIgKGQyKQogICAgICAgIDoiMCIgKG4vNCksICJxIiAobiksIjEiICgobG9uZykgdG8pLCIy IiAoKGxvbmcpIGZyb20pCiAgICAgICAgOiAibWVtb3J5Iik7CnJldHVybiAodG8pOwp9CgoKCgoK c3RhdGljIGlubGluZSB2b2lkICogX19jb25zdGFudF9tZW1jcHkodm9pZCAqIHRvLCBjb25zdCB2 b2lkICogZnJvbSwgc2l6ZV90IG4pCnsKICAgICAgICBzd2l0Y2ggKG4pIHsKICAgICAgICAgICAg ICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvOwogICAgICAgICAg ICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgICAgICAqKHVuc2lnbmVkIGNoYXIgKil0 byA9ICooY29uc3QgdW5zaWduZWQgY2hhciAqKWZyb207CiAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybiB0bzsKICAgICAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgICAgICAg ICAgKih1bnNpZ25lZCBzaG9ydCAqKXRvID0gKihjb25zdCB1bnNpZ25lZCBzaG9ydCAqKWZyb207 CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0bzsKICAgICAgICAgICAgICAgIGNhc2Ug MzoKICAgICAgICAgICAgICAgICAgICAgICAgKih1bnNpZ25lZCBzaG9ydCAqKXRvID0gKihjb25z dCB1bnNpZ25lZCBzaG9ydCAqKWZyb207CiAgICAgICAgICAgICAgICAgICAgICAgICooMisodW5z aWduZWQgY2hhciAqKXRvKSA9ICooMisoY29uc3QgdW5zaWduZWQgY2hhciAqKWZyb20pOwogICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG87CiAgICAgICAgICAgICAgICBjYXNlIDQ6CiAg ICAgICAgICAgICAgICAgICAgICAgICoodW5zaWduZWQgbG9uZyAqKXRvID0gKihjb25zdCB1bnNp Z25lZCBsb25nICopZnJvbTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvOwogICAg ICAgICAgICAgICAgY2FzZSA2OgogICAgICAgICAgICAgICAgICAgICAgICAqKHVuc2lnbmVkIGxv bmcgKil0byA9ICooY29uc3QgdW5zaWduZWQgbG9uZyAqKWZyb207CiAgICAgICAgICAgICAgICAg ICAgICAgICooMisodW5zaWduZWQgc2hvcnQgKil0bykgPSAqKDIrKGNvbnN0IHVuc2lnbmVkIHNo b3J0ICopZnJvbSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0bzsKICAgICAgICAg ICAgICAgIGNhc2UgODoKICAgICAgICAgICAgICAgICAgICAgICAgKih1bnNpZ25lZCBsb25nICop dG8gPSAqKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilmcm9tOwogICAgICAgICAgICAgICAgICAgICAg ICAqKDErKHVuc2lnbmVkIGxvbmcgKil0bykgPSAqKDErKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilm cm9tKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvOwogICAgICAgICAgICAgICAg Y2FzZSAxMjoKICAgICAgICAgICAgICAgICAgICAgICAgKih1bnNpZ25lZCBsb25nICopdG8gPSAq KGNvbnN0IHVuc2lnbmVkIGxvbmcgKilmcm9tOwogICAgICAgICAgICAgICAgICAgICAgICAqKDEr KHVuc2lnbmVkIGxvbmcgKil0bykgPSAqKDErKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilmcm9tKTsK ICAgICAgICAgICAgICAgICAgICAgICAgKigyKyh1bnNpZ25lZCBsb25nICopdG8pID0gKigyKyhj b25zdCB1bnNpZ25lZCBsb25nICopZnJvbSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biB0bzsKICAgICAgICAgICAgICAgIGNhc2UgMTY6CiAgICAgICAgICAgICAgICAgICAgICAgICoo dW5zaWduZWQgbG9uZyAqKXRvID0gKihjb25zdCB1bnNpZ25lZCBsb25nICopZnJvbTsKICAgICAg ICAgICAgICAgICAgICAgICAgKigxKyh1bnNpZ25lZCBsb25nICopdG8pID0gKigxKyhjb25zdCB1 bnNpZ25lZCBsb25nICopZnJvbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICooMisodW5zaWdu ZWQgbG9uZyAqKXRvKSA9ICooMisoY29uc3QgdW5zaWduZWQgbG9uZyAqKWZyb20pOwogICAgICAg ICAgICAgICAgICAgICAgICAqKDMrKHVuc2lnbmVkIGxvbmcgKil0bykgPSAqKDMrKGNvbnN0IHVu c2lnbmVkIGxvbmcgKilmcm9tKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvOwog ICAgICAgICAgICAgICAgY2FzZSAyMDoKICAgICAgICAgICAgICAgICAgICAgICAgKih1bnNpZ25l ZCBsb25nICopdG8gPSAqKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilmcm9tOwogICAgICAgICAgICAg ICAgICAgICAgICAqKDErKHVuc2lnbmVkIGxvbmcgKil0bykgPSAqKDErKGNvbnN0IHVuc2lnbmVk IGxvbmcgKilmcm9tKTsKICAgICAgICAgICAgICAgICAgICAgICAgKigyKyh1bnNpZ25lZCBsb25n ICopdG8pID0gKigyKyhjb25zdCB1bnNpZ25lZCBsb25nICopZnJvbSk7CiAgICAgICAgICAgICAg ICAgICAgICAgICooMysodW5zaWduZWQgbG9uZyAqKXRvKSA9ICooMysoY29uc3QgdW5zaWduZWQg bG9uZyAqKWZyb20pOwogICAgICAgICAgICAgICAgICAgICAgICAqKDQrKHVuc2lnbmVkIGxvbmcg Kil0bykgPSAqKDQrKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilmcm9tKTsKICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIHRvOwogICAgICAgIH0KCgoKCgoKCnsKICAgICAgICBpbnQgZDAsIGQx LCBkMjsKICAgICAgICBzd2l0Y2ggKG4gJSA0KSB7CiAgICAgICAgICAgICAgICBjYXNlIDA6IF9f YXNtX18gX192b2xhdGlsZV9fKCAicmVwIDsgbW92c2wiICIiIDogIj0mYyIgKGQwKSwgIj0mRCIg KGQxKSwgIj0mUyIgKGQyKSA6ICIwIiAobi80KSwiMSIgKChsb25nKSB0byksIjIiICgobG9uZykg ZnJvbSkgOiAibWVtb3J5Iik7OyByZXR1cm4gdG87CiAgICAgICAgICAgICAgICBjYXNlIDE6IF9f YXNtX18gX192b2xhdGlsZV9fKCAicmVwIDsgbW92c2wiICJcblx0bW92c2IiIDogIj0mYyIgKGQw KSwgIj0mRCIgKGQxKSwgIj0mUyIgKGQyKSA6ICIwIiAobi80KSwiMSIgKChsb25nKSB0byksIjIi ICgobG9uZykgZnJvbSkgOiAibWVtb3J5Iik7OyByZXR1cm4gdG87CiAgICAgICAgICAgICAgICBj YXNlIDI6IF9fYXNtX18gX192b2xhdGlsZV9fKCAicmVwIDsgbW92c2wiICJcblx0bW92c3ciIDog Ij0mYyIgKGQwKSwgIj0mRCIgKGQxKSwgIj0mUyIgKGQyKSA6ICIwIiAobi80KSwiMSIgKChsb25n KSB0byksIjIiICgobG9uZykgZnJvbSkgOiAibWVtb3J5Iik7OyByZXR1cm4gdG87CiAgICAgICAg ICAgICAgICBkZWZhdWx0OiBfX2FzbV9fIF9fdm9sYXRpbGVfXyggInJlcCA7IG1vdnNsIiAiXG5c dG1vdnN3XG5cdG1vdnNiIiA6ICI9JmMiIChkMCksICI9JkQiIChkMSksICI9JlMiIChkMikgOiAi MCIgKG4vNCksIjEiICgobG9uZykgdG8pLCIyIiAoKGxvbmcpIGZyb20pIDogIm1lbW9yeSIpOzsg cmV0dXJuIHRvOwogICAgICAgIH0KfQoKCn0KIyAzMzUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9s aW51eC9pbmNsdWRlL2FzbS9zdHJpbmcuaCIKZXh0ZXJuIHZvaWQgX19zdHJ1Y3RfY3B5X2J1ZyAo dm9pZCk7CiMgMzQ1ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vc3Ry aW5nLmgiCnN0YXRpYyBpbmxpbmUgdm9pZCAqIG1lbW1vdmUodm9pZCAqIGRlc3QsY29uc3Qgdm9p ZCAqIHNyYywgc2l6ZV90IG4pCnsKaW50IGQwLCBkMSwgZDI7CmlmIChkZXN0PHNyYykKX19hc21f XyBfX3ZvbGF0aWxlX18oCiAgICAgICAgInJlcFxuXHQiCiAgICAgICAgIm1vdnNiIgogICAgICAg IDogIj0mYyIgKGQwKSwgIj0mUyIgKGQxKSwgIj0mRCIgKGQyKQogICAgICAgIDoiMCIgKG4pLCIx IiAoc3JjKSwiMiIgKGRlc3QpCiAgICAgICAgOiAibWVtb3J5Iik7CmVsc2UKX19hc21fXyBfX3Zv bGF0aWxlX18oCiAgICAgICAgInN0ZFxuXHQiCiAgICAgICAgInJlcFxuXHQiCiAgICAgICAgIm1v dnNiXG5cdCIKICAgICAgICAiY2xkIgogICAgICAgIDogIj0mYyIgKGQwKSwgIj0mUyIgKGQxKSwg Ij0mRCIgKGQyKQogICAgICAgIDoiMCIgKG4pLAogICAgICAgICAiMSIgKG4tMSsoY29uc3QgY2hh ciAqKXNyYyksCiAgICAgICAgICIyIiAobi0xKyhjaGFyICopZGVzdCkKICAgICAgICA6Im1lbW9y eSIpOwpyZXR1cm4gZGVzdDsKfQoKCgoKc3RhdGljIGlubGluZSB2b2lkICogbWVtY2hyKGNvbnN0 IHZvaWQgKiBjcyxpbnQgYyxzaXplX3QgY291bnQpCnsKaW50IGQwOwpyZWdpc3RlciB2b2lkICog X19yZXM7CmlmICghY291bnQpCiAgICAgICAgcmV0dXJuICgodm9pZCAqKTApOwpfX2FzbV9fIF9f dm9sYXRpbGVfXygKICAgICAgICAicmVwbmVcblx0IgogICAgICAgICJzY2FzYlxuXHQiCiAgICAg ICAgImplIDFmXG5cdCIKICAgICAgICAibW92bCAkMSwlMFxuIgogICAgICAgICIxOlx0ZGVjbCAl MCIKICAgICAgICA6Ij1EIiAoX19yZXMpLCAiPSZjIiAoZDApIDogImEiIChjKSwiMCIgKGNzKSwi MSIgKGNvdW50KSk7CnJldHVybiBfX3JlczsKfQoKc3RhdGljIGlubGluZSB2b2lkICogX19tZW1z ZXRfZ2VuZXJpYyh2b2lkICogcywgY2hhciBjLHNpemVfdCBjb3VudCkKewppbnQgZDAsIGQxOwpf X2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAicmVwXG5cdCIKICAgICAgICAic3Rvc2IiCiAg ICAgICAgOiAiPSZjIiAoZDApLCAiPSZEIiAoZDEpCiAgICAgICAgOiJhIiAoYyksIjEiIChzKSwi MCIgKGNvdW50KQogICAgICAgIDoibWVtb3J5Iik7CnJldHVybiBzOwp9CiMgNDA4ICIvdXNyL3Ny Yy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vc3RyaW5nLmgiCnN0YXRpYyBpbmxpbmUg dm9pZCAqIF9fY29uc3RhbnRfY19tZW1zZXQodm9pZCAqIHMsIHVuc2lnbmVkIGxvbmcgYywgc2l6 ZV90IGNvdW50KQp7CmludCBkMCwgZDE7Cl9fYXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICJy ZXAgOyBzdG9zbFxuXHQiCiAgICAgICAgInRlc3RiICQyLCViM1xuXHQiCiAgICAgICAgImplIDFm XG5cdCIKICAgICAgICAic3Rvc3dcbiIKICAgICAgICAiMTpcdHRlc3RiICQxLCViM1xuXHQiCiAg ICAgICAgImplIDJmXG5cdCIKICAgICAgICAic3Rvc2JcbiIKICAgICAgICAiMjoiCiAgICAgICAg OiAiPSZjIiAoZDApLCAiPSZEIiAoZDEpCiAgICAgICAgOiJhIiAoYyksICJxIiAoY291bnQpLCAi MCIgKGNvdW50LzQpLCAiMSIgKChsb25nKSBzKQogICAgICAgIDoibWVtb3J5Iik7CnJldHVybiAo cyk7Cn0KCgoKc3RhdGljIGlubGluZSBzaXplX3Qgc3Rybmxlbihjb25zdCBjaGFyICogcywgc2l6 ZV90IGNvdW50KQp7CmludCBkMDsKcmVnaXN0ZXIgaW50IF9fcmVzOwpfX2FzbV9fIF9fdm9sYXRp bGVfXygKICAgICAgICAibW92bCAlMiwlMFxuXHQiCiAgICAgICAgImptcCAyZlxuIgogICAgICAg ICIxOlx0Y21wYiAkMCwoJTApXG5cdCIKICAgICAgICAiamUgM2Zcblx0IgogICAgICAgICJpbmNs ICUwXG4iCiAgICAgICAgIjI6XHRkZWNsICUxXG5cdCIKICAgICAgICAiY21wbCAkLTEsJTFcblx0 IgogICAgICAgICJqbmUgMWJcbiIKICAgICAgICAiMzpcdHN1YmwgJTIsJTAiCiAgICAgICAgOiI9 YSIgKF9fcmVzKSwgIj0mZCIgKGQwKQogICAgICAgIDoiYyIgKHMpLCIxIiAoY291bnQpKTsKcmV0 dXJuIF9fcmVzOwp9CgoKCgpleHRlcm4gY2hhciAqc3Ryc3RyKGNvbnN0IGNoYXIgKmNzLCBjb25z dCBjaGFyICpjdCk7CgoKCgoKc3RhdGljIGlubGluZSB2b2lkICogX19jb25zdGFudF9jX2FuZF9j b3VudF9tZW1zZXQodm9pZCAqIHMsIHVuc2lnbmVkIGxvbmcgcGF0dGVybiwgc2l6ZV90IGNvdW50 KQp7CiAgICAgICAgc3dpdGNoIChjb3VudCkgewogICAgICAgICAgICAgICAgY2FzZSAwOgogICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gczsKICAgICAgICAgICAgICAgIGNhc2UgMToKICAg ICAgICAgICAgICAgICAgICAgICAgKih1bnNpZ25lZCBjaGFyICopcyA9IHBhdHRlcm47CiAgICAg ICAgICAgICAgICAgICAgICAgIHJldHVybiBzOwogICAgICAgICAgICAgICAgY2FzZSAyOgogICAg ICAgICAgICAgICAgICAgICAgICAqKHVuc2lnbmVkIHNob3J0ICopcyA9IHBhdHRlcm47CiAgICAg ICAgICAgICAgICAgICAgICAgIHJldHVybiBzOwogICAgICAgICAgICAgICAgY2FzZSAzOgogICAg ICAgICAgICAgICAgICAgICAgICAqKHVuc2lnbmVkIHNob3J0ICopcyA9IHBhdHRlcm47CiAgICAg ICAgICAgICAgICAgICAgICAgICooMisodW5zaWduZWQgY2hhciAqKXMpID0gcGF0dGVybjsKICAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHM7CiAgICAgICAgICAgICAgICBjYXNlIDQ6CiAg ICAgICAgICAgICAgICAgICAgICAgICoodW5zaWduZWQgbG9uZyAqKXMgPSBwYXR0ZXJuOwogICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gczsKICAgICAgICB9CgoKCgoKCgp7CiAgICAgICAg aW50IGQwLCBkMTsKICAgICAgICBzd2l0Y2ggKGNvdW50ICUgNCkgewogICAgICAgICAgICAgICAg Y2FzZSAwOiBfX2FzbV9fIF9fdm9sYXRpbGVfXyggInJlcCA7IHN0b3NsIiAiIiA6ICI9JmMiIChk MCksICI9JkQiIChkMSkgOiAiYSIgKHBhdHRlcm4pLCIwIiAoY291bnQvNCksIjEiICgobG9uZykg cykgOiAibWVtb3J5Iik7IHJldHVybiBzOwogICAgICAgICAgICAgICAgY2FzZSAxOiBfX2FzbV9f IF9fdm9sYXRpbGVfXyggInJlcCA7IHN0b3NsIiAiXG5cdHN0b3NiIiA6ICI9JmMiIChkMCksICI9 JkQiIChkMSkgOiAiYSIgKHBhdHRlcm4pLCIwIiAoY291bnQvNCksIjEiICgobG9uZykgcykgOiAi bWVtb3J5Iik7IHJldHVybiBzOwogICAgICAgICAgICAgICAgY2FzZSAyOiBfX2FzbV9fIF9fdm9s YXRpbGVfXyggInJlcCA7IHN0b3NsIiAiXG5cdHN0b3N3IiA6ICI9JmMiIChkMCksICI9JkQiIChk MSkgOiAiYSIgKHBhdHRlcm4pLCIwIiAoY291bnQvNCksIjEiICgobG9uZykgcykgOiAibWVtb3J5 Iik7IHJldHVybiBzOwogICAgICAgICAgICAgICAgZGVmYXVsdDogX19hc21fXyBfX3ZvbGF0aWxl X18oICJyZXAgOyBzdG9zbCIgIlxuXHRzdG9zd1xuXHRzdG9zYiIgOiAiPSZjIiAoZDApLCAiPSZE IiAoZDEpIDogImEiIChwYXR0ZXJuKSwiMCIgKGNvdW50LzQpLCIxIiAoKGxvbmcpIHMpIDogIm1l bW9yeSIpOyByZXR1cm4gczsKICAgICAgICB9Cn0KCgp9CiMgNTE1ICIvdXNyL3NyYy9saW51eC0y LjQuMTMvbGludXgvaW5jbHVkZS9hc20vc3RyaW5nLmgiCnN0YXRpYyBpbmxpbmUgdm9pZCAqIG1l bXNjYW4odm9pZCAqIGFkZHIsIGludCBjLCBzaXplX3Qgc2l6ZSkKewogICAgICAgIGlmICghc2l6 ZSkKICAgICAgICAgICAgICAgIHJldHVybiBhZGRyOwogICAgICAgIF9fYXNtX18oInJlcG56OyBz Y2FzYlxuXHQiCiAgICAgICAgICAgICAgICAiam56IDFmXG5cdCIKICAgICAgICAgICAgICAgICJk ZWMgJSVlZGlcbiIKICAgICAgICAgICAgICAgICIxOiIKICAgICAgICAgICAgICAgIDogIj1EIiAo YWRkciksICI9YyIgKHNpemUpCiAgICAgICAgICAgICAgICA6ICIwIiAoYWRkciksICIxIiAoc2l6 ZSksICJhIiAoYykpOwogICAgICAgIHJldHVybiBhZGRyOwp9CiMgMjYgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3N0cmluZy5oIiAyCiMgNDYgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3N0cmluZy5oIgpleHRlcm4gaW50IHN0cm5p Y21wKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBfX2tlcm5lbF9zaXplX3QpOwojIDc3ICIv dXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9zdHJpbmcuaCIKZXh0ZXJu IGludCBfX2J1aWx0aW5fbWVtY21wKGNvbnN0IHZvaWQgKixjb25zdCB2b2lkICosX19rZXJuZWxf c2l6ZV90KTsKIyAyNCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgv ZnMuaCIgMgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vYXRv bWljLmgiIDEKIyAyNiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgv ZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9iaXRv cHMuaCIgMQoKCgoKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9s aW51eC9jb25maWcuaCIgMQojIDkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRl L2FzbS9iaXRvcHMuaCIgMgojIDM2ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVk ZS9hc20vYml0b3BzLmgiCnN0YXRpYyBfX2lubGluZV9fIHZvaWQgc2V0X2JpdChpbnQgbnIsIHZv bGF0aWxlIHZvaWQgKiBhZGRyKQp7CiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oICJsb2Nr IDsgIgogICAgICAgICAgICAgICAgImJ0c2wgJTEsJTAiCiAgICAgICAgICAgICAgICA6Ij1tIiAo KCoodm9sYXRpbGUgbG9uZyAqKSBhZGRyKSkKICAgICAgICAgICAgICAgIDoiSXIiIChucikpOwp9 CiMgNTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9iaXRvcHMuaCIK c3RhdGljIF9faW5saW5lX18gdm9pZCBfX3NldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICog YWRkcikKewogICAgICAgIF9fYXNtX18oCiAgICAgICAgICAgICAgICAiYnRzbCAlMSwlMCIKICAg ICAgICAgICAgICAgIDoiPW0iICgoKih2b2xhdGlsZSBsb25nICopIGFkZHIpKQogICAgICAgICAg ICAgICAgOiJJciIgKG5yKSk7Cn0KIyA3MSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2lu Y2x1ZGUvYXNtL2JpdG9wcy5oIgpzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGNsZWFyX2JpdChpbnQg bnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQp7CiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18o ICJsb2NrIDsgIgogICAgICAgICAgICAgICAgImJ0cmwgJTEsJTAiCiAgICAgICAgICAgICAgICA6 Ij1tIiAoKCoodm9sYXRpbGUgbG9uZyAqKSBhZGRyKSkKICAgICAgICAgICAgICAgIDoiSXIiIChu cikpOwp9CiMgOTAgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9iaXRv cHMuaCIKc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2NoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGls ZSB2b2lkICogYWRkcikKewogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICAg ICAgICAgImJ0Y2wgJTEsJTAiCiAgICAgICAgICAgICAgICA6Ij1tIiAoKCoodm9sYXRpbGUgbG9u ZyAqKSBhZGRyKSkKICAgICAgICAgICAgICAgIDoiSXIiIChucikpOwp9CiMgMTA3ICIvdXNyL3Ny Yy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vYml0b3BzLmgiCnN0YXRpYyBfX2lubGlu ZV9fIHZvaWQgY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQp7CiAgICAg ICAgX19hc21fXyBfX3ZvbGF0aWxlX18oICJsb2NrIDsgIgogICAgICAgICAgICAgICAgImJ0Y2wg JTEsJTAiCiAgICAgICAgICAgICAgICA6Ij1tIiAoKCoodm9sYXRpbGUgbG9uZyAqKSBhZGRyKSkK ICAgICAgICAgICAgICAgIDoiSXIiIChucikpOwp9CiMgMTIzICIvdXNyL3NyYy9saW51eC0yLjQu MTMvbGludXgvaW5jbHVkZS9hc20vYml0b3BzLmgiCnN0YXRpYyBfX2lubGluZV9fIGludCB0ZXN0 X2FuZF9zZXRfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCnsKICAgICAgICBpbnQg b2xkYml0OwoKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggImxvY2sgOyAiCiAgICAgICAg ICAgICAgICAiYnRzbCAlMiwlMVxuXHRzYmJsICUwLCUwIgogICAgICAgICAgICAgICAgOiI9ciIg KG9sZGJpdCksIj1tIiAoKCoodm9sYXRpbGUgbG9uZyAqKSBhZGRyKSkKICAgICAgICAgICAgICAg IDoiSXIiIChucikgOiAibWVtb3J5Iik7CiAgICAgICAgcmV0dXJuIG9sZGJpdDsKfQojIDE0MyAi L3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL2JpdG9wcy5oIgpzdGF0aWMg X19pbmxpbmVfXyBpbnQgX190ZXN0X2FuZF9zZXRfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAq IGFkZHIpCnsKICAgICAgICBpbnQgb2xkYml0OwoKICAgICAgICBfX2FzbV9fKAogICAgICAgICAg ICAgICAgImJ0c2wgJTIsJTFcblx0c2JibCAlMCwlMCIKICAgICAgICAgICAgICAgIDoiPXIiIChv bGRiaXQpLCI9bSIgKCgqKHZvbGF0aWxlIGxvbmcgKikgYWRkcikpCiAgICAgICAgICAgICAgICA6 IklyIiAobnIpKTsKICAgICAgICByZXR1cm4gb2xkYml0Owp9CiMgMTYyICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vYml0b3BzLmgiCnN0YXRpYyBfX2lubGluZV9fIGlu dCB0ZXN0X2FuZF9jbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKewogICAg ICAgIGludCBvbGRiaXQ7CgogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCAibG9jayA7ICIK ICAgICAgICAgICAgICAgICJidHJsICUyLCUxXG5cdHNiYmwgJTAsJTAiCiAgICAgICAgICAgICAg ICA6Ij1yIiAob2xkYml0KSwiPW0iICgoKih2b2xhdGlsZSBsb25nICopIGFkZHIpKQogICAgICAg ICAgICAgICAgOiJJciIgKG5yKSA6ICJtZW1vcnkiKTsKICAgICAgICByZXR1cm4gb2xkYml0Owp9 CiMgMTgyICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vYml0b3BzLmgi CnN0YXRpYyBfX2lubGluZV9fIGludCBfX3Rlc3RfYW5kX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0 aWxlIHZvaWQgKiBhZGRyKQp7CiAgICAgICAgaW50IG9sZGJpdDsKCiAgICAgICAgX19hc21fXygK ICAgICAgICAgICAgICAgICJidHJsICUyLCUxXG5cdHNiYmwgJTAsJTAiCiAgICAgICAgICAgICAg ICA6Ij1yIiAob2xkYml0KSwiPW0iICgoKih2b2xhdGlsZSBsb25nICopIGFkZHIpKQogICAgICAg ICAgICAgICAgOiJJciIgKG5yKSk7CiAgICAgICAgcmV0dXJuIG9sZGJpdDsKfQoKCnN0YXRpYyBf X2lubGluZV9fIGludCBfX3Rlc3RfYW5kX2NoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lk ICogYWRkcikKewogICAgICAgIGludCBvbGRiaXQ7CgogICAgICAgIF9fYXNtX18gX192b2xhdGls ZV9fKAogICAgICAgICAgICAgICAgImJ0Y2wgJTIsJTFcblx0c2JibCAlMCwlMCIKICAgICAgICAg ICAgICAgIDoiPXIiIChvbGRiaXQpLCI9bSIgKCgqKHZvbGF0aWxlIGxvbmcgKikgYWRkcikpCiAg ICAgICAgICAgICAgICA6IklyIiAobnIpIDogIm1lbW9yeSIpOwogICAgICAgIHJldHVybiBvbGRi aXQ7Cn0KIyAyMTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9iaXRv cHMuaCIKc3RhdGljIF9faW5saW5lX18gaW50IHRlc3RfYW5kX2NoYW5nZV9iaXQoaW50IG5yLCB2 b2xhdGlsZSB2b2lkICogYWRkcikKewogICAgICAgIGludCBvbGRiaXQ7CgogICAgICAgIF9fYXNt X18gX192b2xhdGlsZV9fKCAibG9jayA7ICIKICAgICAgICAgICAgICAgICJidGNsICUyLCUxXG5c dHNiYmwgJTAsJTAiCiAgICAgICAgICAgICAgICA6Ij1yIiAob2xkYml0KSwiPW0iICgoKih2b2xh dGlsZSBsb25nICopIGFkZHIpKQogICAgICAgICAgICAgICAgOiJJciIgKG5yKSA6ICJtZW1vcnki KTsKICAgICAgICByZXR1cm4gb2xkYml0Owp9CiMgMjMzICIvdXNyL3NyYy9saW51eC0yLjQuMTMv bGludXgvaW5jbHVkZS9hc20vYml0b3BzLmgiCnN0YXRpYyBfX2lubGluZV9fIGludCBjb25zdGFu dF90ZXN0X2JpdChpbnQgbnIsIGNvbnN0IHZvbGF0aWxlIHZvaWQgKiBhZGRyKQp7CiAgICAgICAg cmV0dXJuICgoMVVMIDw8IChuciAmIDMxKSkgJiAoKChjb25zdCB2b2xhdGlsZSB1bnNpZ25lZCBp bnQgKikgYWRkcilbbnIgPj4gNV0pKSAhPSAwOwp9CgpzdGF0aWMgX19pbmxpbmVfXyBpbnQgdmFy aWFibGVfdGVzdF9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKewogICAgICAgIGlu dCBvbGRiaXQ7CgogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICAgICAgICAg ImJ0bCAlMiwlMVxuXHRzYmJsICUwLCUwIgogICAgICAgICAgICAgICAgOiI9ciIgKG9sZGJpdCkK ICAgICAgICAgICAgICAgIDoibSIgKCgqKHZvbGF0aWxlIGxvbmcgKikgYWRkcikpLCJJciIgKG5y KSk7CiAgICAgICAgcmV0dXJuIG9sZGJpdDsKfQojIDI2MiAiL3Vzci9zcmMvbGludXgtMi40LjEz L2xpbnV4L2luY2x1ZGUvYXNtL2JpdG9wcy5oIgpzdGF0aWMgX19pbmxpbmVfXyBpbnQgZmluZF9m aXJzdF96ZXJvX2JpdCh2b2lkICogYWRkciwgdW5zaWduZWQgc2l6ZSkKewogICAgICAgIGludCBk MCwgZDEsIGQyOwogICAgICAgIGludCByZXM7CgogICAgICAgIGlmICghc2l6ZSkKICAgICAgICAg ICAgICAgIHJldHVybiAwOwoKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAg ICAgICAgICJtb3ZsICQtMSwlJWVheFxuXHQiCiAgICAgICAgICAgICAgICAieG9ybCAlJWVkeCwl JWVkeFxuXHQiCiAgICAgICAgICAgICAgICAicmVwZTsgc2Nhc2xcblx0IgogICAgICAgICAgICAg ICAgImplIDFmXG5cdCIKICAgICAgICAgICAgICAgICJ4b3JsIC00KCUlZWRpKSwlJWVheFxuXHQi CiAgICAgICAgICAgICAgICAic3VibCAkNCwlJWVkaVxuXHQiCiAgICAgICAgICAgICAgICAiYnNm bCAlJWVheCwlJWVkeFxuIgogICAgICAgICAgICAgICAgIjE6XHRzdWJsICUlZWJ4LCUlZWRpXG5c dCIKICAgICAgICAgICAgICAgICJzaGxsICQzLCUlZWRpXG5cdCIKICAgICAgICAgICAgICAgICJh ZGRsICUlZWRpLCUlZWR4IgogICAgICAgICAgICAgICAgOiI9ZCIgKHJlcyksICI9JmMiIChkMCks ICI9JkQiIChkMSksICI9JmEiIChkMikKICAgICAgICAgICAgICAgIDoiMSIgKChzaXplICsgMzEp ID4+IDUpLCAiMiIgKGFkZHIpLCAiYiIgKGFkZHIpKTsKICAgICAgICByZXR1cm4gcmVzOwp9CgoK CgoKCgpzdGF0aWMgX19pbmxpbmVfXyBpbnQgZmluZF9uZXh0X3plcm9fYml0ICh2b2lkICogYWRk ciwgaW50IHNpemUsIGludCBvZmZzZXQpCnsKICAgICAgICB1bnNpZ25lZCBsb25nICogcCA9ICgo dW5zaWduZWQgbG9uZyAqKSBhZGRyKSArIChvZmZzZXQgPj4gNSk7CiAgICAgICAgaW50IHNldCA9 IDAsIGJpdCA9IG9mZnNldCAmIDMxLCByZXM7CgogICAgICAgIGlmIChiaXQpIHsKCgoKICAgICAg ICAgICAgICAgIF9fYXNtX18oImJzZmwgJTEsJTBcblx0IgogICAgICAgICAgICAgICAgICAgICAg ICAiam5lIDFmXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAgIm1vdmwgJDMyLCAlMFxuIgog ICAgICAgICAgICAgICAgICAgICAgICAiMToiCiAgICAgICAgICAgICAgICAgICAgICAgIDogIj1y IiAoc2V0KQogICAgICAgICAgICAgICAgICAgICAgICA6ICJyIiAofigqcCA+PiBiaXQpKSk7CiAg ICAgICAgICAgICAgICBpZiAoc2V0IDwgKDMyIC0gYml0KSkKICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIHNldCArIG9mZnNldDsKICAgICAgICAgICAgICAgIHNldCA9IDMyIC0gYml0Owog ICAgICAgICAgICAgICAgcCsrOwogICAgICAgIH0KCgoKICAgICAgICByZXMgPSBmaW5kX2ZpcnN0 X3plcm9fYml0IChwLCBzaXplIC0gMzIgKiAocCAtICh1bnNpZ25lZCBsb25nICopIGFkZHIpKTsK ICAgICAgICByZXR1cm4gKG9mZnNldCArIHNldCArIHJlcyk7Cn0KCgoKCgoKCnN0YXRpYyBfX2lu bGluZV9fIHVuc2lnbmVkIGxvbmcgZmZ6KHVuc2lnbmVkIGxvbmcgd29yZCkKewogICAgICAgIF9f YXNtX18oImJzZmwgJTEsJTAiCiAgICAgICAgICAgICAgICA6Ij1yIiAod29yZCkKICAgICAgICAg ICAgICAgIDoiciIgKH53b3JkKSk7CiAgICAgICAgcmV0dXJuIHdvcmQ7Cn0KIyAzNDMgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9iaXRvcHMuaCIKc3RhdGljIF9faW5s aW5lX18gaW50IGZmcyhpbnQgeCkKewogICAgICAgIGludCByOwoKICAgICAgICBfX2FzbV9fKCJi c2ZsICUxLCUwXG5cdCIKICAgICAgICAgICAgICAgICJqbnogMWZcblx0IgogICAgICAgICAgICAg ICAgIm1vdmwgJC0xLCUwXG4iCiAgICAgICAgICAgICAgICAiMToiIDogIj1yIiAocikgOiAiZyIg KHgpKTsKICAgICAgICByZXR1cm4gcisxOwp9CiMgMjcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9s aW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKCnN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdDsKIyA1 MCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIKc3RydWN0 IGZpbGVzX3N0YXRfc3RydWN0IHsKICAgICAgICBpbnQgbnJfZmlsZXM7CiAgICAgICAgaW50IG5y X2ZyZWVfZmlsZXM7CiAgICAgICAgaW50IG1heF9maWxlczsKfTsKZXh0ZXJuIHN0cnVjdCBmaWxl c19zdGF0X3N0cnVjdCBmaWxlc19zdGF0OwoKc3RydWN0IGlub2Rlc19zdGF0X3QgewogICAgICAg IGludCBucl9pbm9kZXM7CiAgICAgICAgaW50IG5yX3VudXNlZDsKICAgICAgICBpbnQgZHVtbXlb NV07Cn07CmV4dGVybiBzdHJ1Y3QgaW5vZGVzX3N0YXRfdCBpbm9kZXNfc3RhdDsKCmV4dGVybiBp bnQgbGVhc2VzX2VuYWJsZSwgZGlyX25vdGlmeV9lbmFibGUsIGxlYXNlX2JyZWFrX3RpbWU7CiMg MTk4ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9mcy5oIgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9zZW1hcGhvcmUuaCIgMQoK CgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2xpbmthZ2Uu aCIgMQojIDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9zZW1hcGhv cmUuaCIgMgojIDM5ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vc2Vt YXBob3JlLmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3N5 c3RlbS5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGlu dXgvY29uZmlnLmgiIDEKIyA1ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9h c20vc3lzdGVtLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9s aW51eC9rZXJuZWwuaCIgMQojIDYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRl L2FzbS9zeXN0ZW0uaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRl L2FzbS9zZWdtZW50LmgiIDEKIyA3ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVk ZS9hc20vc3lzdGVtLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVk ZS9saW51eC9iaXRvcHMuaCIgMQojIDExICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5j bHVkZS9saW51eC9iaXRvcHMuaCIKc3RhdGljIGlubGluZSBpbnQgZ2VuZXJpY19mZnMoaW50IHgp CnsKICAgICAgICBpbnQgciA9IDE7CgogICAgICAgIGlmICgheCkKICAgICAgICAgICAgICAgIHJl dHVybiAwOwogICAgICAgIGlmICghKHggJiAweGZmZmYpKSB7CiAgICAgICAgICAgICAgICB4ID4+ PSAxNjsKICAgICAgICAgICAgICAgIHIgKz0gMTY7CiAgICAgICAgfQogICAgICAgIGlmICghKHgg JiAweGZmKSkgewogICAgICAgICAgICAgICAgeCA+Pj0gODsKICAgICAgICAgICAgICAgIHIgKz0g ODsKICAgICAgICB9CiAgICAgICAgaWYgKCEoeCAmIDB4ZikpIHsKICAgICAgICAgICAgICAgIHgg Pj49IDQ7CiAgICAgICAgICAgICAgICByICs9IDQ7CiAgICAgICAgfQogICAgICAgIGlmICghKHgg JiAzKSkgewogICAgICAgICAgICAgICAgeCA+Pj0gMjsKICAgICAgICAgICAgICAgIHIgKz0gMjsK ICAgICAgICB9CiAgICAgICAgaWYgKCEoeCAmIDEpKSB7CiAgICAgICAgICAgICAgICB4ID4+PSAx OwogICAgICAgICAgICAgICAgciArPSAxOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcjsKfQoK CgoKCgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZW5lcmljX2h3ZWlnaHQzMih1bnNpZ25l ZCBpbnQgdykKewogICAgICAgIHVuc2lnbmVkIGludCByZXMgPSAodyAmIDB4NTU1NTU1NTUpICsg KCh3ID4+IDEpICYgMHg1NTU1NTU1NSk7CiAgICAgICAgcmVzID0gKHJlcyAmIDB4MzMzMzMzMzMp ICsgKChyZXMgPj4gMikgJiAweDMzMzMzMzMzKTsKICAgICAgICByZXMgPSAocmVzICYgMHgwRjBG MEYwRikgKyAoKHJlcyA+PiA0KSAmIDB4MEYwRjBGMEYpOwogICAgICAgIHJlcyA9IChyZXMgJiAw eDAwRkYwMEZGKSArICgocmVzID4+IDgpICYgMHgwMEZGMDBGRik7CiAgICAgICAgcmV0dXJuIChy ZXMgJiAweDAwMDBGRkZGKSArICgocmVzID4+IDE2KSAmIDB4MDAwMEZGRkYpOwp9CgpzdGF0aWMg aW5saW5lIHVuc2lnbmVkIGludCBnZW5lcmljX2h3ZWlnaHQxNih1bnNpZ25lZCBpbnQgdykKewog ICAgICAgIHVuc2lnbmVkIGludCByZXMgPSAodyAmIDB4NTU1NSkgKyAoKHcgPj4gMSkgJiAweDU1 NTUpOwogICAgICAgIHJlcyA9IChyZXMgJiAweDMzMzMpICsgKChyZXMgPj4gMikgJiAweDMzMzMp OwogICAgICAgIHJlcyA9IChyZXMgJiAweDBGMEYpICsgKChyZXMgPj4gNCkgJiAweDBGMEYpOwog ICAgICAgIHJldHVybiAocmVzICYgMHgwMEZGKSArICgocmVzID4+IDgpICYgMHgwMEZGKTsKfQoK c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2VuZXJpY19od2VpZ2h0OCh1bnNpZ25lZCBpbnQg dykKewogICAgICAgIHVuc2lnbmVkIGludCByZXMgPSAodyAmIDB4NTUpICsgKCh3ID4+IDEpICYg MHg1NSk7CiAgICAgICAgcmVzID0gKHJlcyAmIDB4MzMpICsgKChyZXMgPj4gMikgJiAweDMzKTsK ICAgICAgICByZXR1cm4gKHJlcyAmIDB4MEYpICsgKChyZXMgPj4gNCkgJiAweDBGKTsKfQoKIyAx ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vYml0b3BzLmgiIDEKIyA3 MCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvYml0b3BzLmgiIDIK IyA4ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vc3lzdGVtLmgiIDIK CgoKc3RydWN0IHRhc2tfc3RydWN0OwpleHRlcm4gdm9pZCBfX3N3aXRjaF90byhzdHJ1Y3QgdGFz a19zdHJ1Y3QgKnByZXYsIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCkgX19hdHRyaWJ1dGVfXygo cmVncGFybSgzKSkpOwojIDYzICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9h c20vc3lzdGVtLmgiCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfZ2V0X2Jhc2UoY2hhciAq IGFkZHIpCnsKICAgICAgICB1bnNpZ25lZCBsb25nIF9fYmFzZTsKICAgICAgICBfX2FzbV9fKCJt b3ZiICUzLCUlZGhcblx0IgogICAgICAgICAgICAgICAgIm1vdmIgJTIsJSVkbFxuXHQiCiAgICAg ICAgICAgICAgICAic2hsbCAkMTYsJSVlZHhcblx0IgogICAgICAgICAgICAgICAgIm1vdncgJTEs JSVkeCIKICAgICAgICAgICAgICAgIDoiPSZkIiAoX19iYXNlKQogICAgICAgICAgICAgICAgOiJt IiAoKigoYWRkcikrMikpLAogICAgICAgICAgICAgICAgICJtIiAoKigoYWRkcikrNCkpLAogICAg ICAgICAgICAgICAgICJtIiAoKigoYWRkcikrNykpKTsKICAgICAgICByZXR1cm4gX19iYXNlOwp9 CiMgMTMwICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vc3lzdGVtLmgi CnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfbGltaXQodW5zaWduZWQgbG9uZyBzZWdt ZW50KQp7CiAgICAgICAgdW5zaWduZWQgbG9uZyBfX2xpbWl0OwogICAgICAgIF9fYXNtX18oImxz bGwgJTEsJTAiCiAgICAgICAgICAgICAgICA6Ij1yIiAoX19saW1pdCk6InIiIChzZWdtZW50KSk7 CiAgICAgICAgcmV0dXJuIF9fbGltaXQrMTsKfQoKCgoKCgoKc3RydWN0IF9feGNoZ19kdW1teSB7 IHVuc2lnbmVkIGxvbmcgYVsxMDBdOyB9OwojIDE1NyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xp bnV4L2luY2x1ZGUvYXNtL3N5c3RlbS5oIgpzdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfNjRiaXQg KHVuc2lnbmVkIGxvbmcgbG9uZyAqIHB0ciwKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBs b3csIHVuc2lnbmVkIGludCBoaWdoKQp7CiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAog ICAgICAgICAgICAgICAgIlxuMTpcdCIKICAgICAgICAgICAgICAgICJtb3ZsICglMCksICUlZWF4 XG5cdCIKICAgICAgICAgICAgICAgICJtb3ZsIDQoJTApLCAlJWVkeFxuXHQiCiAgICAgICAgICAg ICAgICAiY21weGNoZzhiICglMClcblx0IgogICAgICAgICAgICAgICAgImpueiAxYiIKICAgICAg ICAgICAgICAgIDoKICAgICAgICAgICAgICAgIDogIkQiKHB0ciksCiAgICAgICAgICAgICAgICAg ICAgICAgICJiIihsb3cpLAogICAgICAgICAgICAgICAgICAgICAgICAiYyIoaGlnaCkKICAgICAg ICAgICAgICAgIDogImF4IiwiZHgiLCJtZW1vcnkiKTsKfQoKc3RhdGljIGlubGluZSB2b2lkIF9f c2V0XzY0Yml0X2NvbnN0YW50ICh1bnNpZ25lZCBsb25nIGxvbmcgKnB0ciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB2 YWx1ZSkKewogICAgICAgIF9fc2V0XzY0Yml0KHB0ciwodW5zaWduZWQgaW50KSh2YWx1ZSksICh1 bnNpZ25lZCBpbnQpKCh2YWx1ZSk+PjMyVUxMKSk7Cn0KCgoKc3RhdGljIGlubGluZSB2b2lkIF9f c2V0XzY0Yml0X3ZhciAodW5zaWduZWQgbG9uZyBsb25nICpwdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUpCnsKICAgICAgICBfX3NldF82NGJpdChw dHIsKigoKHVuc2lnbmVkIGludCopJih2YWx1ZSkpKzApLCAqKCgodW5zaWduZWQgaW50KikmKHZh bHVlKSkrMSkpOwp9CiMgMjAyICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9h c20vc3lzdGVtLmgiCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3hjaGcodW5zaWduZWQg bG9uZyB4LCB2b2xhdGlsZSB2b2lkICogcHRyLCBpbnQgc2l6ZSkKewogICAgICAgIHN3aXRjaCAo c2l6ZSkgewogICAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgICAgICBf X2FzbV9fIF9fdm9sYXRpbGVfXygieGNoZ2IgJWIwLCUxIgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDoiPXEiICh4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoibSIg KCooKHN0cnVjdCBfX3hjaGdfZHVtbXkgKikocHRyKSkpLCAiMCIgKHgpCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOiJtZW1vcnkiKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJl YWs7CiAgICAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICAgICAgICAgIF9fYXNt X18gX192b2xhdGlsZV9fKCJ4Y2hndyAldzAsJTEiCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOiI9ciIgKHgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiJtIiAoKigo c3RydWN0IF9feGNoZ19kdW1teSAqKShwdHIpKSksICIwIiAoeCkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA6Im1lbW9yeSIpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK ICAgICAgICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgICAgICAgICAgICAgX19hc21fXyBf X3ZvbGF0aWxlX18oInhjaGdsICUwLCUxIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDoiPXIiICh4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoibSIgKCooKHN0cnVj dCBfX3hjaGdfZHVtbXkgKikocHRyKSkpLCAiMCIgKHgpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOiJtZW1vcnkiKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgfQogICAgICAgIHJldHVybiB4Owp9CiMgMjM2ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGlu dXgvaW5jbHVkZS9hc20vc3lzdGVtLmgiCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX2Nt cHhjaGcodm9sYXRpbGUgdm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIG9sZCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG5ldywgaW50IHNpemUpCnsK ICAgICAgICB1bnNpZ25lZCBsb25nIHByZXY7CiAgICAgICAgc3dpdGNoIChzaXplKSB7CiAgICAg ICAgY2FzZSAxOgogICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oImxvY2sgOyAi ICJjbXB4Y2hnYiAlYjEsJTIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6 ICI9YSIocHJldikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogInEiKG5l dyksICJtIigqKChzdHJ1Y3QgX194Y2hnX2R1bW15ICopKHB0cikpKSwgIjAiKG9sZCkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOwogICAgICAgICAgICAg ICAgcmV0dXJuIHByZXY7CiAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgX19hc21fXyBf X3ZvbGF0aWxlX18oImxvY2sgOyAiICJjbXB4Y2hndyAldzEsJTIiCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA6ICI9YSIocHJldikKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDogInEiKG5ldyksICJtIigqKChzdHJ1Y3QgX194Y2hnX2R1bW15ICopKHB0 cikpKSwgIjAiKG9sZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIm1l bW9yeSIpOwogICAgICAgICAgICAgICAgcmV0dXJuIHByZXY7CiAgICAgICAgY2FzZSA0OgogICAg ICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oImxvY2sgOyAiICJjbXB4Y2hnbCAlMSwl MiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIj1hIihwcmV2KQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAicSIobmV3KSwgIm0iKCooKHN0cnVj dCBfX3hjaGdfZHVtbXkgKikocHRyKSkpLCAiMCIob2xkKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7CiAgICAgICAgICAgICAgICByZXR1cm4gcHJldjsK ICAgICAgICB9CiAgICAgICAgcmV0dXJuIG9sZDsKfQojIDMyNyAiL3Vzci9zcmMvbGludXgtMi40 LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3N5c3RlbS5oIgpleHRlcm4gdm9pZCBfX2dsb2JhbF9jbGko dm9pZCk7CmV4dGVybiB2b2lkIF9fZ2xvYmFsX3N0aSh2b2lkKTsKZXh0ZXJuIHVuc2lnbmVkIGxv bmcgX19nbG9iYWxfc2F2ZV9mbGFncyh2b2lkKTsKZXh0ZXJuIHZvaWQgX19nbG9iYWxfcmVzdG9y ZV9mbGFncyh1bnNpZ25lZCBsb25nKTsKIyAzNDkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51 eC9pbmNsdWRlL2FzbS9zeXN0ZW0uaCIKdm9pZCBkaXNhYmxlX2hsdCh2b2lkKTsKdm9pZCBlbmFi bGVfaGx0KHZvaWQpOwoKZXh0ZXJuIGludCBpc19zb255X3ZhaW9fbGFwdG9wOwojIDQwICIvdXNy L3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vc2VtYXBob3JlLmgiIDIKIyAxICIv dXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vYXRvbWljLmgiIDEKIyA0MSAi L3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3NlbWFwaG9yZS5oIiAyCiMg MSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvd2FpdC5oIiAxCiMg NDIgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9zZW1hcGhvcmUuaCIg MgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3J3c2VtLmgi IDEKIyAxMCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvcndzZW0u aCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9saW5rYWdl LmgiIDEKIyAxMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvcndz ZW0uaCIgMgoKCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGlu dXgvY29uZmlnLmgiIDEKIyAxNyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUv bGludXgvcndzZW0uaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRl L2xpbnV4L3R5cGVzLmgiIDEKIyAxOCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1 ZGUvbGludXgvcndzZW0uaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNs dWRlL2xpbnV4L2tlcm5lbC5oIiAxCiMgMTkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9p bmNsdWRlL2xpbnV4L3J3c2VtLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgv aW5jbHVkZS9hc20vc3lzdGVtLmgiIDEKIyAyMCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4 L2luY2x1ZGUvbGludXgvcndzZW0uaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51 eC9pbmNsdWRlL2FzbS9hdG9taWMuaCIgMQojIDIxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGlu dXgvaW5jbHVkZS9saW51eC9yd3NlbS5oIiAyCgpzdHJ1Y3Qgcndfc2VtYXBob3JlOwoKCgoKIyAx ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vcndzZW0uaCIgMQojIDQx ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vcndzZW0uaCIKIyAxICIv dXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9saXN0LmgiIDEKIyA0MiAi L3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3J3c2VtLmgiIDIKIyAxICIv dXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9zcGlubG9jay5oIiAxCiMg NDMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9yd3NlbS5oIiAyCgpz dHJ1Y3QgcndzZW1fd2FpdGVyOwoKZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgKnJ3c2VtX2Rv d25fcmVhZF9mYWlsZWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKSBfX2F0dHJpYnV0ZV9fKChy ZWdwYXJtKDMpKSk7CmV4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlICpyd3NlbV9kb3duX3dyaXRl X2ZhaWxlZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0o MykpKTsKZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgKnJ3c2VtX3dha2Uoc3RydWN0IHJ3X3Nl bWFwaG9yZSAqKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CgoKCgpzdHJ1Y3Qgcndfc2Vt YXBob3JlIHsKICAgICAgICBzaWduZWQgbG9uZyBjb3VudDsKCgoKCgoKICAgICAgICBzcGlubG9j a190IHdhaXRfbG9jazsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIHdhaXRfbGlzdDsKCgoKfTsK IyA4NCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3J3c2VtLmgiCnN0 YXRpYyBpbmxpbmUgdm9pZCBpbml0X3J3c2VtKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKewog ICAgICAgIHNlbS0+Y291bnQgPSAweDAwMDAwMDAwOwogICAgICAgIGRvIHsgKigmc2VtLT53YWl0 X2xvY2spID0gKHNwaW5sb2NrX3QpIHsgMSB9OyB9IHdoaWxlKDApOwogICAgICAgIGRvIHsgKCZz ZW0tPndhaXRfbGlzdCktPm5leHQgPSAoJnNlbS0+d2FpdF9saXN0KTsgKCZzZW0tPndhaXRfbGlz dCktPnByZXYgPSAoJnNlbS0+d2FpdF9saXN0KTsgfSB3aGlsZSAoMCk7CgoKCn0KCgoKCnN0YXRp YyBpbmxpbmUgdm9pZCBfX2Rvd25fcmVhZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCnsKICAg ICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAgICAgICAgICIjIGJlZ2lubmluZyBk b3duX3JlYWRcblx0IgoibG9jayA7ICIgIiAgaW5jbCAgICAgICglJWVheClcblx0IgogICAgICAg ICAgICAgICAgIiAganMgICAgICAgIDJmXG5cdCIKICAgICAgICAgICAgICAgICIxOlxuXHQiCiAg ICAgICAgICAgICAgICAiLnNlY3Rpb24gLnRleHQubG9jayxcImF4XCJcbiIKICAgICAgICAgICAg ICAgICIyOlxuXHQiCiAgICAgICAgICAgICAgICAiICBwdXNobCAgICAgJSVlY3hcblx0IgogICAg ICAgICAgICAgICAgIiAgcHVzaGwgICAgICUlZWR4XG5cdCIKICAgICAgICAgICAgICAgICIgIGNh bGwgICAgICByd3NlbV9kb3duX3JlYWRfZmFpbGVkXG5cdCIKICAgICAgICAgICAgICAgICIgIHBv cGwgICAgICAlJWVkeFxuXHQiCiAgICAgICAgICAgICAgICAiICBwb3BsICAgICAgJSVlY3hcblx0 IgogICAgICAgICAgICAgICAgIiAgam1wICAgICAgIDFiXG4iCiAgICAgICAgICAgICAgICAiLnBy ZXZpb3VzIgogICAgICAgICAgICAgICAgIiMgZW5kaW5nIGRvd25fcmVhZFxuXHQiCiAgICAgICAg ICAgICAgICA6ICIrbSIoc2VtLT5jb3VudCkKICAgICAgICAgICAgICAgIDogImEiKHNlbSkKICAg ICAgICAgICAgICAgIDogIm1lbW9yeSIsICJjYyIpOwp9CgoKCgpzdGF0aWMgaW5saW5lIHZvaWQg X19kb3duX3dyaXRlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKewogICAgICAgIGludCB0bXA7 CgogICAgICAgIHRtcCA9ICgoLTB4MDAwMTAwMDApICsgMHgwMDAwMDAwMSk7CiAgICAgICAgX19h c21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAgICAgICAgICAiIyBiZWdpbm5pbmcgZG93bl93cml0 ZVxuXHQiCiJsb2NrIDsgIiAiICB4YWRkICAgICAgJTAsKCUlZWF4KVxuXHQiCiAgICAgICAgICAg ICAgICAiICB0ZXN0bCAgICAgJTAsJTBcblx0IgogICAgICAgICAgICAgICAgIiAgam56ICAgICAg IDJmXG5cdCIKICAgICAgICAgICAgICAgICIxOlxuXHQiCiAgICAgICAgICAgICAgICAiLnNlY3Rp b24gLnRleHQubG9jayxcImF4XCJcbiIKICAgICAgICAgICAgICAgICIyOlxuXHQiCiAgICAgICAg ICAgICAgICAiICBwdXNobCAgICAgJSVlY3hcblx0IgogICAgICAgICAgICAgICAgIiAgY2FsbCAg ICAgIHJ3c2VtX2Rvd25fd3JpdGVfZmFpbGVkXG5cdCIKICAgICAgICAgICAgICAgICIgIHBvcGwg ICAgICAlJWVjeFxuXHQiCiAgICAgICAgICAgICAgICAiICBqbXAgICAgICAgMWJcbiIKICAgICAg ICAgICAgICAgICIucHJldmlvdXNcbiIKICAgICAgICAgICAgICAgICIjIGVuZGluZyBkb3duX3dy aXRlIgogICAgICAgICAgICAgICAgOiAiK2QiKHRtcCksICIrbSIoc2VtLT5jb3VudCkKICAgICAg ICAgICAgICAgIDogImEiKHNlbSkKICAgICAgICAgICAgICAgIDogIm1lbW9yeSIsICJjYyIpOwp9 CgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgX191cF9yZWFkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNl bSkKewogICAgICAgIF9fczMyIHRtcCA9IC0weDAwMDAwMDAxOwogICAgICAgIF9fYXNtX18gX192 b2xhdGlsZV9fKAogICAgICAgICAgICAgICAgIiMgYmVnaW5uaW5nIF9fdXBfcmVhZFxuXHQiCiJs b2NrIDsgIiAiICB4YWRkICAgICAgJSVlZHgsKCUlZWF4KVxuXHQiCiAgICAgICAgICAgICAgICAi ICBqcyAgICAgICAgMmZcblx0IgogICAgICAgICAgICAgICAgIjE6XG5cdCIKICAgICAgICAgICAg ICAgICIuc2VjdGlvbiAudGV4dC5sb2NrLFwiYXhcIlxuIgogICAgICAgICAgICAgICAgIjI6XG5c dCIKICAgICAgICAgICAgICAgICIgIGRlY3cgICAgICAlJWR4XG5cdCIKICAgICAgICAgICAgICAg ICIgIGpueiAgICAgICAxYlxuXHQiCiAgICAgICAgICAgICAgICAiICBwdXNobCAgICAgJSVlY3hc blx0IgogICAgICAgICAgICAgICAgIiAgY2FsbCAgICAgIHJ3c2VtX3dha2Vcblx0IgogICAgICAg ICAgICAgICAgIiAgcG9wbCAgICAgICUlZWN4XG5cdCIKICAgICAgICAgICAgICAgICIgIGptcCAg ICAgICAxYlxuIgogICAgICAgICAgICAgICAgIi5wcmV2aW91c1xuIgogICAgICAgICAgICAgICAg IiMgZW5kaW5nIF9fdXBfcmVhZFxuIgogICAgICAgICAgICAgICAgOiAiK20iKHNlbS0+Y291bnQp LCAiK2QiKHRtcCkKICAgICAgICAgICAgICAgIDogImEiKHNlbSkKICAgICAgICAgICAgICAgIDog Im1lbW9yeSIsICJjYyIpOwp9CgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgX191cF93cml0ZShzdHJ1 Y3Qgcndfc2VtYXBob3JlICpzZW0pCnsKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAg ICAgICAgICAgICAgICIjIGJlZ2lubmluZyBfX3VwX3dyaXRlXG5cdCIKICAgICAgICAgICAgICAg ICIgIG1vdmwgICAgICAlMiwlJWVkeFxuXHQiCiJsb2NrIDsgIiAiICB4YWRkbCAgICAgJSVlZHgs KCUlZWF4KVxuXHQiCiAgICAgICAgICAgICAgICAiICBqbnogICAgICAgMmZcblx0IgogICAgICAg ICAgICAgICAgIjE6XG5cdCIKICAgICAgICAgICAgICAgICIuc2VjdGlvbiAudGV4dC5sb2NrLFwi YXhcIlxuIgogICAgICAgICAgICAgICAgIjI6XG5cdCIKICAgICAgICAgICAgICAgICIgIGRlY3cg ICAgICAlJWR4XG5cdCIKICAgICAgICAgICAgICAgICIgIGpueiAgICAgICAxYlxuXHQiCiAgICAg ICAgICAgICAgICAiICBwdXNobCAgICAgJSVlY3hcblx0IgogICAgICAgICAgICAgICAgIiAgY2Fs bCAgICAgIHJ3c2VtX3dha2Vcblx0IgogICAgICAgICAgICAgICAgIiAgcG9wbCAgICAgICUlZWN4 XG5cdCIKICAgICAgICAgICAgICAgICIgIGptcCAgICAgICAxYlxuIgogICAgICAgICAgICAgICAg Ii5wcmV2aW91c1xuIgogICAgICAgICAgICAgICAgIiMgZW5kaW5nIF9fdXBfd3JpdGVcbiIKICAg ICAgICAgICAgICAgIDogIittIihzZW0tPmNvdW50KQogICAgICAgICAgICAgICAgOiAiYSIoc2Vt KSwgImkiKC0oKC0weDAwMDEwMDAwKSArIDB4MDAwMDAwMDEpKQogICAgICAgICAgICAgICAgOiAi bWVtb3J5IiwgImNjIiwgImVkeCIpOwp9CgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgcndzZW1fYXRv bWljX2FkZChpbnQgZGVsdGEsIHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKewogICAgICAgIF9f YXNtX18gX192b2xhdGlsZV9fKAoibG9jayA7ICIgImFkZGwgJTEsJTAiCiAgICAgICAgICAgICAg ICA6Ij1tIihzZW0tPmNvdW50KQogICAgICAgICAgICAgICAgOiJpciIoZGVsdGEpLCAibSIoc2Vt LT5jb3VudCkpOwp9CgoKCgpzdGF0aWMgaW5saW5lIGludCByd3NlbV9hdG9taWNfdXBkYXRlKGlu dCBkZWx0YSwgc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQp7CiAgICAgICAgaW50IHRtcCA9IGRl bHRhOwoKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygKImxvY2sgOyAiICJ4YWRkICUwLCgl MikiCiAgICAgICAgICAgICAgICA6ICIrciIodG1wKSwgIj1tIihzZW0tPmNvdW50KQogICAgICAg ICAgICAgICAgOiAiciIoc2VtKSwgIm0iKHNlbS0+Y291bnQpCiAgICAgICAgICAgICAgICA6ICJt ZW1vcnkiKTsKCiAgICAgICAgcmV0dXJuIHRtcCtkZWx0YTsKfQojIDI4ICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9yd3NlbS5oIiAyCiMgNDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3J3c2VtLmgiCnN0YXRpYyBpbmxpbmUgdm9p ZCBkb3duX3JlYWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQp7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgIF9fZG93bl9yZWFkKHNlbSk7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cn0KCgoKCnN0YXRpYyBp bmxpbmUgdm9pZCBkb3duX3dyaXRlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKewogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgX19kb3duX3dy aXRlKHNlbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwp9 CgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgdXBfcmVhZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0p CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgIF9f dXBfcmVhZChzZW0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK fQoKCgoKc3RhdGljIGlubGluZSB2b2lkIHVwX3dyaXRlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNl bSkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg IF9fdXBfd3JpdGUoc2VtKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwp9CiMgNDMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9zZW1h cGhvcmUuaCIgMgoKc3RydWN0IHNlbWFwaG9yZSB7CiAgICAgICAgYXRvbWljX3QgY291bnQ7CiAg ICAgICAgaW50IHNsZWVwZXJzOwogICAgICAgIHdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CgoKCn07 CiMgNzMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9zZW1hcGhvcmUu aCIKc3RhdGljIGlubGluZSB2b2lkIHNlbWFfaW5pdCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtLCBp bnQgdmFsKQp7CgoKCgoKCiAgICAgICAgKCgoJnNlbS0+Y291bnQpLT5jb3VudGVyKSA9ICh2YWwp KTsKICAgICAgICBzZW0tPnNsZWVwZXJzID0gMDsKICAgICAgICBpbml0X3dhaXRxdWV1ZV9oZWFk KCZzZW0tPndhaXQpOwoKCgp9CgpzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9NVVRFWCAoc3RydWN0 IHNlbWFwaG9yZSAqc2VtKQp7CiAgICAgICAgc2VtYV9pbml0KHNlbSwgMSk7Cn0KCnN0YXRpYyBp bmxpbmUgdm9pZCBpbml0X01VVEVYX0xPQ0tFRCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQp7CiAg ICAgICAgc2VtYV9pbml0KHNlbSwgMCk7Cn0KCiBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDApKSkg dm9pZCBfX2Rvd25fZmFpbGVkKHZvaWQgKTsKIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSBp bnQgX19kb3duX2ZhaWxlZF9pbnRlcnJ1cHRpYmxlKHZvaWQgKTsKIF9fYXR0cmlidXRlX18oKHJl Z3Bhcm0oMCkpKSBpbnQgX19kb3duX2ZhaWxlZF90cnlsb2NrKHZvaWQgKTsKIF9fYXR0cmlidXRl X18oKHJlZ3Bhcm0oMCkpKSB2b2lkIF9fdXBfd2FrZXVwKHZvaWQgKTsKCiBfX2F0dHJpYnV0ZV9f KChyZWdwYXJtKDApKSkgdm9pZCBfX2Rvd24oc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7CiBfX2F0 dHJpYnV0ZV9fKChyZWdwYXJtKDApKSkgaW50IF9fZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBz ZW1hcGhvcmUgKiBzZW0pOwogX19hdHRyaWJ1dGVfXygocmVncGFybSgwKSkpIGludCBfX2Rvd25f dHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0o MCkpKSB2b2lkIF9fdXAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7CgoKCgoKCnN0YXRpYyBpbmxp bmUgdm9pZCBkb3duKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCnsKCgoKCiAgICAgICAgX19hc21f XyBfX3ZvbGF0aWxlX18oCiAgICAgICAgICAgICAgICAiIyBhdG9taWMgZG93biBvcGVyYXRpb25c blx0IgogICAgICAgICAgICAgICAgImxvY2sgOyAiICJkZWNsICUwXG5cdCIKICAgICAgICAgICAg ICAgICJqcyAyZlxuIgogICAgICAgICAgICAgICAgIjE6XG4iCiAgICAgICAgICAgICAgICAiLnNl Y3Rpb24gLnRleHQubG9jayxcImF4XCJcbiIKICAgICAgICAgICAgICAgICIyOlx0Y2FsbCBfX2Rv d25fZmFpbGVkXG5cdCIKICAgICAgICAgICAgICAgICJqbXAgMWJcbiIKICAgICAgICAgICAgICAg ICIucHJldmlvdXMiCiAgICAgICAgICAgICAgICA6Ij1tIiAoc2VtLT5jb3VudCkKICAgICAgICAg ICAgICAgIDoiYyIgKHNlbSkKICAgICAgICAgICAgICAgIDoibWVtb3J5Iik7Cn0KCgoKCgpzdGF0 aWMgaW5saW5lIGludCBkb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkK ewogICAgICAgIGludCByZXN1bHQ7CgoKCgoKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygK ICAgICAgICAgICAgICAgICIjIGF0b21pYyBpbnRlcnJ1cHRpYmxlIGRvd24gb3BlcmF0aW9uXG5c dCIKICAgICAgICAgICAgICAgICJsb2NrIDsgIiAiZGVjbCAlMVxuXHQiCiAgICAgICAgICAgICAg ICAianMgMmZcblx0IgogICAgICAgICAgICAgICAgInhvcmwgJTAsJTBcbiIKICAgICAgICAgICAg ICAgICIxOlxuIgogICAgICAgICAgICAgICAgIi5zZWN0aW9uIC50ZXh0LmxvY2ssXCJheFwiXG4i CiAgICAgICAgICAgICAgICAiMjpcdGNhbGwgX19kb3duX2ZhaWxlZF9pbnRlcnJ1cHRpYmxlXG5c dCIKICAgICAgICAgICAgICAgICJqbXAgMWJcbiIKICAgICAgICAgICAgICAgICIucHJldmlvdXMi CiAgICAgICAgICAgICAgICA6Ij1hIiAocmVzdWx0KSwgIj1tIiAoc2VtLT5jb3VudCkKICAgICAg ICAgICAgICAgIDoiYyIgKHNlbSkKICAgICAgICAgICAgICAgIDoibWVtb3J5Iik7CiAgICAgICAg cmV0dXJuIHJlc3VsdDsKfQoKCgoKCnN0YXRpYyBpbmxpbmUgaW50IGRvd25fdHJ5bG9jayhzdHJ1 Y3Qgc2VtYXBob3JlICogc2VtKQp7CiAgICAgICAgaW50IHJlc3VsdDsKCgoKCgogICAgICAgIF9f YXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICAgICAgICAgIiMgYXRvbWljIGludGVycnVwdGli bGUgZG93biBvcGVyYXRpb25cblx0IgogICAgICAgICAgICAgICAgImxvY2sgOyAiICJkZWNsICUx XG5cdCIKICAgICAgICAgICAgICAgICJqcyAyZlxuXHQiCiAgICAgICAgICAgICAgICAieG9ybCAl MCwlMFxuIgogICAgICAgICAgICAgICAgIjE6XG4iCiAgICAgICAgICAgICAgICAiLnNlY3Rpb24g LnRleHQubG9jayxcImF4XCJcbiIKICAgICAgICAgICAgICAgICIyOlx0Y2FsbCBfX2Rvd25fZmFp bGVkX3RyeWxvY2tcblx0IgogICAgICAgICAgICAgICAgImptcCAxYlxuIgogICAgICAgICAgICAg ICAgIi5wcmV2aW91cyIKICAgICAgICAgICAgICAgIDoiPWEiIChyZXN1bHQpLCAiPW0iIChzZW0t PmNvdW50KQogICAgICAgICAgICAgICAgOiJjIiAoc2VtKQogICAgICAgICAgICAgICAgOiJtZW1v cnkiKTsKICAgICAgICByZXR1cm4gcmVzdWx0Owp9CgoKCgoKCgpzdGF0aWMgaW5saW5lIHZvaWQg dXAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKewoKCgogICAgICAgIF9fYXNtX18gX192b2xhdGls ZV9fKAogICAgICAgICAgICAgICAgIiMgYXRvbWljIHVwIG9wZXJhdGlvblxuXHQiCiAgICAgICAg ICAgICAgICAibG9jayA7ICIgImluY2wgJTBcblx0IgogICAgICAgICAgICAgICAgImpsZSAyZlxu IgogICAgICAgICAgICAgICAgIjE6XG4iCiAgICAgICAgICAgICAgICAiLnNlY3Rpb24gLnRleHQu bG9jayxcImF4XCJcbiIKICAgICAgICAgICAgICAgICIyOlx0Y2FsbCBfX3VwX3dha2V1cFxuXHQi CiAgICAgICAgICAgICAgICAiam1wIDFiXG4iCiAgICAgICAgICAgICAgICAiLnByZXZpb3VzIgog ICAgICAgICAgICAgICAgOiI9bSIgKHNlbS0+Y291bnQpCiAgICAgICAgICAgICAgICA6ImMiIChz ZW0pCiAgICAgICAgICAgICAgICA6Im1lbW9yeSIpOwp9CiMgMTk5ICIvdXNyL3NyYy9saW51eC0y LjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40 LjEzL2xpbnV4L2luY2x1ZGUvYXNtL2J5dGVvcmRlci5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3R5cGVzLmgiIDEKIyA1ICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vYnl0ZW9yZGVyLmgiIDIKCgoKCgojIDEgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2NvbmZpZy5oIiAxCiMgMTEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9ieXRlb3JkZXIuaCIgMgoKCnN0 YXRpYyBfX2lubGluZV9fIF9fY29uc3RfXyBfX3UzMiBfX19hcmNoX19zd2FiMzIoX191MzIgeCkK ewoKICAgICAgICBfX2FzbV9fKCJic3dhcCAlMCIgOiAiPXIiICh4KSA6ICIwIiAoeCkpOwoKCgoK CgoKICAgICAgICByZXR1cm4geDsKfQoKc3RhdGljIF9faW5saW5lX18gX19jb25zdF9fIF9fdTE2 IF9fX2FyY2hfX3N3YWIxNihfX3UxNiB4KQp7CiAgICAgICAgX19hc21fXygieGNoZ2IgJWIwLCVo MCIgOiAiPXEiICh4KSA6ICIwIiAoeCkpOyByZXR1cm4geDsKCgoKfQojIDQ1ICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vYnl0ZW9yZGVyLmgiCiMgMSAiL3Vzci9zcmMv bGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL2xpdHRsZV9lbmRpYW4u aCIgMQojIDExICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9ieXRl b3JkZXIvbGl0dGxlX2VuZGlhbi5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9p bmNsdWRlL2xpbnV4L2J5dGVvcmRlci9zd2FiLmgiIDEKIyAxMzEgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9zd2FiLmgiCnN0YXRpYyBfX2lubGlu ZV9fIF9fY29uc3RfXyBfX3UxNiBfX2Zzd2FiMTYoX191MTYgeCkKewogICAgICAgIHJldHVybiBf X19hcmNoX19zd2FiMTYoeCk7Cn0Kc3RhdGljIF9faW5saW5lX18gX191MTYgX19zd2FiMTZwKF9f dTE2ICp4KQp7CiAgICAgICAgcmV0dXJuIF9fX2FyY2hfX3N3YWIxNigqKHgpKTsKfQpzdGF0aWMg X19pbmxpbmVfXyB2b2lkIF9fc3dhYjE2cyhfX3UxNiAqYWRkcikKewogICAgICAgIGRvIHsgKihh ZGRyKSA9IF9fX2FyY2hfX3N3YWIxNigqKChhZGRyKSkpOyB9IHdoaWxlICgwKTsKfQoKc3RhdGlj IF9faW5saW5lX18gX19jb25zdF9fIF9fdTMyIF9fZnN3YWIzMihfX3UzMiB4KQp7CiAgICAgICAg cmV0dXJuIF9fX2FyY2hfX3N3YWIzMih4KTsKfQpzdGF0aWMgX19pbmxpbmVfXyBfX3UzMiBfX3N3 YWIzMnAoX191MzIgKngpCnsKICAgICAgICByZXR1cm4gX19fYXJjaF9fc3dhYjMyKCooeCkpOwp9 CnN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19zd2FiMzJzKF9fdTMyICphZGRyKQp7CiAgICAgICAg ZG8geyAqKGFkZHIpID0gX19fYXJjaF9fc3dhYjMyKCooKGFkZHIpKSk7IH0gd2hpbGUgKDApOwp9 CgoKc3RhdGljIF9faW5saW5lX18gX19jb25zdF9fIF9fdTY0IF9fZnN3YWI2NChfX3U2NCB4KQp7 CgogICAgICAgIF9fdTMyIGggPSB4ID4+IDMyOwogICAgICAgIF9fdTMyIGwgPSB4ICYgKCgxVUxM PDwzMiktMSk7CiAgICAgICAgcmV0dXJuICgoKF9fdTY0KShfX2J1aWx0aW5fY29uc3RhbnRfcCgo X191MzIpKGwpKSA/ICh7IF9fdTMyIF9feCA9ICgobCkpOyAoKF9fdTMyKSggKCgoX191MzIpKF9f eCkgJiAoX191MzIpMHgwMDAwMDBmZlVMKSA8PCAyNCkgfCAoKChfX3UzMikoX194KSAmIChfX3Uz MikweDAwMDBmZjAwVUwpIDw8IDgpIHwgKCgoX191MzIpKF9feCkgJiAoX191MzIpMHgwMGZmMDAw MFVMKSA+PiA4KSB8ICgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4ZmYwMDAwMDBVTCkgPj4gMjQp ICkpOyB9KSA6IF9fZnN3YWIzMigobCkpKSkgPDwgMzIpIHwgKChfX3U2NCkoKF9fYnVpbHRpbl9j b25zdGFudF9wKChfX3UzMikoaCkpID8gKHsgX191MzIgX194ID0gKChoKSk7ICgoX191MzIpKCAo KChfX3UzMikoX194KSAmIChfX3UzMikweDAwMDAwMGZmVUwpIDw8IDI0KSB8ICgoKF9fdTMyKShf X3gpICYgKF9fdTMyKTB4MDAwMGZmMDBVTCkgPDwgOCkgfCAoKChfX3UzMikoX194KSAmIChfX3Uz MikweDAwZmYwMDAwVUwpID4+IDgpIHwgKCgoX191MzIpKF9feCkgJiAoX191MzIpMHhmZjAwMDAw MFVMKSA+PiAyNCkgKSk7IH0pIDogX19mc3dhYjMyKChoKSkpKSk7CgoKCn0Kc3RhdGljIF9faW5s aW5lX18gX191NjQgX19zd2FiNjRwKF9fdTY0ICp4KQp7CiAgICAgICAgcmV0dXJuICh7IF9fdTY0 IF9fdG1wID0gKCooeCkpIDsgKHsgX191NjQgX194ID0gKF9fdG1wKTsgKChfX3U2NCkoIChfX3U2 NCkoKChfX3U2NCkoX194KSAmIChfX3U2NCkweDAwMDAwMDAwMDAwMDAwZmZVTEwpIDw8IDU2KSB8 IChfX3U2NCkoKChfX3U2NCkoX194KSAmIChfX3U2NCkweDAwMDAwMDAwMDAwMGZmMDBVTEwpIDw8 IDQwKSB8IChfX3U2NCkoKChfX3U2NCkoX194KSAmIChfX3U2NCkweDAwMDAwMDAwMDBmZjAwMDBV TEwpIDw8IDI0KSB8IChfX3U2NCkoKChfX3U2NCkoX194KSAmIChfX3U2NCkweDAwMDAwMDAwZmYw MDAwMDBVTEwpIDw8IDgpIHwgKF9fdTY0KSgoKF9fdTY0KShfX3gpICYgKF9fdTY0KTB4MDAwMDAw ZmYwMDAwMDAwMFVMTCkgPj4gOCkgfCAoX191NjQpKCgoX191NjQpKF9feCkgJiAoX191NjQpMHgw MDAwZmYwMDAwMDAwMDAwVUxMKSA+PiAyNCkgfCAoX191NjQpKCgoX191NjQpKF9feCkgJiAoX191 NjQpMHgwMGZmMDAwMDAwMDAwMDAwVUxMKSA+PiA0MCkgfCAoX191NjQpKCgoX191NjQpKF9feCkg JiAoX191NjQpMHhmZjAwMDAwMDAwMDAwMDAwVUxMKSA+PiA1NikgKSk7IH0pOyB9KTsKfQpzdGF0 aWMgX19pbmxpbmVfXyB2b2lkIF9fc3dhYjY0cyhfX3U2NCAqYWRkcikKewogICAgICAgIGRvIHsg KihhZGRyKSA9ICh7IF9fdTY0IF9fdG1wID0gKCooKGFkZHIpKSkgOyAoeyBfX3U2NCBfX3ggPSAo X190bXApOyAoKF9fdTY0KSggKF9fdTY0KSgoKF9fdTY0KShfX3gpICYgKF9fdTY0KTB4MDAwMDAw MDAwMDAwMDBmZlVMTCkgPDwgNTYpIHwgKF9fdTY0KSgoKF9fdTY0KShfX3gpICYgKF9fdTY0KTB4 MDAwMDAwMDAwMDAwZmYwMFVMTCkgPDwgNDApIHwgKF9fdTY0KSgoKF9fdTY0KShfX3gpICYgKF9f dTY0KTB4MDAwMDAwMDAwMGZmMDAwMFVMTCkgPDwgMjQpIHwgKF9fdTY0KSgoKF9fdTY0KShfX3gp ICYgKF9fdTY0KTB4MDAwMDAwMDBmZjAwMDAwMFVMTCkgPDwgOCkgfCAoX191NjQpKCgoX191NjQp KF9feCkgJiAoX191NjQpMHgwMDAwMDBmZjAwMDAwMDAwVUxMKSA+PiA4KSB8IChfX3U2NCkoKChf X3U2NCkoX194KSAmIChfX3U2NCkweDAwMDBmZjAwMDAwMDAwMDBVTEwpID4+IDI0KSB8IChfX3U2 NCkoKChfX3U2NCkoX194KSAmIChfX3U2NCkweDAwZmYwMDAwMDAwMDAwMDBVTEwpID4+IDQwKSB8 IChfX3U2NCkoKChfX3U2NCkoX194KSAmIChfX3U2NCkweGZmMDAwMDAwMDAwMDAwMDBVTEwpID4+ IDU2KSApKTsgfSk7IH0pOyB9IHdoaWxlICgwKTsKfQojIDEyICIvdXNyL3NyYy9saW51eC0yLjQu MTMvbGludXgvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvbGl0dGxlX2VuZGlhbi5oIiAyCiMgNjYg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9saXR0 bGVfZW5kaWFuLmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGlu dXgvYnl0ZW9yZGVyL2dlbmVyaWMuaCIgMQojIDE1MCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xp bnV4L2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL2dlbmVyaWMuaCIKZXh0ZXJuIF9fdTMyIG50b2hs KF9fdTMyKTsKZXh0ZXJuIF9fdTMyIGh0b25sKF9fdTMyKTsKCgoKCmV4dGVybiB1bnNpZ25lZCBz aG9ydCBpbnQgbnRvaHModW5zaWduZWQgc2hvcnQgaW50KTsKZXh0ZXJuIHVuc2lnbmVkIHNob3J0 IGludCBodG9ucyh1bnNpZ25lZCBzaG9ydCBpbnQpOwojIDY3ICIvdXNyL3NyYy9saW51eC0yLjQu MTMvbGludXgvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvbGl0dGxlX2VuZGlhbi5oIiAyCiMgNDYg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9ieXRlb3JkZXIuaCIgMgoj IDIwMCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgoK ZXh0ZXJuIHZvaWQgdXBkYXRlX2F0aW1lIChzdHJ1Y3QgaW5vZGUgKik7CgoKZXh0ZXJuIHZvaWQg YnVmZmVyX2luaXQodW5zaWduZWQgbG9uZyk7CmV4dGVybiB2b2lkIGlub2RlX2luaXQodW5zaWdu ZWQgbG9uZyk7CmV4dGVybiB2b2lkIG1udF9pbml0KHVuc2lnbmVkIGxvbmcpOwoKCmVudW0gYmhf c3RhdGVfYml0cyB7CiAgICAgICAgQkhfVXB0b2RhdGUsCiAgICAgICAgQkhfRGlydHksCiAgICAg ICAgQkhfTG9jaywKICAgICAgICBCSF9SZXEsCiAgICAgICAgQkhfTWFwcGVkLAogICAgICAgIEJI X05ldywKICAgICAgICBCSF9Bc3luYywKICAgICAgICBCSF9XYWl0X0lPLAogICAgICAgIEJIX2xh dW5kZXIsCgogICAgICAgIEJIX1ByaXZhdGVTdGFydCwKCgp9OwojIDIzNiAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIKc3RydWN0IGJ1ZmZlcl9oZWFkIHsK CiAgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiX25leHQ7CiAgICAgICAgdW5zaWduZWQgbG9u ZyBiX2Jsb2NrbnI7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgYl9zaXplOwogICAgICAgIHVuc2ln bmVkIHNob3J0IGJfbGlzdDsKICAgICAgICBrZGV2X3QgYl9kZXY7CgogICAgICAgIGF0b21pY190 IGJfY291bnQ7CiAgICAgICAga2Rldl90IGJfcmRldjsKICAgICAgICB1bnNpZ25lZCBsb25nIGJf c3RhdGU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBiX2ZsdXNodGltZTsKCiAgICAgICAgc3RydWN0 IGJ1ZmZlcl9oZWFkICpiX25leHRfZnJlZTsKICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJf cHJldl9mcmVlOwogICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYl90aGlzX3BhZ2U7CiAgICAg ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiX3JlcW5leHQ7CgogICAgICAgIHN0cnVjdCBidWZmZXJf aGVhZCAqKmJfcHByZXY7CiAgICAgICAgY2hhciAqIGJfZGF0YTsKICAgICAgICBzdHJ1Y3QgcGFn ZSAqYl9wYWdlOwogICAgICAgIHZvaWQgKCpiX2VuZF9pbykoc3RydWN0IGJ1ZmZlcl9oZWFkICpi aCwgaW50IHVwdG9kYXRlKTsKICAgICAgICB2b2lkICpiX3ByaXZhdGU7CgogICAgICAgIHVuc2ln bmVkIGxvbmcgYl9yc2VjdG9yOwogICAgICAgIHdhaXRfcXVldWVfaGVhZF90IGJfd2FpdDsKCiAg ICAgICAgc3RydWN0IGlub2RlICogYl9pbm9kZTsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGJf aW5vZGVfYnVmZmVyczsKfTsKCnR5cGVkZWYgdm9pZCAoYmhfZW5kX2lvX3QpKHN0cnVjdCBidWZm ZXJfaGVhZCAqYmgsIGludCB1cHRvZGF0ZSk7CnZvaWQgaW5pdF9idWZmZXIoc3RydWN0IGJ1ZmZl cl9oZWFkICosIGJoX2VuZF9pb190ICosIHZvaWQgKik7CiMgMjgyICIvdXNyL3NyYy9saW51eC0y LjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9mcy5oIgpleHRlcm4gdm9pZCBzZXRfYmhfcGFnZShz dHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBv ZmZzZXQpOwoKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51 eC9waXBlX2ZzX2kuaCIgMQoKCgoKc3RydWN0IHBpcGVfaW5vZGVfaW5mbyB7CiAgICAgICAgd2Fp dF9xdWV1ZV9oZWFkX3Qgd2FpdDsKICAgICAgICBjaGFyICpiYXNlOwogICAgICAgIHVuc2lnbmVk IGludCBsZW47CiAgICAgICAgdW5zaWduZWQgaW50IHN0YXJ0OwogICAgICAgIHVuc2lnbmVkIGlu dCByZWFkZXJzOwogICAgICAgIHVuc2lnbmVkIGludCB3cml0ZXJzOwogICAgICAgIHVuc2lnbmVk IGludCB3YWl0aW5nX3JlYWRlcnM7CiAgICAgICAgdW5zaWduZWQgaW50IHdhaXRpbmdfd3JpdGVy czsKICAgICAgICB1bnNpZ25lZCBpbnQgcl9jb3VudGVyOwogICAgICAgIHVuc2lnbmVkIGludCB3 X2NvdW50ZXI7Cn07CiMgNDIgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xp bnV4L3BpcGVfZnNfaS5oIgp2b2lkIHBpcGVfd2FpdChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSk7Cgpz dHJ1Y3QgaW5vZGUqIHBpcGVfbmV3KHN0cnVjdCBpbm9kZSogaW5vZGUpOwojIDI4OCAiL3Vzci9z cmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L21pbml4X2ZzX2kuaCIgMQoKCgoKCgpz dHJ1Y3QgbWluaXhfaW5vZGVfaW5mbyB7CiAgICAgICAgdW5pb24gewogICAgICAgICAgICAgICAg X191MTYgaTFfZGF0YVsxNl07CiAgICAgICAgICAgICAgICBfX3UzMiBpMl9kYXRhWzE2XTsKICAg ICAgICB9IHU7Cn07CiMgMjg5ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9s aW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGlu dXgvZXh0Ml9mc19pLmgiIDEKIyAyMiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1 ZGUvbGludXgvZXh0Ml9mc19pLmgiCnN0cnVjdCBleHQyX2lub2RlX2luZm8gewogICAgICAgIF9f dTMyIGlfZGF0YVsxNV07CiAgICAgICAgX191MzIgaV9mbGFnczsKICAgICAgICBfX3UzMiBpX2Zh ZGRyOwogICAgICAgIF9fdTggaV9mcmFnX25vOwogICAgICAgIF9fdTggaV9mcmFnX3NpemU7CiAg ICAgICAgX191MTYgaV9vc3luYzsKICAgICAgICBfX3UzMiBpX2ZpbGVfYWNsOwogICAgICAgIF9f dTMyIGlfZGlyX2FjbDsKICAgICAgICBfX3UzMiBpX2R0aW1lOwogICAgICAgIF9fdTMyIGlfYmxv Y2tfZ3JvdXA7CiAgICAgICAgX191MzIgaV9uZXh0X2FsbG9jX2Jsb2NrOwogICAgICAgIF9fdTMy IGlfbmV4dF9hbGxvY19nb2FsOwogICAgICAgIF9fdTMyIGlfcHJlYWxsb2NfYmxvY2s7CiAgICAg ICAgX191MzIgaV9wcmVhbGxvY19jb3VudDsKICAgICAgICBfX3UzMiBpX2Rpcl9zdGFydF9sb29r dXA7CiAgICAgICAgaW50IGlfbmV3X2lub2RlOjE7Cn07CiMgMjkwICIvdXNyL3NyYy9saW51eC0y LjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40 LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvaHBmc19mc19pLmgiIDEKCgoKc3RydWN0IGhwZnNfaW5v ZGVfaW5mbyB7CiAgICAgICAgdW5zaWduZWQgbG9uZyBtbXVfcHJpdmF0ZTsKICAgICAgICBpbm9f dCBpX3BhcmVudF9kaXI7CiAgICAgICAgdW5zaWduZWQgaV9kbm87CiAgICAgICAgdW5zaWduZWQg aV9kcG9zOwogICAgICAgIHVuc2lnbmVkIGlfZHN1YmRubzsKICAgICAgICB1bnNpZ25lZCBpX2Zp bGVfc2VjOwogICAgICAgIHVuc2lnbmVkIGlfZGlza19zZWM7CiAgICAgICAgdW5zaWduZWQgaV9u X3NlY3M7CiAgICAgICAgdW5zaWduZWQgaV9lYV9zaXplOwogICAgICAgIHVuc2lnbmVkIGlfY29u diA6IDI7CiAgICAgICAgdW5zaWduZWQgaV9lYV9tb2RlIDogMTsKICAgICAgICB1bnNpZ25lZCBp X2VhX3VpZCA6IDE7CiAgICAgICAgdW5zaWduZWQgaV9lYV9naWQgOiAxOwogICAgICAgIHVuc2ln bmVkIGlfZGlydHkgOiAxOwogICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgaV9zZW07CiAgICAgICAg bG9mZl90ICoqaV9yZGRpcl9vZmY7Cn07CiMgMjkxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGlu dXgvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4 L2luY2x1ZGUvbGludXgvbnRmc19mc19pLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQu MTMvbGludXgvaW5jbHVkZS9saW51eC90eXBlcy5oIiAxCiMgNSAiL3Vzci9zcmMvbGludXgtMi40 LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvbnRmc19mc19pLmgiIDIKCgpzdHJ1Y3QgbnRmc19hdHRy aWJ1dGU7CnN0cnVjdCBudGZzX3NiX2luZm87CgoKCgp0eXBlZGVmIHU4IG50ZnNfdTg7CnR5cGVk ZWYgdTE2IG50ZnNfdTE2Owp0eXBlZGVmIHUzMiBudGZzX3UzMjsKdHlwZWRlZiB1NjQgbnRmc191 NjQ7CnR5cGVkZWYgczggbnRmc19zODsKdHlwZWRlZiBzMTYgbnRmc19zMTY7CnR5cGVkZWYgczMy IG50ZnNfczMyOwp0eXBlZGVmIHM2NCBudGZzX3M2NDsKCgoKCnR5cGVkZWYgX19rZXJuZWxfbW9k ZV90IG50bW9kZV90OwoKCgp0eXBlZGVmIHVpZF90IG50ZnNfdWlkX3Q7CgoKCnR5cGVkZWYgZ2lk X3QgbnRmc19naWRfdDsKCgoKdHlwZWRlZiBfX2tlcm5lbF9zaXplX3QgbnRmc19zaXplX3Q7CgoK CnR5cGVkZWYgX19rZXJuZWxfdGltZV90IG50ZnNfdGltZV90OwoKCgoKCnR5cGVkZWYgdTE2IG50 ZnNfd2NoYXJfdDsKCgoKCnR5cGVkZWYgczY0IG50ZnNfb2Zmc2V0X3Q7CgoKCgp0eXBlZGVmIHU2 NCBudGZzX3RpbWU2NF90OwojIDY5ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVk ZS9saW51eC9udGZzX2ZzX2kuaCIKdHlwZWRlZiBzMzIgbnRmc19jbHVzdGVyX3Q7CgoKCnN0cnVj dCBudGZzX2lub2RlX2luZm8gewogICAgICAgIHN0cnVjdCBudGZzX3NiX2luZm8gKnZvbDsKICAg ICAgICB1bnNpZ25lZCBsb25nIGlfbnVtYmVyOwogICAgICAgIF9fdTE2IHNlcXVlbmNlX251bWJl cjsKICAgICAgICB1bnNpZ25lZCBjaGFyICphdHRyOwogICAgICAgIGludCBhdHRyX2NvdW50Owog ICAgICAgIHN0cnVjdCBudGZzX2F0dHJpYnV0ZSAqYXR0cnM7CiAgICAgICAgaW50IHJlY29yZF9j b3VudDsKICAgICAgICBpbnQgKnJlY29yZHM7CgogICAgICAgIHVuaW9uIHsKICAgICAgICAgICAg ICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgICAgIGludCByZWNvcmRzaXplOwogICAg ICAgICAgICAgICAgICAgICAgICBpbnQgY2x1c3RlcnNfcGVyX3JlY29yZDsKICAgICAgICAgICAg ICAgIH0gaW5kZXg7CiAgICAgICAgfSB1Owp9OwojIDI5MiAiL3Vzci9zcmMvbGludXgtMi40LjEz L2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9s aW51eC9pbmNsdWRlL2xpbnV4L21zZG9zX2ZzX2kuaCIgMQoKCgoKCgoKc3RydWN0IG1zZG9zX2lu b2RlX2luZm8gewogICAgICAgIHVuc2lnbmVkIGxvbmcgbW11X3ByaXZhdGU7CiAgICAgICAgaW50 IGlfc3RhcnQ7CiAgICAgICAgaW50IGlfbG9nc3RhcnQ7CiAgICAgICAgaW50IGlfYXR0cnM7CiAg ICAgICAgaW50IGlfY3RpbWVfbXM7CiAgICAgICAgaW50IGlfbG9jYXRpb247CiAgICAgICAgc3Ry dWN0IGlub2RlICppX2ZhdF9pbm9kZTsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGlfZmF0X2hh c2g7Cn07CiMgMjkzICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9m cy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvdW1z ZG9zX2ZzX2kuaCIgMQoKCgoKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5j bHVkZS9saW51eC9tc2Rvc19mc19pLmgiIDEKIyA5ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGlu dXgvaW5jbHVkZS9saW51eC91bXNkb3NfZnNfaS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40 LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvcGlwZV9mc19pLmgiIDEKIyAxMCAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvdW1zZG9zX2ZzX2kuaCIgMgojIDM5ICIvdXNy L3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC91bXNkb3NfZnNfaS5oIgpzdHJ1 Y3QgZGlyX2xvY2tpbmdfaW5mbyB7CiAgICAgICAgd2FpdF9xdWV1ZV9oZWFkX3QgcDsKICAgICAg ICBzaG9ydCBpbnQgbG9va2luZzsKICAgICAgICBzaG9ydCBpbnQgY3JlYXRpbmc7CgoKCiAgICAg ICAgbG9uZyBwaWQ7Cgp9OwoKc3RydWN0IHVtc2Rvc19pbm9kZV9pbmZvIHsKICAgICAgICBzdHJ1 Y3QgbXNkb3NfaW5vZGVfaW5mbyBtc2Rvc19pbmZvOwogICAgICAgIHN0cnVjdCBkaXJfbG9ja2lu Z19pbmZvIGRpcl9pbmZvOwogICAgICAgIGludCBpX3BhdGNoZWQ7CiAgICAgICAgaW50IGlfaXNf aGxpbms7CiAgICAgICAgb2ZmX3QgcG9zOwp9OwojIDI5NCAiL3Vzci9zcmMvbGludXgtMi40LjEz L2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9s aW51eC9pbmNsdWRlL2xpbnV4L2lzb19mc19pLmgiIDEKCgoKCgoKc3RydWN0IGlzb19pbm9kZV9p bmZvIHsKICAgICAgICB1bnNpZ25lZCBpbnQgaV9maXJzdF9leHRlbnQ7CiAgICAgICAgdW5zaWdu ZWQgY2hhciBpX2ZpbGVfZm9ybWF0OwogICAgICAgIHVuc2lnbmVkIGxvbmcgaV9uZXh0X3NlY3Rp b25faW5vOwogICAgICAgIG9mZl90IGlfc2VjdGlvbl9zaXplOwp9OwojIDI5NSAiL3Vzci9zcmMv bGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L25mc19mc19pLmgiIDEKCgoKIyAxICIvdXNy L3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vdHlwZXMuaCIgMQojIDUgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L25mc19mc19pLmgiIDIKIyAxICIv dXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9saXN0LmgiIDEKIyA2ICIv dXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9uZnNfZnNfaS5oIiAyCiMg MSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvbmZzLmgiIDEKIyAx MCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvbmZzLmgiCiMgMSAi L3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc3VucnBjL21zZ19wcm90 LmgiIDEKIyAxNCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc3Vu cnBjL21zZ19wcm90LmgiCmVudW0gcnBjX2F1dGhfZmxhdm9yIHsKICAgICAgICBSUENfQVVUSF9O VUxMID0gMCwKICAgICAgICBSUENfQVVUSF9VTklYID0gMSwKICAgICAgICBSUENfQVVUSF9TSE9S VCA9IDIsCiAgICAgICAgUlBDX0FVVEhfREVTID0gMywKICAgICAgICBSUENfQVVUSF9LUkIgPSA0 LAp9OwoKZW51bSBycGNfbXNnX3R5cGUgewogICAgICAgIFJQQ19DQUxMID0gMCwKICAgICAgICBS UENfUkVQTFkgPSAxCn07CgplbnVtIHJwY19yZXBseV9zdGF0IHsKICAgICAgICBSUENfTVNHX0FD Q0VQVEVEID0gMCwKICAgICAgICBSUENfTVNHX0RFTklFRCA9IDEKfTsKCmVudW0gcnBjX2FjY2Vw dF9zdGF0IHsKICAgICAgICBSUENfU1VDQ0VTUyA9IDAsCiAgICAgICAgUlBDX1BST0dfVU5BVkFJ TCA9IDEsCiAgICAgICAgUlBDX1BST0dfTUlTTUFUQ0ggPSAyLAogICAgICAgIFJQQ19QUk9DX1VO QVZBSUwgPSAzLAogICAgICAgIFJQQ19HQVJCQUdFX0FSR1MgPSA0LAogICAgICAgIFJQQ19TWVNU RU1fRVJSID0gNQp9OwoKZW51bSBycGNfcmVqZWN0X3N0YXQgewogICAgICAgIFJQQ19NSVNNQVRD SCA9IDAsCiAgICAgICAgUlBDX0FVVEhfRVJST1IgPSAxCn07CgplbnVtIHJwY19hdXRoX3N0YXQg ewogICAgICAgIFJQQ19BVVRIX09LID0gMCwKICAgICAgICBSUENfQVVUSF9CQURDUkVEID0gMSwK ICAgICAgICBSUENfQVVUSF9SRUpFQ1RFRENSRUQgPSAyLAogICAgICAgIFJQQ19BVVRIX0JBRFZF UkYgPSAzLAogICAgICAgIFJQQ19BVVRIX1JFSkVDVEVEVkVSRiA9IDQsCiAgICAgICAgUlBDX0FV VEhfVE9PV0VBSyA9IDUKfTsKIyAxMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1 ZGUvbGludXgvbmZzLmgiIDIKIyA0MSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1 ZGUvbGludXgvbmZzLmgiCiBlbnVtIG5mc19zdGF0IHsKICAgICAgICBORlNfT0sgPSAwLAogICAg ICAgIE5GU0VSUl9QRVJNID0gMSwKICAgICAgICBORlNFUlJfTk9FTlQgPSAyLAogICAgICAgIE5G U0VSUl9JTyA9IDUsCiAgICAgICAgTkZTRVJSX05YSU8gPSA2LAogICAgICAgIE5GU0VSUl9FQUdB SU4gPSAxMSwKICAgICAgICBORlNFUlJfQUNDRVMgPSAxMywKICAgICAgICBORlNFUlJfRVhJU1Qg PSAxNywKICAgICAgICBORlNFUlJfWERFViA9IDE4LAogICAgICAgIE5GU0VSUl9OT0RFViA9IDE5 LAogICAgICAgIE5GU0VSUl9OT1RESVIgPSAyMCwKICAgICAgICBORlNFUlJfSVNESVIgPSAyMSwK ICAgICAgICBORlNFUlJfSU5WQUwgPSAyMiwKICAgICAgICBORlNFUlJfRkJJRyA9IDI3LAogICAg ICAgIE5GU0VSUl9OT1NQQyA9IDI4LAogICAgICAgIE5GU0VSUl9ST0ZTID0gMzAsCiAgICAgICAg TkZTRVJSX01MSU5LID0gMzEsCiAgICAgICAgTkZTRVJSX09QTk9UU1VQUCA9IDQ1LAogICAgICAg IE5GU0VSUl9OQU1FVE9PTE9ORyA9IDYzLAogICAgICAgIE5GU0VSUl9OT1RFTVBUWSA9IDY2LAog ICAgICAgIE5GU0VSUl9EUVVPVCA9IDY5LAogICAgICAgIE5GU0VSUl9TVEFMRSA9IDcwLAogICAg ICAgIE5GU0VSUl9SRU1PVEUgPSA3MSwKICAgICAgICBORlNFUlJfV0ZMVVNIID0gOTksCiAgICAg ICAgTkZTRVJSX0JBREhBTkRMRSA9IDEwMDAxLAogICAgICAgIE5GU0VSUl9OT1RfU1lOQyA9IDEw MDAyLAogICAgICAgIE5GU0VSUl9CQURfQ09PS0lFID0gMTAwMDMsCiAgICAgICAgTkZTRVJSX05P VFNVUFAgPSAxMDAwNCwKICAgICAgICBORlNFUlJfVE9PU01BTEwgPSAxMDAwNSwKICAgICAgICBO RlNFUlJfU0VSVkVSRkFVTFQgPSAxMDAwNiwKICAgICAgICBORlNFUlJfQkFEVFlQRSA9IDEwMDA3 LAogICAgICAgIE5GU0VSUl9KVUtFQk9YID0gMTAwMDgKIH07CgoKCmVudW0gbmZzX2Z0eXBlIHsK ICAgICAgICBORk5PTiA9IDAsCiAgICAgICAgTkZSRUcgPSAxLAogICAgICAgIE5GRElSID0gMiwK ICAgICAgICBORkJMSyA9IDMsCiAgICAgICAgTkZDSFIgPSA0LAogICAgICAgIE5GTE5LID0gNSwK ICAgICAgICBORlNPQ0sgPSA2LAogICAgICAgIE5GQkFEID0gNywKICAgICAgICBORkZJRk8gPSA4 Cn07CgoKCgoKCnN0cnVjdCBuZnNfZmggewogICAgICAgIHVuc2lnbmVkIHNob3J0IHNpemU7CiAg ICAgICAgdW5zaWduZWQgY2hhciBkYXRhWzY0XTsKfTsKIyAxMDcgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L25mcy5oIgplbnVtIG5mczNfc3RhYmxlX2hvdyB7CiAg ICAgICAgTkZTX1VOU1RBQkxFID0gMCwKICAgICAgICBORlNfREFUQV9TWU5DID0gMSwKICAgICAg ICBORlNfRklMRV9TWU5DID0gMgp9OwojIDcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9p bmNsdWRlL2xpbnV4L25mc19mc19pLmgiIDIKCgoKCnN0cnVjdCBuZnNfaW5vZGVfaW5mbyB7CgoK CiAgICAgICAgX191NjQgZnNpZDsKICAgICAgICBfX3U2NCBmaWxlaWQ7CgoKCgogICAgICAgIHN0 cnVjdCBuZnNfZmggZmg7CgoKCgogICAgICAgIHVuc2lnbmVkIHNob3J0IGZsYWdzOwojIDQ1ICIv dXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9uZnNfZnNfaS5oIgogICAg ICAgIHVuc2lnbmVkIGxvbmcgcmVhZF9jYWNoZV9qaWZmaWVzOwogICAgICAgIF9fdTY0IHJlYWRf Y2FjaGVfY3RpbWU7CiAgICAgICAgX191NjQgcmVhZF9jYWNoZV9tdGltZTsKICAgICAgICBfX3U2 NCByZWFkX2NhY2hlX2lzaXplOwogICAgICAgIHVuc2lnbmVkIGxvbmcgYXR0cnRpbWVvOwogICAg ICAgIHVuc2lnbmVkIGxvbmcgYXR0cnRpbWVvX3RpbWVzdGFtcDsKCgoKCgogICAgICAgIF9fdTMy IGNvb2tpZXZlcmZbMl07CgoKCgogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgcmVhZDsKICAgICAg ICBzdHJ1Y3QgbGlzdF9oZWFkIGRpcnR5OwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgY29tbWl0 OwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgd3JpdGViYWNrOwoKICAgICAgICB1bnNpZ25lZCBp bnQgbnJlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmRpcnR5LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG5jb21taXQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbnBhZ2VzOwoKCiAgICAgICAgc3RydWN0IGlub2RlICpoYXNoX25leHQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKmhhc2hfcHJldjsKICAgICAgICB1bnNpZ25lZCBs b25nIG5leHRzY2FuOwoKCiAgICAgICAgc3RydWN0IHJwY19jcmVkICptbV9jcmVkOwp9OwojIDky ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9uZnNfZnNfaS5oIgpz dHJ1Y3QgbmZzX2xvY2tfaW5mbyB7CiAgICAgICAgdTMyIHN0YXRlOwogICAgICAgIHUzMiBmbGFn czsKICAgICAgICBzdHJ1Y3QgbmxtX2hvc3QgKmhvc3Q7Cn07CiMgMjk2ICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc3lzdl9mc19pLmgiIDEKCgoKCgoKc3RydWN0IHN5 c3ZfaW5vZGVfaW5mbyB7CiAgICAgICAgdTMyIGlfZGF0YVsxMCsxKzErMV07CgoKCgp9OwojIDI5 NyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2FmZnNfZnNfaS5oIiAx CgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvYS5vdXQu aCIgMQoKCgoKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20v YS5vdXQuaCIgMQoKCgpzdHJ1Y3QgZXhlYwp7CiAgdW5zaWduZWQgbG9uZyBhX2luZm87CiAgdW5z aWduZWQgYV90ZXh0OwogIHVuc2lnbmVkIGFfZGF0YTsKICB1bnNpZ25lZCBhX2JzczsKICB1bnNp Z25lZCBhX3N5bXM7CiAgdW5zaWduZWQgYV9lbnRyeTsKICB1bnNpZ25lZCBhX3Ryc2l6ZTsKICB1 bnNpZ25lZCBhX2Ryc2l6ZTsKfTsKIyA5ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5j bHVkZS9saW51eC9hLm91dC5oIiAyCgoKCgplbnVtIG1hY2hpbmVfdHlwZSB7CgoKCiAgTV9PTERT VU4yID0gMCwKCgoKCiAgTV82ODAxMCA9IDEsCgoKCgogIE1fNjgwMjAgPSAyLAoKCgoKICBNX1NQ QVJDID0gMywKCgogIE1fMzg2ID0gMTAwLAogIE1fTUlQUzEgPSAxNTEsCiAgTV9NSVBTMiA9IDE1 Mgp9OwojIDEzMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvYS5v dXQuaCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vcGFnZS5o IiAxCiMgMTMyICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9hLm91 dC5oIiAyCiMgMTU3ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9h Lm91dC5oIgpzdHJ1Y3Qgbmxpc3QgewogIHVuaW9uIHsKICAgIGNoYXIgKm5fbmFtZTsKICAgIHN0 cnVjdCBubGlzdCAqbl9uZXh0OwogICAgbG9uZyBuX3N0cng7CiAgfSBuX3VuOwogIHVuc2lnbmVk IGNoYXIgbl90eXBlOwogIGNoYXIgbl9vdGhlcjsKICBzaG9ydCBuX2Rlc2M7CiAgdW5zaWduZWQg bG9uZyBuX3ZhbHVlOwp9OwojIDIzNSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1 ZGUvbGludXgvYS5vdXQuaCIKc3RydWN0IHJlbG9jYXRpb25faW5mbwp7CgogIGludCByX2FkZHJl c3M7CgogIHVuc2lnbmVkIGludCByX3N5bWJvbG51bToyNDsKCgoKICB1bnNpZ25lZCBpbnQgcl9w Y3JlbDoxOwoKCiAgdW5zaWduZWQgaW50IHJfbGVuZ3RoOjI7CgoKCgoKCiAgdW5zaWduZWQgaW50 IHJfZXh0ZXJuOjE7CgoKCgoKCgogIHVuc2lnbmVkIGludCByX3BhZDo0OwoKfTsKIyA1ICIvdXNy L3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9hZmZzX2ZzX2kuaCIgMgoKCiMg MSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvdGltZS5oIiAxCgoK CiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3BhcmFtLmgiIDEK IyA1ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC90aW1lLmgiIDIK IyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC90eXBlcy5oIiAx CiMgNiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvdGltZS5oIiAy CgoKCnN0cnVjdCB0aW1lc3BlYyB7CiAgICAgICAgdGltZV90IHR2X3NlYzsKICAgICAgICBsb25n IHR2X25zZWM7Cn07CiMgMzEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xp bnV4L3RpbWUuaCIKc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZwp0aW1lc3BlY190b19q aWZmaWVzKHN0cnVjdCB0aW1lc3BlYyAqdmFsdWUpCnsKICAgICAgICB1bnNpZ25lZCBsb25nIHNl YyA9IHZhbHVlLT50dl9zZWM7CiAgICAgICAgbG9uZyBuc2VjID0gdmFsdWUtPnR2X25zZWM7Cgog ICAgICAgIGlmIChzZWMgPj0gKCgofjBVTCA+PiAxKS0xKSAvIDEwMCkpCiAgICAgICAgICAgICAg ICByZXR1cm4gKCh+MFVMID4+IDEpLTEpOwogICAgICAgIG5zZWMgKz0gMTAwMDAwMDAwMEwgLyAx MDAgLSAxOwogICAgICAgIG5zZWMgLz0gMTAwMDAwMDAwMEwgLyAxMDA7CiAgICAgICAgcmV0dXJu IDEwMCAqIHNlYyArIG5zZWM7Cn0KCnN0YXRpYyBfX2lubGluZV9fIHZvaWQKamlmZmllc190b190 aW1lc3BlYyh1bnNpZ25lZCBsb25nIGppZmZpZXMsIHN0cnVjdCB0aW1lc3BlYyAqdmFsdWUpCnsK ICAgICAgICB2YWx1ZS0+dHZfbnNlYyA9IChqaWZmaWVzICUgMTAwKSAqICgxMDAwMDAwMDAwTCAv IDEwMCk7CiAgICAgICAgdmFsdWUtPnR2X3NlYyA9IGppZmZpZXMgLyAxMDA7Cn0KIyA2NyAiL3Vz ci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvdGltZS5oIgpzdGF0aWMgaW5s aW5lIHVuc2lnbmVkIGxvbmcKbWt0aW1lICh1bnNpZ25lZCBpbnQgeWVhciwgdW5zaWduZWQgaW50 IG1vbiwKICAgICAgICB1bnNpZ25lZCBpbnQgZGF5LCB1bnNpZ25lZCBpbnQgaG91ciwKICAgICAg ICB1bnNpZ25lZCBpbnQgbWluLCB1bnNpZ25lZCBpbnQgc2VjKQp7CiAgICAgICAgaWYgKDAgPj0g KGludCkgKG1vbiAtPSAyKSkgewogICAgICAgICAgICAgICAgbW9uICs9IDEyOwogICAgICAgICAg ICAgICAgeWVhciAtPSAxOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICgoKAogICAgICAgICAg ICAgICAgKHVuc2lnbmVkIGxvbmcpICh5ZWFyLzQgLSB5ZWFyLzEwMCArIHllYXIvNDAwICsgMzY3 Km1vbi8xMiArIGRheSkgKwogICAgICAgICAgICAgICAgICAgICAgICB5ZWFyKjM2NSAtIDcxOTQ5 OQogICAgICAgICAgICApKjI0ICsgaG91cgogICAgICAgICAgKSo2MCArIG1pbgogICAgICAgICkq NjAgKyBzZWM7Cn0KCgoKCnN0cnVjdCB0aW1ldmFsIHsKICAgICAgICB0aW1lX3QgdHZfc2VjOwog ICAgICAgIHN1c2Vjb25kc190IHR2X3VzZWM7Cn07CgpzdHJ1Y3QgdGltZXpvbmUgewogICAgICAg IGludCB0el9taW51dGVzd2VzdDsKICAgICAgICBpbnQgdHpfZHN0dGltZTsKfTsKCgoKCmV4dGVy biB2b2lkIGRvX2dldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYpOwpleHRlcm4gdm9pZCBk b19zZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKnR2KTsKZXh0ZXJuIHZvaWQgZ2V0X2Zhc3Rf dGltZShzdHJ1Y3QgdGltZXZhbCAqdHYpOwpleHRlcm4gdm9pZCAoKmRvX2dldF9mYXN0X3RpbWUp KHN0cnVjdCB0aW1ldmFsICopOwojIDEyMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2lu Y2x1ZGUvbGludXgvdGltZS5oIgpzdHJ1Y3QgaXRpbWVyc3BlYyB7CiAgICAgICAgc3RydWN0IHRp bWVzcGVjIGl0X2ludGVydmFsOwogICAgICAgIHN0cnVjdCB0aW1lc3BlYyBpdF92YWx1ZTsKfTsK CnN0cnVjdCBpdGltZXJ2YWwgewogICAgICAgIHN0cnVjdCB0aW1ldmFsIGl0X2ludGVydmFsOwog ICAgICAgIHN0cnVjdCB0aW1ldmFsIGl0X3ZhbHVlOwp9OwojIDggIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2FmZnNfZnNfaS5oIiAyCiMgMTcgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2FmZnNfZnNfaS5oIgpzdHJ1Y3QgYWZmc19l eHRfa2V5IHsKICAgICAgICB1MzIgZXh0OwogICAgICAgIHUzMiBrZXk7Cn07CgoKCgpzdHJ1Y3Qg YWZmc19pbm9kZV9pbmZvIHsKICAgICAgICB1MzIgaV9vcGVuY250OwogICAgICAgIHN0cnVjdCBz ZW1hcGhvcmUgaV9saW5rX2xvY2s7CiAgICAgICAgc3RydWN0IHNlbWFwaG9yZSBpX2V4dF9sb2Nr OwoKICAgICAgICB1MzIgaV9ibGtjbnQ7CiAgICAgICAgdTMyIGlfZXh0Y250OwogICAgICAgIHUz MiAqaV9sYzsKICAgICAgICB1MzIgaV9sY19zaXplOwogICAgICAgIHUzMiBpX2xjX3NoaWZ0Owog ICAgICAgIHUzMiBpX2xjX21hc2s7CiAgICAgICAgc3RydWN0IGFmZnNfZXh0X2tleSAqaV9hYzsK ICAgICAgICB1MzIgaV9leHRfbGFzdDsKICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmlfZXh0 X2JoOwogICAgICAgIHVuc2lnbmVkIGxvbmcgbW11X3ByaXZhdGU7CiAgICAgICAgdTMyIGlfcHJv dGVjdDsKICAgICAgICB1MzIgaV9sYXN0YWxsb2M7CiAgICAgICAgaW50IGlfcGFfY250OwojIDUx ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9hZmZzX2ZzX2kuaCIK fTsKIyAyOTggIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgi IDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC91ZnNfZnNf aS5oIiAxCiMgMTYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3Vm c19mc19pLmgiCnN0cnVjdCB1ZnNfaW5vZGVfaW5mbyB7CiAgICAgICAgdW5pb24gewogICAgICAg ICAgICAgICAgX191MzIgaV9kYXRhWzE1XTsKICAgICAgICAgICAgICAgIF9fdTggaV9zeW1saW5r WzQqMTVdOwogICAgICAgIH0gaV91MTsKICAgICAgICBfX3U2NCBpX3NpemU7CiAgICAgICAgX191 MzIgaV9mbGFnczsKICAgICAgICBfX3UzMiBpX2dlbjsKICAgICAgICBfX3UzMiBpX3NoYWRvdzsK ICAgICAgICBfX3UzMiBpX3VudXNlZDE7CiAgICAgICAgX191MzIgaV91bnVzZWQyOwogICAgICAg IF9fdTMyIGlfb2VmdGZsYWc7CiAgICAgICAgX191MTYgaV9vc3luYzsKICAgICAgICBfX3UzMiBp X2xhc3RmcmFnOwp9OwojIDI5OSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUv bGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xp bnV4L2Vmc19mc19pLmgiIDEKIyAxMiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1 ZGUvbGludXgvZWZzX2ZzX2kuaCIKdHlwZWRlZiBpbnQzMl90IGVmc19ibG9ja190Owp0eXBlZGVm IHVpbnQzMl90IGVmc19pbm9fdDsKCgoKCgoKdHlwZWRlZiB1bmlvbiBleHRlbnRfdSB7CiAgICAg ICAgdW5zaWduZWQgY2hhciByYXdbOF07CiAgICAgICAgc3RydWN0IGV4dGVudF9zIHsKICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGludCBleF9tYWdpYzo4OwogICAgICAgICAgICAgICAgdW5zaWdu ZWQgaW50IGV4X2JuOjI0OwogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGV4X2xlbmd0aDo4 OwogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGV4X29mZnNldDoyNDsKICAgICAgICB9IGNv b2tlZDsKfSBlZnNfZXh0ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgZWRldnMgewogICAgICAgIHNob3J0 IG9kZXY7CiAgICAgICAgdW5zaWduZWQgaW50IG5kZXY7Cn0gZWZzX2RldnM7CgoKCgoKc3RydWN0 IGVmc19kaW5vZGUgewogICAgICAgIHVfc2hvcnQgZGlfbW9kZTsKICAgICAgICBzaG9ydCBkaV9u bGluazsKICAgICAgICB1X3Nob3J0IGRpX3VpZDsKICAgICAgICB1X3Nob3J0IGRpX2dpZDsKICAg ICAgICBpbnQzMl90IGRpX3NpemU7CiAgICAgICAgaW50MzJfdCBkaV9hdGltZTsKICAgICAgICBp bnQzMl90IGRpX210aW1lOwogICAgICAgIGludDMyX3QgZGlfY3RpbWU7CiAgICAgICAgdWludDMy X3QgZGlfZ2VuOwogICAgICAgIHNob3J0IGRpX251bWV4dGVudHM7CiAgICAgICAgdV9jaGFyIGRp X3ZlcnNpb247CiAgICAgICAgdV9jaGFyIGRpX3NwYXJlOwogICAgICAgIHVuaW9uIGRpX2FkZHIg ewogICAgICAgICAgICAgICAgZWZzX2V4dGVudCBkaV9leHRlbnRzWzEyXTsKICAgICAgICAgICAg ICAgIGVmc19kZXZzIGRpX2RldjsKICAgICAgICB9IGRpX3U7Cn07CgoKc3RydWN0IGVmc19pbm9k ZV9pbmZvIHsKICAgICAgICBpbnQgbnVtZXh0ZW50czsKICAgICAgICBpbnQgbGFzdGV4dGVudDsK CiAgICAgICAgZWZzX2V4dGVudCBleHRlbnRzWzEyXTsKfTsKIyAzMDAgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9jb2RhX2ZzX2kuaCIgMQojIDEyICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9jb2RhX2ZzX2kuaCIKIyAxICIvdXNyL3Ny Yy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC90eXBlcy5oIiAxCiMgMTMgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2NvZGFfZnNfaS5oIiAyCiMgMSAi L3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvbGlzdC5oIiAxCiMgMTQg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2NvZGFfZnNfaS5oIiAy CiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvY29kYS5oIiAx CiMgMTA5ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9jb2RhLmgi CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVfcXVhZF90OwojIDE2NCAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvY29kYS5oIgpzdHJ1Y3QgdmVudXNfZGlyZW50 IHsKICAgICAgICB1bnNpZ25lZCBsb25nIGRfZmlsZW5vOwogICAgICAgIHVuc2lnbmVkIHNob3J0 IGRfcmVjbGVuOwogICAgICAgIHVuc2lnbmVkIGNoYXIgZF90eXBlOwogICAgICAgIHVuc2lnbmVk IGNoYXIgZF9uYW1sZW47CiAgICAgICAgY2hhciBkX25hbWVbMjU1ICsgMV07Cn07CiMgMTk4ICIv dXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9jb2RhLmgiCnR5cGVkZWYg dV9sb25nIFZvbHVtZUlkOwp0eXBlZGVmIHVfbG9uZyBWbm9kZUlkOwp0eXBlZGVmIHVfbG9uZyBV bmlxdWVfdDsKdHlwZWRlZiB1X2xvbmcgRmlsZVZlcnNpb247CgoKCgp0eXBlZGVmIHN0cnVjdCBW aWNlRmlkIHsKICAgIFZvbHVtZUlkIFZvbHVtZTsKICAgIFZub2RlSWQgVm5vZGU7CiAgICBVbmlx dWVfdCBVbmlxdWU7Cn0gVmljZUZpZDsKCgoKCnN0YXRpYyBfX2lubGluZV9fIGlub190IGNvZGFf ZjJpKHN0cnVjdCBWaWNlRmlkICpmaWQpCnsKICAgICAgICBpZiAoICEgZmlkICkKICAgICAgICAg ICAgICAgIHJldHVybiAwOwogICAgICAgIGlmIChmaWQtPlZub2RlID09IDB4ZmZmZmZmZmUgfHwg ZmlkLT5Wbm9kZSA9PSAweGZmZmZmZmZmKQogICAgICAgICAgICAgICAgcmV0dXJuICgoZmlkLT5W b2x1bWUgPDwgMjApIHwgKGZpZC0+VW5pcXVlICYgMHhmZmZmZikpOwogICAgICAgIGVsc2UKICAg ICAgICAgICAgICAgIHJldHVybiAoZmlkLT5VbmlxdWUgKyAoZmlkLT5Wbm9kZTw8MTApICsgKGZp ZC0+Vm9sdW1lPDwyMCkpOwp9CiMgMjMzICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5j bHVkZS9saW51eC9jb2RhLmgiCnR5cGVkZWYgdV9pbnQzMl90IHZ1aWRfdDsKdHlwZWRlZiB1X2lu dDMyX3QgdmdpZF90OwoKCgoKc3RydWN0IGNvZGFfY3JlZCB7CiAgICB2dWlkX3QgY3JfdWlkLCBj cl9ldWlkLCBjcl9zdWlkLCBjcl9mc3VpZDsKICAgIHZnaWRfdCBjcl9ncm91cGlkLCBjcl9lZ2lk LCBjcl9zZ2lkLCBjcl9mc2dpZDsKfTsKCgoKCgoKCmVudW0gY29kYV92dHlwZSB7IENfVk5PTiwg Q19WUkVHLCBDX1ZESVIsIENfVkJMSywgQ19WQ0hSLCBDX1ZMTkssIENfVlNPQ0ssIENfVkZJRk8s IENfVkJBRCB9OwoKc3RydWN0IGNvZGFfdmF0dHIgewogICAgICAgIGxvbmcgdmFfdHlwZTsKICAg ICAgICB1X3Nob3J0IHZhX21vZGU7CiAgICAgICAgc2hvcnQgdmFfbmxpbms7CiAgICAgICAgdnVp ZF90IHZhX3VpZDsKICAgICAgICB2Z2lkX3QgdmFfZ2lkOwogICAgICAgIGxvbmcgdmFfZmlsZWlk OwogICAgICAgIHVfcXVhZF90IHZhX3NpemU7CiAgICAgICAgbG9uZyB2YV9ibG9ja3NpemU7CiAg ICAgICAgc3RydWN0IHRpbWVzcGVjIHZhX2F0aW1lOwogICAgICAgIHN0cnVjdCB0aW1lc3BlYyB2 YV9tdGltZTsKICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgdmFfY3RpbWU7CiAgICAgICAgdV9sb25n IHZhX2dlbjsKICAgICAgICB1X2xvbmcgdmFfZmxhZ3M7CiAgICAgICAgdV9xdWFkX3QgdmFfcmRl djsKICAgICAgICB1X3F1YWRfdCB2YV9ieXRlczsKICAgICAgICB1X3F1YWRfdCB2YV9maWxlcmV2 Owp9OwoKCgoKc3RydWN0IGNvZGFfc3RhdGZzIHsKICAgIGludDMyX3QgZl9ibG9ja3M7CiAgICBp bnQzMl90IGZfYmZyZWU7CiAgICBpbnQzMl90IGZfYmF2YWlsOwogICAgaW50MzJfdCBmX2ZpbGVz OwogICAgaW50MzJfdCBmX2ZmcmVlOwp9OwojIDMzNyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xp bnV4L2luY2x1ZGUvbGludXgvY29kYS5oIgpzdHJ1Y3QgY29kYV9pbl9oZHIgewogICAgdW5zaWdu ZWQgbG9uZyBvcGNvZGU7CiAgICB1bnNpZ25lZCBsb25nIHVuaXF1ZTsKICAgIHVfc2hvcnQgcGlk OwogICAgdV9zaG9ydCBwZ2lkOwogICAgdV9zaG9ydCBzaWQ7CiAgICBzdHJ1Y3QgY29kYV9jcmVk IGNyZWQ7Cn07CgoKc3RydWN0IGNvZGFfb3V0X2hkciB7CiAgICB1bnNpZ25lZCBsb25nIG9wY29k ZTsKICAgIHVuc2lnbmVkIGxvbmcgdW5pcXVlOwogICAgdW5zaWduZWQgbG9uZyByZXN1bHQ7Cn07 CgoKc3RydWN0IGNvZGFfcm9vdF9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAg IFZpY2VGaWQgVkZpZDsKfTsKCnN0cnVjdCBjb2RhX3Jvb3RfaW4gewogICAgc3RydWN0IGNvZGFf aW5faGRyIGluOwp9OwoKCnN0cnVjdCBjb2RhX29wZW5faW4gewogICAgc3RydWN0IGNvZGFfaW5f aGRyIGloOwogICAgVmljZUZpZCBWRmlkOwogICAgaW50IGZsYWdzOwp9OwoKc3RydWN0IGNvZGFf b3Blbl9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIHVfcXVhZF90IGRldjsK ICAgIGlub190IGlub2RlOwp9OwoKCgpzdHJ1Y3QgY29kYV9zdG9yZV9pbiB7CiAgICBzdHJ1Y3Qg Y29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkIFZGaWQ7CiAgICBpbnQgZmxhZ3M7Cn07CgpzdHJ1 Y3QgY29kYV9zdG9yZV9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7Cn07CgoKc3Ry dWN0IGNvZGFfcmVsZWFzZV9pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNl RmlkIFZGaWQ7CiAgICBpbnQgZmxhZ3M7Cn07CgpzdHJ1Y3QgY29kYV9yZWxlYXNlX291dCB7CiAg ICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKfTsKCgpzdHJ1Y3QgY29kYV9jbG9zZV9pbiB7CiAg ICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkIFZGaWQ7CiAgICBpbnQgZmxhZ3M7 Cn07CgpzdHJ1Y3QgY29kYV9jbG9zZV9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7 Cn07CgoKc3RydWN0IGNvZGFfaW9jdGxfaW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwog ICAgVmljZUZpZCBWRmlkOwogICAgaW50IGNtZDsKICAgIGludCBsZW47CiAgICBpbnQgcndmbGFn OwogICAgY2hhciAqZGF0YTsKfTsKCnN0cnVjdCBjb2RhX2lvY3RsX291dCB7CiAgICBzdHJ1Y3Qg Y29kYV9vdXRfaGRyIG9oOwogICAgaW50IGxlbjsKICAgIGNhZGRyX3QgZGF0YTsKfTsKCgoKc3Ry dWN0IGNvZGFfZ2V0YXR0cl9pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNl RmlkIFZGaWQ7Cn07CgpzdHJ1Y3QgY29kYV9nZXRhdHRyX291dCB7CiAgICBzdHJ1Y3QgY29kYV9v dXRfaGRyIG9oOwogICAgc3RydWN0IGNvZGFfdmF0dHIgYXR0cjsKfTsKCgoKc3RydWN0IGNvZGFf c2V0YXR0cl9pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkIFZGaWQ7 CiAgICBzdHJ1Y3QgY29kYV92YXR0ciBhdHRyOwp9OwoKc3RydWN0IGNvZGFfc2V0YXR0cl9vdXQg ewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7Cn07CgoKc3RydWN0IGNvZGFfYWNjZXNzX2lu IHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICAgIFZpY2VGaWQgVkZpZDsKICAgIGludCBm bGFnczsKfTsKCnN0cnVjdCBjb2RhX2FjY2Vzc19vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hk ciBvdXQ7Cn07CgoKCgoKCgpzdHJ1Y3QgY29kYV9sb29rdXBfaW4gewogICAgc3RydWN0IGNvZGFf aW5faGRyIGloOwogICAgVmljZUZpZCBWRmlkOwogICAgaW50IG5hbWU7CiAgICBpbnQgZmxhZ3M7 Cn07CgpzdHJ1Y3QgY29kYV9sb29rdXBfb3V0IHsKICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7 CiAgICBWaWNlRmlkIFZGaWQ7CiAgICBpbnQgdnR5cGU7Cn07CgoKCnN0cnVjdCBjb2RhX2NyZWF0 ZV9pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkIFZGaWQ7CiAgICBz dHJ1Y3QgY29kYV92YXR0ciBhdHRyOwogICAgaW50IGV4Y2w7CiAgICBpbnQgbW9kZTsKICAgIGlu dCBuYW1lOwp9OwoKc3RydWN0IGNvZGFfY3JlYXRlX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRf aGRyIG9oOwogICAgVmljZUZpZCBWRmlkOwogICAgc3RydWN0IGNvZGFfdmF0dHIgYXR0cjsKfTsK CgoKc3RydWN0IGNvZGFfcmVtb3ZlX2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICAg IFZpY2VGaWQgVkZpZDsKICAgIGludCBuYW1lOwp9OwoKc3RydWN0IGNvZGFfcmVtb3ZlX291dCB7 CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKfTsKCgpzdHJ1Y3QgY29kYV9saW5rX2luIHsK ICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICAgIFZpY2VGaWQgc291cmNlRmlkOwogICAgVmlj ZUZpZCBkZXN0RmlkOwogICAgaW50IHRuYW1lOwp9OwoKc3RydWN0IGNvZGFfbGlua19vdXQgewog ICAgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7Cn07CgoKCnN0cnVjdCBjb2RhX3JlbmFtZV9pbiB7 CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkIHNvdXJjZUZpZDsKICAgIGlu dCBzcmNuYW1lOwogICAgVmljZUZpZCBkZXN0RmlkOwogICAgaW50IGRlc3RuYW1lOwp9OwoKc3Ry dWN0IGNvZGFfcmVuYW1lX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKfTsKCgpz dHJ1Y3QgY29kYV9ta2Rpcl9pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNl RmlkIFZGaWQ7CiAgICBzdHJ1Y3QgY29kYV92YXR0ciBhdHRyOwogICAgaW50IG5hbWU7Cn07Cgpz dHJ1Y3QgY29kYV9ta2Rpcl9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIFZp Y2VGaWQgVkZpZDsKICAgIHN0cnVjdCBjb2RhX3ZhdHRyIGF0dHI7Cn07CgoKCnN0cnVjdCBjb2Rh X3JtZGlyX2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICAgIFZpY2VGaWQgVkZpZDsK ICAgIGludCBuYW1lOwp9OwoKc3RydWN0IGNvZGFfcm1kaXJfb3V0IHsKICAgIHN0cnVjdCBjb2Rh X291dF9oZHIgb3V0Owp9OwoKCnN0cnVjdCBjb2RhX3N5bWxpbmtfaW4gewogICAgc3RydWN0IGNv ZGFfaW5faGRyIGloOwogICAgVmljZUZpZCBWRmlkOwogICAgaW50IHNyY25hbWU7CiAgICBzdHJ1 Y3QgY29kYV92YXR0ciBhdHRyOwogICAgaW50IHRuYW1lOwp9OwoKc3RydWN0IGNvZGFfc3ltbGlu a19vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7Cn07CgoKc3RydWN0IGNvZGFfcmVh ZGxpbmtfaW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZCBWRmlkOwp9 OwoKc3RydWN0IGNvZGFfcmVhZGxpbmtfb3V0IHsKICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7 CiAgICBpbnQgY291bnQ7CiAgICBjYWRkcl90IGRhdGE7Cn07CgoKCnN0cnVjdCBjb2RhX2ZzeW5j X2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICAgIFZpY2VGaWQgVkZpZDsKfTsKCnN0 cnVjdCBjb2RhX2ZzeW5jX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKfTsKCgpz dHJ1Y3QgY29kYV92Z2V0X2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICAgIFZpY2VG aWQgVkZpZDsKfTsKCnN0cnVjdCBjb2RhX3ZnZXRfb3V0IHsKICAgIHN0cnVjdCBjb2RhX291dF9o ZHIgb2g7CiAgICBWaWNlRmlkIFZGaWQ7CiAgICBpbnQgdnR5cGU7Cn07CiMgNjE2ICIvdXNyL3Ny Yy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9jb2RhLmgiCnN0cnVjdCBjb2RhX3B1 cmdldXNlcl9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIHN0cnVjdCBjb2Rh X2NyZWQgY3JlZDsKfTsKCgoKc3RydWN0IGNvZGFfemFwZmlsZV9vdXQgewogICAgc3RydWN0IGNv ZGFfb3V0X2hkciBvaDsKICAgIFZpY2VGaWQgQ29kYUZpZDsKfTsKCgoKc3RydWN0IGNvZGFfemFw ZGlyX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOwogICAgVmljZUZpZCBDb2RhRmlk Owp9OwoKCgpzdHJ1Y3QgY29kYV96YXB2bm9kZV9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hk ciBvaDsKICAgIHN0cnVjdCBjb2RhX2NyZWQgY3JlZDsKICAgIFZpY2VGaWQgVkZpZDsKfTsKCgoK c3RydWN0IGNvZGFfcHVyZ2VmaWRfb3V0IHsKICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CiAg ICBWaWNlRmlkIENvZGFGaWQ7Cn07CgoKCnN0cnVjdCBjb2RhX3JlcGxhY2Vfb3V0IHsKICAgIHN0 cnVjdCBjb2RhX291dF9oZHIgb2g7CiAgICBWaWNlRmlkIE5ld0ZpZDsKICAgIFZpY2VGaWQgT2xk RmlkOwp9OwoKCnN0cnVjdCBjb2RhX29wZW5fYnlfZmRfaW4gewogICAgc3RydWN0IGNvZGFfaW5f aGRyIGloOwogICAgVmljZUZpZCBWRmlkOwogICAgaW50IGZsYWdzOwp9OwoKc3RydWN0IGNvZGFf b3Blbl9ieV9mZF9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIGludCBmZDsK CgogICAgc3RydWN0IGZpbGUgKmZoOwoKfTsKCgpzdHJ1Y3QgY29kYV9vcGVuX2J5X3BhdGhfaW4g ewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZCBWRmlkOwogICAgaW50IGZs YWdzOwp9OwoKc3RydWN0IGNvZGFfb3Blbl9ieV9wYXRoX291dCB7CiAgICBzdHJ1Y3QgY29kYV9v dXRfaGRyIG9oOwogICAgICAgIGludCBwYXRoOwp9OwoKCnN0cnVjdCBjb2RhX3N0YXRmc19pbiB7 CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaW47Cn07CgpzdHJ1Y3QgY29kYV9zdGF0ZnNfb3V0IHsK ICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CiAgICBzdHJ1Y3QgY29kYV9zdGF0ZnMgc3RhdDsK fTsKIyA3MDMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2NvZGEu aCIKdW5pb24gaW5wdXRBcmdzIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICAgIHN0cnVj dCBjb2RhX29wZW5faW4gY29kYV9vcGVuOwogICAgc3RydWN0IGNvZGFfc3RvcmVfaW4gY29kYV9z dG9yZTsKICAgIHN0cnVjdCBjb2RhX3JlbGVhc2VfaW4gY29kYV9yZWxlYXNlOwogICAgc3RydWN0 IGNvZGFfY2xvc2VfaW4gY29kYV9jbG9zZTsKICAgIHN0cnVjdCBjb2RhX2lvY3RsX2luIGNvZGFf aW9jdGw7CiAgICBzdHJ1Y3QgY29kYV9nZXRhdHRyX2luIGNvZGFfZ2V0YXR0cjsKICAgIHN0cnVj dCBjb2RhX3NldGF0dHJfaW4gY29kYV9zZXRhdHRyOwogICAgc3RydWN0IGNvZGFfYWNjZXNzX2lu IGNvZGFfYWNjZXNzOwogICAgc3RydWN0IGNvZGFfbG9va3VwX2luIGNvZGFfbG9va3VwOwogICAg c3RydWN0IGNvZGFfY3JlYXRlX2luIGNvZGFfY3JlYXRlOwogICAgc3RydWN0IGNvZGFfcmVtb3Zl X2luIGNvZGFfcmVtb3ZlOwogICAgc3RydWN0IGNvZGFfbGlua19pbiBjb2RhX2xpbms7CiAgICBz dHJ1Y3QgY29kYV9yZW5hbWVfaW4gY29kYV9yZW5hbWU7CiAgICBzdHJ1Y3QgY29kYV9ta2Rpcl9p biBjb2RhX21rZGlyOwogICAgc3RydWN0IGNvZGFfcm1kaXJfaW4gY29kYV9ybWRpcjsKICAgIHN0 cnVjdCBjb2RhX3N5bWxpbmtfaW4gY29kYV9zeW1saW5rOwogICAgc3RydWN0IGNvZGFfcmVhZGxp bmtfaW4gY29kYV9yZWFkbGluazsKICAgIHN0cnVjdCBjb2RhX2ZzeW5jX2luIGNvZGFfZnN5bmM7 CiAgICBzdHJ1Y3QgY29kYV92Z2V0X2luIGNvZGFfdmdldDsKICAgIHN0cnVjdCBjb2RhX29wZW5f YnlfZmRfaW4gY29kYV9vcGVuX2J5X2ZkOwogICAgc3RydWN0IGNvZGFfb3Blbl9ieV9wYXRoX2lu IGNvZGFfb3Blbl9ieV9wYXRoOwogICAgc3RydWN0IGNvZGFfc3RhdGZzX2luIGNvZGFfc3RhdGZz Owp9OwoKdW5pb24gb3V0cHV0QXJncyB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOwogICAg c3RydWN0IGNvZGFfcm9vdF9vdXQgY29kYV9yb290OwogICAgc3RydWN0IGNvZGFfb3Blbl9vdXQg Y29kYV9vcGVuOwogICAgc3RydWN0IGNvZGFfaW9jdGxfb3V0IGNvZGFfaW9jdGw7CiAgICBzdHJ1 Y3QgY29kYV9nZXRhdHRyX291dCBjb2RhX2dldGF0dHI7CiAgICBzdHJ1Y3QgY29kYV9sb29rdXBf b3V0IGNvZGFfbG9va3VwOwogICAgc3RydWN0IGNvZGFfY3JlYXRlX291dCBjb2RhX2NyZWF0ZTsK ICAgIHN0cnVjdCBjb2RhX21rZGlyX291dCBjb2RhX21rZGlyOwogICAgc3RydWN0IGNvZGFfcmVh ZGxpbmtfb3V0IGNvZGFfcmVhZGxpbms7CiAgICBzdHJ1Y3QgY29kYV92Z2V0X291dCBjb2RhX3Zn ZXQ7CiAgICBzdHJ1Y3QgY29kYV9wdXJnZXVzZXJfb3V0IGNvZGFfcHVyZ2V1c2VyOwogICAgc3Ry dWN0IGNvZGFfemFwZmlsZV9vdXQgY29kYV96YXBmaWxlOwogICAgc3RydWN0IGNvZGFfemFwZGly X291dCBjb2RhX3phcGRpcjsKICAgIHN0cnVjdCBjb2RhX3phcHZub2RlX291dCBjb2RhX3phcHZu b2RlOwogICAgc3RydWN0IGNvZGFfcHVyZ2VmaWRfb3V0IGNvZGFfcHVyZ2VmaWQ7CiAgICBzdHJ1 Y3QgY29kYV9yZXBsYWNlX291dCBjb2RhX3JlcGxhY2U7CiAgICBzdHJ1Y3QgY29kYV9vcGVuX2J5 X2ZkX291dCBjb2RhX29wZW5fYnlfZmQ7CiAgICBzdHJ1Y3QgY29kYV9vcGVuX2J5X3BhdGhfb3V0 IGNvZGFfb3Blbl9ieV9wYXRoOwogICAgc3RydWN0IGNvZGFfc3RhdGZzX291dCBjb2RhX3N0YXRm czsKfTsKCnVuaW9uIGNvZGFfZG93bmNhbGxzIHsKCgogICAgc3RydWN0IGNvZGFfcHVyZ2V1c2Vy X291dCBwdXJnZXVzZXI7CiAgICBzdHJ1Y3QgY29kYV96YXBmaWxlX291dCB6YXBmaWxlOwogICAg c3RydWN0IGNvZGFfemFwZGlyX291dCB6YXBkaXI7CiAgICBzdHJ1Y3QgY29kYV96YXB2bm9kZV9v dXQgemFwdm5vZGU7CiAgICBzdHJ1Y3QgY29kYV9wdXJnZWZpZF9vdXQgcHVyZ2VmaWQ7CiAgICBz dHJ1Y3QgY29kYV9yZXBsYWNlX291dCByZXBsYWNlOwp9OwoKCgoKCgoKc3RydWN0IFZpY2VJb2N0 bCB7CiAgICAgICAgY2FkZHJfdCBpbiwgb3V0OwogICAgICAgIHNob3J0IGluX3NpemU7CiAgICAg ICAgc2hvcnQgb3V0X3NpemU7Cn07CgpzdHJ1Y3QgUGlvY3RsRGF0YSB7CiAgICAgICAgY29uc3Qg Y2hhciAqcGF0aDsKICAgICAgICBpbnQgZm9sbG93OwogICAgICAgIHN0cnVjdCBWaWNlSW9jdGwg dmk7Cn07CiMgNzk3ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9j b2RhLmgiCnN0cnVjdCBjb2RhX21vdW50X2RhdGEgewogICAgICAgIGludCB2ZXJzaW9uOwogICAg ICAgIGludCBmZDsKfTsKIyAxNSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUv bGludXgvY29kYV9mc19pLmgiIDIKCgoKCnN0cnVjdCBjb2RhX2lub2RlX2luZm8gewogICAgICAg IHN0cnVjdCBWaWNlRmlkIGNfZmlkOwogICAgICAgIHVfc2hvcnQgY19mbGFnczsKICAgICAgICBz dHJ1Y3QgbGlzdF9oZWFkIGNfY2lsaXN0OwogICAgICAgIHN0cnVjdCBmaWxlICpjX2NvbnRhaW5l cjsKICAgICAgICB1bnNpZ25lZCBpbnQgY19jb250Y291bnQ7CiAgICAgICAgc3RydWN0IGNvZGFf Y3JlZCBjX2NhY2hlZF9jcmVkOwogICAgICAgIHVuc2lnbmVkIGludCBjX2NhY2hlZF9wZXJtOwp9 OwoKCgoKCgoKaW50IGNvZGFfY25vZGVfbWFrZShzdHJ1Y3QgaW5vZGUgKiosIHN0cnVjdCBWaWNl RmlkICosIHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKaW50IGNvZGFfY25vZGVfbWFrZWN0bChzdHJ1 Y3QgaW5vZGUgKippbm9kZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CnN0cnVjdCBpbm9kZSAq Y29kYV9maWRfdG9faW5vZGUoVmljZUZpZCAqZmlkLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsK dm9pZCBjb2RhX3JlcGxhY2VfZmlkKHN0cnVjdCBpbm9kZSAqLCBWaWNlRmlkICosIFZpY2VGaWQg Kik7CiMgMzAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9mcy5o IiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvcm9tZnNf ZnNfaS5oIiAxCgoKCgoKc3RydWN0IHJvbWZzX2lub2RlX2luZm8gewogICAgICAgIHVuc2lnbmVk IGxvbmcgaV9tZXRhc2l6ZTsKICAgICAgICB1bnNpZ25lZCBsb25nIGlfZGF0YW9mZnNldDsKfTsK IyAzMDIgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIK IyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5o IiAxCiMgMTYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3NobWVt X2ZzLmgiCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICB1bnNpZ25lZCBsb25nIHZhbDsKfSBzd3Bf ZW50cnlfdDsKCmV4dGVybiBhdG9taWNfdCBzaG1lbV9ucnBhZ2VzOwoKc3RydWN0IHNobWVtX2lu b2RlX2luZm8gewogICAgICAgIHNwaW5sb2NrX3QgbG9jazsKICAgICAgICBzdHJ1Y3Qgc2VtYXBo b3JlIHNlbTsKICAgICAgICB1bnNpZ25lZCBsb25nIG5leHRfaW5kZXg7CiAgICAgICAgc3dwX2Vu dHJ5X3QgaV9kaXJlY3RbMTZdOwogICAgICAgIHZvaWQgKippX2luZGlyZWN0OwogICAgICAgIHVu c2lnbmVkIGxvbmcgc3dhcHBlZDsKICAgICAgICBpbnQgbG9ja2VkOwogICAgICAgIHN0cnVjdCBs aXN0X2hlYWQgbGlzdDsKICAgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlOwp9OwoKc3RydWN0IHNo bWVtX3NiX2luZm8gewogICAgICAgIHVuc2lnbmVkIGxvbmcgbWF4X2Jsb2NrczsKICAgICAgICB1 bnNpZ25lZCBsb25nIGZyZWVfYmxvY2tzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgbWF4X2lub2Rl czsKICAgICAgICB1bnNpZ25lZCBsb25nIGZyZWVfaW5vZGVzOwogICAgICAgIHNwaW5sb2NrX3Qg c3RhdF9sb2NrOwp9OwojIDMwMyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUv bGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xp bnV4L3NtYl9mc19pLmgiIDEKIyAxMyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1 ZGUvbGludXgvc21iX2ZzX2kuaCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5j bHVkZS9saW51eC90eXBlcy5oIiAxCiMgMTQgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9p bmNsdWRlL2xpbnV4L3NtYl9mc19pLmgiIDIKCgoKCnN0cnVjdCBzbWJfaW5vZGVfaW5mbyB7CgoK CgoKICAgICAgICB1bnNpZ25lZCBpbnQgb3BlbjsKICAgICAgICBfX3UxNiBmaWxlaWQ7CiAgICAg ICAgX191MTYgYXR0cjsKCiAgICAgICAgX191MTYgYWNjZXNzOwogICAgICAgIF9fdTE2IGZsYWdz OwogICAgICAgIHVuc2lnbmVkIGxvbmcgb2xkbXRpbWU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBj bG9zZWQ7CiAgICAgICAgdW5zaWduZWQgb3BlbmVyczsKfTsKIyAzMDQgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9oZnNfZnNfaS5oIiAxCiMgMTkgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2hmc19mc19pLmgiCnN0cnVjdCBoZnNfaW5v ZGVfaW5mbyB7CiAgICAgICAgaW50IG1hZ2ljOwoKICAgICAgICB1bnNpZ25lZCBsb25nIG1tdV9w cml2YXRlOwogICAgICAgIHN0cnVjdCBoZnNfY2F0X2VudHJ5ICplbnRyeTsKCgogICAgICAgIHN0 cnVjdCBoZnNfZm9yayAqZm9yazsKICAgICAgICBpbnQgY29udmVydDsKCgogICAgICAgIGlub190 IGZpbGVfdHlwZTsKICAgICAgICBjaGFyIGRpcl9zaXplOwoKCiAgICAgICAgY29uc3Qgc3RydWN0 IGhmc19oZHJfbGF5b3V0ICpkZWZhdWx0X2xheW91dDsKICAgICAgICBzdHJ1Y3QgaGZzX2hkcl9s YXlvdXQgKmxheW91dDsKCgogICAgICAgIGludCB0el9zZWNvbmRzd2VzdDsKCgogICAgICAgIHZv aWQgKCpkX2Ryb3Bfb3ApKHN0cnVjdCBkZW50cnkgKiwgY29uc3QgaW5vX3QpOwp9OwojIDMwNSAi L3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2FkZnNfZnNfaS5oIiAxCiMg MTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2FkZnNfZnNfaS5o IgpzdHJ1Y3QgYWRmc19pbm9kZV9pbmZvIHsKICAgICAgICB1bnNpZ25lZCBsb25nIG1tdV9wcml2 YXRlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgcGFyZW50X2lkOwogICAgICAgIF9fdTMyIGxvYWRh ZGRyOwogICAgICAgIF9fdTMyIGV4ZWNhZGRyOwogICAgICAgIHVuc2lnbmVkIGludCBmaWxldHlw ZTsKICAgICAgICB1bnNpZ25lZCBpbnQgYXR0cjsKICAgICAgICBpbnQgc3RhbXBlZDoxOwp9Owoj IDMwNiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgoj IDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3FueDRfZnNfaS5o IiAxCiMgMTQgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3FueDRf ZnNfaS5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3Fu eHR5cGVzLmgiIDEKIyAxNSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGlu dXgvcW54dHlwZXMuaCIKdHlwZWRlZiBfX3UxNiBxbng0X254dG50X3Q7CnR5cGVkZWYgX191OCBx bng0X2Z0eXBlX3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgX191MzIgeHRudF9ibGs7CiAg ICAgICAgX191MzIgeHRudF9zaXplOwp9IHFueDRfeHRudF90OwoKdHlwZWRlZiBfX3UxNiBxbng0 X21vZGVfdDsKdHlwZWRlZiBfX3UxNiBxbng0X211aWRfdDsKdHlwZWRlZiBfX3UxNiBxbng0X21n aWRfdDsKdHlwZWRlZiBfX3UzMiBxbng0X29mZl90Owp0eXBlZGVmIF9fdTE2IHFueDRfbmxpbmtf dDsKIyAxNSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvcW54NF9m c19pLmgiIDIKCgoKCnN0cnVjdCBxbng0X2lub2RlX2luZm8gewogICAgICAgIGNoYXIgaV9yZXNl cnZlZFsxNl07CiAgICAgICAgcW54NF9vZmZfdCBpX3NpemU7CiAgICAgICAgcW54NF94dG50X3Qg aV9maXJzdF94dG50OwogICAgICAgIF9fdTMyIGlfeGJsazsKICAgICAgICBfX3MzMiBpX2Z0aW1l OwogICAgICAgIF9fczMyIGlfbXRpbWU7CiAgICAgICAgX19zMzIgaV9hdGltZTsKICAgICAgICBf X3MzMiBpX2N0aW1lOwogICAgICAgIHFueDRfbnh0bnRfdCBpX251bV94dG50czsKICAgICAgICBx bng0X21vZGVfdCBpX21vZGU7CiAgICAgICAgcW54NF9tdWlkX3QgaV91aWQ7CiAgICAgICAgcW54 NF9tZ2lkX3QgaV9naWQ7CiAgICAgICAgcW54NF9ubGlua190IGlfbmxpbms7CiAgICAgICAgX191 OCBpX3plcm9bNF07CiAgICAgICAgcW54NF9mdHlwZV90IGlfdHlwZTsKICAgICAgICBfX3U4IGlf c3RhdHVzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgbW11X3ByaXZhdGU7Cn07CiMgMzA3ICIvdXNy L3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9z cmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnNfaS5oIiAxCgoK CiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvbGlzdC5oIiAx CiMgNSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvcmVpc2VyZnNf ZnNfaS5oIiAyCgpzdHJ1Y3QgcmVpc2VyZnNfaW5vZGVfaW5mbyB7CiAgX191MzIgaV9rZXkgWzRd OwoKCgoKCgogIGludCBpX3ZlcnNpb247CgogIGludCBpX3BhY2tfb25fY2xvc2UgOwoKICBfX3Uz MiBpX2ZpcnN0X2RpcmVjdF9ieXRlOwojIDM1ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgv aW5jbHVkZS9saW51eC9yZWlzZXJmc19mc19pLmgiCiAgaW50IGlfcHJlYWxsb2NfYmxvY2s7CiAg aW50IGlfcHJlYWxsb2NfY291bnQ7CiAgc3RydWN0IGxpc3RfaGVhZCBpX3ByZWFsbG9jX2xpc3Q7 CgoKCgogIGludCBub3BhY2s7CgoKCgogIHVuc2lnbmVkIGxvbmcgaV90cmFuc19pZCA7CiAgdW5z aWduZWQgbG9uZyBpX3RyYW5zX2luZGV4IDsKfTsKIyAzMDggIi91c3Ivc3JjL2xpbnV4LTIuNC4x My9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMv bGludXgvaW5jbHVkZS9saW51eC9iZnNfZnNfaS5oIiAxCiMgMTIgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2Jmc19mc19pLmgiCnN0cnVjdCBiZnNfaW5vZGVfaW5m byB7CiAgICAgICAgdW5zaWduZWQgbG9uZyBpX2Rza19pbm87CiAgICAgICAgdW5zaWduZWQgbG9u ZyBpX3NibG9jazsKICAgICAgICB1bnNpZ25lZCBsb25nIGlfZWJsb2NrOwp9OwojIDMwOSAiL3Vz ci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3VkZl9mc19pLmgiIDEKIyAyNCAi L3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvdWRmX2ZzX2kuaCIKdHlw ZWRlZiBzdHJ1Y3QKewogICAgICAgIF9fdTMyIGxvZ2ljYWxCbG9ja051bTsKICAgICAgICBfX3Ux NiBwYXJ0aXRpb25SZWZlcmVuY2VOdW07Cn0gbGJfYWRkcjsKCgpzdHJ1Y3QgdWRmX2lub2RlX2lu Zm8KewogICAgICAgIGxvbmcgaV91bXRpbWU7CiAgICAgICAgbG9uZyBpX3VjdGltZTsKICAgICAg ICBsb25nIGlfY3J0aW1lOwogICAgICAgIGxvbmcgaV91Y3J0aW1lOwoKICAgICAgICBsYl9hZGRy IGlfbG9jYXRpb247CiAgICAgICAgX191NjQgaV91bmlxdWU7CiAgICAgICAgX191MzIgaV9sZW5F QXR0cjsKICAgICAgICBfX3UzMiBpX2xlbkFsbG9jOwogICAgICAgIF9fdTY0IGlfbGVuRXh0ZW50 czsKICAgICAgICBfX3UzMiBpX25leHRfYWxsb2NfYmxvY2s7CiAgICAgICAgX191MzIgaV9uZXh0 X2FsbG9jX2dvYWw7CiAgICAgICAgdW5zaWduZWQgaV9hbGxvY190eXBlIDogMzsKICAgICAgICB1 bnNpZ25lZCBpX2V4dGVuZGVkX2ZlIDogMTsKICAgICAgICB1bnNpZ25lZCBpX3N0cmF0XzQwOTYg OiAxOwogICAgICAgIHVuc2lnbmVkIGlfbmV3X2lub2RlIDogMTsKICAgICAgICB1bnNpZ25lZCBy ZXNlcnZlZCA6IDI2Owp9OwojIDMxMCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1 ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRl L2xpbnV4L25jcF9mc19pLmgiIDEKIyAxNyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2lu Y2x1ZGUvbGludXgvbmNwX2ZzX2kuaCIKc3RydWN0IG5jcF9pbm9kZV9pbmZvIHsKICAgICAgICBf X3UzMiBkaXJFbnROdW0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MzIgRG9z RGlyTnVtIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTMyIHZvbE51bWJlciBf X2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3UzMiBud2F0dHI7CiAgICAgICAgc3Ry dWN0IHNlbWFwaG9yZSBvcGVuX3NlbTsKICAgICAgICBhdG9taWNfdCBvcGVuZWQ7CiAgICAgICAg aW50IGFjY2VzczsKICAgICAgICBfX3UzMiBzZXJ2ZXJfZmlsZV9oYW5kbGUgX19hdHRyaWJ1dGVf XygocGFja2VkKSk7CiAgICAgICAgX191OCBvcGVuX2NyZWF0ZV9hY3Rpb24gX19hdHRyaWJ1dGVf XygocGFja2VkKSk7CiAgICAgICAgX191OCBmaWxlX2hhbmRsZVs2XSBfX2F0dHJpYnV0ZV9fKChw YWNrZWQpKTsKfTsKIyAzMTEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xp bnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51 eC9wcm9jX2ZzX2kuaCIgMQpzdHJ1Y3QgcHJvY19pbm9kZV9pbmZvIHsKICAgICAgICBzdHJ1Y3Qg dGFza19zdHJ1Y3QgKnRhc2s7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5pb24gewogICAg ICAgICAgICAgICAgaW50ICgqcHJvY19nZXRfbGluaykoc3RydWN0IGlub2RlICosIHN0cnVjdCBk ZW50cnkgKiosIHN0cnVjdCB2ZnNtb3VudCAqKik7CiAgICAgICAgICAgICAgICBpbnQgKCpwcm9j X3JlYWQpKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgY2hhciAqcGFnZSk7CiAgICAgICAgfSBv cDsKICAgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZTsKfTsKIyAzMTIgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQu MTMvbGludXgvaW5jbHVkZS9saW51eC91c2JkZXZfZnNfaS5oIiAxCnN0cnVjdCB1c2JfZGV2aWNl OwpzdHJ1Y3QgdXNiX2J1czsKCnN0cnVjdCB1c2JkZXZfaW5vZGVfaW5mbyB7CiAgICAgICAgc3Ry dWN0IGxpc3RfaGVhZCBkbGlzdDsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIHNsaXN0OwogICAg ICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgIHN0cnVjdCB1c2JfZGV2aWNlICpkZXY7CiAgICAg ICAgICAgICAgICBzdHJ1Y3QgdXNiX2J1cyAqYnVzOwogICAgICAgIH0gcDsKfTsKIyAzMTMgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNy L3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9qZmZzMl9mc19pLmgiIDEKIyAx NiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvamZmczJfZnNfaS5o IgpzdHJ1Y3QgamZmczJfaW5vZGVfaW5mbyB7CiMgMjYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9s aW51eC9pbmNsdWRlL2xpbnV4L2pmZnMyX2ZzX2kuaCIKICAgICAgICBzdHJ1Y3Qgc2VtYXBob3Jl IHNlbTsKCgogICAgICAgIF9fdTMyIGhpZ2hlc3RfdmVyc2lvbjsKCgogICAgICAgIHN0cnVjdCBq ZmZzMl9ub2RlX2ZyYWcgKmZyYWdsaXN0OwoKCgoKCgogICAgICAgIHN0cnVjdCBqZmZzMl9mdWxs X2Rub2RlICptZXRhZGF0YTsKCgogICAgICAgIHN0cnVjdCBqZmZzMl9mdWxsX2RpcmVudCAqZGVu dHM7CgoKICAgICAgICBzdHJ1Y3QgamZmczJfaW5vZGVfY2FjaGUgKmlub2NhY2hlOwoKCgoKCiAg ICAgICAgX191MTYgZmxhZ3M7CiAgICAgICAgX191OCB1c2VyY29tcHI7Cn07CiMgMzE0ICIvdXNy L3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9z cmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvY3JhbWZzX2ZzX3NiLmgiIDEKCgoK CgoKc3RydWN0IGNyYW1mc19zYl9pbmZvIHsKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgbG9uZyBtYWdpYzsKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBzaXpl OwogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGJsb2NrczsKICAgICAgICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBmaWxlczsKICAgICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgbG9uZyBmbGFnczsKfTsKIyAzMTUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9s aW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAzNDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9s aW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiCnN0cnVjdCBpYXR0ciB7CiAgICAgICAgdW5zaWduZWQg aW50IGlhX3ZhbGlkOwogICAgICAgIHVtb2RlX3QgaWFfbW9kZTsKICAgICAgICB1aWRfdCBpYV91 aWQ7CiAgICAgICAgZ2lkX3QgaWFfZ2lkOwogICAgICAgIGxvZmZfdCBpYV9zaXplOwogICAgICAg IHRpbWVfdCBpYV9hdGltZTsKICAgICAgICB0aW1lX3QgaWFfbXRpbWU7CiAgICAgICAgdGltZV90 IGlhX2N0aW1lOwogICAgICAgIHVuc2lnbmVkIGludCBpYV9hdHRyX2ZsYWdzOwp9OwojIDM2NSAi L3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIKIyAxICIvdXNy L3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9xdW90YS5oIiAxCiMgNDIgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3F1b3RhLmgiCiMgMSAiL3Vz ci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvZXJybm8uaCIgMQojIDQzICIv dXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9xdW90YS5oIiAyCiMgMTA5 ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9xdW90YS5oIgpzdHJ1 Y3QgZHFibGsgewogICAgICAgIF9fdTMyIGRxYl9iaGFyZGxpbWl0OwogICAgICAgIF9fdTMyIGRx Yl9ic29mdGxpbWl0OwogICAgICAgIF9fdTMyIGRxYl9jdXJibG9ja3M7CiAgICAgICAgX191MzIg ZHFiX2loYXJkbGltaXQ7CiAgICAgICAgX191MzIgZHFiX2lzb2Z0bGltaXQ7CiAgICAgICAgX191 MzIgZHFiX2N1cmlub2RlczsKICAgICAgICB0aW1lX3QgZHFiX2J0aW1lOwogICAgICAgIHRpbWVf dCBkcWJfaXRpbWU7Cn07CiMgMTM0ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVk ZS9saW51eC9xdW90YS5oIgpzdHJ1Y3QgZHFzdGF0cyB7CiAgICAgICAgX191MzIgbG9va3VwczsK ICAgICAgICBfX3UzMiBkcm9wczsKICAgICAgICBfX3UzMiByZWFkczsKICAgICAgICBfX3UzMiB3 cml0ZXM7CiAgICAgICAgX191MzIgY2FjaGVfaGl0czsKICAgICAgICBfX3UzMiBhbGxvY2F0ZWRf ZHF1b3RzOwogICAgICAgIF9fdTMyIGZyZWVfZHF1b3RzOwogICAgICAgIF9fdTMyIHN5bmNzOwp9 OwoKCgpleHRlcm4gaW50IG5yX2RxdW90cywgbnJfZnJlZV9kcXVvdHM7CmV4dGVybiBpbnQgZHF1 b3Rfcm9vdF9zcXVhc2g7CiMgMTU4ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVk ZS9saW51eC9xdW90YS5oIgpzdHJ1Y3QgZHF1b3QgewogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQg ZHFfaGFzaDsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGRxX2ludXNlOwogICAgICAgIHN0cnVj dCBsaXN0X2hlYWQgZHFfZnJlZTsKICAgICAgICB3YWl0X3F1ZXVlX2hlYWRfdCBkcV93YWl0X2xv Y2s7CiAgICAgICAgd2FpdF9xdWV1ZV9oZWFkX3QgZHFfd2FpdF9mcmVlOwogICAgICAgIGludCBk cV9jb3VudDsKCgogICAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqZHFfc2I7CiAgICAgICAgdW5z aWduZWQgaW50IGRxX2lkOwogICAgICAgIGtkZXZfdCBkcV9kZXY7CiAgICAgICAgc2hvcnQgZHFf dHlwZTsKICAgICAgICBzaG9ydCBkcV9mbGFnczsKICAgICAgICB1bnNpZ25lZCBsb25nIGRxX3Jl ZmVyZW5jZWQ7CgogICAgICAgIHN0cnVjdCBkcWJsayBkcV9kcWI7Cn07CiMgMzY2ICIvdXNyL3Ny Yy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMv bGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvbW91bnQuaCIgMQojIDM2NyAiL3Vzci9z cmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgoKCgoKc3RydWN0IHBh Z2U7CnN0cnVjdCBhZGRyZXNzX3NwYWNlOwpzdHJ1Y3Qga2lvYnVmOwoKc3RydWN0IGFkZHJlc3Nf c3BhY2Vfb3BlcmF0aW9ucyB7CiAgICAgICAgaW50ICgqd3JpdGVwYWdlKShzdHJ1Y3QgcGFnZSAq KTsKICAgICAgICBpbnQgKCpyZWFkcGFnZSkoc3RydWN0IGZpbGUgKiwgc3RydWN0IHBhZ2UgKik7 CiAgICAgICAgaW50ICgqc3luY19wYWdlKShzdHJ1Y3QgcGFnZSAqKTsKICAgICAgICBpbnQgKCpw cmVwYXJlX3dyaXRlKShzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgcGFnZSAqLCB1bnNpZ25lZCwgdW5z aWduZWQpOwogICAgICAgIGludCAoKmNvbW1pdF93cml0ZSkoc3RydWN0IGZpbGUgKiwgc3RydWN0 IHBhZ2UgKiwgdW5zaWduZWQsIHVuc2lnbmVkKTsKCiAgICAgICAgaW50ICgqYm1hcCkoc3RydWN0 IGFkZHJlc3Nfc3BhY2UgKiwgbG9uZyk7CgogICAgICAgIGludCAoKmRpcmVjdF9JTykoaW50LCBz dHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGtpb2J1ZiAqLCB1bnNpZ25lZCBsb25nLCBpbnQpOwp9OwoK c3RydWN0IGFkZHJlc3Nfc3BhY2UgewogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgY2xlYW5fcGFn ZXM7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBkaXJ0eV9wYWdlczsKICAgICAgICBzdHJ1Y3Qg bGlzdF9oZWFkIGxvY2tlZF9wYWdlczsKICAgICAgICB1bnNpZ25lZCBsb25nIG5ycGFnZXM7CiAg ICAgICAgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyAqYV9vcHM7CiAgICAgICAgc3Ry dWN0IGlub2RlICpob3N0OwogICAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqaV9tbWFwOwog ICAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqaV9tbWFwX3NoYXJlZDsKICAgICAgICBzcGlu bG9ja190IGlfc2hhcmVkX2xvY2s7CiAgICAgICAgaW50IGdmcF9tYXNrOwp9OwoKc3RydWN0IGNo YXJfZGV2aWNlIHsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGhhc2g7CiAgICAgICAgYXRvbWlj X3QgY291bnQ7CiAgICAgICAgZGV2X3QgZGV2OwogICAgICAgIGF0b21pY190IG9wZW5lcnM7CiAg ICAgICAgc3RydWN0IHNlbWFwaG9yZSBzZW07Cn07CgpzdHJ1Y3QgYmxvY2tfZGV2aWNlIHsKICAg ICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGJkX2hhc2g7CiAgICAgICAgYXRvbWljX3QgYmRfY291bnQ7 CiAgICAgICAgc3RydWN0IGlub2RlICogYmRfaW5vZGU7CiAgICAgICAgZGV2X3QgYmRfZGV2Owog ICAgICAgIGludCBiZF9vcGVuZXJzOwogICAgICAgIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vf b3BlcmF0aW9ucyAqYmRfb3A7CiAgICAgICAgc3RydWN0IHNlbWFwaG9yZSBiZF9zZW07CiAgICAg ICAgc3RydWN0IGxpc3RfaGVhZCBiZF9pbm9kZXM7Cn07CgpzdHJ1Y3QgaW5vZGUgewogICAgICAg IHN0cnVjdCBsaXN0X2hlYWQgaV9oYXNoOwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgaV9saXN0 OwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgaV9kZW50cnk7CgogICAgICAgIHN0cnVjdCBsaXN0 X2hlYWQgaV9kaXJ0eV9idWZmZXJzOwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgaV9kaXJ0eV9k YXRhX2J1ZmZlcnM7CgogICAgICAgIHVuc2lnbmVkIGxvbmcgaV9pbm87CiAgICAgICAgYXRvbWlj X3QgaV9jb3VudDsKICAgICAgICBrZGV2X3QgaV9kZXY7CiAgICAgICAgdW1vZGVfdCBpX21vZGU7 CiAgICAgICAgbmxpbmtfdCBpX25saW5rOwogICAgICAgIHVpZF90IGlfdWlkOwogICAgICAgIGdp ZF90IGlfZ2lkOwogICAgICAgIGtkZXZfdCBpX3JkZXY7CiAgICAgICAgbG9mZl90IGlfc2l6ZTsK ICAgICAgICB0aW1lX3QgaV9hdGltZTsKICAgICAgICB0aW1lX3QgaV9tdGltZTsKICAgICAgICB0 aW1lX3QgaV9jdGltZTsKICAgICAgICB1bnNpZ25lZCBpbnQgaV9ibGtiaXRzOwogICAgICAgIHVu c2lnbmVkIGxvbmcgaV9ibGtzaXplOwogICAgICAgIHVuc2lnbmVkIGxvbmcgaV9ibG9ja3M7CiAg ICAgICAgdW5zaWduZWQgbG9uZyBpX3ZlcnNpb247CiAgICAgICAgc3RydWN0IHNlbWFwaG9yZSBp X3NlbTsKICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlIGlfem9tYmllOwogICAgICAgIHN0cnVjdCBp bm9kZV9vcGVyYXRpb25zICppX29wOwogICAgICAgIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmlf Zm9wOwogICAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqaV9zYjsKICAgICAgICB3YWl0X3F1ZXVl X2hlYWRfdCBpX3dhaXQ7CiAgICAgICAgc3RydWN0IGZpbGVfbG9jayAqaV9mbG9jazsKICAgICAg ICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqaV9tYXBwaW5nOwogICAgICAgIHN0cnVjdCBhZGRyZXNz X3NwYWNlIGlfZGF0YTsKICAgICAgICBzdHJ1Y3QgZHF1b3QgKmlfZHF1b3RbMl07CgogICAgICAg IHN0cnVjdCBsaXN0X2hlYWQgaV9kZXZpY2VzOwogICAgICAgIHN0cnVjdCBwaXBlX2lub2RlX2lu Zm8gKmlfcGlwZTsKICAgICAgICBzdHJ1Y3QgYmxvY2tfZGV2aWNlICppX2JkZXY7CiAgICAgICAg c3RydWN0IGNoYXJfZGV2aWNlICppX2NkZXY7CgogICAgICAgIHVuc2lnbmVkIGxvbmcgaV9kbm90 aWZ5X21hc2s7CiAgICAgICAgc3RydWN0IGRub3RpZnlfc3RydWN0ICppX2Rub3RpZnk7CgogICAg ICAgIHVuc2lnbmVkIGxvbmcgaV9zdGF0ZTsKCiAgICAgICAgdW5zaWduZWQgaW50IGlfZmxhZ3M7 CiAgICAgICAgdW5zaWduZWQgY2hhciBpX3NvY2s7CgogICAgICAgIGF0b21pY190IGlfd3JpdGVj b3VudDsKICAgICAgICB1bnNpZ25lZCBpbnQgaV9hdHRyX2ZsYWdzOwogICAgICAgIF9fdTMyIGlf Z2VuZXJhdGlvbjsKICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgbWluaXhf aW5vZGVfaW5mbyBtaW5peF9pOwogICAgICAgICAgICAgICAgc3RydWN0IGV4dDJfaW5vZGVfaW5m byBleHQyX2k7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgaHBmc19pbm9kZV9pbmZvIGhwZnNfaTsK ICAgICAgICAgICAgICAgIHN0cnVjdCBudGZzX2lub2RlX2luZm8gbnRmc19pOwogICAgICAgICAg ICAgICAgc3RydWN0IG1zZG9zX2lub2RlX2luZm8gbXNkb3NfaTsKICAgICAgICAgICAgICAgIHN0 cnVjdCB1bXNkb3NfaW5vZGVfaW5mbyB1bXNkb3NfaTsKICAgICAgICAgICAgICAgIHN0cnVjdCBp c29faW5vZGVfaW5mbyBpc29mc19pOwogICAgICAgICAgICAgICAgc3RydWN0IG5mc19pbm9kZV9p bmZvIG5mc19pOwogICAgICAgICAgICAgICAgc3RydWN0IHN5c3ZfaW5vZGVfaW5mbyBzeXN2X2k7 CiAgICAgICAgICAgICAgICBzdHJ1Y3QgYWZmc19pbm9kZV9pbmZvIGFmZnNfaTsKICAgICAgICAg ICAgICAgIHN0cnVjdCB1ZnNfaW5vZGVfaW5mbyB1ZnNfaTsKICAgICAgICAgICAgICAgIHN0cnVj dCBlZnNfaW5vZGVfaW5mbyBlZnNfaTsKICAgICAgICAgICAgICAgIHN0cnVjdCByb21mc19pbm9k ZV9pbmZvIHJvbWZzX2k7CiAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyBz aG1lbV9pOwogICAgICAgICAgICAgICAgc3RydWN0IGNvZGFfaW5vZGVfaW5mbyBjb2RhX2k7CiAg ICAgICAgICAgICAgICBzdHJ1Y3Qgc21iX2lub2RlX2luZm8gc21iZnNfaTsKICAgICAgICAgICAg ICAgIHN0cnVjdCBoZnNfaW5vZGVfaW5mbyBoZnNfaTsKICAgICAgICAgICAgICAgIHN0cnVjdCBh ZGZzX2lub2RlX2luZm8gYWRmc19pOwogICAgICAgICAgICAgICAgc3RydWN0IHFueDRfaW5vZGVf aW5mbyBxbng0X2k7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVpc2VyZnNfaW5vZGVfaW5mbyBy ZWlzZXJmc19pOwogICAgICAgICAgICAgICAgc3RydWN0IGJmc19pbm9kZV9pbmZvIGJmc19pOwog ICAgICAgICAgICAgICAgc3RydWN0IHVkZl9pbm9kZV9pbmZvIHVkZl9pOwogICAgICAgICAgICAg ICAgc3RydWN0IG5jcF9pbm9kZV9pbmZvIG5jcGZzX2k7CiAgICAgICAgICAgICAgICBzdHJ1Y3Qg cHJvY19pbm9kZV9pbmZvIHByb2NfaTsKICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrZXQgc29j a2V0X2k7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgdXNiZGV2X2lub2RlX2luZm8gdXNiZGV2X2k7 CiAgICAgICAgICAgICAgICBzdHJ1Y3QgamZmczJfaW5vZGVfaW5mbyBqZmZzMl9pOwogICAgICAg ICAgICAgICAgdm9pZCAqZ2VuZXJpY19pcDsKICAgICAgICB9IHU7Cn07CgpzdHJ1Y3QgZm93bl9z dHJ1Y3QgewogICAgICAgIGludCBwaWQ7CiAgICAgICAgdWlkX3QgdWlkLCBldWlkOwogICAgICAg IGludCBzaWdudW07Cn07CgpzdHJ1Y3QgZmlsZSB7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBm X2xpc3Q7CiAgICAgICAgc3RydWN0IGRlbnRyeSAqZl9kZW50cnk7CiAgICAgICAgc3RydWN0IHZm c21vdW50ICpmX3Zmc21udDsKICAgICAgICBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmX29wOwog ICAgICAgIGF0b21pY190IGZfY291bnQ7CiAgICAgICAgdW5zaWduZWQgaW50IGZfZmxhZ3M7CiAg ICAgICAgbW9kZV90IGZfbW9kZTsKICAgICAgICBsb2ZmX3QgZl9wb3M7CiAgICAgICAgdW5zaWdu ZWQgbG9uZyBmX3JlYWRhLCBmX3JhbWF4LCBmX3JhZW5kLCBmX3JhbGVuLCBmX3Jhd2luOwogICAg ICAgIHN0cnVjdCBmb3duX3N0cnVjdCBmX293bmVyOwogICAgICAgIHVuc2lnbmVkIGludCBmX3Vp ZCwgZl9naWQ7CiAgICAgICAgaW50IGZfZXJyb3I7CgogICAgICAgIHVuc2lnbmVkIGxvbmcgZl92 ZXJzaW9uOwoKCiAgICAgICAgdm9pZCAqcHJpdmF0ZV9kYXRhOwoKCiAgICAgICAgc3RydWN0IGtp b2J1ZiAqZl9pb2J1ZjsKICAgICAgICBsb25nIGZfaW9idWZfbG9jazsKfTsKZXh0ZXJuIHNwaW5s b2NrX3QgZmlsZXNfbG9jazsKCgoKCgoKZXh0ZXJuIGludCBpbml0X3ByaXZhdGVfZmlsZShzdHJ1 Y3QgZmlsZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIGludCk7CiMgNTU2ICIvdXNyL3NyYy9saW51eC0y LjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9mcy5oIgp0eXBlZGVmIHN0cnVjdCBmaWxlc19zdHJ1 Y3QgKmZsX293bmVyX3Q7CgpzdHJ1Y3QgZmlsZV9sb2NrIHsKICAgICAgICBzdHJ1Y3QgZmlsZV9s b2NrICpmbF9uZXh0OwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgZmxfbGluazsKICAgICAgICBz dHJ1Y3QgbGlzdF9oZWFkIGZsX2Jsb2NrOwogICAgICAgIGZsX293bmVyX3QgZmxfb3duZXI7CiAg ICAgICAgdW5zaWduZWQgaW50IGZsX3BpZDsKICAgICAgICB3YWl0X3F1ZXVlX2hlYWRfdCBmbF93 YWl0OwogICAgICAgIHN0cnVjdCBmaWxlICpmbF9maWxlOwogICAgICAgIHVuc2lnbmVkIGNoYXIg ZmxfZmxhZ3M7CiAgICAgICAgdW5zaWduZWQgY2hhciBmbF90eXBlOwogICAgICAgIGxvZmZfdCBm bF9zdGFydDsKICAgICAgICBsb2ZmX3QgZmxfZW5kOwoKICAgICAgICB2b2lkICgqZmxfbm90aWZ5 KShzdHJ1Y3QgZmlsZV9sb2NrICopOwogICAgICAgIHZvaWQgKCpmbF9pbnNlcnQpKHN0cnVjdCBm aWxlX2xvY2sgKik7CiAgICAgICAgdm9pZCAoKmZsX3JlbW92ZSkoc3RydWN0IGZpbGVfbG9jayAq KTsKCiAgICAgICAgc3RydWN0IGZhc3luY19zdHJ1Y3QgKiBmbF9mYXN5bmM7CgogICAgICAgIHVu aW9uIHsKICAgICAgICAgICAgICAgIHN0cnVjdCBuZnNfbG9ja19pbmZvIG5mc19mbDsKICAgICAg ICB9IGZsX3U7Cn07CiMgNTg5ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9s aW51eC9mcy5oIgpleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBmaWxlX2xvY2tfbGlzdDsKCiMgMSAi L3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvZmNudGwuaCIgMQoKCgoj IDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9mY250bC5oIiAxCiMg NjkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9mY250bC5oIgpzdHJ1 Y3QgZmxvY2sgewogICAgICAgIHNob3J0IGxfdHlwZTsKICAgICAgICBzaG9ydCBsX3doZW5jZTsK ICAgICAgICBvZmZfdCBsX3N0YXJ0OwogICAgICAgIG9mZl90IGxfbGVuOwogICAgICAgIHBpZF90 IGxfcGlkOwp9OwoKc3RydWN0IGZsb2NrNjQgewogICAgICAgIHNob3J0IGxfdHlwZTsKICAgICAg ICBzaG9ydCBsX3doZW5jZTsKICAgICAgICBsb2ZmX3QgbF9zdGFydDsKICAgICAgICBsb2ZmX3Qg bF9sZW47CiAgICAgICAgcGlkX3QgbF9waWQ7Cn07CiMgNSAiL3Vzci9zcmMvbGludXgtMi40LjEz L2xpbnV4L2luY2x1ZGUvbGludXgvZmNudGwuaCIgMgojIDU5MiAiL3Vzci9zcmMvbGludXgtMi40 LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgoKZXh0ZXJuIGludCBmY250bF9nZXRsayh1 bnNpZ25lZCBpbnQsIHN0cnVjdCBmbG9jayAqKTsKZXh0ZXJuIGludCBmY250bF9zZXRsayh1bnNp Z25lZCBpbnQsIHVuc2lnbmVkIGludCwgc3RydWN0IGZsb2NrICopOwoKZXh0ZXJuIGludCBmY250 bF9nZXRsazY0KHVuc2lnbmVkIGludCwgc3RydWN0IGZsb2NrNjQgKik7CmV4dGVybiBpbnQgZmNu dGxfc2V0bGs2NCh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgc3RydWN0IGZsb2NrNjQgKik7 CgoKZXh0ZXJuIHZvaWQgbG9ja3NfaW5pdF9sb2NrKHN0cnVjdCBmaWxlX2xvY2sgKik7CmV4dGVy biB2b2lkIGxvY2tzX2NvcHlfbG9jayhzdHJ1Y3QgZmlsZV9sb2NrICosIHN0cnVjdCBmaWxlX2xv Y2sgKik7CmV4dGVybiB2b2lkIGxvY2tzX3JlbW92ZV9wb3NpeChzdHJ1Y3QgZmlsZSAqLCBmbF9v d25lcl90KTsKZXh0ZXJuIHZvaWQgbG9ja3NfcmVtb3ZlX2Zsb2NrKHN0cnVjdCBmaWxlICopOwpl eHRlcm4gc3RydWN0IGZpbGVfbG9jayAqcG9zaXhfdGVzdF9sb2NrKHN0cnVjdCBmaWxlICosIHN0 cnVjdCBmaWxlX2xvY2sgKik7CmV4dGVybiBpbnQgcG9zaXhfbG9ja19maWxlKHN0cnVjdCBmaWxl ICosIHN0cnVjdCBmaWxlX2xvY2sgKiwgdW5zaWduZWQgaW50KTsKZXh0ZXJuIHZvaWQgcG9zaXhf YmxvY2tfbG9jayhzdHJ1Y3QgZmlsZV9sb2NrICosIHN0cnVjdCBmaWxlX2xvY2sgKik7CmV4dGVy biB2b2lkIHBvc2l4X3VuYmxvY2tfbG9jayhzdHJ1Y3QgZmlsZV9sb2NrICopOwpleHRlcm4gaW50 IHBvc2l4X2xvY2tzX2RlYWRsb2NrKHN0cnVjdCBmaWxlX2xvY2sgKiwgc3RydWN0IGZpbGVfbG9j ayAqKTsKZXh0ZXJuIGludCBfX2dldF9sZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25l ZCBpbnQgZmxhZ3MpOwpleHRlcm4gdGltZV90IGxlYXNlX2dldF9tdGltZShzdHJ1Y3QgaW5vZGUg Kik7CmV4dGVybiBpbnQgbG9ja19tYXlfcmVhZChzdHJ1Y3QgaW5vZGUgKiwgbG9mZl90IHN0YXJ0 LCB1bnNpZ25lZCBsb25nIGNvdW50KTsKZXh0ZXJuIGludCBsb2NrX21heV93cml0ZShzdHJ1Y3Qg aW5vZGUgKiwgbG9mZl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIGNvdW50KTsKCnN0cnVjdCBmYXN5 bmNfc3RydWN0IHsKICAgICAgICBpbnQgbWFnaWM7CiAgICAgICAgaW50IGZhX2ZkOwogICAgICAg IHN0cnVjdCBmYXN5bmNfc3RydWN0ICpmYV9uZXh0OwogICAgICAgIHN0cnVjdCBmaWxlICpmYV9m aWxlOwp9OwoKCgoKZXh0ZXJuIGludCBmYXN5bmNfaGVscGVyKGludCwgc3RydWN0IGZpbGUgKiwg aW50LCBzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqKik7CgpleHRlcm4gdm9pZCBraWxsX2Zhc3luYyhz dHJ1Y3QgZmFzeW5jX3N0cnVjdCAqKiwgaW50LCBpbnQpOwoKZXh0ZXJuIHZvaWQgX19raWxsX2Zh c3luYyhzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqLCBpbnQsIGludCk7CgpzdHJ1Y3QgbmFtZWlkYXRh IHsKICAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAgICAgICAgc3RydWN0IHZmc21vdW50 ICptbnQ7CiAgICAgICAgc3RydWN0IHFzdHIgbGFzdDsKICAgICAgICB1bnNpZ25lZCBpbnQgZmxh Z3M7CiAgICAgICAgaW50IGxhc3RfdHlwZTsKfTsKCgoKCnN0cnVjdCBxdW90YV9tb3VudF9vcHRp b25zCnsKICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3M7CiAgICAgICAgc3RydWN0IHNlbWFwaG9y ZSBkcWlvX3NlbTsKICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlIGRxb2ZmX3NlbTsKICAgICAgICBz dHJ1Y3QgZmlsZSAqZmlsZXNbMl07CiAgICAgICAgdGltZV90IGlub2RlX2V4cGlyZVsyXTsKICAg ICAgICB0aW1lX3QgYmxvY2tfZXhwaXJlWzJdOwogICAgICAgIGNoYXIgcnNxdWFzaFsyXTsKfTsK IyA2NTkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiCiMg MSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvbWluaXhfZnNfc2Iu aCIgMQoKCgoKCgpzdHJ1Y3QgbWluaXhfc2JfaW5mbyB7CiAgICAgICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIGxvbmcgc19uaW5vZGVzOwogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l ZCBsb25nIHNfbnpvbmVzOwogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHNf aW1hcF9ibG9ja3M7CiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc196bWFw X2Jsb2NrczsKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBzX2ZpcnN0ZGF0 YXpvbmU7CiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc19sb2dfem9uZV9z aXplOwogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHNfbWF4X3NpemU7CiAg ICAgICAgICAgICAgICAgICAgICAgIGludCBzX2RpcnNpemU7CiAgICAgICAgICAgICAgICAgICAg ICAgIGludCBzX25hbWVsZW47CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBzX2xpbmtfbWF4 OwogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiogc19pbWFwOwog ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiogc196bWFwOwogICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBzX3NiaDsKICAgICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IG1pbml4X3N1cGVyX2Jsb2NrICogc19tczsKICAgICAgICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgc19tb3VudF9zdGF0ZTsKICAgICAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgc192ZXJzaW9uOwp9OwojIDY2MCAiL3Vzci9zcmMv bGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2V4dDJfZnNfc2IuaCIgMQojIDMwICIvdXNy L3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9leHQyX2ZzX3NiLmgiCnN0cnVj dCBleHQyX3NiX2luZm8gewogICAgICAgIHVuc2lnbmVkIGxvbmcgc19mcmFnX3NpemU7CiAgICAg ICAgdW5zaWduZWQgbG9uZyBzX2ZyYWdzX3Blcl9ibG9jazsKICAgICAgICB1bnNpZ25lZCBsb25n IHNfaW5vZGVzX3Blcl9ibG9jazsKICAgICAgICB1bnNpZ25lZCBsb25nIHNfZnJhZ3NfcGVyX2dy b3VwOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc19ibG9ja3NfcGVyX2dyb3VwOwogICAgICAgIHVu c2lnbmVkIGxvbmcgc19pbm9kZXNfcGVyX2dyb3VwOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc19p dGJfcGVyX2dyb3VwOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc19nZGJfY291bnQ7CiAgICAgICAg dW5zaWduZWQgbG9uZyBzX2Rlc2NfcGVyX2Jsb2NrOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc19n cm91cHNfY291bnQ7CiAgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICogc19zYmg7CiAgICAgICAg c3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgKiBzX2VzOwogICAgICAgIHN0cnVjdCBidWZmZXJfaGVh ZCAqKiBzX2dyb3VwX2Rlc2M7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc19sb2FkZWRfaW5vZGVf Yml0bWFwczsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzX2xvYWRlZF9ibG9ja19iaXRtYXBzOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgc19pbm9kZV9iaXRtYXBfbnVtYmVyWzhdOwogICAgICAgIHN0 cnVjdCBidWZmZXJfaGVhZCAqIHNfaW5vZGVfYml0bWFwWzhdOwogICAgICAgIHVuc2lnbmVkIGxv bmcgc19ibG9ja19iaXRtYXBfbnVtYmVyWzhdOwogICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAq IHNfYmxvY2tfYml0bWFwWzhdOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc19tb3VudF9vcHQ7CiAg ICAgICAgdWlkX3Qgc19yZXN1aWQ7CiAgICAgICAgZ2lkX3Qgc19yZXNnaWQ7CiAgICAgICAgdW5z aWduZWQgc2hvcnQgc19tb3VudF9zdGF0ZTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzX3BhZDsK ICAgICAgICBpbnQgc19hZGRyX3Blcl9ibG9ja19iaXRzOwogICAgICAgIGludCBzX2Rlc2NfcGVy X2Jsb2NrX2JpdHM7CiAgICAgICAgaW50IHNfaW5vZGVfc2l6ZTsKICAgICAgICBpbnQgc19maXJz dF9pbm87Cn07CiMgNjYxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51 eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgv aHBmc19mc19zYi5oIiAxCgoKCnN0cnVjdCBocGZzX3NiX2luZm8gewogICAgICAgIGlub190IHNi X3Jvb3Q7CiAgICAgICAgdW5zaWduZWQgc2JfZnNfc2l6ZTsKICAgICAgICB1bnNpZ25lZCBzYl9i aXRtYXBzOwogICAgICAgIHVuc2lnbmVkIHNiX2RpcmJhbmRfc3RhcnQ7CiAgICAgICAgdW5zaWdu ZWQgc2JfZGlyYmFuZF9zaXplOwogICAgICAgIHVuc2lnbmVkIHNiX2RtYXA7CiAgICAgICAgdW5z aWduZWQgc2Jfbl9mcmVlOwogICAgICAgIHVuc2lnbmVkIHNiX25fZnJlZV9kbm9kZXM7CiAgICAg ICAgdWlkX3Qgc2JfdWlkOwogICAgICAgIGdpZF90IHNiX2dpZDsKICAgICAgICB1bW9kZV90IHNi X21vZGU7CiAgICAgICAgdW5zaWduZWQgc2JfY29udiA6IDI7CiAgICAgICAgdW5zaWduZWQgc2Jf ZWFzIDogMjsKICAgICAgICB1bnNpZ25lZCBzYl9lcnIgOiAyOwogICAgICAgIHVuc2lnbmVkIHNi X2NoayA6IDI7CiAgICAgICAgdW5zaWduZWQgc2JfbG93ZXJjYXNlIDogMTsKICAgICAgICB1bnNp Z25lZCBzYl93YXNfZXJyb3IgOiAxOwogICAgICAgIHVuc2lnbmVkIHNiX2Noa2RzayA6IDI7CiAg ICAgICAgdW5zaWduZWQgc2JfcmRfZm5vZGUgOiAyOwogICAgICAgIHVuc2lnbmVkIHNiX3JkX2lu b2RlIDogMjsKCgogICAgICAgIHdhaXRfcXVldWVfaGVhZF90IHNiX2lnZXRfcTsKICAgICAgICB1 bnNpZ25lZCBjaGFyICpzYl9jcF90YWJsZTsKCgogICAgICAgIHVuc2lnbmVkICpzYl9ibXBfZGly OwogICAgICAgIHVuc2lnbmVkIHNiX2NfYml0bWFwOwogICAgICAgIHdhaXRfcXVldWVfaGVhZF90 IHNiX2NyZWF0aW9uX2RlOwoKICAgICAgICB1bnNpZ25lZCBzYl9jcmVhdGlvbl9kZV9sb2NrIDog MTsKCiAgICAgICAgaW50IHNiX3RpbWVzaGlmdDsKfTsKIyA2NjIgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQu MTMvbGludXgvaW5jbHVkZS9saW51eC9udGZzX2ZzX3NiLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9udGZzX2ZzX2kuaCIgMQojIDUgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L250ZnNfZnNfc2IuaCIgMgoKc3Ry dWN0IG50ZnNfc2JfaW5mb3sKCiAgICAgICAgbnRmc191aWRfdCB1aWQ7CiAgICAgICAgbnRmc19n aWRfdCBnaWQ7CiAgICAgICAgbnRtb2RlX3QgdW1hc2s7CiAgICAgICAgdm9pZCAqbmxzX21hcDsK ICAgICAgICB1bnNpZ25lZCBpbnQgbmd0OwogICAgICAgIGNoYXIgbWZ0X3pvbmVfbXVsdGlwbGll cjsKICAgICAgICB1bnNpZ25lZCBsb25nIG1mdF9kYXRhX3BvczsKICAgICAgICBudGZzX2NsdXN0 ZXJfdCBtZnRfem9uZV9wb3M7CiAgICAgICAgbnRmc19jbHVzdGVyX3QgbWZ0X3pvbmVfc3RhcnQ7 CiAgICAgICAgbnRmc19jbHVzdGVyX3QgbWZ0X3pvbmVfZW5kOwogICAgICAgIG50ZnNfY2x1c3Rl cl90IGRhdGExX3pvbmVfcG9zOwogICAgICAgIG50ZnNfY2x1c3Rlcl90IGRhdGEyX3pvbmVfcG9z OwoKCiAgICAgICAgbnRmc19zaXplX3QgcGFydGl0aW9uX2JpYXM7CgogICAgICAgIG50ZnNfdTMy IGF0X3N0YW5kYXJkX2luZm9ybWF0aW9uOwogICAgICAgIG50ZnNfdTMyIGF0X2F0dHJpYnV0ZV9s aXN0OwogICAgICAgIG50ZnNfdTMyIGF0X2ZpbGVfbmFtZTsKICAgICAgICBudGZzX3UzMiBhdF92 b2x1bWVfdmVyc2lvbjsKICAgICAgICBudGZzX3UzMiBhdF9zZWN1cml0eV9kZXNjcmlwdG9yOwog ICAgICAgIG50ZnNfdTMyIGF0X3ZvbHVtZV9uYW1lOwogICAgICAgIG50ZnNfdTMyIGF0X3ZvbHVt ZV9pbmZvcm1hdGlvbjsKICAgICAgICBudGZzX3UzMiBhdF9kYXRhOwogICAgICAgIG50ZnNfdTMy IGF0X2luZGV4X3Jvb3Q7CiAgICAgICAgbnRmc191MzIgYXRfaW5kZXhfYWxsb2NhdGlvbjsKICAg ICAgICBudGZzX3UzMiBhdF9iaXRtYXA7CiAgICAgICAgbnRmc191MzIgYXRfc3ltbGluazsKCiAg ICAgICAgaW50IHNlY3Rvcl9zaXplOwogICAgICAgIGludCBjbHVzdGVyX3NpemU7CiAgICAgICAg aW50IGNsdXN0ZXJfc2l6ZV9iaXRzOwogICAgICAgIGludCBtZnRfY2x1c3RlcnNfcGVyX3JlY29y ZDsKICAgICAgICBpbnQgbWZ0X3JlY29yZF9zaXplOwogICAgICAgIGludCBtZnRfcmVjb3JkX3Np emVfYml0czsKICAgICAgICBpbnQgaW5kZXhfY2x1c3RlcnNfcGVyX3JlY29yZDsKICAgICAgICBp bnQgaW5kZXhfcmVjb3JkX3NpemU7CiAgICAgICAgaW50IGluZGV4X3JlY29yZF9zaXplX2JpdHM7 CiAgICAgICAgbnRmc19jbHVzdGVyX3QgbnJfY2x1c3RlcnM7CiAgICAgICAgbnRmc19jbHVzdGVy X3QgbWZ0X2xjbjsKICAgICAgICBudGZzX2NsdXN0ZXJfdCBtZnRfbWlycl9sY247CgogICAgICAg IHVuc2lnbmVkIGNoYXIgKm1mdDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCAqdXBjYXNlOwogICAg ICAgIHVuc2lnbmVkIGludCB1cGNhc2VfbGVuZ3RoOwoKICAgICAgICBzdHJ1Y3QgbnRmc19pbm9k ZV9pbmZvICptZnRfaW5vOwogICAgICAgIHN0cnVjdCBudGZzX2lub2RlX2luZm8gKm1mdG1pcnI7 CiAgICAgICAgc3RydWN0IG50ZnNfaW5vZGVfaW5mbyAqYml0bWFwOwogICAgICAgIHN0cnVjdCBz dXBlcl9ibG9jayAqc2I7CiAgICAgICAgdW5zaWduZWQgY2hhciBpbm9fZmxhZ3M7Cn07CiMgNjYz ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAi L3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvbXNkb3NfZnNfc2IuaCIg MQoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvZmF0X2N2 Zi5oIiAxCgoKCgoKc3RydWN0IGN2Zl9mb3JtYXQKeyBpbnQgY3ZmX3ZlcnNpb247CiAgY2hhciog Y3ZmX3ZlcnNpb25fdGV4dDsKICB1bnNpZ25lZCBsb25nIGZsYWdzOwogIGludCAoKmRldGVjdF9j dmYpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sqc2IpOwogIGludCAoKm1vdW50X2N2ZikgKHN0cnVjdCBz dXBlcl9ibG9jaypzYixjaGFyKm9wdGlvbnMpOwogIGludCAoKnVubW91bnRfY3ZmKSAoc3RydWN0 IHN1cGVyX2Jsb2NrKnNiKTsKICBzdHJ1Y3QgYnVmZmVyX2hlYWQqICgqY3ZmX2JyZWFkKSAoc3Ry dWN0IHN1cGVyX2Jsb2NrKnNiLGludCBibG9jayk7CiAgc3RydWN0IGJ1ZmZlcl9oZWFkKiAoKmN2 Zl9nZXRibGspIChzdHJ1Y3Qgc3VwZXJfYmxvY2sqc2IsaW50IGJsb2NrKTsKICB2b2lkICgqY3Zm X2JyZWxzZSkgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2Isc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7 CiAgdm9pZCAoKmN2Zl9tYXJrX2J1ZmZlcl9kaXJ0eSkgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2Is CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpOwog IHZvaWQgKCpjdmZfc2V0X3VwdG9kYXRlKSAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKICAgICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCiAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgdmFsKTsKICBpbnQgKCpjdmZfaXNfdXB0b2RhdGUpIChzdHJ1Y3Qgc3Vw ZXJfYmxvY2sgKnNiLHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpOwogIHZvaWQgKCpjdmZfbGxfcndf YmxvY2spIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogICAgICAgICAgICAgICAgICAgICAgICBp bnQgb3ByLAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmJyZXEsCiAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhbMzJdKTsKICBpbnQgKCpmYXRfYWNjZXNz KSAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixpbnQgbnIsaW50IG5ld192YWx1ZSk7CiAgaW50ICgq Y3ZmX3N0YXRmcykgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2Isc3RydWN0IHN0YXRmcyAqYnVmLCBp bnQgYnVmc2l6KTsKICBpbnQgKCpjdmZfYm1hcCkgKHN0cnVjdCBpbm9kZSAqaW5vZGUsaW50IGJs b2NrKTsKICBzc2l6ZV90ICgqY3ZmX2ZpbGVfcmVhZCkgKCBzdHJ1Y3QgZmlsZSAqLCBjaGFyICos IHNpemVfdCwgbG9mZl90ICopOwogIHNzaXplX3QgKCpjdmZfZmlsZV93cml0ZSkgKCBzdHJ1Y3Qg ZmlsZSAqLCBjb25zdCBjaGFyICosIHNpemVfdCwgbG9mZl90ICopOwogIGludCAoKmN2Zl9tbWFw KSAoc3RydWN0IGZpbGUgKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOwogIGludCAoKmN2Zl9y ZWFkcGFnZSkgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgcGFnZSAqKTsKICBpbnQgKCpjdmZfd3Jp dGVwYWdlKSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBwYWdlICopOwogIGludCAoKmN2Zl9kaXJf aW9jdGwpIChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxwLAogICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiAg dm9pZCAoKnplcm9fb3V0X2NsdXN0ZXIpIChzdHJ1Y3QgaW5vZGUqLCBpbnQgY2x1c3Rlcm5yKTsK fTsKCmludCByZWdpc3Rlcl9jdmZfZm9ybWF0KHN0cnVjdCBjdmZfZm9ybWF0KmN2Zl9mb3JtYXQp OwppbnQgdW5yZWdpc3Rlcl9jdmZfZm9ybWF0KHN0cnVjdCBjdmZfZm9ybWF0KmN2Zl9mb3JtYXQp Owp2b2lkIGRlY19jdmZfZm9ybWF0X3VzZV9jb3VudF9ieV92ZXJzaW9uKGludCB2ZXJzaW9uKTsK aW50IGRldGVjdF9jdmYoc3RydWN0IHN1cGVyX2Jsb2NrKnNiLGNoYXIqZm9yY2UpOwoKZXh0ZXJu IHN0cnVjdCBjdmZfZm9ybWF0ICpjdmZfZm9ybWF0c1tdOwpleHRlcm4gaW50IGN2Zl9mb3JtYXRf dXNlX2NvdW50W107CiMgNCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGlu dXgvbXNkb3NfZnNfc2IuaCIgMgoKCgoKCnN0cnVjdCBmYXRfbW91bnRfb3B0aW9ucyB7CiAgICAg ICAgdWlkX3QgZnNfdWlkOwogICAgICAgIGdpZF90IGZzX2dpZDsKICAgICAgICB1bnNpZ25lZCBz aG9ydCBmc191bWFzazsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBjb2RlcGFnZTsKICAgICAgICBj aGFyICppb2NoYXJzZXQ7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc2hvcnRuYW1lOwogICAgICAg IHVuc2lnbmVkIGNoYXIgbmFtZV9jaGVjazsKICAgICAgICB1bnNpZ25lZCBjaGFyIGNvbnZlcnNp b247CiAgICAgICAgdW5zaWduZWQgcXVpZXQ6MSwKICAgICAgICAgICAgICAgICBzaG93ZXhlYzox LAogICAgICAgICAgICAgICAgIHN5c19pbW11dGFibGU6MSwKICAgICAgICAgICAgICAgICBkb3Rz T0s6MSwKICAgICAgICAgICAgICAgICBpc3ZmYXQ6MSwKICAgICAgICAgICAgICAgICB1dGY4OjEs CiAgICAgICAgICAgICAgICAgdW5pY29kZV94bGF0ZToxLAogICAgICAgICAgICAgICAgIHBvc2l4 ZnM6MSwKICAgICAgICAgICAgICAgICBudW10YWlsOjEsCiAgICAgICAgICAgICAgICAgYXRhcmk6 MSwKICAgICAgICAgICAgICAgICBmYXQzMjoxLAogICAgICAgICAgICAgICAgIG5vY2FzZToxOwp9 OwoKc3RydWN0IG1zZG9zX3NiX2luZm8gewogICAgICAgIHVuc2lnbmVkIHNob3J0IGNsdXN0ZXJf c2l6ZTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBjbHVzdGVyX2JpdHM7CiAgICAgICAgdW5zaWdu ZWQgY2hhciBmYXRzLGZhdF9iaXRzOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGZhdF9zdGFydDsK ICAgICAgICB1bnNpZ25lZCBsb25nIGZhdF9sZW5ndGg7CiAgICAgICAgdW5zaWduZWQgbG9uZyBk aXJfc3RhcnQ7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgZGlyX2VudHJpZXM7CiAgICAgICAgdW5z aWduZWQgbG9uZyBkYXRhX3N0YXJ0OwogICAgICAgIHVuc2lnbmVkIGxvbmcgY2x1c3RlcnM7CiAg ICAgICAgdW5zaWduZWQgbG9uZyByb290X2NsdXN0ZXI7CiAgICAgICAgdW5zaWduZWQgbG9uZyBm c2luZm9fc2VjdG9yOwogICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgZmF0X2xvY2s7CiAgICAgICAg aW50IHByZXZfZnJlZTsKICAgICAgICBpbnQgZnJlZV9jbHVzdGVyczsKICAgICAgICBzdHJ1Y3Qg ZmF0X21vdW50X29wdGlvbnMgb3B0aW9uczsKICAgICAgICBzdHJ1Y3QgbmxzX3RhYmxlICpubHNf ZGlzazsKICAgICAgICBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfaW87CiAgICAgICAgc3RydWN0IGN2 Zl9mb3JtYXQqIGN2Zl9mb3JtYXQ7CiAgICAgICAgdm9pZCAqZGlyX29wczsKICAgICAgICB2b2lk ICpwcml2YXRlX2RhdGE7CiAgICAgICAgaW50IGRpcl9wZXJfYmxvY2s7CiAgICAgICAgaW50IGRp cl9wZXJfYmxvY2tfYml0czsKfTsKIyA2NjQgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9p bmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5j bHVkZS9saW51eC9pc29fZnNfc2IuaCIgMQoKCgoKCgpzdHJ1Y3QgaXNvZnNfc2JfaW5mbyB7CiAg ICAgICAgdW5zaWduZWQgbG9uZyBzX25pbm9kZXM7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzX256 b25lczsKICAgICAgICB1bnNpZ25lZCBsb25nIHNfZmlyc3RkYXRhem9uZTsKICAgICAgICB1bnNp Z25lZCBsb25nIHNfbG9nX3pvbmVfc2l6ZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHNfbWF4X3Np emU7CgogICAgICAgIHVuc2lnbmVkIGNoYXIgc19oaWdoX3NpZXJyYTsKICAgICAgICB1bnNpZ25l ZCBjaGFyIHNfbWFwcGluZzsKICAgICAgICBpbnQgc19yb2NrX29mZnNldDsKICAgICAgICB1bnNp Z25lZCBjaGFyIHNfcm9jazsKICAgICAgICB1bnNpZ25lZCBjaGFyIHNfam9saWV0X2xldmVsOwog ICAgICAgIHVuc2lnbmVkIGNoYXIgc191dGY4OwogICAgICAgIHVuc2lnbmVkIGNoYXIgc19jcnVm dDsKCgogICAgICAgIHVuc2lnbmVkIGNoYXIgc191bmhpZGU7CiAgICAgICAgdW5zaWduZWQgY2hh ciBzX25vc3VpZDsKICAgICAgICB1bnNpZ25lZCBjaGFyIHNfbm9kZXY7CiAgICAgICAgbW9kZV90 IHNfbW9kZTsKICAgICAgICBnaWRfdCBzX2dpZDsKICAgICAgICB1aWRfdCBzX3VpZDsKICAgICAg ICBzdHJ1Y3QgbmxzX3RhYmxlICpzX25sc19pb2NoYXJzZXQ7Cn07CiMgNjY1ICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvbmZzX2ZzX3NiLmgiIDEKCgoKCgoKc3RydWN0 IG5mc19zZXJ2ZXIgewogICAgICAgIHN0cnVjdCBycGNfY2xudCAqIGNsaWVudDsKICAgICAgICBz dHJ1Y3QgbmZzX3JwY19vcHMgKiBycGNfb3BzOwogICAgICAgIGludCBmbGFnczsKICAgICAgICB1 bnNpZ25lZCBpbnQgcnNpemU7CiAgICAgICAgdW5zaWduZWQgaW50IHJwYWdlczsKICAgICAgICB1 bnNpZ25lZCBpbnQgd3NpemU7CiAgICAgICAgdW5zaWduZWQgaW50IHdwYWdlczsKICAgICAgICB1 bnNpZ25lZCBpbnQgZHRzaXplOwogICAgICAgIHVuc2lnbmVkIGludCBic2l6ZTsKICAgICAgICB1 bnNpZ25lZCBpbnQgYWNyZWdtaW47CiAgICAgICAgdW5zaWduZWQgaW50IGFjcmVnbWF4OwogICAg ICAgIHVuc2lnbmVkIGludCBhY2Rpcm1pbjsKICAgICAgICB1bnNpZ25lZCBpbnQgYWNkaXJtYXg7 CiAgICAgICAgdW5zaWduZWQgaW50IG5hbWVsZW47CiAgICAgICAgY2hhciAqIGhvc3RuYW1lOwog ICAgICAgIHN0cnVjdCBuZnNfcmVxbGlzdCAqIHJ3X3JlcXVlc3RzOwp9OwoKCgoKc3RydWN0IG5m c19zYl9pbmZvIHsKICAgICAgICBzdHJ1Y3QgbmZzX3NlcnZlciBzX3NlcnZlcjsKfTsKIyA2NjYg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIv dXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9zeXN2X2ZzX3NiLmgiIDEK IyAxMyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc3lzdl9mc19z Yi5oIgpzdHJ1Y3Qgc3lzdl9zYl9pbmZvIHsKICAgICAgICBpbnQgc190eXBlOwogICAgICAgIGNo YXIgc19ieXRlc2V4OwogICAgICAgIGNoYXIgc19rbHVkZ2Vfc3ltbGlua3M7CiAgICAgICAgY2hh ciBzX3RydW5jYXRlOwoKICAgICAgICBubGlua190IHNfbGlua19tYXg7CiAgICAgICAgdW5zaWdu ZWQgaW50IHNfaW5vZGVzX3Blcl9ibG9jazsKICAgICAgICB1bnNpZ25lZCBpbnQgc19pbm9kZXNf cGVyX2Jsb2NrXzE7CiAgICAgICAgdW5zaWduZWQgaW50IHNfaW5vZGVzX3Blcl9ibG9ja19iaXRz OwogICAgICAgIHVuc2lnbmVkIGludCBzX2luZF9wZXJfYmxvY2s7CiAgICAgICAgdW5zaWduZWQg aW50IHNfaW5kX3Blcl9ibG9ja19iaXRzOwogICAgICAgIHVuc2lnbmVkIGludCBzX2luZF9wZXJf YmxvY2tfMjsKICAgICAgICB1bnNpZ25lZCBpbnQgc190b29iaWdfYmxvY2s7CiAgICAgICAgdW5z aWduZWQgaW50IHNfYmxvY2tfYmFzZTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzX2ZpY19zaXpl OwogICAgICAgIHVuc2lnbmVkIHNob3J0IHNfZmxjX3NpemU7CgogICAgICAgIHN0cnVjdCBidWZm ZXJfaGVhZCAqc19iaDE7CiAgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpzX2JoMjsKCgogICAg ICAgIGNoYXIgKiBzX3NiZDE7CiAgICAgICAgY2hhciAqIHNfc2JkMjsKICAgICAgICB1MTYgKnNf c2JfZmljX2NvdW50OwogICAgICAgIHUxNiAqc19zYl9maWNfaW5vZGVzOwogICAgICAgIHUxNiAq c19zYl90b3RhbF9mcmVlX2lub2RlczsKICAgICAgICB1MTYgKnNfYmNhY2hlX2NvdW50OwogICAg ICAgIHUzMiAqc19iY2FjaGU7CiAgICAgICAgdTMyICpzX2ZyZWVfYmxvY2tzOwogICAgICAgIHUz MiAqc19zYl90aW1lOwogICAgICAgIHUzMiAqc19zYl9zdGF0ZTsKCgogICAgICAgIHUzMiBzX2Zp cnN0aW5vZGV6b25lOwogICAgICAgIHUzMiBzX2ZpcnN0ZGF0YXpvbmU7CiAgICAgICAgdTMyIHNf bmlub2RlczsKICAgICAgICB1MzIgc19uZGF0YXpvbmVzOwogICAgICAgIHUzMiBzX256b25lczsK ICAgICAgICB1MTYgc19uYW1lbGVuOwp9OwojIDY2NyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xp bnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51 eC9pbmNsdWRlL2xpbnV4L2FmZnNfZnNfc2IuaCIgMQojIDExICIvdXNyL3NyYy9saW51eC0yLjQu MTMvbGludXgvaW5jbHVkZS9saW51eC9hZmZzX2ZzX3NiLmgiCnN0cnVjdCBhZmZzX2JtX2luZm8g ewogICAgICAgIHUzMiBibV9rZXk7CiAgICAgICAgdTMyIGJtX2ZyZWU7Cn07CgpzdHJ1Y3QgYWZm c19zYl9pbmZvIHsKICAgICAgICBpbnQgc19wYXJ0aXRpb25fc2l6ZTsKICAgICAgICBpbnQgc19y ZXNlcnZlZDsKCiAgICAgICAgdTMyIHNfZGF0YV9ibGtzaXplOwogICAgICAgIHUzMiBzX3Jvb3Rf YmxvY2s7CiAgICAgICAgaW50IHNfaGFzaHNpemU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzX2Zs YWdzOwogICAgICAgIHVpZF90IHNfdWlkOwogICAgICAgIGdpZF90IHNfZ2lkOwogICAgICAgIHVt b2RlX3Qgc19tb2RlOwogICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqc19yb290X2JoOwogICAg ICAgIHN0cnVjdCBzZW1hcGhvcmUgc19ibWxvY2s7CiAgICAgICAgc3RydWN0IGFmZnNfYm1faW5m byAqc19iaXRtYXA7CiAgICAgICAgdTMyIHNfYm1hcF9jb3VudDsKICAgICAgICB1MzIgc19ibWFw X2JpdHM7CiAgICAgICAgdTMyIHNfbGFzdF9ibWFwOwogICAgICAgIHN0cnVjdCBidWZmZXJfaGVh ZCAqc19ibWFwX2JoOwogICAgICAgIGNoYXIgKnNfcHJlZml4OwogICAgICAgIGludCBzX3ByZWZp eF9sZW47CiAgICAgICAgY2hhciBzX3ZvbHVtZVszMl07Cn07CiMgNjY4ICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvdWZzX2ZzX3NiLmgiIDEKIyAxNyAiL3Vzci9zcmMv bGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvdWZzX2ZzX3NiLmgiCiMgMSAiL3Vzci9z cmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvdWZzX2ZzLmgiIDEKIyAzMCAiL3Vz ci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvdWZzX2ZzLmgiCiMgMSAiL3Vz ci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvdHlwZXMuaCIgMQojIDMxICIv dXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC91ZnNfZnMuaCIgMgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oIiAxCiMg MzIgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3Vmc19mcy5oIiAy CiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvdGltZS5oIiAx CiMgMzMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3Vmc19mcy5o IiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc3RhdC5o IiAxCiMgMzQgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3Vmc19m cy5oIiAyCiMgMjQ4ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC91 ZnNfZnMuaCIKc3RydWN0IHVmc190aW1ldmFsIHsKICAgICAgICBfX3MzMiB0dl9zZWM7CiAgICAg ICAgX19zMzIgdHZfdXNlYzsKfTsKCnN0cnVjdCB1ZnNfZGlyX2VudHJ5IHsKICAgICAgICBfX3Uz MiBkX2lubzsKICAgICAgICBfX3UxNiBkX3JlY2xlbjsKICAgICAgICB1bmlvbiB7CiAgICAgICAg ICAgICAgICBfX3UxNiBkX25hbWxlbjsKICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAg ICAgICAgICAgICAgICAgIF9fdTggZF90eXBlOwogICAgICAgICAgICAgICAgICAgICAgICBfX3U4 IGRfbmFtbGVuOwogICAgICAgICAgICAgICAgfSBkXzQ0OwogICAgICAgIH0gZF91OwogICAgICAg IF9fdTggZF9uYW1lWzI1NSArIDFdOwp9OwoKc3RydWN0IHVmc19jc3VtIHsKICAgICAgICBfX3Uz MiBjc19uZGlyOwogICAgICAgIF9fdTMyIGNzX25iZnJlZTsKICAgICAgICBfX3UzMiBjc19uaWZy ZWU7CiAgICAgICAgX191MzIgY3NfbmZmcmVlOwp9OwoKCgoKc3RydWN0IHVmc19zdXBlcl9ibG9j ayB7CiAgICAgICAgX191MzIgZnNfbGluazsKICAgICAgICBfX3UzMiBmc19ybGluazsKICAgICAg ICBfX3UzMiBmc19zYmxrbm87CiAgICAgICAgX191MzIgZnNfY2Jsa25vOwogICAgICAgIF9fdTMy IGZzX2libGtubzsKICAgICAgICBfX3UzMiBmc19kYmxrbm87CiAgICAgICAgX191MzIgZnNfY2dv ZmZzZXQ7CiAgICAgICAgX191MzIgZnNfY2dtYXNrOwogICAgICAgIF9fdTMyIGZzX3RpbWU7CiAg ICAgICAgX191MzIgZnNfc2l6ZTsKICAgICAgICBfX3UzMiBmc19kc2l6ZTsKICAgICAgICBfX3Uz MiBmc19uY2c7CiAgICAgICAgX191MzIgZnNfYnNpemU7CiAgICAgICAgX191MzIgZnNfZnNpemU7 CiAgICAgICAgX191MzIgZnNfZnJhZzsKCiAgICAgICAgX191MzIgZnNfbWluZnJlZTsKICAgICAg ICBfX3UzMiBmc19yb3RkZWxheTsKICAgICAgICBfX3UzMiBmc19ycHM7CgogICAgICAgIF9fdTMy IGZzX2JtYXNrOwogICAgICAgIF9fdTMyIGZzX2ZtYXNrOwogICAgICAgIF9fdTMyIGZzX2JzaGlm dDsKICAgICAgICBfX3UzMiBmc19mc2hpZnQ7CgogICAgICAgIF9fdTMyIGZzX21heGNvbnRpZzsK ICAgICAgICBfX3UzMiBmc19tYXhicGc7CgogICAgICAgIF9fdTMyIGZzX2ZyYWdzaGlmdDsKICAg ICAgICBfX3UzMiBmc19mc2J0b2RiOwogICAgICAgIF9fdTMyIGZzX3Nic2l6ZTsKICAgICAgICBf X3UzMiBmc19jc21hc2s7CiAgICAgICAgX191MzIgZnNfY3NzaGlmdDsKICAgICAgICBfX3UzMiBm c19uaW5kaXI7CiAgICAgICAgX191MzIgZnNfaW5vcGI7CiAgICAgICAgX191MzIgZnNfbnNwZjsK CiAgICAgICAgX191MzIgZnNfb3B0aW07CgogICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgICAg IHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fdTMyIGZzX25wc2VjdDsKICAgICAg ICAgICAgICAgIH0gZnNfc3VuOwogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAg ICAgICAgICAgICAgX19zMzIgZnNfc3RhdGU7CiAgICAgICAgICAgICAgICB9IGZzX3N1bng4NjsK ICAgICAgICB9IGZzX3UxOwogICAgICAgIF9fdTMyIGZzX2ludGVybGVhdmU7CiAgICAgICAgX191 MzIgZnNfdHJhY2tza2V3OwoKCgoKICAgICAgICBfX3UzMiBmc19pZFsyXTsKCiAgICAgICAgX191 MzIgZnNfY3NhZGRyOwogICAgICAgIF9fdTMyIGZzX2Nzc2l6ZTsKICAgICAgICBfX3UzMiBmc19j Z3NpemU7CgogICAgICAgIF9fdTMyIGZzX250cmFrOwogICAgICAgIF9fdTMyIGZzX25zZWN0Owog ICAgICAgIF9fdTMyIGZzX3NwYzsKCiAgICAgICAgX191MzIgZnNfbmN5bDsKCiAgICAgICAgX191 MzIgZnNfY3BnOwogICAgICAgIF9fdTMyIGZzX2lwZzsKICAgICAgICBfX3UzMiBmc19mcGc7Cgog ICAgICAgIHN0cnVjdCB1ZnNfY3N1bSBmc19jc3RvdGFsOwoKICAgICAgICBfX3M4IGZzX2Ztb2Q7 CiAgICAgICAgX19zOCBmc19jbGVhbjsKICAgICAgICBfX3M4IGZzX3Jvbmx5OwogICAgICAgIF9f czggZnNfZmxhZ3M7CiAgICAgICAgX19zOCBmc19mc21udFs1MTJdOwoKICAgICAgICBfX3UzMiBm c19jZ3JvdG9yOwogICAgICAgIF9fdTMyIGZzX2NzcFszMV07CiAgICAgICAgX191MzIgZnNfbWF4 Y2x1c3RlcjsKICAgICAgICBfX3UzMiBmc19jcGM7CiAgICAgICAgX191MTYgZnNfb3Bvc3RibFsx Nl1bOF07CiAgICAgICAgdW5pb24gewogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAg ICAgICAgICAgICAgICAgX19zMzIgZnNfc3BhcmVjb25bNTNdOwogICAgICAgICAgICAgICAgICAg ICAgICBfX3MzMiBmc19yZWNsYWltOwogICAgICAgICAgICAgICAgICAgICAgICBfX3MzMiBmc19z cGFyZWNvbjJbMV07CiAgICAgICAgICAgICAgICAgICAgICAgIF9fczMyIGZzX3N0YXRlOwogICAg ICAgICAgICAgICAgICAgICAgICBfX3UzMiBmc19xYm1hc2tbMl07CiAgICAgICAgICAgICAgICAg ICAgICAgIF9fdTMyIGZzX3FmbWFza1syXTsKICAgICAgICAgICAgICAgIH0gZnNfc3VuOwogICAg ICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgX19zMzIgZnNfc3Bh cmVjb25bNTNdOwogICAgICAgICAgICAgICAgICAgICAgICBfX3MzMiBmc19yZWNsYWltOwogICAg ICAgICAgICAgICAgICAgICAgICBfX3MzMiBmc19zcGFyZWNvbjJbMV07CiAgICAgICAgICAgICAg ICAgICAgICAgIF9fdTMyIGZzX25wc2VjdDsKICAgICAgICAgICAgICAgICAgICAgICAgX191MzIg ZnNfcWJtYXNrWzJdOwogICAgICAgICAgICAgICAgICAgICAgICBfX3UzMiBmc19xZm1hc2tbMl07 CiAgICAgICAgICAgICAgICB9IGZzX3N1bng4NjsKICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAg ICAgICAgICAgICAgICAgICAgICAgIF9fczMyIGZzX3NwYXJlY29uWzUwXTsKICAgICAgICAgICAg ICAgICAgICAgICAgX19zMzIgZnNfY29udGlnc3Vtc2l6ZTsKICAgICAgICAgICAgICAgICAgICAg ICAgX19zMzIgZnNfbWF4c3ltbGlua2xlbjsKICAgICAgICAgICAgICAgICAgICAgICAgX19zMzIg ZnNfaW5vZGVmbXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fdTMyIGZzX21heGZpbGVzaXpl WzJdOwogICAgICAgICAgICAgICAgICAgICAgICBfX3UzMiBmc19xYm1hc2tbMl07CiAgICAgICAg ICAgICAgICAgICAgICAgIF9fdTMyIGZzX3FmbWFza1syXTsKICAgICAgICAgICAgICAgICAgICAg ICAgX19zMzIgZnNfc3RhdGU7CiAgICAgICAgICAgICAgICB9IGZzXzQ0OwogICAgICAgIH0gZnNf dTI7CiAgICAgICAgX19zMzIgZnNfcG9zdGJsZm9ybWF0OwogICAgICAgIF9fczMyIGZzX25ycG9z OwogICAgICAgIF9fczMyIGZzX3Bvc3RibG9mZjsKICAgICAgICBfX3MzMiBmc19yb3RibG9mZjsK ICAgICAgICBfX3MzMiBmc19tYWdpYzsKICAgICAgICBfX3U4IGZzX3NwYWNlWzFdOwp9OwojIDQy NSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvdWZzX2ZzLmgiCnN0 cnVjdCB1ZnNfY3lsaW5kZXJfZ3JvdXAgewogICAgICAgIF9fdTMyIGNnX2xpbms7CiAgICAgICAg X191MzIgY2dfbWFnaWM7CiAgICAgICAgX191MzIgY2dfdGltZTsKICAgICAgICBfX3UzMiBjZ19j Z3g7CiAgICAgICAgX191MTYgY2dfbmN5bDsKICAgICAgICBfX3UxNiBjZ19uaWJsazsKICAgICAg ICBfX3UzMiBjZ19uZGJsazsKICAgICAgICBzdHJ1Y3QgdWZzX2NzdW0gY2dfY3M7CiAgICAgICAg X191MzIgY2dfcm90b3I7CiAgICAgICAgX191MzIgY2dfZnJvdG9yOwogICAgICAgIF9fdTMyIGNn X2lyb3RvcjsKICAgICAgICBfX3UzMiBjZ19mcnN1bVsoODE5MiAvIDEwMjQpXTsKICAgICAgICBf X3UzMiBjZ19idG90b2ZmOwogICAgICAgIF9fdTMyIGNnX2JvZmY7CiAgICAgICAgX191MzIgY2df aXVzZWRvZmY7CiAgICAgICAgX191MzIgY2dfZnJlZW9mZjsKICAgICAgICBfX3UzMiBjZ19uZXh0 ZnJlZW9mZjsKICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAg ICAgICAgICAgICAgICAgICBfX3UzMiBjZ19jbHVzdGVyc3Vtb2ZmOwogICAgICAgICAgICAgICAg ICAgICAgICBfX3UzMiBjZ19jbHVzdGVyb2ZmOwogICAgICAgICAgICAgICAgICAgICAgICBfX3Uz MiBjZ19uY2x1c3RlcmJsa3M7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fdTMyIGNnX3NwYXJl Y29uWzEzXTsKICAgICAgICAgICAgICAgIH0gY2dfNDQ7CiAgICAgICAgICAgICAgICBfX3UzMiBj Z19zcGFyZWNvblsxNl07CiAgICAgICAgfSBjZ191OwogICAgICAgIF9fdTggY2dfc3BhY2VbMV07 Cgp9OwoKCgoKc3RydWN0IHVmc19pbm9kZSB7CiAgICAgICAgX191MTYgdWlfbW9kZTsKICAgICAg ICBfX3UxNiB1aV9ubGluazsKICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICBzdHJ1Y3Qg ewogICAgICAgICAgICAgICAgICAgICAgICBfX3UxNiB1aV9zdWlkOwogICAgICAgICAgICAgICAg ICAgICAgICBfX3UxNiB1aV9zZ2lkOwogICAgICAgICAgICAgICAgfSBvbGRpZHM7CiAgICAgICAg ICAgICAgICBfX3UzMiB1aV9pbnVtYmVyOwogICAgICAgICAgICAgICAgX191MzIgdWlfYXV0aG9y OwogICAgICAgIH0gdWlfdTE7CiAgICAgICAgX191NjQgdWlfc2l6ZTsKICAgICAgICBzdHJ1Y3Qg dWZzX3RpbWV2YWwgdWlfYXRpbWU7CiAgICAgICAgc3RydWN0IHVmc190aW1ldmFsIHVpX210aW1l OwogICAgICAgIHN0cnVjdCB1ZnNfdGltZXZhbCB1aV9jdGltZTsKICAgICAgICB1bmlvbiB7CiAg ICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICBfX3UzMiB1aV9k YlsxMl07CiAgICAgICAgICAgICAgICAgICAgICAgIF9fdTMyIHVpX2liWzNdOwogICAgICAgICAg ICAgICAgfSB1aV9hZGRyOwogICAgICAgICAgICAgICAgX191OCB1aV9zeW1saW5rWzQqKDEyICsz KV07CiAgICAgICAgfSB1aV91MjsKICAgICAgICBfX3UzMiB1aV9mbGFnczsKICAgICAgICBfX3Uz MiB1aV9ibG9ja3M7CiAgICAgICAgX191MzIgdWlfZ2VuOwogICAgICAgIHVuaW9uIHsKICAgICAg ICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fdTMyIHVpX3NoYWRv dzsKICAgICAgICAgICAgICAgICAgICAgICAgX191MzIgdWlfdWlkOwogICAgICAgICAgICAgICAg ICAgICAgICBfX3UzMiB1aV9naWQ7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fdTMyIHVpX29l ZnRmbGFnOwogICAgICAgICAgICAgICAgfSB1aV9zdW47CiAgICAgICAgICAgICAgICBzdHJ1Y3Qg ewogICAgICAgICAgICAgICAgICAgICAgICBfX3UzMiB1aV91aWQ7CiAgICAgICAgICAgICAgICAg ICAgICAgIF9fdTMyIHVpX2dpZDsKICAgICAgICAgICAgICAgICAgICAgICAgX19zMzIgdWlfc3Bh cmVbMl07CiAgICAgICAgICAgICAgICB9IHVpXzQ0OwogICAgICAgICAgICAgICAgc3RydWN0IHsK ICAgICAgICAgICAgICAgICAgICAgICAgX191MzIgdWlfdWlkOwogICAgICAgICAgICAgICAgICAg ICAgICBfX3UzMiB1aV9naWQ7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fdTE2IHVpX21vZGVo OwogICAgICAgICAgICAgICAgICAgICAgICBfX3UxNiB1aV9zcGFyZTsKICAgICAgICAgICAgICAg ICAgICAgICAgX191MzIgdWlfdHJhbnM7CiAgICAgICAgICAgICAgICB9IHVpX2h1cmQ7CiAgICAg ICAgfSB1aV91MzsKfTsKIyA1MjQgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRl L2xpbnV4L3Vmc19mcy5oIgpleHRlcm4gdm9pZCB1ZnNfZnJlZV9mcmFnbWVudHMgKHN0cnVjdCBp bm9kZSAqLCB1bnNpZ25lZCwgdW5zaWduZWQpOwpleHRlcm4gdm9pZCB1ZnNfZnJlZV9ibG9ja3Mg KHN0cnVjdCBpbm9kZSAqLCB1bnNpZ25lZCwgdW5zaWduZWQpOwpleHRlcm4gdW5zaWduZWQgdWZz X25ld19mcmFnbWVudHMgKHN0cnVjdCBpbm9kZSAqLCB1MzIgKiwgdW5zaWduZWQsIHVuc2lnbmVk LCB1bnNpZ25lZCwgaW50ICopOwoKCmV4dGVybiBzdHJ1Y3QgdWZzX2NnX3ByaXZhdGVfaW5mbyAq IHVmc19sb2FkX2N5bGluZGVyIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdW5zaWduZWQpOwpleHRl cm4gdm9pZCB1ZnNfcHV0X2N5bGluZGVyIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdW5zaWduZWQp OwoKCmV4dGVybiBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB1ZnNfZGlyX2lub2RlX29wZXJhdGlv bnM7CmV4dGVybiBpbnQgdWZzX2NoZWNrX2Rpcl9lbnRyeSAoY29uc3QgY2hhciAqLCBzdHJ1Y3Qg aW5vZGUgKiwgc3RydWN0IHVmc19kaXJfZW50cnkgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICosIHVu c2lnbmVkIGxvbmcpOwpleHRlcm4gaW50IHVmc19hZGRfbGluayAoc3RydWN0IGRlbnRyeSAqLCBz dHJ1Y3QgaW5vZGUgKik7CmV4dGVybiBpbm9fdCB1ZnNfaW5vZGVfYnlfbmFtZShzdHJ1Y3QgaW5v ZGUgKiwgc3RydWN0IGRlbnRyeSAqKTsKZXh0ZXJuIGludCB1ZnNfbWFrZV9lbXB0eShzdHJ1Y3Qg aW5vZGUgKiwgc3RydWN0IGlub2RlICopOwpleHRlcm4gc3RydWN0IHVmc19kaXJfZW50cnkgKiB1 ZnNfZmluZF9lbnRyeSAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiopOwpl eHRlcm4gaW50IHVmc19kZWxldGVfZW50cnkgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgdWZzX2Rp cl9lbnRyeSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7CmV4dGVybiBpbnQgdWZzX2VtcHR5X2Rp ciAoc3RydWN0IGlub2RlICopOwpleHRlcm4gc3RydWN0IHVmc19kaXJfZW50cnkgKiB1ZnNfZG90 ZG90IChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICoqKTsKZXh0ZXJuIHZvaWQg dWZzX3NldF9saW5rKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgdWZzX2Rpcl9lbnRyeSAqLCBzdHJ1 Y3QgYnVmZmVyX2hlYWQgKiwgc3RydWN0IGlub2RlICopOwoKCmV4dGVybiBzdHJ1Y3QgaW5vZGVf b3BlcmF0aW9ucyB1ZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zOwpleHRlcm4gc3RydWN0IGZpbGVf b3BlcmF0aW9ucyB1ZnNfZmlsZV9vcGVyYXRpb25zOwoKZXh0ZXJuIHN0cnVjdCBhZGRyZXNzX3Nw YWNlX29wZXJhdGlvbnMgdWZzX2FvcHM7CgoKZXh0ZXJuIHZvaWQgdWZzX2ZyZWVfaW5vZGUgKHN0 cnVjdCBpbm9kZSAqaW5vZGUpOwpleHRlcm4gc3RydWN0IGlub2RlICogdWZzX25ld19pbm9kZSAo Y29uc3Qgc3RydWN0IGlub2RlICosIGludCk7CgoKZXh0ZXJuIGludCB1ZnNfZnJhZ19tYXAgKHN0 cnVjdCBpbm9kZSAqLCBpbnQpOwpleHRlcm4gdm9pZCB1ZnNfcmVhZF9pbm9kZSAoc3RydWN0IGlu b2RlICopOwpleHRlcm4gdm9pZCB1ZnNfcHV0X2lub2RlIChzdHJ1Y3QgaW5vZGUgKik7CmV4dGVy biB2b2lkIHVmc193cml0ZV9pbm9kZSAoc3RydWN0IGlub2RlICosIGludCk7CmV4dGVybiBpbnQg dWZzX3N5bmNfaW5vZGUgKHN0cnVjdCBpbm9kZSAqKTsKZXh0ZXJuIHZvaWQgdWZzX2RlbGV0ZV9p bm9kZSAoc3RydWN0IGlub2RlICopOwpleHRlcm4gc3RydWN0IGJ1ZmZlcl9oZWFkICogdWZzX2dl dGZyYWcgKHN0cnVjdCBpbm9kZSAqLCB1bnNpZ25lZCwgaW50LCBpbnQgKik7CmV4dGVybiBzdHJ1 Y3QgYnVmZmVyX2hlYWQgKiB1ZnNfYnJlYWQgKHN0cnVjdCBpbm9kZSAqLCB1bnNpZ25lZCwgaW50 LCBpbnQgKik7CgoKZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWZzX2Rpcl9vcGVyYXRp b25zOwoKCmV4dGVybiBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSB1ZnNfZnNfdHlwZTsKZXh0ZXJu IHZvaWQgdWZzX3dhcm5pbmcgKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBjb25zdCBjaGFyICosIGNv bnN0IGNoYXIgKiwgLi4uKSBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDMsIDQpKSk7 CmV4dGVybiB2b2lkIHVmc19lcnJvciAoc3RydWN0IHN1cGVyX2Jsb2NrICosIGNvbnN0IGNoYXIg KiwgY29uc3QgY2hhciAqLCAuLi4pIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMywg NCkpKTsKZXh0ZXJuIHZvaWQgdWZzX3BhbmljIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgY29uc3Qg Y2hhciAqLCBjb25zdCBjaGFyICosIC4uLikgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRm LCAzLCA0KSkpOwpleHRlcm4gdm9pZCB1ZnNfd3JpdGVfc3VwZXIgKHN0cnVjdCBzdXBlcl9ibG9j ayAqKTsKCgpleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdWZzX2Zhc3Rfc3ltbGlua19p bm9kZV9vcGVyYXRpb25zOwoKCmV4dGVybiB2b2lkIHVmc190cnVuY2F0ZSAoc3RydWN0IGlub2Rl ICopOwojIDE4ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC91ZnNf ZnNfc2IuaCIgMgoKCgoKCnN0cnVjdCB1ZnNfYnVmZmVyX2hlYWQgewogICAgICAgIHVuc2lnbmVk IGZyYWdtZW50OwogICAgICAgIHVuc2lnbmVkIGNvdW50OwogICAgICAgIHN0cnVjdCBidWZmZXJf aGVhZCAqIGJoWyg4MTkyIC8gMTAyNCldOwp9OwoKc3RydWN0IHVmc19jZ19wcml2YXRlX2luZm8g ewogICAgICAgIHN0cnVjdCB1ZnNfY3lsaW5kZXJfZ3JvdXAgdWNnOwogICAgICAgIF9fdTMyIGNf Y2d4OwogICAgICAgIF9fdTE2IGNfbmN5bDsKICAgICAgICBfX3UxNiBjX25pYmxrOwogICAgICAg IF9fdTMyIGNfbmRibGs7CiAgICAgICAgX191MzIgY19yb3RvcjsKICAgICAgICBfX3UzMiBjX2Zy b3RvcjsKICAgICAgICBfX3UzMiBjX2lyb3RvcjsKICAgICAgICBfX3UzMiBjX2J0b3RvZmY7CiAg ICAgICAgX191MzIgY19ib2ZmOwogICAgICAgIF9fdTMyIGNfaXVzZWRvZmY7CiAgICAgICAgX191 MzIgY19mcmVlb2ZmOwogICAgICAgIF9fdTMyIGNfbmV4dGZyZWVvZmY7CiAgICAgICAgX191MzIg Y19jbHVzdGVyc3Vtb2ZmOwogICAgICAgIF9fdTMyIGNfY2x1c3Rlcm9mZjsKICAgICAgICBfX3Uz MiBjX25jbHVzdGVyYmxrczsKfTsKCnN0cnVjdCB1ZnNfc2JfcHJpdmF0ZV9pbmZvIHsKICAgICAg ICBzdHJ1Y3QgdWZzX2J1ZmZlcl9oZWFkIHNfdWJoOwogICAgICAgIF9fdTMyIHNfc2Jsa25vOwog ICAgICAgIF9fdTMyIHNfY2Jsa25vOwogICAgICAgIF9fdTMyIHNfaWJsa25vOwogICAgICAgIF9f dTMyIHNfZGJsa25vOwogICAgICAgIF9fdTMyIHNfY2dvZmZzZXQ7CiAgICAgICAgX191MzIgc19j Z21hc2s7CiAgICAgICAgX191MzIgc19zaXplOwogICAgICAgIF9fdTMyIHNfZHNpemU7CiAgICAg ICAgX191MzIgc19uY2c7CiAgICAgICAgX191MzIgc19ic2l6ZTsKICAgICAgICBfX3UzMiBzX2Zz aXplOwogICAgICAgIF9fdTMyIHNfZnBiOwogICAgICAgIF9fdTMyIHNfbWluZnJlZTsKICAgICAg ICBfX3UzMiBzX2JtYXNrOwogICAgICAgIF9fdTMyIHNfZm1hc2s7CiAgICAgICAgX191MzIgc19i c2hpZnQ7CiAgICAgICAgX191MzIgc19mc2hpZnQ7CiAgICAgICAgX191MzIgc19mcGJzaGlmdDsK ICAgICAgICBfX3UzMiBzX2ZzYnRvZGI7CiAgICAgICAgX191MzIgc19zYnNpemU7CiAgICAgICAg X191MzIgc19jc21hc2s7CiAgICAgICAgX191MzIgc19jc3NoaWZ0OwogICAgICAgIF9fdTMyIHNf bmluZGlyOwogICAgICAgIF9fdTMyIHNfaW5vcGI7CiAgICAgICAgX191MzIgc19uc3BmOwogICAg ICAgIF9fdTMyIHNfbnBzZWN0OwogICAgICAgIF9fdTMyIHNfaW50ZXJsZWF2ZTsKICAgICAgICBf X3UzMiBzX3RyYWNrc2tldzsKICAgICAgICBfX3UzMiBzX2NzYWRkcjsKICAgICAgICBfX3UzMiBz X2Nzc2l6ZTsKICAgICAgICBfX3UzMiBzX2Nnc2l6ZTsKICAgICAgICBfX3UzMiBzX250cmFrOwog ICAgICAgIF9fdTMyIHNfbnNlY3Q7CiAgICAgICAgX191MzIgc19zcGM7CiAgICAgICAgX191MzIg c19pcGc7CiAgICAgICAgX191MzIgc19mcGc7CiAgICAgICAgX191MzIgc19jcGM7CiAgICAgICAg X19zMzIgc19jb250aWdzdW1zaXplOwogICAgICAgIF9fczY0IHNfcWJtYXNrOwogICAgICAgIF9f czY0IHNfcWZtYXNrOwogICAgICAgIF9fczMyIHNfcG9zdGJsZm9ybWF0OwogICAgICAgIF9fczMy IHNfbnJwb3M7CiAgICAgICAgX19zMzIgc19wb3N0YmxvZmY7CiAgICAgICAgX19zMzIgc19yb3Ri bG9mZjsKCiAgICAgICAgX191MzIgc19mcGJtYXNrOwogICAgICAgIF9fdTMyIHNfYXBiOwogICAg ICAgIF9fdTMyIHNfMmFwYjsKICAgICAgICBfX3UzMiBzXzNhcGI7CiAgICAgICAgX191MzIgc19h cGJtYXNrOwogICAgICAgIF9fdTMyIHNfYXBic2hpZnQ7CiAgICAgICAgX191MzIgc18yYXBic2hp ZnQ7CiAgICAgICAgX191MzIgc18zYXBic2hpZnQ7CiAgICAgICAgX191MzIgc19uc3Bmc2hpZnQ7 CiAgICAgICAgX191MzIgc19uc3BiOwogICAgICAgIF9fdTMyIHNfaW5vcGY7CiAgICAgICAgX191 MzIgc19zYmJhc2U7CiAgICAgICAgX191MzIgc19icGY7CiAgICAgICAgX191MzIgc19icGZzaGlm dDsKICAgICAgICBfX3UzMiBzX2JwZm1hc2s7CgogICAgICAgIF9fdTMyIHNfbWF4c3ltbGlua2xl bjsKfTsKCgoKCgpzdHJ1Y3QgdWZzX3NiX2luZm8gewogICAgICAgIHN0cnVjdCB1ZnNfc2JfcHJp dmF0ZV9pbmZvICogc191c3BpOwogICAgICAgIHN0cnVjdCB1ZnNfY3N1bSAqIHNfY3NwWzMxXTsK ICAgICAgICB1bnNpZ25lZCBzX3N3YWI7CiAgICAgICAgdW5zaWduZWQgc19mbGFnczsKICAgICAg ICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiogc191Y2c7CiAgICAgICAgc3RydWN0IHVmc19jZ19wcml2 YXRlX2luZm8gKiBzX3VjcGlbOF07CiAgICAgICAgdW5zaWduZWQgc19jZ25vWzhdOwogICAgICAg IHVuc2lnbmVkIHNob3J0IHNfY2dfbG9hZGVkOwogICAgICAgIHVuc2lnbmVkIHNfbW91bnRfb3B0 Owp9OwoKCgoKCgoKc3RydWN0IHVmc19zdXBlcl9ibG9ja19maXJzdCB7CiAgICAgICAgX191MzIg ZnNfbGluazsKICAgICAgICBfX3UzMiBmc19ybGluazsKICAgICAgICBfX3UzMiBmc19zYmxrbm87 CiAgICAgICAgX191MzIgZnNfY2Jsa25vOwogICAgICAgIF9fdTMyIGZzX2libGtubzsKICAgICAg ICBfX3UzMiBmc19kYmxrbm87CiAgICAgICAgX191MzIgZnNfY2dvZmZzZXQ7CiAgICAgICAgX191 MzIgZnNfY2dtYXNrOwogICAgICAgIF9fdTMyIGZzX3RpbWU7CiAgICAgICAgX191MzIgZnNfc2l6 ZTsKICAgICAgICBfX3UzMiBmc19kc2l6ZTsKICAgICAgICBfX3UzMiBmc19uY2c7CiAgICAgICAg X191MzIgZnNfYnNpemU7CiAgICAgICAgX191MzIgZnNfZnNpemU7CiAgICAgICAgX191MzIgZnNf ZnJhZzsKICAgICAgICBfX3UzMiBmc19taW5mcmVlOwogICAgICAgIF9fdTMyIGZzX3JvdGRlbGF5 OwogICAgICAgIF9fdTMyIGZzX3JwczsKICAgICAgICBfX3UzMiBmc19ibWFzazsKICAgICAgICBf X3UzMiBmc19mbWFzazsKICAgICAgICBfX3UzMiBmc19ic2hpZnQ7CiAgICAgICAgX191MzIgZnNf ZnNoaWZ0OwogICAgICAgIF9fdTMyIGZzX21heGNvbnRpZzsKICAgICAgICBfX3UzMiBmc19tYXhi cGc7CiAgICAgICAgX191MzIgZnNfZnJhZ3NoaWZ0OwogICAgICAgIF9fdTMyIGZzX2ZzYnRvZGI7 CiAgICAgICAgX191MzIgZnNfc2JzaXplOwogICAgICAgIF9fdTMyIGZzX2NzbWFzazsKICAgICAg ICBfX3UzMiBmc19jc3NoaWZ0OwogICAgICAgIF9fdTMyIGZzX25pbmRpcjsKICAgICAgICBfX3Uz MiBmc19pbm9wYjsKICAgICAgICBfX3UzMiBmc19uc3BmOwogICAgICAgIF9fdTMyIGZzX29wdGlt OwogICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAg ICAgICAgICAgIF9fdTMyIGZzX25wc2VjdDsKICAgICAgICAgICAgICAgIH0gZnNfc3VuOwogICAg ICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgX19zMzIgZnNfc3Rh dGU7CiAgICAgICAgICAgICAgICB9IGZzX3N1bng4NjsKICAgICAgICB9IGZzX3UxOwogICAgICAg IF9fdTMyIGZzX2ludGVybGVhdmU7CiAgICAgICAgX191MzIgZnNfdHJhY2tza2V3OwogICAgICAg IF9fdTMyIGZzX2lkWzJdOwogICAgICAgIF9fdTMyIGZzX2NzYWRkcjsKICAgICAgICBfX3UzMiBm c19jc3NpemU7CiAgICAgICAgX191MzIgZnNfY2dzaXplOwogICAgICAgIF9fdTMyIGZzX250cmFr OwogICAgICAgIF9fdTMyIGZzX25zZWN0OwogICAgICAgIF9fdTMyIGZzX3NwYzsKICAgICAgICBf X3UzMiBmc19uY3lsOwogICAgICAgIF9fdTMyIGZzX2NwZzsKICAgICAgICBfX3UzMiBmc19pcGc7 CiAgICAgICAgX191MzIgZnNfZnBnOwogICAgICAgIHN0cnVjdCB1ZnNfY3N1bSBmc19jc3RvdGFs OwogICAgICAgIF9fczggZnNfZm1vZDsKICAgICAgICBfX3M4IGZzX2NsZWFuOwogICAgICAgIF9f czggZnNfcm9ubHk7CiAgICAgICAgX19zOCBmc19mbGFnczsKICAgICAgICBfX3M4IGZzX2ZzbW50 WzUxMiAtIDIxMl07Cgp9OwoKc3RydWN0IHVmc19zdXBlcl9ibG9ja19zZWNvbmQgewogICAgICAg IF9fczggZnNfZnNtbnRbMjEyXTsKICAgICAgICBfX3UzMiBmc19jZ3JvdG9yOwogICAgICAgIF9f dTMyIGZzX2NzcFszMV07CiAgICAgICAgX191MzIgZnNfbWF4Y2x1c3RlcjsKICAgICAgICBfX3Uz MiBmc19jcGM7CiAgICAgICAgX191MTYgZnNfb3Bvc3RibFs4Ml07Cn07CgpzdHJ1Y3QgdWZzX3N1 cGVyX2Jsb2NrX3RoaXJkIHsKICAgICAgICBfX3UxNiBmc19vcG9zdGJsWzQ2XTsKICAgICAgICB1 bmlvbiB7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICBf X3MzMiBmc19zcGFyZWNvbls1M107CiAgICAgICAgICAgICAgICAgICAgICAgIF9fczMyIGZzX3Jl Y2xhaW07CiAgICAgICAgICAgICAgICAgICAgICAgIF9fczMyIGZzX3NwYXJlY29uMlsxXTsKICAg ICAgICAgICAgICAgICAgICAgICAgX19zMzIgZnNfc3RhdGU7CiAgICAgICAgICAgICAgICAgICAg ICAgIF9fdTMyIGZzX3FibWFza1syXTsKICAgICAgICAgICAgICAgICAgICAgICAgX191MzIgZnNf cWZtYXNrWzJdOwogICAgICAgICAgICAgICAgfSBmc19zdW47CiAgICAgICAgICAgICAgICBzdHJ1 Y3QgewogICAgICAgICAgICAgICAgICAgICAgICBfX3MzMiBmc19zcGFyZWNvbls1M107CiAgICAg ICAgICAgICAgICAgICAgICAgIF9fczMyIGZzX3JlY2xhaW07CiAgICAgICAgICAgICAgICAgICAg ICAgIF9fczMyIGZzX3NwYXJlY29uMlsxXTsKICAgICAgICAgICAgICAgICAgICAgICAgX191MzIg ZnNfbnBzZWN0OwogICAgICAgICAgICAgICAgICAgICAgICBfX3UzMiBmc19xYm1hc2tbMl07CiAg ICAgICAgICAgICAgICAgICAgICAgIF9fdTMyIGZzX3FmbWFza1syXTsKICAgICAgICAgICAgICAg IH0gZnNfc3VueDg2OwogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAg ICAgICAgX19zMzIgZnNfc3BhcmVjb25bNTBdOwogICAgICAgICAgICAgICAgICAgICAgICBfX3Mz MiBmc19jb250aWdzdW1zaXplOwogICAgICAgICAgICAgICAgICAgICAgICBfX3MzMiBmc19tYXhz eW1saW5rbGVuOwogICAgICAgICAgICAgICAgICAgICAgICBfX3MzMiBmc19pbm9kZWZtdDsKICAg ICAgICAgICAgICAgICAgICAgICAgX191MzIgZnNfbWF4ZmlsZXNpemVbMl07CiAgICAgICAgICAg ICAgICAgICAgICAgIF9fdTMyIGZzX3FibWFza1syXTsKICAgICAgICAgICAgICAgICAgICAgICAg X191MzIgZnNfcWZtYXNrWzJdOwogICAgICAgICAgICAgICAgICAgICAgICBfX3MzMiBmc19zdGF0 ZTsKICAgICAgICAgICAgICAgIH0gZnNfNDQ7CiAgICAgICAgfSBmc191MjsKICAgICAgICBfX3Mz MiBmc19wb3N0Ymxmb3JtYXQ7CiAgICAgICAgX19zMzIgZnNfbnJwb3M7CiAgICAgICAgX19zMzIg ZnNfcG9zdGJsb2ZmOwogICAgICAgIF9fczMyIGZzX3JvdGJsb2ZmOwogICAgICAgIF9fczMyIGZz X21hZ2ljOwogICAgICAgIF9fdTggZnNfc3BhY2VbMV07Cn07CiMgNjY5ICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvZWZzX2ZzX3NiLmgiIDEKIyAyNSAiL3Vzci9zcmMv bGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvZWZzX2ZzX3NiLmgiCnN0cnVjdCBlZnNf c3VwZXIgewogICAgICAgIGludDMyX3QgZnNfc2l6ZTsKICAgICAgICBpbnQzMl90IGZzX2ZpcnN0 Y2c7CiAgICAgICAgaW50MzJfdCBmc19jZ2ZzaXplOwogICAgICAgIHNob3J0IGZzX2NnaXNpemU7 CiAgICAgICAgc2hvcnQgZnNfc2VjdG9yczsKICAgICAgICBzaG9ydCBmc19oZWFkczsKICAgICAg ICBzaG9ydCBmc19uY2c7CiAgICAgICAgc2hvcnQgZnNfZGlydHk7CiAgICAgICAgaW50MzJfdCBm c190aW1lOwogICAgICAgIGludDMyX3QgZnNfbWFnaWM7CiAgICAgICAgY2hhciBmc19mbmFtZVs2 XTsKICAgICAgICBjaGFyIGZzX2ZwYWNrWzZdOwogICAgICAgIGludDMyX3QgZnNfYm1zaXplOwog ICAgICAgIGludDMyX3QgZnNfdGZyZWU7CiAgICAgICAgaW50MzJfdCBmc190aW5vZGU7CiAgICAg ICAgaW50MzJfdCBmc19ibWJsb2NrOwogICAgICAgIGludDMyX3QgZnNfcmVwbHNiOwogICAgICAg IGludDMyX3QgZnNfbGFzdGlhbGxvYzsKICAgICAgICBjaGFyIGZzX3NwYXJlWzIwXTsKICAgICAg ICBpbnQzMl90IGZzX2NoZWNrc3VtOwp9OwoKCnN0cnVjdCBlZnNfc2JfaW5mbyB7CiAgICAgICAg aW50MzJfdCBmc19tYWdpYzsKICAgICAgICBpbnQzMl90IGZzX3N0YXJ0OwogICAgICAgIGludDMy X3QgZmlyc3RfYmxvY2s7CiAgICAgICAgaW50MzJfdCB0b3RhbF9ibG9ja3M7CiAgICAgICAgaW50 MzJfdCBncm91cF9zaXplOwogICAgICAgIGludDMyX3QgZGF0YV9mcmVlOwogICAgICAgIGludDMy X3QgaW5vZGVfZnJlZTsKICAgICAgICBzaG9ydCBpbm9kZV9ibG9ja3M7CiAgICAgICAgc2hvcnQg dG90YWxfZ3JvdXBzOwp9OwojIDY3MCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1 ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRl L2xpbnV4L3JvbWZzX2ZzX3NiLmgiIDEKCgoKCgpzdHJ1Y3Qgcm9tZnNfc2JfaW5mbyB7CiAgICAg ICAgdW5zaWduZWQgbG9uZyBzX21heHNpemU7Cn07CiMgNjcxICIvdXNyL3NyYy9saW51eC0yLjQu MTMvbGludXgvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEz L2xpbnV4L2luY2x1ZGUvbGludXgvc21iX2ZzX3NiLmgiIDEKIyAxNCAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc21iX2ZzX3NiLmgiCiMgMSAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvdHlwZXMuaCIgMQojIDE1ICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9zbWJfZnNfc2IuaCIgMgojIDEgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3NtYi5oIiAxCiMgMTIgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3NtYi5oIgojIDEgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3R5cGVzLmgiIDEKIyAxMyAiL3Vzci9z cmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc21iLmgiIDIKCmVudW0gc21iX3By b3RvY29sIHsKICAgICAgICBTTUJfUFJPVE9DT0xfTk9ORSwKICAgICAgICBTTUJfUFJPVE9DT0xf Q09SRSwKICAgICAgICBTTUJfUFJPVE9DT0xfQ09SRVBMVVMsCiAgICAgICAgU01CX1BST1RPQ09M X0xBTk1BTjEsCiAgICAgICAgU01CX1BST1RPQ09MX0xBTk1BTjIsCiAgICAgICAgU01CX1BST1RP Q09MX05UMQp9OwoKZW51bSBzbWJfY2FzZV9obmRsIHsKICAgICAgICBTTUJfQ0FTRV9ERUZBVUxU LAogICAgICAgIFNNQl9DQVNFX0xPV0VSLAogICAgICAgIFNNQl9DQVNFX1VQUEVSCn07CgpzdHJ1 Y3Qgc21iX2Rza2F0dHIgewogICAgICAgIF9fdTE2IHRvdGFsOwogICAgICAgIF9fdTE2IGFsbG9j YmxvY2tzOwogICAgICAgIF9fdTE2IGJsb2Nrc2l6ZTsKICAgICAgICBfX3UxNiBmcmVlOwp9OwoK c3RydWN0IHNtYl9jb25uX29wdCB7CgoKICAgICAgICB1bnNpZ25lZCBpbnQgZmQ7CgogICAgICAg IGVudW0gc21iX3Byb3RvY29sIHByb3RvY29sOwogICAgICAgIGVudW0gc21iX2Nhc2VfaG5kbCBj YXNlX2hhbmRsaW5nOwoKCgogICAgICAgIF9fdTMyIG1heF94bWl0OwogICAgICAgIF9fdTE2IHNl cnZlcl91aWQ7CiAgICAgICAgX191MTYgdGlkOwoKCiAgICAgICAgX191MTYgc2VjbW9kZTsKICAg ICAgICBfX3UxNiBtYXhtdXg7CiAgICAgICAgX191MTYgbWF4dmNzOwogICAgICAgIF9fdTE2IHJh d21vZGU7CiAgICAgICAgX191MzIgc2Vzc2tleTsKCgogICAgICAgIF9fdTMyIG1heHJhdzsKICAg ICAgICBfX3UzMiBjYXBhYmlsaXRpZXM7CiAgICAgICAgX19zMTYgc2VydmVyem9uZTsKfTsKCgoK CnN0cnVjdCBzbWJfbmxzX2NvZGVwYWdlIHsKICAgICAgICBjaGFyIGxvY2FsX25hbWVbMjBdOwog ICAgICAgIGNoYXIgcmVtb3RlX25hbWVbMjBdOwp9OwojIDc4ICIvdXNyL3NyYy9saW51eC0yLjQu MTMvbGludXgvaW5jbHVkZS9saW51eC9zbWIuaCIKc3RydWN0IHNtYl9mYXR0ciB7CgogICAgICAg IF9fdTE2IGF0dHI7CgogICAgICAgIHVuc2lnbmVkIGxvbmcgZl9pbm87CiAgICAgICAgdW1vZGVf dCBmX21vZGU7CiAgICAgICAgbmxpbmtfdCBmX25saW5rOwogICAgICAgIHVpZF90IGZfdWlkOwog ICAgICAgIGdpZF90IGZfZ2lkOwogICAgICAgIGtkZXZfdCBmX3JkZXY7CiAgICAgICAgb2ZmX3Qg Zl9zaXplOwogICAgICAgIHRpbWVfdCBmX2F0aW1lOwogICAgICAgIHRpbWVfdCBmX210aW1lOwog ICAgICAgIHRpbWVfdCBmX2N0aW1lOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZl9ibGtzaXplOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgZl9ibG9ja3M7Cn07CgplbnVtIHNtYl9jb25uX3N0YXRlIHsK ICAgICAgICBDT05OX1ZBTElELAogICAgICAgIENPTk5fSU5WQUxJRCwKCiAgICAgICAgQ09OTl9S RVRSSUVELAogICAgICAgIENPTk5fUkVUUllJTkcKfTsKIyAxNiAiL3Vzci9zcmMvbGludXgtMi40 LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc21iX2ZzX3NiLmgiIDIKCgoKCgoKCnN0cnVjdCBzbWJf c2JfaW5mbyB7CiAgICAgICAgZW51bSBzbWJfY29ubl9zdGF0ZSBzdGF0ZTsKICAgICAgICBzdHJ1 Y3QgZmlsZSAqIHNvY2tfZmlsZTsKCiAgICAgICAgc3RydWN0IHNtYl9tb3VudF9kYXRhX2tlcm5l bCAqbW50OwogICAgICAgIHVuc2lnbmVkIGNoYXIgKnRlbXBfYnVmOwoKCgoKICAgICAgICB1bnNp Z25lZCBpbnQgZ2VuZXJhdGlvbjsKICAgICAgICBwaWRfdCBjb25uX3BpZDsKICAgICAgICBzdHJ1 Y3Qgc21iX2Nvbm5fb3B0IG9wdDsKCiAgICAgICAgc3RydWN0IHNlbWFwaG9yZSBzZW07CiAgICAg ICAgd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKCiAgICAgICAgX191MzIgcGFja2V0X3NpemU7CiAg ICAgICAgdW5zaWduZWQgY2hhciAqIHBhY2tldDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCByY2xz OwogICAgICAgIHVuc2lnbmVkIHNob3J0IGVycjsKCgogICAgICAgIHZvaWQgKmRhdGFfcmVhZHk7 CgoKICAgICAgICBzdHJ1Y3QgbmxzX3RhYmxlICpyZW1vdGVfbmxzOwogICAgICAgIHN0cnVjdCBu bHNfdGFibGUgKmxvY2FsX25sczsKCgoKCiAgICAgICAgY2hhciAqbmFtZV9idWY7CgogICAgICAg IGludCAoKmNvbnZlcnQpKGNoYXIgKiwgaW50LCBjb25zdCBjaGFyICosIGludCwKICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgbmxzX3RhYmxlICosIHN0cnVjdCBubHNfdGFibGUgKik7Cn07 CgoKc3RhdGljIGlubGluZSB2b2lkCnNtYl9sb2NrX3NlcnZlcihzdHJ1Y3Qgc21iX3NiX2luZm8g KnNlcnZlcikKewogICAgICAgIGRvd24oJihzZXJ2ZXItPnNlbSkpOwp9CgpzdGF0aWMgaW5saW5l IHZvaWQKc21iX3VubG9ja19zZXJ2ZXIoc3RydWN0IHNtYl9zYl9pbmZvICpzZXJ2ZXIpCnsKICAg ICAgICB1cCgmKHNlcnZlci0+c2VtKSk7Cn0KIyA2NzIgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9s aW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGlu dXgvaW5jbHVkZS9saW51eC9oZnNfZnNfc2IuaCIgMQojIDE1ICIvdXNyL3NyYy9saW51eC0yLjQu MTMvbGludXgvaW5jbHVkZS9saW51eC9oZnNfZnNfc2IuaCIKc3RydWN0IGhmc19uYW1lOwoKdHlw ZWRlZiBpbnQgKCpoZnNfbmFtZWluX2ZuKSAoY2hhciAqLCBjb25zdCBzdHJ1Y3QgaGZzX25hbWUg Kik7CnR5cGVkZWYgdm9pZCAoKmhmc19uYW1lb3V0X2ZuKSAoc3RydWN0IGhmc19uYW1lICosIGNv bnN0IGNoYXIgKiwgaW50KTsKdHlwZWRlZiB2b2lkICgqaGZzX2lmaWxsX2ZuKSAoc3RydWN0IGlu b2RlICosIGlub190LCBjb25zdCBpbnQpOwoKCgoKCgpzdHJ1Y3QgaGZzX3NiX2luZm8gewogICAg ICAgIGludCBtYWdpYzsKICAgICAgICBzdHJ1Y3QgaGZzX21kYiAqc19tZGI7CiAgICAgICAgaW50 IHNfcXVpZXQ7CgogICAgICAgIGludCBzX2xvd2VyY2FzZTsKICAgICAgICBpbnQgc19hZnBkOwog ICAgICAgIGludCBzX3ZlcnNpb247CiAgICAgICAgaGZzX25hbWVpbl9mbiBzX25hbWVpbjsKCgog ICAgICAgIGhmc19uYW1lb3V0X2ZuIHNfbmFtZW91dDsKCgogICAgICAgIGhmc19pZmlsbF9mbiBz X2lmaWxsOwoKICAgICAgICBjb25zdCBzdHJ1Y3QgaGZzX25hbWUgKnNfcmVzZXJ2ZWQxOwogICAg ICAgIGNvbnN0IHN0cnVjdCBoZnNfbmFtZSAqc19yZXNlcnZlZDI7CiAgICAgICAgX191MzIgc190 eXBlOwogICAgICAgIF9fdTMyIHNfY3JlYXRvcjsKICAgICAgICB1bW9kZV90IHNfdW1hc2s7Cgog ICAgICAgIHVpZF90IHNfdWlkOwogICAgICAgIGdpZF90IHNfZ2lkOwogICAgICAgIGNoYXIgc19j b252Owp9OwojIDY3MyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgv ZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2Fk ZnNfZnNfc2IuaCIgMQojIDEzICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9s aW51eC9hZGZzX2ZzX3NiLmgiCnN0cnVjdCBhZGZzX2Rpc2NtYXA7CnN0cnVjdCBhZGZzX2Rpcl9v cHM7CgoKCgpzdHJ1Y3QgYWRmc19zYl9pbmZvIHsKICAgICAgICBzdHJ1Y3QgYWRmc19kaXNjbWFw ICpzX21hcDsKICAgICAgICBzdHJ1Y3QgYWRmc19kaXJfb3BzICpzX2RpcjsKCiAgICAgICAgdWlk X3Qgc191aWQ7CiAgICAgICAgZ2lkX3Qgc19naWQ7CiAgICAgICAgdW1vZGVfdCBzX293bmVyX21h c2s7CiAgICAgICAgdW1vZGVfdCBzX290aGVyX21hc2s7CgogICAgICAgIF9fdTMyIHNfaWRzX3Bl cl96b25lOwogICAgICAgIF9fdTMyIHNfaWRsZW47CiAgICAgICAgX191MzIgc19tYXBfc2l6ZTsK ICAgICAgICB1bnNpZ25lZCBsb25nIHNfc2l6ZTsKICAgICAgICBzaWduZWQgaW50IHNfbWFwMmJs azsKICAgICAgICB1bnNpZ25lZCBpbnQgc19sb2cyc2hhcmVzaXplOwogICAgICAgIHVuc2lnbmVk IGludCBzX3ZlcnNpb247CiAgICAgICAgdW5zaWduZWQgaW50IHNfbmFtZWxlbjsKfTsKIyA2NzQg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIv dXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9xbng0X2ZzX3NiLmgiIDEK IyAxNCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvcW54NF9mc19z Yi5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3FueDRf ZnMuaCIgMQojIDEzICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9x bng0X2ZzLmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgv cW54dHlwZXMuaCIgMQojIDE0ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9s aW51eC9xbng0X2ZzLmgiIDIKIyA0NSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1 ZGUvbGludXgvcW54NF9mcy5oIgpzdHJ1Y3QgcW54NF9pbm9kZV9lbnRyeSB7CiAgICAgICAgY2hh ciBkaV9mbmFtZVsxNl07CiAgICAgICAgcW54NF9vZmZfdCBkaV9zaXplOwogICAgICAgIHFueDRf eHRudF90IGRpX2ZpcnN0X3h0bnQ7CiAgICAgICAgX191MzIgZGlfeGJsazsKICAgICAgICBfX3Mz MiBkaV9mdGltZTsKICAgICAgICBfX3MzMiBkaV9tdGltZTsKICAgICAgICBfX3MzMiBkaV9hdGlt ZTsKICAgICAgICBfX3MzMiBkaV9jdGltZTsKICAgICAgICBxbng0X254dG50X3QgZGlfbnVtX3h0 bnRzOwogICAgICAgIHFueDRfbW9kZV90IGRpX21vZGU7CiAgICAgICAgcW54NF9tdWlkX3QgZGlf dWlkOwogICAgICAgIHFueDRfbWdpZF90IGRpX2dpZDsKICAgICAgICBxbng0X25saW5rX3QgZGlf bmxpbms7CiAgICAgICAgX191OCBkaV96ZXJvWzRdOwogICAgICAgIHFueDRfZnR5cGVfdCBkaV90 eXBlOwogICAgICAgIF9fdTggZGlfc3RhdHVzOwp9OwoKc3RydWN0IHFueDRfbGlua19pbmZvIHsK ICAgICAgICBjaGFyIGRsX2ZuYW1lWzQ4XTsKICAgICAgICBfX3UzMiBkbF9pbm9kZV9ibGs7CiAg ICAgICAgX191OCBkbF9pbm9kZV9uZHg7CiAgICAgICAgX191OCBkbF9zcGFyZVsxMF07CiAgICAg ICAgX191OCBkbF9zdGF0dXM7Cn07CgpzdHJ1Y3QgcW54NF94YmxrIHsKICAgICAgICBfX3UzMiB4 YmxrX25leHRfeGJsazsKICAgICAgICBfX3UzMiB4YmxrX3ByZXZfeGJsazsKICAgICAgICBfX3U4 IHhibGtfbnVtX3h0bnRzOwogICAgICAgIF9fdTggeGJsa19zcGFyZVszXTsKICAgICAgICBfX3Mz MiB4YmxrX251bV9ibG9ja3M7CiAgICAgICAgcW54NF94dG50X3QgeGJsa194dG50c1s2MF07CiAg ICAgICAgY2hhciB4YmxrX3NpZ25hdHVyZVs4XTsKICAgICAgICBxbng0X3h0bnRfdCB4YmxrX2Zp cnN0X3h0bnQ7Cn07CgpzdHJ1Y3QgcW54NF9zdXBlcl9ibG9jayB7CiAgICAgICAgc3RydWN0IHFu eDRfaW5vZGVfZW50cnkgUm9vdERpcjsKICAgICAgICBzdHJ1Y3QgcW54NF9pbm9kZV9lbnRyeSBJ bm9kZTsKICAgICAgICBzdHJ1Y3QgcW54NF9pbm9kZV9lbnRyeSBCb290OwogICAgICAgIHN0cnVj dCBxbng0X2lub2RlX2VudHJ5IEFsdEJvb3Q7Cn07CiMgMTAwICIvdXNyL3NyYy9saW51eC0yLjQu MTMvbGludXgvaW5jbHVkZS9saW51eC9xbng0X2ZzLmgiCmV4dGVybiBzdHJ1Y3QgZGVudHJ5ICpx bng0X2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKZXh0 ZXJuIHVuc2lnbmVkIGxvbmcgcW54NF9jb3VudF9mcmVlX2Jsb2NrcyhzdHJ1Y3Qgc3VwZXJfYmxv Y2sgKnNiKTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcW54NF9ibG9ja19tYXAoc3RydWN0IGlub2Rl ICppbm9kZSwgbG9uZyBpYmxvY2spOwoKZXh0ZXJuIHN0cnVjdCBidWZmZXJfaGVhZCAqcW54NF9n ZXRibGsoc3RydWN0IGlub2RlICosIGludCwgaW50KTsKZXh0ZXJuIHN0cnVjdCBidWZmZXJfaGVh ZCAqcW54NF9icmVhZChzdHJ1Y3QgaW5vZGUgKiwgaW50LCBpbnQpOwoKZXh0ZXJuIGludCBxbng0 X2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9k ZSk7CmV4dGVybiBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBxbng0X2ZpbGVfaW5vZGVfb3BlcmF0 aW9uczsKZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHFueDRfZGlyX2lub2RlX29wZXJh dGlvbnM7CmV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHFueDRfZmlsZV9vcGVyYXRpb25z OwpleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBxbng0X2Rpcl9vcGVyYXRpb25zOwpleHRl cm4gaW50IHFueDRfaXNfZnJlZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBsb25nIGJsb2NrKTsK ZXh0ZXJuIGludCBxbng0X3NldF9iaXRtYXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgbG9uZyBi bG9jaywgaW50IGJ1c3kpOwpleHRlcm4gaW50IHFueDRfY3JlYXRlKHN0cnVjdCBpbm9kZSAqaW5v ZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUpOwpleHRlcm4gdm9pZCBxbng0X3Ry dW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwpleHRlcm4gdm9pZCBxbng0X2ZyZWVfaW5vZGUo c3RydWN0IGlub2RlICppbm9kZSk7CmV4dGVybiBpbnQgcW54NF91bmxpbmsoc3RydWN0IGlub2Rl ICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CmV4dGVybiBpbnQgcW54NF9ybWRpcihzdHJ1 Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKZXh0ZXJuIGludCBxbng0X3N5 bmNfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQpOwpl eHRlcm4gaW50IHFueDRfc3luY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKZXh0ZXJuIGlu dCBxbng0X2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb25nIGlibG9jaywgc3RydWN0 IGJ1ZmZlcl9oZWFkICpiaCwgaW50IGNyZWF0ZSk7CiMgMTUgIi91c3Ivc3JjL2xpbnV4LTIuNC4x My9saW51eC9pbmNsdWRlL2xpbnV4L3FueDRfZnNfc2IuaCIgMgoKCgoKCnN0cnVjdCBxbng0X3Ni X2luZm8gewogICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqc2JfYnVmOwogICAgICAgIHN0cnVj dCBxbng0X3N1cGVyX2Jsb2NrICpzYjsKICAgICAgICB1bnNpZ25lZCBpbnQgVmVyc2lvbjsKICAg ICAgICBzdHJ1Y3QgcW54NF9pbm9kZV9lbnRyeSAqQml0TWFwOwp9OwojIDY3NSAiL3Vzci9zcmMv bGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzX3NiLmgiIDEKCgoKCgoK CiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvdHF1ZXVlLmgi IDEKIyAxNiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvdHF1ZXVl LmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc3Bpbmxv Y2suaCIgMQojIDE3ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC90 cXVldWUuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4 L2xpc3QuaCIgMQojIDE4ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51 eC90cXVldWUuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2Fz bS9iaXRvcHMuaCIgMQojIDE5ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9s aW51eC90cXVldWUuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRl L2FzbS9zeXN0ZW0uaCIgMQojIDIwICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVk ZS9saW51eC90cXVldWUuaCIgMgojIDM4ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5j bHVkZS9saW51eC90cXVldWUuaCIKc3RydWN0IHRxX3N0cnVjdCB7CiAgICAgICAgc3RydWN0IGxp c3RfaGVhZCBsaXN0OwogICAgICAgIHVuc2lnbmVkIGxvbmcgc3luYzsKICAgICAgICB2b2lkICgq cm91dGluZSkodm9pZCAqKTsKICAgICAgICB2b2lkICpkYXRhOwp9OwojIDY0ICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC90cXVldWUuaCIKdHlwZWRlZiBzdHJ1Y3Qg bGlzdF9oZWFkIHRhc2tfcXVldWU7CgoKCgpleHRlcm4gdGFza19xdWV1ZSB0cV90aW1lciwgdHFf aW1tZWRpYXRlLCB0cV9kaXNrOwojIDk0ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5j bHVkZS9saW51eC90cXVldWUuaCIKZXh0ZXJuIHNwaW5sb2NrX3QgdHF1ZXVlX2xvY2s7CgoKCgoK c3RhdGljIGlubGluZSBpbnQgcXVldWVfdGFzayhzdHJ1Y3QgdHFfc3RydWN0ICpiaF9wb2ludGVy LCB0YXNrX3F1ZXVlICpiaF9saXN0KQp7CiAgICAgICAgaW50IHJldCA9IDA7CiAgICAgICAgaWYg KCF0ZXN0X2FuZF9zZXRfYml0KDAsJmJoX3BvaW50ZXItPnN5bmMpKSB7CiAgICAgICAgICAgICAg ICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgICAgICAgICAgICAgZG8geyBfX2FzbV9fIF9fdm9s YXRpbGVfXygicHVzaGZsIDsgcG9wbCAlMCA7IGNsaSI6Ij1nIiAoZmxhZ3MpOiA6Im1lbW9yeSIp OyBzcGluX2xvY2soJnRxdWV1ZV9sb2NrKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgICAgICAgICBs aXN0X2FkZF90YWlsKCZiaF9wb2ludGVyLT5saXN0LCBiaF9saXN0KTsKICAgICAgICAgICAgICAg IGRvIHsgc3Bpbl91bmxvY2soJnRxdWV1ZV9sb2NrKTsgX19hc21fXyBfX3ZvbGF0aWxlX18oInB1 c2hsICUwIDsgcG9wZmwiOiA6ImciIChmbGFncyk6Im1lbW9yeSIsICJjYyIpOyB9IHdoaWxlICgw KTsKICAgICAgICAgICAgICAgIHJldCA9IDE7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXQ7 Cn0KCgoKCgpleHRlcm4gdm9pZCBfX3J1bl90YXNrX3F1ZXVlKHRhc2tfcXVldWUgKmxpc3QpOwoK c3RhdGljIGlubGluZSB2b2lkIHJ1bl90YXNrX3F1ZXVlKHRhc2tfcXVldWUgKmxpc3QpCnsKICAg ICAgICBpZiAoKCFsaXN0X2VtcHR5KCYqbGlzdCkpKQogICAgICAgICAgICAgICAgX19ydW5fdGFz a19xdWV1ZShsaXN0KTsKfQojIDkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRl L2xpbnV4L3JlaXNlcmZzX2ZzX3NiLmgiIDIKIyAyNiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xp bnV4L2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnNfc2IuaCIKc3RydWN0IHJlaXNlcmZzX3N1cGVy X2Jsb2NrCnsKICBfX3UzMiBzX2Jsb2NrX2NvdW50OwogIF9fdTMyIHNfZnJlZV9ibG9ja3M7CiAg X191MzIgc19yb290X2Jsb2NrOwogIF9fdTMyIHNfam91cm5hbF9ibG9jazsKICBfX3UzMiBzX2pv dXJuYWxfZGV2OwojIDQzICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51 eC9yZWlzZXJmc19mc19zYi5oIgogIF9fdTMyIHNfb3JpZ19qb3VybmFsX3NpemU7CiAgX191MzIg c19qb3VybmFsX3RyYW5zX21heCA7CiAgX191MzIgc19qb3VybmFsX2Jsb2NrX2NvdW50IDsKICBf X3UzMiBzX2pvdXJuYWxfbWF4X2JhdGNoIDsKICBfX3UzMiBzX2pvdXJuYWxfbWF4X2NvbW1pdF9h Z2UgOwogIF9fdTMyIHNfam91cm5hbF9tYXhfdHJhbnNfYWdlIDsKICBfX3UxNiBzX2Jsb2Nrc2l6 ZTsKICBfX3UxNiBzX29pZF9tYXhzaXplOwogIF9fdTE2IHNfb2lkX2N1cnNpemU7CiAgX191MTYg c19zdGF0ZTsKICBjaGFyIHNfbWFnaWNbMTJdOwogIF9fdTMyIHNfaGFzaF9mdW5jdGlvbl9jb2Rl OwogIF9fdTE2IHNfdHJlZV9oZWlnaHQ7CiAgX191MTYgc19ibWFwX25yOwogIF9fdTE2IHNfdmVy c2lvbjsKCgoKCiAgX191MTYgc19yZXNlcnZlZDsKICBfX3UzMiBzX2lub2RlX2dlbmVyYXRpb247 CiAgY2hhciBzX3VudXNlZFsxMjRdIDsKfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOwoj IDEyMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvcmVpc2VyZnNf ZnNfc2IuaCIKc3RydWN0IHJlaXNlcmZzX3N1cGVyX2Jsb2NrX3YxCnsKICBfX3UzMiBzX2Jsb2Nr X2NvdW50OwogIF9fdTMyIHNfZnJlZV9ibG9ja3M7CiAgX191MzIgc19yb290X2Jsb2NrOwogIF9f dTMyIHNfam91cm5hbF9ibG9jazsKICBfX3UzMiBzX2pvdXJuYWxfZGV2OwogIF9fdTMyIHNfb3Jp Z19qb3VybmFsX3NpemU7CiAgX191MzIgc19qb3VybmFsX3RyYW5zX21heCA7CiAgX191MzIgc19q b3VybmFsX2Jsb2NrX2NvdW50IDsKICBfX3UzMiBzX2pvdXJuYWxfbWF4X2JhdGNoIDsKICBfX3Uz MiBzX2pvdXJuYWxfbWF4X2NvbW1pdF9hZ2UgOwogIF9fdTMyIHNfam91cm5hbF9tYXhfdHJhbnNf YWdlIDsKICBfX3UxNiBzX2Jsb2Nrc2l6ZTsKICBfX3UxNiBzX29pZF9tYXhzaXplOwogIF9fdTE2 IHNfb2lkX2N1cnNpemU7CiAgX191MTYgc19zdGF0ZTsKICBjaGFyIHNfbWFnaWNbMTZdOwogIF9f dTE2IHNfdHJlZV9oZWlnaHQ7CiAgX191MTYgc19ibWFwX25yOwogIF9fdTMyIHNfcmVzZXJ2ZWQ7 Cn0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKIyAyMDAgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzX3NiLmgiCnN0cnVjdCByZWlzZXJm c19qb3VybmFsX2Nub2RlIHsKICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoIDsKICBrZGV2X3QgZGV2 IDsKICB1bnNpZ25lZCBsb25nIGJsb2NrbnIgOwogIGludCBzdGF0ZSA7CiAgc3RydWN0IHJlaXNl cmZzX2pvdXJuYWxfbGlzdCAqamxpc3QgOwogIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2Rl ICpuZXh0IDsKICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqcHJldiA7CiAgc3RydWN0 IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKmhwcmV2IDsKICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5h bF9jbm9kZSAqaG5leHQgOwp9OwoKc3RydWN0IHJlaXNlcmZzX2JpdG1hcF9ub2RlIHsKICBpbnQg aWQgOwogIGNoYXIgKmRhdGEgOwogIHN0cnVjdCBsaXN0X2hlYWQgbGlzdCA7Cn0gOwoKc3RydWN0 IHJlaXNlcmZzX2xpc3RfYml0bWFwIHsKICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9saXN0ICpq b3VybmFsX2xpc3QgOwogIHN0cnVjdCByZWlzZXJmc19iaXRtYXBfbm9kZSAqKmJpdG1hcHMgOwp9 IDsKCgoKCnN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgewoKICBjaGFyICp0X2Nh bGxlciA7CiAgaW50IHRfYmxvY2tzX2xvZ2dlZCA7CiAgaW50IHRfYmxvY2tzX2FsbG9jYXRlZCA7 CiAgdW5zaWduZWQgbG9uZyB0X3RyYW5zX2lkIDsKICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnRfc3Vw ZXIgOwoKfSA7CgoKCgoKCgpzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9saXN0IHsKICB1bnNpZ25l ZCBsb25nIGpfc3RhcnQgOwogIHVuc2lnbmVkIGxvbmcgal9sZW4gOwogIGF0b21pY190IGpfbm9u emVyb2xlbiA7CiAgYXRvbWljX3Qgal9jb21taXRfbGVmdCA7CiAgYXRvbWljX3Qgal9mbHVzaGlu ZyA7CiAgYXRvbWljX3Qgal9jb21taXRfZmx1c2hpbmcgOwogIGF0b21pY190IGpfb2xkZXJfY29t bWl0c19kb25lIDsKICB1bnNpZ25lZCBsb25nIGpfdHJhbnNfaWQgOwogIHRpbWVfdCBqX3RpbWVz dGFtcCA7CiAgc3RydWN0IHJlaXNlcmZzX2xpc3RfYml0bWFwICpqX2xpc3RfYml0bWFwIDsKICBz dHJ1Y3QgYnVmZmVyX2hlYWQgKmpfY29tbWl0X2JoIDsKICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5h bF9jbm9kZSAqal9yZWFsYmxvY2sgOwogIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlICpq X2ZyZWVkbGlzdCA7CiAgd2FpdF9xdWV1ZV9oZWFkX3Qgal9jb21taXRfd2FpdCA7CiAgd2FpdF9x dWV1ZV9oZWFkX3Qgal9mbHVzaF93YWl0IDsKfSA7CgpzdHJ1Y3QgcmVpc2VyZnNfcGFnZV9saXN0 IDsKCnN0cnVjdCByZWlzZXJmc19qb3VybmFsIHsKICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiogal9h cF9ibG9ja3MgOwogIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlICpqX2xhc3QgOwogIHN0 cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlICpqX2ZpcnN0IDsKCiAgaW50IGpfc3RhdGUgOwog IHVuc2lnbmVkIGxvbmcgal90cmFuc19pZCA7CiAgdW5zaWduZWQgbG9uZyBqX21vdW50X2lkIDsK ICB1bnNpZ25lZCBsb25nIGpfc3RhcnQgOwogIHVuc2lnbmVkIGxvbmcgal9sZW4gOwogIHVuc2ln bmVkIGxvbmcgal9sZW5fYWxsb2MgOwogIGF0b21pY190IGpfd2NvdW50IDsKICB1bnNpZ25lZCBs b25nIGpfYmNvdW50IDsKICB1bnNpZ25lZCBsb25nIGpfZmlyc3RfdW5mbHVzaGVkX29mZnNldCA7 CiAgdW5zaWduZWQgbG9uZyBqX2xhc3RfZmx1c2hfdHJhbnNfaWQgOwogIHN0cnVjdCBidWZmZXJf aGVhZCAqal9oZWFkZXJfYmggOwoKCgoKICBzdHJ1Y3QgcmVpc2VyZnNfcGFnZV9saXN0ICpqX2Zs dXNoX3BhZ2VzIDsKICB0aW1lX3Qgal90cmFuc19zdGFydF90aW1lIDsKICB3YWl0X3F1ZXVlX2hl YWRfdCBqX3dhaXQgOwogIGF0b21pY190IGpfd2xvY2sgOwogIHdhaXRfcXVldWVfaGVhZF90IGpf am9pbl93YWl0IDsKICBhdG9taWNfdCBqX2psb2NrIDsKICBpbnQgal9qb3VybmFsX2xpc3RfaW5k ZXggOwogIGludCBqX2xpc3RfYml0bWFwX2luZGV4IDsKICBpbnQgal9tdXN0X3dhaXQgOwogIGlu dCBqX25leHRfZnVsbF9mbHVzaCA7CiAgaW50IGpfbmV4dF9hc3luY19mbHVzaCA7CgogIGludCBq X2Nub2RlX3VzZWQgOwogIGludCBqX2Nub2RlX2ZyZWUgOwoKICBzdHJ1Y3QgcmVpc2VyZnNfam91 cm5hbF9jbm9kZSAqal9jbm9kZV9mcmVlX2xpc3QgOwogIHN0cnVjdCByZWlzZXJmc19qb3VybmFs X2Nub2RlICpqX2Nub2RlX2ZyZWVfb3JpZyA7CgogIGludCBqX2ZyZWVfYml0bWFwX25vZGVzIDsK ICBpbnQgal91c2VkX2JpdG1hcF9ub2RlcyA7CiAgc3RydWN0IGxpc3RfaGVhZCBqX2JpdG1hcF9u b2RlcyA7CiAgc3RydWN0IGlub2RlIGpfZHVtbXlfaW5vZGUgOwogIHN0cnVjdCByZWlzZXJmc19s aXN0X2JpdG1hcCBqX2xpc3RfYml0bWFwWzVdIDsKICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9s aXN0IGpfam91cm5hbF9saXN0WzY0XSA7CiAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUg KmpfaGFzaF90YWJsZVs4MTkyXSA7CiAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKmpf bGlzdF9oYXNoX3RhYmxlWzgxOTJdIDsKCiAgc3RydWN0IGxpc3RfaGVhZCBqX3ByZWFsbG9jX2xp c3Q7Cn07CgoKCgp0eXBlZGVmIF9fdTMyICgqaGFzaGZfdCkgKGNvbnN0IHNpZ25lZCBjaGFyICos IGludCk7CgoKc3RydWN0IHJlaXNlcmZzX3NiX2luZm8KewogICAgc3RydWN0IGJ1ZmZlcl9oZWFk ICogc19zYmg7CgoKICAgIHN0cnVjdCByZWlzZXJmc19zdXBlcl9ibG9jayAqIHNfcnM7CiAgICBz dHJ1Y3QgYnVmZmVyX2hlYWQgKiogc19hcF9iaXRtYXA7CiAgICBzdHJ1Y3QgcmVpc2VyZnNfam91 cm5hbCAqc19qb3VybmFsIDsKICAgIHVuc2lnbmVkIHNob3J0IHNfbW91bnRfc3RhdGU7CgoKICAg IHZvaWQgKCplbmRfaW9faGFuZGxlcikoc3RydWN0IGJ1ZmZlcl9oZWFkICosIGludCk7CiAgICBo YXNoZl90IHNfaGFzaF9mdW5jdGlvbjsKCgogICAgdW5zaWduZWQgbG9uZyBzX21vdW50X29wdDsK CgoKCiAgICB3YWl0X3F1ZXVlX2hlYWRfdCBzX3dhaXQ7CgogICAgYXRvbWljX3Qgc19nZW5lcmF0 aW9uX2NvdW50ZXI7CgoKCiAgICBpbnQgc19rbWFsbG9jczsKICAgIGludCBzX2Rpc2tfcmVhZHM7 CiAgICBpbnQgc19kaXNrX3dyaXRlczsKICAgIGludCBzX2ZpeF9ub2RlczsKICAgIGludCBzX2Rv X2JhbGFuY2U7CiAgICBpbnQgc191bm5lZWRlZF9sZWZ0X25laWdoYm9yOwogICAgaW50IHNfZ29v ZF9zZWFyY2hfYnlfa2V5X3JlYWRhOwogICAgaW50IHNfYm1hcHM7CiAgICBpbnQgc19ibWFwc193 aXRob3V0X3NlYXJjaDsKICAgIGludCBzX2RpcmVjdDJpbmRpcmVjdDsKICAgIGludCBzX2luZGly ZWN0MmRpcmVjdDsKfTsKIyA0MTAgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRl L2xpbnV4L3JlaXNlcmZzX2ZzX3NiLmgiCnZvaWQgcmVpc2VyZnNfZmlsZV9idWZmZXIgKHN0cnVj dCBidWZmZXJfaGVhZCAqIGJoLCBpbnQgbGlzdCk7CmludCByZWlzZXJmc19pc19zdXBlcihzdHJ1 Y3Qgc3VwZXJfYmxvY2sgKnMpIDsKaW50IGpvdXJuYWxfbWFya19kaXJ0eShzdHJ1Y3QgcmVpc2Vy ZnNfdHJhbnNhY3Rpb25faGFuZGxlICosIHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgYnVm ZmVyX2hlYWQgKmJoKSA7CmludCBmbHVzaF9vbGRfY29tbWl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sg KnMsIGludCkgOwppbnQgc2hvd19yZWlzZXJmc19sb2Nrcyh2b2lkKSA7CmludCByZWlzZXJmc19y ZXNpemUoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkIGxvbmcpIDsKIyA2NzYgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3Ny Yy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9iZnNfZnNfc2IuaCIgMQojIDEyICIv dXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9iZnNfZnNfc2IuaCIKc3Ry dWN0IGJmc19zYl9pbmZvIHsKICAgICAgICB1bnNpZ25lZCBsb25nIHNpX2Jsb2NrczsKICAgICAg ICB1bnNpZ25lZCBsb25nIHNpX2ZyZWViOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2lfZnJlZWk7 CiAgICAgICAgdW5zaWduZWQgbG9uZyBzaV9sZl9pb2ZmOwogICAgICAgIHVuc2lnbmVkIGxvbmcg c2lfbGZfc2JsazsKICAgICAgICB1bnNpZ25lZCBsb25nIHNpX2xmX2VibGs7CiAgICAgICAgdW5z aWduZWQgbG9uZyBzaV9sYXN0aTsKICAgICAgICBjaGFyICogc2lfaW1hcDsKICAgICAgICBzdHJ1 Y3QgYnVmZmVyX2hlYWQgKiBzaV9zYmg7CiAgICAgICAgc3RydWN0IGJmc19zdXBlcl9ibG9jayAq IHNpX2Jmc19zYjsKfTsKIyA2NzcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRl L2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9s aW51eC91ZGZfZnNfc2IuaCIgMQojIDIxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5j bHVkZS9saW51eC91ZGZfZnNfc2IuaCIKI3ByYWdtYSBwYWNrKDEpCiMgMzAgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3VkZl9mc19zYi5oIgpzdHJ1Y3QgdWRmX3Nw YXJpbmdfZGF0YQp7CiAgICAgICAgX191MTYgc19wYWNrZXRfbGVuOwogICAgICAgIHN0cnVjdCBi dWZmZXJfaGVhZCAqc19zcGFyX21hcFs0XTsKfTsKCnN0cnVjdCB1ZGZfdmlydHVhbF9kYXRhCnsK ICAgICAgICBfX3UzMiBzX251bV9lbnRyaWVzOwogICAgICAgIF9fdTE2IHNfc3RhcnRfb2Zmc2V0 Owp9OwoKc3RydWN0IHVkZl9iaXRtYXAKewogICAgICAgIF9fdTMyIHNfZXh0TGVuZ3RoOwogICAg ICAgIF9fdTMyIHNfZXh0UG9zaXRpb247CiAgICAgICAgX191MTYgc19ucl9ncm91cHM7CiAgICAg ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqc19ibG9ja19iaXRtYXA7Cn07CgpzdHJ1Y3QgdWRmX3Bh cnRfbWFwCnsKICAgICAgICB1bmlvbgogICAgICAgIHsKICAgICAgICAgICAgICAgIHN0cnVjdCB1 ZGZfYml0bWFwICpzX2JpdG1hcDsKICAgICAgICAgICAgICAgIHN0cnVjdCBpbm9kZSAqc190YWJs ZTsKICAgICAgICB9IHNfdXNwYWNlOwogICAgICAgIHVuaW9uCiAgICAgICAgewogICAgICAgICAg ICAgICAgc3RydWN0IHVkZl9iaXRtYXAgKnNfYml0bWFwOwogICAgICAgICAgICAgICAgc3RydWN0 IGlub2RlICpzX3RhYmxlOwogICAgICAgIH0gc19mc3BhY2U7CiAgICAgICAgX191MzIgc19wYXJ0 aXRpb25fcm9vdDsKICAgICAgICBfX3UzMiBzX3BhcnRpdGlvbl9sZW47CiAgICAgICAgX191MTYg c19wYXJ0aXRpb25fdHlwZTsKICAgICAgICBfX3UxNiBzX3BhcnRpdGlvbl9udW07CiAgICAgICAg dW5pb24KICAgICAgICB7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgdWRmX3NwYXJpbmdfZGF0YSBz X3NwYXJpbmc7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgdWRmX3ZpcnR1YWxfZGF0YSBzX3ZpcnR1 YWw7CiAgICAgICAgfSBzX3R5cGVfc3BlY2lmaWM7CiAgICAgICAgX191MzIgKCpzX3BhcnRpdGlv bl9mdW5jKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgX191MzIsIF9fdTE2LCBfX3UzMik7CiAgICAg ICAgX191MTYgc192b2x1bWVzZXFudW07CiAgICAgICAgX191MTYgc19wYXJ0aXRpb25fZmxhZ3M7 Cn07CgojcHJhZ21hIHBhY2soKQoKc3RydWN0IHVkZl9zYl9pbmZvCnsKICAgICAgICBzdHJ1Y3Qg dWRmX3BhcnRfbWFwICpzX3BhcnRtYXBzOwogICAgICAgIF9fdTggc192b2xpZGVudFszMl07CgoK ICAgICAgICBfX3UxNiBzX3BhcnRpdGlvbnM7CiAgICAgICAgX191MTYgc19wYXJ0aXRpb247CgoK ICAgICAgICBfX3MzMiBzX3Nlc3Npb247CiAgICAgICAgX191MzIgc19hbmNob3JbNF07CiAgICAg ICAgX191MzIgc19sYXN0YmxvY2s7CgogICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqc19sdmlk Ymg7CgoKICAgICAgICBtb2RlX3Qgc191bWFzazsKICAgICAgICBnaWRfdCBzX2dpZDsKICAgICAg ICB1aWRfdCBzX3VpZDsKCgogICAgICAgIHRpbWVfdCBzX3JlY29yZHRpbWU7CgoKICAgICAgICBf X3UxNiBzX3NlcmlhbG51bTsKCgogICAgICAgIF9fdTE2IHNfdWRmcmV2OwoKCiAgICAgICAgX191 MzIgc19mbGFnczsKCgogICAgICAgIHN0cnVjdCBubHNfdGFibGUgKnNfbmxzX21hcDsKCgogICAg ICAgIHN0cnVjdCBpbm9kZSAqc192YXQ7Cn07CiMgNjc4ICIvdXNyL3NyYy9saW51eC0yLjQuMTMv bGludXgvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xp bnV4L2luY2x1ZGUvbGludXgvbmNwX2ZzX3NiLmgiIDEKIyAxMSAiL3Vzci9zcmMvbGludXgtMi40 LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvbmNwX2ZzX3NiLmgiCiMgMSAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvdHlwZXMuaCIgMQojIDEyICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9uY3BfZnNfc2IuaCIgMgojIDEgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L25jcF9tb3VudC5oIiAxCiMgMTEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L25jcF9tb3VudC5oIgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3R5cGVzLmgiIDEKIyAx MiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvbmNwX21vdW50Lmgi IDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9uY3AuaCIg MQojIDEzICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9uY3AuaCIK IyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC90eXBlcy5oIiAx CiMgMTQgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L25jcC5oIiAy CiMgMjIgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L25jcC5oIgpz dHJ1Y3QgbmNwX3JlcXVlc3RfaGVhZGVyIHsKICAgICAgICBfX3UxNiB0eXBlIF9fYXR0cmlidXRl X18oKHBhY2tlZCkpOwogICAgICAgIF9fdTggc2VxdWVuY2UgX19hdHRyaWJ1dGVfXygocGFja2Vk KSk7CiAgICAgICAgX191OCBjb25uX2xvdyBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAg ICBfX3U4IHRhc2sgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191OCBjb25uX2hp Z2ggX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191OCBmdW5jdGlvbiBfX2F0dHJp YnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3U4IGRhdGFbMF0gX19hdHRyaWJ1dGVfXygocGFj a2VkKSk7Cn07CgoKCgpzdHJ1Y3QgbmNwX3JlcGx5X2hlYWRlciB7CiAgICAgICAgX191MTYgdHlw ZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3U4IHNlcXVlbmNlIF9fYXR0cmli dXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTggY29ubl9sb3cgX19hdHRyaWJ1dGVfXygocGFj a2VkKSk7CiAgICAgICAgX191OCB0YXNrIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAg IF9fdTggY29ubl9oaWdoIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTggY29t cGxldGlvbl9jb2RlIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTggY29ubmVj dGlvbl9zdGF0ZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3U4IGRhdGFbMF0g X19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cn07CgoKCnN0cnVjdCBuY3Bfdm9sdW1lX2luZm8gewog ICAgICAgIF9fdTMyIHRvdGFsX2Jsb2NrczsKICAgICAgICBfX3UzMiBmcmVlX2Jsb2NrczsKICAg ICAgICBfX3UzMiBwdXJnZWFibGVfYmxvY2tzOwogICAgICAgIF9fdTMyIG5vdF95ZXRfcHVyZ2Vh YmxlX2Jsb2NrczsKICAgICAgICBfX3UzMiB0b3RhbF9kaXJfZW50cmllczsKICAgICAgICBfX3Uz MiBhdmFpbGFibGVfZGlyX2VudHJpZXM7CiAgICAgICAgX191OCBzZWN0b3JzX3Blcl9ibG9jazsK ICAgICAgICBjaGFyIHZvbHVtZV9uYW1lWygxNikgKyAxXTsKfTsKIyAxMTIgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L25jcC5oIgpzdHJ1Y3QgbndfaW5mb19zdHJ1 Y3QgewogICAgICAgIF9fdTMyIHNwYWNlQWxsb2MgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAg ICAgICAgX191MzIgYXR0cmlidXRlcyBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBf X3UxNiBmbGFncyBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3UzMiBkYXRhU3Ry ZWFtU2l6ZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3UzMiB0b3RhbFN0cmVh bVNpemUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MTYgbnVtYmVyT2ZTdHJl YW1zIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTE2IGNyZWF0aW9uVGltZSBf X2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3UxNiBjcmVhdGlvbkRhdGUgX19hdHRy aWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MzIgY3JlYXRvcklEIF9fYXR0cmlidXRlX18o KHBhY2tlZCkpOwogICAgICAgIF9fdTE2IG1vZGlmeVRpbWUgX19hdHRyaWJ1dGVfXygocGFja2Vk KSk7CiAgICAgICAgX191MTYgbW9kaWZ5RGF0ZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAg ICAgICBfX3UzMiBtb2RpZmllcklEIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9f dTE2IGxhc3RBY2Nlc3NEYXRlIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTE2 IGFyY2hpdmVUaW1lIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTE2IGFyY2hp dmVEYXRlIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTMyIGFyY2hpdmVySUQg X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MTYgaW5oZXJpdGVkUmlnaHRzTWFz ayBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3UzMiBkaXJFbnROdW0gX19hdHRy aWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MzIgRG9zRGlyTnVtIF9fYXR0cmlidXRlX18o KHBhY2tlZCkpOwogICAgICAgIF9fdTMyIHZvbE51bWJlciBfX2F0dHJpYnV0ZV9fKChwYWNrZWQp KTsKICAgICAgICBfX3UzMiBFQURhdGFTaXplIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAg ICAgIF9fdTMyIEVBS2V5Q291bnQgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191 MzIgRUFLZXlTaXplIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTMyIE5TQ3Jl YXRvciBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3U4IG5hbWVMZW4gX19hdHRy aWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191OCBlbnRyeU5hbWVbMjU2XSBfX2F0dHJpYnV0 ZV9fKChwYWNrZWQpKTsKfTsKIyAxNTYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNs dWRlL2xpbnV4L25jcC5oIgpzdHJ1Y3QgbndfbW9kaWZ5X2Rvc19pbmZvIHsKICAgICAgICBfX3Uz MiBhdHRyaWJ1dGVzIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTE2IGNyZWF0 aW9uRGF0ZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3UxNiBjcmVhdGlvblRp bWUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MzIgY3JlYXRvcklEIF9fYXR0 cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTE2IG1vZGlmeURhdGUgX19hdHRyaWJ1dGVf XygocGFja2VkKSk7CiAgICAgICAgX191MTYgbW9kaWZ5VGltZSBfX2F0dHJpYnV0ZV9fKChwYWNr ZWQpKTsKICAgICAgICBfX3UzMiBtb2RpZmllcklEIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwog ICAgICAgIF9fdTE2IGFyY2hpdmVEYXRlIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAg IF9fdTE2IGFyY2hpdmVUaW1lIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTMy IGFyY2hpdmVySUQgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MTYgbGFzdEFj Y2Vzc0RhdGUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MTYgaW5oZXJpdGFu Y2VHcmFudE1hc2sgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MTYgaW5oZXJp dGFuY2VSZXZva2VNYXNrIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTMyIG1h eGltdW1TcGFjZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKfTsKCnN0cnVjdCBud19zZWFyY2hf c2VxdWVuY2UgewogICAgICAgIF9fdTggdm9sTnVtYmVyIF9fYXR0cmlidXRlX18oKHBhY2tlZCkp OwogICAgICAgIF9fdTMyIGRpckJhc2UgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAg X191MzIgc2VxdWVuY2UgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cn07CiMgMTMgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L25jcF9tb3VudC5oIiAyCiMgMjUgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L25jcF9tb3VudC5oIgpzdHJ1 Y3QgbmNwX21vdW50X2RhdGEgewogICAgICAgIGludCB2ZXJzaW9uOwogICAgICAgIHVuc2lnbmVk IGludCBuY3BfZmQ7CiAgICAgICAgX19rZXJuZWxfdWlkX3QgbW91bnRlZF91aWQ7CiAgICAgICAg X19rZXJuZWxfcGlkX3Qgd2RvZ19waWQ7CgogICAgICAgIHVuc2lnbmVkIGNoYXIgbW91bnRlZF92 b2xbKDE2KSArIDFdOwogICAgICAgIHVuc2lnbmVkIGludCB0aW1lX291dDsKCiAgICAgICAgdW5z aWduZWQgaW50IHJldHJ5X2NvdW50OwogICAgICAgIHVuc2lnbmVkIGludCBmbGFnczsKCiAgICAg ICAgX19rZXJuZWxfdWlkX3QgdWlkOwogICAgICAgIF9fa2VybmVsX2dpZF90IGdpZDsKICAgICAg ICBfX2tlcm5lbF9tb2RlX3QgZmlsZV9tb2RlOwogICAgICAgIF9fa2VybmVsX21vZGVfdCBkaXJf bW9kZTsKfTsKCgoKc3RydWN0IG5jcF9tb3VudF9kYXRhX3Y0IHsKICAgICAgICBpbnQgdmVyc2lv bjsKICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwoKCiAgICAgICAgdW5zaWduZWQgbG9uZyBt b3VudGVkX3VpZDsKCiAgICAgICAgbG9uZyB3ZG9nX3BpZDsKCiAgICAgICAgdW5zaWduZWQgaW50 IG5jcF9mZDsKICAgICAgICB1bnNpZ25lZCBpbnQgdGltZV9vdXQ7CgogICAgICAgIHVuc2lnbmVk IGludCByZXRyeV9jb3VudDsKCgoKICAgICAgICB1bnNpZ25lZCBsb25nIHVpZDsKICAgICAgICB1 bnNpZ25lZCBsb25nIGdpZDsKCiAgICAgICAgdW5zaWduZWQgbG9uZyBmaWxlX21vZGU7CiAgICAg ICAgdW5zaWduZWQgbG9uZyBkaXJfbW9kZTsKfTsKCgoKc3RydWN0IG5jcF9tb3VudF9kYXRhX2tl cm5lbCB7CiAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKICAgICAgICB1bnNpZ25lZCBpbnQg aW50X2ZsYWdzOwoKICAgICAgICBfX2tlcm5lbF91aWQzMl90IG1vdW50ZWRfdWlkOwogICAgICAg IF9fa2VybmVsX3BpZF90IHdkb2dfcGlkOwogICAgICAgIHVuc2lnbmVkIGludCBuY3BfZmQ7CiAg ICAgICAgdW5zaWduZWQgaW50IHRpbWVfb3V0OwoKICAgICAgICB1bnNpZ25lZCBpbnQgcmV0cnlf Y291bnQ7CiAgICAgICAgdW5zaWduZWQgY2hhciBtb3VudGVkX3ZvbFsoMTYpICsgMV07CiAgICAg ICAgX19rZXJuZWxfdWlkMzJfdCB1aWQ7CiAgICAgICAgX19rZXJuZWxfZ2lkMzJfdCBnaWQ7CiAg ICAgICAgX19rZXJuZWxfbW9kZV90IGZpbGVfbW9kZTsKICAgICAgICBfX2tlcm5lbF9tb2RlX3Qg ZGlyX21vZGU7Cn07CiMgMTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xp bnV4L25jcF9mc19zYi5oIiAyCgoKCgoKc3RydWN0IG5jcF9zZXJ2ZXIgewoKICAgICAgICBzdHJ1 Y3QgbmNwX21vdW50X2RhdGFfa2VybmVsIG07CgoKCiAgICAgICAgX191OCBuYW1lX3NwYWNlWyg2 NCkgKyAyXTsKCiAgICAgICAgc3RydWN0IGZpbGUgKm5jcF9maWxwOwoKICAgICAgICB1OCBzZXF1 ZW5jZTsKICAgICAgICB1OCB0YXNrOwogICAgICAgIHUxNiBjb25uZWN0aW9uOwoKICAgICAgICB1 OCBjb21wbGV0aW9uOwogICAgICAgIHU4IGNvbm5fc3RhdHVzOwoKCgogICAgICAgIGludCBidWZm ZXJfc2l6ZTsKCiAgICAgICAgaW50IHJlcGx5X3NpemU7CgogICAgICAgIGludCBwYWNrZXRfc2l6 ZTsKICAgICAgICB1bnNpZ25lZCBjaGFyICpwYWNrZXQ7CgoKICAgICAgICBpbnQgbG9jazsKICAg ICAgICBzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsKCiAgICAgICAgaW50IGN1cnJlbnRfc2l6ZTsKICAg ICAgICBpbnQgaGFzX3N1YmZ1bmN0aW9uOwogICAgICAgIGludCBuY3BfcmVwbHlfc2l6ZTsKCiAg ICAgICAgaW50IHJvb3Rfc2V0dXBlZDsKCgogICAgICAgIGludCBzaWduX3dhbnRlZDsKICAgICAg ICBpbnQgc2lnbl9hY3RpdmU7CiAgICAgICAgY2hhciBzaWduX3Jvb3RbOF07CiAgICAgICAgY2hh ciBzaWduX2xhc3RbMTZdOwoKCiAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgIGludCBh dXRoX3R5cGU7CiAgICAgICAgICAgICAgICBzaXplX3Qgb2JqZWN0X25hbWVfbGVuOwogICAgICAg ICAgICAgICAgdm9pZCogb2JqZWN0X25hbWU7CiAgICAgICAgICAgICAgICBpbnQgb2JqZWN0X3R5 cGU7CiAgICAgICAgfSBhdXRoOwoKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgc2l6 ZV90IGxlbjsKICAgICAgICAgICAgICAgIHZvaWQqIGRhdGE7CiAgICAgICAgfSBwcml2OwoKCiAg ICAgICAgc3RydWN0IG5sc190YWJsZSAqbmxzX3ZvbDsKICAgICAgICBzdHJ1Y3QgbmxzX3RhYmxl ICpubHNfaW87CgoKICAgICAgICBpbnQgZGVudHJ5X3R0bDsKCgogICAgICAgIHVuc2lnbmVkIGlu dCBmbGFnczsKfTsKIyA5MiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGlu dXgvbmNwX2ZzX3NiLmgiCnN0YXRpYyBpbmxpbmUgaW50IG5jcF9jb25uX3ZhbGlkKHN0cnVjdCBu Y3Bfc2VydmVyICpzZXJ2ZXIpCnsKICAgICAgICByZXR1cm4gKChzZXJ2ZXItPmNvbm5fc3RhdHVz ICYgMHgxMSkgPT0gMCk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBuY3BfaW52YWxpZGF0ZV9jb25u KHN0cnVjdCBuY3Bfc2VydmVyICpzZXJ2ZXIpCnsKICAgICAgICBzZXJ2ZXItPmNvbm5fc3RhdHVz IHw9IDB4MDE7Cn0KIyA2NzkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xp bnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51 eC91c2JkZXZfZnNfc2IuaCIgMQpzdHJ1Y3QgdXNiZGV2X3NiX2luZm8gewogICAgICAgIHN0cnVj dCBsaXN0X2hlYWQgc2xpc3Q7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBpbGlzdDsKICAgICAg ICB1aWRfdCBkZXZ1aWQ7CiAgICAgICAgZ2lkX3QgZGV2Z2lkOwogICAgICAgIHVtb2RlX3QgZGV2 bW9kZTsKICAgICAgICB1aWRfdCBidXN1aWQ7CiAgICAgICAgZ2lkX3QgYnVzZ2lkOwogICAgICAg IHVtb2RlX3QgYnVzbW9kZTsKICAgICAgICB1aWRfdCBsaXN0dWlkOwogICAgICAgIGdpZF90IGxp c3RnaWQ7CiAgICAgICAgdW1vZGVfdCBsaXN0bW9kZTsKfTsKIyA2ODAgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9jcmFtZnNfZnNfc2IuaCIgMQojIDY4MSAiL3Vzci9z cmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2pmZnMyX2ZzX3NiLmgiIDEKCgoKCgoj IDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3R5cGVzLmgiIDEK IyA3ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9qZmZzMl9mc19z Yi5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc3Bp bmxvY2suaCIgMQojIDggIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4 L2pmZnMyX2ZzX3NiLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVk ZS9saW51eC9jb21wbGV0aW9uLmgiIDEKIyAxMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4 L2luY2x1ZGUvbGludXgvY29tcGxldGlvbi5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9s aW51eC9pbmNsdWRlL2xpbnV4L3dhaXQuaCIgMQojIDEyICIvdXNyL3NyYy9saW51eC0yLjQuMTMv bGludXgvaW5jbHVkZS9saW51eC9jb21wbGV0aW9uLmgiIDIKCnN0cnVjdCBjb21wbGV0aW9uIHsK ICAgICAgICB1bnNpZ25lZCBpbnQgZG9uZTsKICAgICAgICB3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0 Owp9OwoKCgoKCgoKc3RhdGljIGlubGluZSB2b2lkIGluaXRfY29tcGxldGlvbihzdHJ1Y3QgY29t cGxldGlvbiAqeCkKewogICAgICAgIHgtPmRvbmUgPSAwOwogICAgICAgIGluaXRfd2FpdHF1ZXVl X2hlYWQoJngtPndhaXQpOwp9CgpleHRlcm4gdm9pZCB3YWl0X2Zvcl9jb21wbGV0aW9uKHN0cnVj dCBjb21wbGV0aW9uICopIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIHZvaWQg Y29tcGxldGUoc3RydWN0IGNvbXBsZXRpb24gKikgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkp OwojIDkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2pmZnMyX2Zz X3NiLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vc2Vt YXBob3JlLmgiIDEKIyAxMCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGlu dXgvamZmczJfZnNfc2IuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNs dWRlL2xpbnV4L2xpc3QuaCIgMQojIDExICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5j bHVkZS9saW51eC9qZmZzMl9mc19zYi5oIiAyCiMgMjAgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9s aW51eC9pbmNsdWRlL2xpbnV4L2pmZnMyX2ZzX3NiLmgiCnN0cnVjdCBqZmZzMl9zYl9pbmZvIHsK ICAgICAgICBzdHJ1Y3QgbXRkX2luZm8gKm10ZDsKCiAgICAgICAgX191MzIgaGlnaGVzdF9pbm87 CiAgICAgICAgdW5zaWduZWQgaW50IGZsYWdzOwogICAgICAgIHNwaW5sb2NrX3Qgbm9kZWxpc3Rf bG9jazsKCgogICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqZ2NfdGFzazsKICAgICAgICBzdHJ1 Y3Qgc2VtYXBob3JlIGdjX3RocmVhZF9zdGFydDsKICAgICAgICBzdHJ1Y3QgY29tcGxldGlvbiBn Y190aHJlYWRfZXhpdDsKCgoKICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlIGFsbG9jX3NlbTsKCgoK CiAgICAgICAgX191MzIgZmxhc2hfc2l6ZTsKICAgICAgICBfX3UzMiB1c2VkX3NpemU7CiAgICAg ICAgX191MzIgZGlydHlfc2l6ZTsKICAgICAgICBfX3UzMiBmcmVlX3NpemU7CiAgICAgICAgX191 MzIgZXJhc2luZ19zaXplOwogICAgICAgIF9fdTMyIGJhZF9zaXplOwogICAgICAgIF9fdTMyIHNl Y3Rvcl9zaXplOwoKCgogICAgICAgIF9fdTMyIG5yX2ZyZWVfYmxvY2tzOwogICAgICAgIF9fdTMy IG5yX2VyYXNpbmdfYmxvY2tzOwoKICAgICAgICBfX3UzMiBucl9ibG9ja3M7CiAgICAgICAgc3Ry dWN0IGpmZnMyX2VyYXNlYmxvY2sgKmJsb2NrczsKCiAgICAgICAgc3RydWN0IGpmZnMyX2VyYXNl YmxvY2sgKm5leHRibG9jazsKCiAgICAgICAgc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmdjYmxv Y2s7CgogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgY2xlYW5fbGlzdDsKICAgICAgICBzdHJ1Y3Qg bGlzdF9oZWFkIGRpcnR5X2xpc3Q7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBlcmFzaW5nX2xp c3Q7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBlcmFzZV9wZW5kaW5nX2xpc3Q7CiAgICAgICAg c3RydWN0IGxpc3RfaGVhZCBlcmFzZV9jb21wbGV0ZV9saXN0OwogICAgICAgIHN0cnVjdCBsaXN0 X2hlYWQgZnJlZV9saXN0OwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgYmFkX2xpc3Q7CiAgICAg ICAgc3RydWN0IGxpc3RfaGVhZCBiYWRfdXNlZF9saXN0OwoKICAgICAgICBzcGlubG9ja190IGVy YXNlX2NvbXBsZXRpb25fbG9jazsKCiAgICAgICAgd2FpdF9xdWV1ZV9oZWFkX3QgZXJhc2Vfd2Fp dDsKICAgICAgICBzdHJ1Y3QgamZmczJfaW5vZGVfY2FjaGUgKmlub2NhY2hlX2xpc3RbMV07CiAg ICAgICAgc3BpbmxvY2tfdCBpbm9jYWNoZV9sb2NrOwp9OwojIDY4MiAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMgoKZXh0ZXJuIHN0cnVjdCBsaXN0X2hl YWQgc3VwZXJfYmxvY2tzOwpleHRlcm4gc3BpbmxvY2tfdCBzYl9sb2NrOwoKCgpzdHJ1Y3Qgc3Vw ZXJfYmxvY2sgewogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgc19saXN0OwogICAgICAgIGtkZXZf dCBzX2RldjsKICAgICAgICB1bnNpZ25lZCBsb25nIHNfYmxvY2tzaXplOwogICAgICAgIHVuc2ln bmVkIGNoYXIgc19ibG9ja3NpemVfYml0czsKICAgICAgICB1bnNpZ25lZCBjaGFyIHNfZGlydDsK ICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgc19tYXhieXRlczsKICAgICAgICBzdHJ1Y3QgZmls ZV9zeXN0ZW1fdHlwZSAqc190eXBlOwogICAgICAgIHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zICpz X29wOwogICAgICAgIHN0cnVjdCBkcXVvdF9vcGVyYXRpb25zICpkcV9vcDsKICAgICAgICB1bnNp Z25lZCBsb25nIHNfZmxhZ3M7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzX21hZ2ljOwogICAgICAg IHN0cnVjdCBkZW50cnkgKnNfcm9vdDsKICAgICAgICBzdHJ1Y3Qgcndfc2VtYXBob3JlIHNfdW1v dW50OwogICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgc19sb2NrOwogICAgICAgIGludCBzX2NvdW50 OwogICAgICAgIGF0b21pY190IHNfYWN0aXZlOwoKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIHNf ZGlydHk7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBzX2xvY2tlZF9pbm9kZXM7CiAgICAgICAg c3RydWN0IGxpc3RfaGVhZCBzX2ZpbGVzOwoKICAgICAgICBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpz X2JkZXY7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBzX2luc3RhbmNlczsKICAgICAgICBzdHJ1 Y3QgcXVvdGFfbW91bnRfb3B0aW9ucyBzX2RxdW90OwoKICAgICAgICB1bmlvbiB7CiAgICAgICAg ICAgICAgICBzdHJ1Y3QgbWluaXhfc2JfaW5mbyBtaW5peF9zYjsKICAgICAgICAgICAgICAgIHN0 cnVjdCBleHQyX3NiX2luZm8gZXh0Ml9zYjsKICAgICAgICAgICAgICAgIHN0cnVjdCBocGZzX3Ni X2luZm8gaHBmc19zYjsKICAgICAgICAgICAgICAgIHN0cnVjdCBudGZzX3NiX2luZm8gbnRmc19z YjsKICAgICAgICAgICAgICAgIHN0cnVjdCBtc2Rvc19zYl9pbmZvIG1zZG9zX3NiOwogICAgICAg ICAgICAgICAgc3RydWN0IGlzb2ZzX3NiX2luZm8gaXNvZnNfc2I7CiAgICAgICAgICAgICAgICBz dHJ1Y3QgbmZzX3NiX2luZm8gbmZzX3NiOwogICAgICAgICAgICAgICAgc3RydWN0IHN5c3Zfc2Jf aW5mbyBzeXN2X3NiOwogICAgICAgICAgICAgICAgc3RydWN0IGFmZnNfc2JfaW5mbyBhZmZzX3Ni OwogICAgICAgICAgICAgICAgc3RydWN0IHVmc19zYl9pbmZvIHVmc19zYjsKICAgICAgICAgICAg ICAgIHN0cnVjdCBlZnNfc2JfaW5mbyBlZnNfc2I7CiAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2ht ZW1fc2JfaW5mbyBzaG1lbV9zYjsKICAgICAgICAgICAgICAgIHN0cnVjdCByb21mc19zYl9pbmZv IHJvbWZzX3NiOwogICAgICAgICAgICAgICAgc3RydWN0IHNtYl9zYl9pbmZvIHNtYmZzX3NiOwog ICAgICAgICAgICAgICAgc3RydWN0IGhmc19zYl9pbmZvIGhmc19zYjsKICAgICAgICAgICAgICAg IHN0cnVjdCBhZGZzX3NiX2luZm8gYWRmc19zYjsKICAgICAgICAgICAgICAgIHN0cnVjdCBxbng0 X3NiX2luZm8gcW54NF9zYjsKICAgICAgICAgICAgICAgIHN0cnVjdCByZWlzZXJmc19zYl9pbmZv IHJlaXNlcmZzX3NiOwogICAgICAgICAgICAgICAgc3RydWN0IGJmc19zYl9pbmZvIGJmc19zYjsK ICAgICAgICAgICAgICAgIHN0cnVjdCB1ZGZfc2JfaW5mbyB1ZGZfc2I7CiAgICAgICAgICAgICAg ICBzdHJ1Y3QgbmNwX3NlcnZlciBuY3Bmc19zYjsKICAgICAgICAgICAgICAgIHN0cnVjdCB1c2Jk ZXZfc2JfaW5mbyB1c2JkZXZmc19zYjsKICAgICAgICAgICAgICAgIHN0cnVjdCBqZmZzMl9zYl9p bmZvIGpmZnMyX3NiOwogICAgICAgICAgICAgICAgc3RydWN0IGNyYW1mc19zYl9pbmZvIGNyYW1m c19zYjsKICAgICAgICAgICAgICAgIHZvaWQgKmdlbmVyaWNfc2JwOwogICAgICAgIH0gdTsKCgoK CiAgICAgICAgc3RydWN0IHNlbWFwaG9yZSBzX3Zmc19yZW5hbWVfc2VtOwojIDc1NCAiL3Vzci9z cmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIKICAgICAgICBzdHJ1Y3Qg c2VtYXBob3JlIHNfbmZzZF9mcmVlX3BhdGhfc2VtOwp9OwoKCgoKZXh0ZXJuIGludCB2ZnNfY3Jl YXRlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIGludCk7CmV4dGVybiBpbnQgdmZz X21rZGlyKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIGludCk7CmV4dGVybiBpbnQg dmZzX21rbm9kKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIGludCwgZGV2X3QpOwpl eHRlcm4gaW50IHZmc19zeW1saW5rKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIGNv bnN0IGNoYXIgKik7CmV4dGVybiBpbnQgdmZzX2xpbmsoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3Qg aW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqKTsKZXh0ZXJuIGludCB2ZnNfcm1kaXIoc3RydWN0IGlu b2RlICosIHN0cnVjdCBkZW50cnkgKik7CmV4dGVybiBpbnQgdmZzX3VubGluayhzdHJ1Y3QgaW5v ZGUgKiwgc3RydWN0IGRlbnRyeSAqKTsKZXh0ZXJuIGludCB2ZnNfcmVuYW1lKHN0cnVjdCBpbm9k ZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICopOwoj IDc4OCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIKdHlw ZWRlZiBpbnQgKCpmaWxsZGlyX3QpKHZvaWQgKiwgY29uc3QgY2hhciAqLCBpbnQsIGxvZmZfdCwg aW5vX3QsIHVuc2lnbmVkKTsKCnN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyB7CiAgICAg ICAgaW50ICgqb3BlbikgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKICAgICAgICBp bnQgKCpyZWxlYXNlKSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOwogICAgICAgIGlu dCAoKmlvY3RsKSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosIHVuc2lnbmVkLCB1bnNp Z25lZCBsb25nKTsKICAgICAgICBpbnQgKCpjaGVja19tZWRpYV9jaGFuZ2UpIChrZGV2X3QpOwog ICAgICAgIGludCAoKnJldmFsaWRhdGUpIChrZGV2X3QpOwp9OwoKCgoKCgpzdHJ1Y3QgZmlsZV9v cGVyYXRpb25zIHsKICAgICAgICBzdHJ1Y3QgbW9kdWxlICpvd25lcjsKICAgICAgICBsb2ZmX3Qg KCpsbHNlZWspIChzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3QsIGludCk7CiAgICAgICAgc3NpemVfdCAo KnJlYWQpIChzdHJ1Y3QgZmlsZSAqLCBjaGFyICosIHNpemVfdCwgbG9mZl90ICopOwogICAgICAg IHNzaXplX3QgKCp3cml0ZSkgKHN0cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBs b2ZmX3QgKik7CiAgICAgICAgaW50ICgqcmVhZGRpcikgKHN0cnVjdCBmaWxlICosIHZvaWQgKiwg ZmlsbGRpcl90KTsKICAgICAgICB1bnNpZ25lZCBpbnQgKCpwb2xsKSAoc3RydWN0IGZpbGUgKiwg c3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICopOwogICAgICAgIGludCAoKmlvY3RsKSAoc3RydWN0 IGlub2RlICosIHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CiAg ICAgICAgaW50ICgqbW1hcCkgKHN0cnVjdCBmaWxlICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq KTsKICAgICAgICBpbnQgKCpvcGVuKSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOwog ICAgICAgIGludCAoKmZsdXNoKSAoc3RydWN0IGZpbGUgKik7CiAgICAgICAgaW50ICgqcmVsZWFz ZSkgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKICAgICAgICBpbnQgKCpmc3luYykg KHN0cnVjdCBmaWxlICosIHN0cnVjdCBkZW50cnkgKiwgaW50IGRhdGFzeW5jKTsKICAgICAgICBp bnQgKCpmYXN5bmMpIChpbnQsIHN0cnVjdCBmaWxlICosIGludCk7CiAgICAgICAgaW50ICgqbG9j aykgKHN0cnVjdCBmaWxlICosIGludCwgc3RydWN0IGZpbGVfbG9jayAqKTsKICAgICAgICBzc2l6 ZV90ICgqcmVhZHYpIChzdHJ1Y3QgZmlsZSAqLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwgdW5zaWdu ZWQgbG9uZywgbG9mZl90ICopOwogICAgICAgIHNzaXplX3QgKCp3cml0ZXYpIChzdHJ1Y3QgZmls ZSAqLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwgdW5zaWduZWQgbG9uZywgbG9mZl90ICopOwogICAg ICAgIHNzaXplX3QgKCpzZW5kcGFnZSkgKHN0cnVjdCBmaWxlICosIHN0cnVjdCBwYWdlICosIGlu dCwgc2l6ZV90LCBsb2ZmX3QgKiwgaW50KTsKICAgICAgICB1bnNpZ25lZCBsb25nICgqZ2V0X3Vu bWFwcGVkX2FyZWEpKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcs IHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwp9OwoKc3RydWN0IGlub2RlX29wZXJhdGlv bnMgewogICAgICAgIGludCAoKmNyZWF0ZSkgKHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkg KixpbnQpOwogICAgICAgIHN0cnVjdCBkZW50cnkgKiAoKmxvb2t1cCkgKHN0cnVjdCBpbm9kZSAq LHN0cnVjdCBkZW50cnkgKik7CiAgICAgICAgaW50ICgqbGluaykgKHN0cnVjdCBkZW50cnkgKixz dHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICopOwogICAgICAgIGludCAoKnVubGluaykgKHN0 cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKik7CiAgICAgICAgaW50ICgqc3ltbGluaykgKHN0 cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKixjb25zdCBjaGFyICopOwogICAgICAgIGludCAo Km1rZGlyKSAoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqLGludCk7CiAgICAgICAgaW50 ICgqcm1kaXIpIChzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICopOwogICAgICAgIGludCAo Km1rbm9kKSAoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqLGludCxpbnQpOwogICAgICAg IGludCAoKnJlbmFtZSkgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosCiAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICopOwogICAgICAg IGludCAoKnJlYWRsaW5rKSAoc3RydWN0IGRlbnRyeSAqLCBjaGFyICosaW50KTsKICAgICAgICBp bnQgKCpmb2xsb3dfbGluaykgKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IG5hbWVpZGF0YSAqKTsK ICAgICAgICB2b2lkICgqdHJ1bmNhdGUpIChzdHJ1Y3QgaW5vZGUgKik7CiAgICAgICAgaW50ICgq cGVybWlzc2lvbikgKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwogICAgICAgIGludCAoKnJldmFsaWRh dGUpIChzdHJ1Y3QgZGVudHJ5ICopOwogICAgICAgIGludCAoKnNldGF0dHIpIChzdHJ1Y3QgZGVu dHJ5ICosIHN0cnVjdCBpYXR0ciAqKTsKICAgICAgICBpbnQgKCpnZXRhdHRyKSAoc3RydWN0IGRl bnRyeSAqLCBzdHJ1Y3QgaWF0dHIgKik7Cn07CgoKCgoKc3RydWN0IHN1cGVyX29wZXJhdGlvbnMg ewogICAgICAgIHZvaWQgKCpyZWFkX2lub2RlKSAoc3RydWN0IGlub2RlICopOwoKCgoKCgoKICAg ICAgICB2b2lkICgqcmVhZF9pbm9kZTIpIChzdHJ1Y3QgaW5vZGUgKiwgdm9pZCAqKSA7CiAgICAg ICAgdm9pZCAoKmRpcnR5X2lub2RlKSAoc3RydWN0IGlub2RlICopOwogICAgICAgIHZvaWQgKCp3 cml0ZV9pbm9kZSkgKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwogICAgICAgIHZvaWQgKCpwdXRfaW5v ZGUpIChzdHJ1Y3QgaW5vZGUgKik7CiAgICAgICAgdm9pZCAoKmRlbGV0ZV9pbm9kZSkgKHN0cnVj dCBpbm9kZSAqKTsKICAgICAgICB2b2lkICgqcHV0X3N1cGVyKSAoc3RydWN0IHN1cGVyX2Jsb2Nr ICopOwogICAgICAgIHZvaWQgKCp3cml0ZV9zdXBlcikgKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsK ICAgICAgICB2b2lkICgqd3JpdGVfc3VwZXJfbG9ja2ZzKSAoc3RydWN0IHN1cGVyX2Jsb2NrICop OwogICAgICAgIHZvaWQgKCp1bmxvY2tmcykgKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKICAgICAg ICBpbnQgKCpzdGF0ZnMpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IHN0YXRmcyAqKTsK ICAgICAgICBpbnQgKCpyZW1vdW50X2ZzKSAoc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCAqLCBj aGFyICopOwogICAgICAgIHZvaWQgKCpjbGVhcl9pbm9kZSkgKHN0cnVjdCBpbm9kZSAqKTsKICAg ICAgICB2b2lkICgqdW1vdW50X2JlZ2luKSAoc3RydWN0IHN1cGVyX2Jsb2NrICopOwojIDg5MyAi L3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIKICAgICAgICBz dHJ1Y3QgZGVudHJ5ICogKCpmaF90b19kZW50cnkpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIF9f dTMyICpmaCwgaW50IGxlbiwgaW50IGZodHlwZSwgaW50IHBhcmVudCk7CiAgICAgICAgaW50ICgq ZGVudHJ5X3RvX2ZoKShzdHJ1Y3QgZGVudHJ5ICosIF9fdTMyICpmaCwgaW50ICpsZW5wLCBpbnQg bmVlZF9wYXJlbnQpOwp9OwojIDkwNyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1 ZGUvbGludXgvZnMuaCIKZXh0ZXJuIHZvaWQgX19tYXJrX2lub2RlX2RpcnR5KHN0cnVjdCBpbm9k ZSAqLCBpbnQpOwpzdGF0aWMgaW5saW5lIHZvaWQgbWFya19pbm9kZV9kaXJ0eShzdHJ1Y3QgaW5v ZGUgKmlub2RlKQp7CiAgICAgICAgX19tYXJrX2lub2RlX2RpcnR5KGlub2RlLCAoMSB8IDIgfCA0 KSk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX2lub2RlX2RpcnR5X3N5bmMoc3RydWN0IGlu b2RlICppbm9kZSkKewogICAgICAgIF9fbWFya19pbm9kZV9kaXJ0eShpbm9kZSwgMSk7Cn0KCnN0 YXRpYyBpbmxpbmUgdm9pZCBtYXJrX2lub2RlX2RpcnR5X3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5v ZGUpCnsKICAgICAgICBfX21hcmtfaW5vZGVfZGlydHkoaW5vZGUsIDQpOwp9CgpzdHJ1Y3QgZHF1 b3Rfb3BlcmF0aW9ucyB7CiAgICAgICAgdm9pZCAoKmluaXRpYWxpemUpIChzdHJ1Y3QgaW5vZGUg Kiwgc2hvcnQpOwogICAgICAgIHZvaWQgKCpkcm9wKSAoc3RydWN0IGlub2RlICopOwogICAgICAg IGludCAoKmFsbG9jX2Jsb2NrKSAoc3RydWN0IGlub2RlICosIHVuc2lnbmVkIGxvbmcsIGNoYXIp OwogICAgICAgIGludCAoKmFsbG9jX2lub2RlKSAoY29uc3Qgc3RydWN0IGlub2RlICosIHVuc2ln bmVkIGxvbmcpOwogICAgICAgIHZvaWQgKCpmcmVlX2Jsb2NrKSAoc3RydWN0IGlub2RlICosIHVu c2lnbmVkIGxvbmcpOwogICAgICAgIHZvaWQgKCpmcmVlX2lub2RlKSAoY29uc3Qgc3RydWN0IGlu b2RlICosIHVuc2lnbmVkIGxvbmcpOwogICAgICAgIGludCAoKnRyYW5zZmVyKSAoc3RydWN0IGlu b2RlICosIHN0cnVjdCBpYXR0ciAqKTsKfTsKCnN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIHsKICAg ICAgICBjb25zdCBjaGFyICpuYW1lOwogICAgICAgIGludCBmc19mbGFnczsKICAgICAgICBzdHJ1 Y3Qgc3VwZXJfYmxvY2sgKigqcmVhZF9zdXBlcikgKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB2b2lk ICosIGludCk7CiAgICAgICAgc3RydWN0IG1vZHVsZSAqb3duZXI7CiAgICAgICAgc3RydWN0IGZp bGVfc3lzdGVtX3R5cGUgKiBuZXh0OwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgZnNfc3VwZXJz Owp9OwojIDk2NSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvZnMu aCIKZXh0ZXJuIGludCByZWdpc3Rlcl9maWxlc3lzdGVtKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBl ICopOwpleHRlcm4gaW50IHVucmVnaXN0ZXJfZmlsZXN5c3RlbShzdHJ1Y3QgZmlsZV9zeXN0ZW1f dHlwZSAqKTsKZXh0ZXJuIHN0cnVjdCB2ZnNtb3VudCAqa2Vybl9tb3VudChzdHJ1Y3QgZmlsZV9z eXN0ZW1fdHlwZSAqKTsKZXh0ZXJuIGludCBtYXlfdW1vdW50KHN0cnVjdCB2ZnNtb3VudCAqKTsK ZXh0ZXJuIGxvbmcgZG9fbW91bnQoY2hhciAqLCBjaGFyICosIGNoYXIgKiwgdW5zaWduZWQgbG9u Zywgdm9pZCAqKTsKCgoKZXh0ZXJuIGludCB2ZnNfc3RhdGZzKHN0cnVjdCBzdXBlcl9ibG9jayAq LCBzdHJ1Y3Qgc3RhdGZzICopOwojIDk4MyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2lu Y2x1ZGUvbGludXgvZnMuaCIKZXh0ZXJuIGludCBsb2Nrc19tYW5kYXRvcnlfbG9ja2VkKHN0cnVj dCBpbm9kZSAqKTsKZXh0ZXJuIGludCBsb2Nrc19tYW5kYXRvcnlfYXJlYShpbnQsIHN0cnVjdCBp bm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3QsIHNpemVfdCk7CiMgOTkzICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9mcy5oIgpzdGF0aWMgaW5saW5lIGludCBs b2Nrc192ZXJpZnlfbG9ja2VkKHN0cnVjdCBpbm9kZSAqaW5vZGUpCnsKICAgICAgICBpZiAoKCgo aW5vZGUpLT5pX3NiLT5zX2ZsYWdzICYgKDY0KSkgJiYgKChpbm9kZSktPmlfbW9kZSAmICgwMDAy MDAwIHwgMDAwMTApKSA9PSAwMDAyMDAwKSkKICAgICAgICAgICAgICAgIHJldHVybiBsb2Nrc19t YW5kYXRvcnlfbG9ja2VkKGlub2RlKTsKICAgICAgICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGlu ZSBpbnQgbG9ja3NfdmVyaWZ5X2FyZWEoaW50IHJlYWRfd3JpdGUsIHN0cnVjdCBpbm9kZSAqaW5v ZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBmaWxlICpmaWxw LCBsb2ZmX3Qgb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl X3QgY291bnQpCnsKICAgICAgICBpZiAoaW5vZGUtPmlfZmxvY2sgJiYgKCgoaW5vZGUpLT5pX3Ni LT5zX2ZsYWdzICYgKDY0KSkgJiYgKChpbm9kZSktPmlfbW9kZSAmICgwMDAyMDAwIHwgMDAwMTAp KSA9PSAwMDAyMDAwKSkKICAgICAgICAgICAgICAgIHJldHVybiBsb2Nrc19tYW5kYXRvcnlfYXJl YShyZWFkX3dyaXRlLCBpbm9kZSwgZmlscCwgb2Zmc2V0LCBjb3VudCk7CiAgICAgICAgcmV0dXJu IDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50IGxvY2tzX3ZlcmlmeV90cnVuY2F0ZShzdHJ1Y3QgaW5v ZGUgKmlub2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZmls ZSAqZmlscCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9mZl90IHNpemUp CnsKICAgICAgICBpZiAoaW5vZGUtPmlfZmxvY2sgJiYgKCgoaW5vZGUpLT5pX3NiLT5zX2ZsYWdz ICYgKDY0KSkgJiYgKChpbm9kZSktPmlfbW9kZSAmICgwMDAyMDAwIHwgMDAwMTApKSA9PSAwMDAy MDAwKSkKICAgICAgICAgICAgICAgIHJldHVybiBsb2Nrc19tYW5kYXRvcnlfYXJlYSgKICAgICAg ICAgICAgICAgICAgICAgICAgMiwgaW5vZGUsIGZpbHAsCiAgICAgICAgICAgICAgICAgICAgICAg IHNpemUgPCBpbm9kZS0+aV9zaXplID8gc2l6ZSA6IGlub2RlLT5pX3NpemUsCiAgICAgICAgICAg ICAgICAgICAgICAgIChzaXplIDwgaW5vZGUtPmlfc2l6ZSA/IGlub2RlLT5pX3NpemUgLSBzaXpl CiAgICAgICAgICAgICAgICAgICAgICAgICA6IHNpemUgLSBpbm9kZS0+aV9zaXplKQogICAgICAg ICAgICAgICAgKTsKICAgICAgICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGluZSBpbnQgZ2V0X2xl YXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGludCBtb2RlKQp7CiAgICAgICAgaWYg KGlub2RlLT5pX2Zsb2NrICYmIChpbm9kZS0+aV9mbG9jay0+ZmxfZmxhZ3MgJiAzMikpCiAgICAg ICAgICAgICAgICByZXR1cm4gX19nZXRfbGVhc2UoaW5vZGUsIG1vZGUpOwogICAgICAgIHJldHVy biAwOwp9CgoKCiBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDApKSkgbG9uZyBzeXNfb3Blbihjb25z dCBjaGFyICosIGludCwgaW50KTsKIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSBsb25nIHN5 c19jbG9zZSh1bnNpZ25lZCBpbnQpOwpleHRlcm4gaW50IGRvX3RydW5jYXRlKHN0cnVjdCBkZW50 cnkgKiwgbG9mZl90IHN0YXJ0KTsKCmV4dGVybiBzdHJ1Y3QgZmlsZSAqZmlscF9vcGVuKGNvbnN0 IGNoYXIgKiwgaW50LCBpbnQpOwpleHRlcm4gc3RydWN0IGZpbGUgKiBkZW50cnlfb3BlbihzdHJ1 Y3QgZGVudHJ5ICosIHN0cnVjdCB2ZnNtb3VudCAqLCBpbnQpOwpleHRlcm4gaW50IGZpbHBfY2xv c2Uoc3RydWN0IGZpbGUgKiwgZmxfb3duZXJfdCBpZCk7CmV4dGVybiBjaGFyICogZ2V0bmFtZShj b25zdCBjaGFyICopOwoKCmV4dGVybiB2b2lkIHZmc19jYWNoZXNfaW5pdCh1bnNpZ25lZCBsb25n KTsKCgoKCmVudW0ge0JERVZfRklMRSwgQkRFVl9TV0FQLCBCREVWX0ZTLCBCREVWX1JBV307CmV4 dGVybiBpbnQgcmVnaXN0ZXJfYmxrZGV2KHVuc2lnbmVkIGludCwgY29uc3QgY2hhciAqLCBzdHJ1 Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgKik7CmV4dGVybiBpbnQgdW5yZWdpc3Rlcl9ibGtk ZXYodW5zaWduZWQgaW50LCBjb25zdCBjaGFyICopOwpleHRlcm4gc3RydWN0IGJsb2NrX2Rldmlj ZSAqYmRnZXQoZGV2X3QpOwpleHRlcm4gaW50IGJkX2FjcXVpcmUoc3RydWN0IGlub2RlICppbm9k ZSk7CmV4dGVybiB2b2lkIGJkX2ZvcmdldChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKZXh0ZXJuIHZv aWQgYmRwdXQoc3RydWN0IGJsb2NrX2RldmljZSAqKTsKZXh0ZXJuIHN0cnVjdCBjaGFyX2Rldmlj ZSAqY2RnZXQoZGV2X3QpOwpleHRlcm4gdm9pZCBjZHB1dChzdHJ1Y3QgY2hhcl9kZXZpY2UgKik7 CmV4dGVybiBpbnQgYmxrZGV2X29wZW4oc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOwpl eHRlcm4gaW50IGJsa2Rldl9jbG9zZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CmV4 dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlZl9ibGtfZm9wczsKZXh0ZXJuIHN0cnVjdCBh ZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZGVmX2Jsa19hb3BzOwpleHRlcm4gc3RydWN0IGZpbGVf b3BlcmF0aW9ucyBkZWZfZmlmb19mb3BzOwpleHRlcm4gaW50IGlvY3RsX2J5X2JkZXYoc3RydWN0 IGJsb2NrX2RldmljZSAqLCB1bnNpZ25lZCwgdW5zaWduZWQgbG9uZyk7CmV4dGVybiBpbnQgYmxr ZGV2X2dldChzdHJ1Y3QgYmxvY2tfZGV2aWNlICosIG1vZGVfdCwgdW5zaWduZWQsIGludCk7CmV4 dGVybiBpbnQgYmxrZGV2X3B1dChzdHJ1Y3QgYmxvY2tfZGV2aWNlICosIGludCk7CgoKZXh0ZXJu IGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyAqZ2V0X2Jsa2ZvcHModW5zaWdu ZWQgaW50KTsKZXh0ZXJuIGludCByZWdpc3Rlcl9jaHJkZXYodW5zaWduZWQgaW50LCBjb25zdCBj aGFyICosIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKik7CmV4dGVybiBpbnQgdW5yZWdpc3Rlcl9j aHJkZXYodW5zaWduZWQgaW50LCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50IGNocmRldl9vcGVu KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKZXh0ZXJuIGNvbnN0IGNoYXIgKiBiZGV2 bmFtZShrZGV2X3QpOwpleHRlcm4gY29uc3QgY2hhciAqIGNkZXZuYW1lKGtkZXZfdCk7CmV4dGVy biBjb25zdCBjaGFyICoga2Rldm5hbWUoa2Rldl90KTsKZXh0ZXJuIHZvaWQgaW5pdF9zcGVjaWFs X2lub2RlKHN0cnVjdCBpbm9kZSAqLCB1bW9kZV90LCBpbnQpOwoKCmV4dGVybiB2b2lkIG1ha2Vf YmFkX2lub2RlKHN0cnVjdCBpbm9kZSAqKTsKZXh0ZXJuIGludCBpc19iYWRfaW5vZGUoc3RydWN0 IGlub2RlICopOwoKZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmVhZF9maWZvX2ZvcHM7 CmV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHdyaXRlX2ZpZm9fZm9wczsKZXh0ZXJuIHN0 cnVjdCBmaWxlX29wZXJhdGlvbnMgcmR3cl9maWZvX2ZvcHM7CmV4dGVybiBzdHJ1Y3QgZmlsZV9v cGVyYXRpb25zIHJlYWRfcGlwZV9mb3BzOwpleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB3 cml0ZV9waXBlX2ZvcHM7CmV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJkd3JfcGlwZV9m b3BzOwoKZXh0ZXJuIGludCBmc19tYXlfcmVtb3VudF9ybyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7 CgpleHRlcm4gaW50IHRyeV90b19mcmVlX2J1ZmZlcnMoc3RydWN0IHBhZ2UgKiwgdW5zaWduZWQg aW50KTsKZXh0ZXJuIHZvaWQgcmVmaWxlX2J1ZmZlcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBidWYp OwpleHRlcm4gdm9pZCBlbmRfYnVmZmVyX2lvX3N5bmMoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwg aW50IHVwdG9kYXRlKTsKCgpleHRlcm4gdm9pZCBzZXRfYnVmZmVyX2FzeW5jX2lvKHN0cnVjdCBi dWZmZXJfaGVhZCAqYmgpIDsKCgoKCgoKc3RhdGljIGlubGluZSB2b2lkIGdldF9iaChzdHJ1Y3Qg YnVmZmVyX2hlYWQgKiBiaCkKewogICAgICAgIGF0b21pY19pbmMoJihiaCktPmJfY291bnQpOwp9 CgpzdGF0aWMgaW5saW5lIHZvaWQgcHV0X2JoKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCnsKICAg ICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1lbW9yeSIpOwogICAgICAgIGF0b21p Y19kZWMoJmJoLT5iX2NvdW50KTsKfQoKCgoKc3RhdGljIGlubGluZSB2b2lkIG1hcmtfYnVmZmVy X3VwdG9kYXRlKHN0cnVjdCBidWZmZXJfaGVhZCAqIGJoLCBpbnQgb24pCnsKICAgICAgICBpZiAo b24pCiAgICAgICAgICAgICAgICBzZXRfYml0KEJIX1VwdG9kYXRlLCAmYmgtPmJfc3RhdGUpOwog ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGNsZWFyX2JpdChCSF9VcHRvZGF0ZSwgJmJoLT5i X3N0YXRlKTsKfQoKCgpzdGF0aWMgaW5saW5lIHZvaWQgX19tYXJrX2J1ZmZlcl9jbGVhbihzdHJ1 Y3QgYnVmZmVyX2hlYWQgKmJoKQp7CiAgICAgICAgcmVmaWxlX2J1ZmZlcihiaCk7Cn0KCnN0YXRp YyBpbmxpbmUgdm9pZCBtYXJrX2J1ZmZlcl9jbGVhbihzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaCkK ewogICAgICAgIGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQkhfRGlydHksICYoYmgpLT5iX3N0YXRl KSkKICAgICAgICAgICAgICAgIF9fbWFya19idWZmZXJfY2xlYW4oYmgpOwp9CgpleHRlcm4gdm9p ZCBfX21hcmtfZGlydHkoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkgX19hdHRyaWJ1dGVfXygocmVn cGFybSgzKSkpOwpleHRlcm4gdm9pZCBfX21hcmtfYnVmZmVyX2RpcnR5KHN0cnVjdCBidWZmZXJf aGVhZCAqYmgpIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIHZvaWQgbWFya19i dWZmZXJfZGlydHkoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkgX19hdHRyaWJ1dGVfXygocmVncGFy bSgzKSkpOwpleHRlcm4gdm9pZCBidWZmZXJfaW5zZXJ0X2lub2RlX2RhdGFfcXVldWUoc3RydWN0 IGJ1ZmZlcl9oZWFkICosIHN0cnVjdCBpbm9kZSAqKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMp KSk7CgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX2J1ZmZlcl9hc3luYyhzdHJ1Y3QgYnVmZmVy X2hlYWQgKiBiaCwgaW50IG9uKQp7CiAgICAgICAgaWYgKG9uKQogICAgICAgICAgICAgICAgc2V0 X2JpdChCSF9Bc3luYywgJmJoLT5iX3N0YXRlKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgICAg ICBjbGVhcl9iaXQoQkhfQXN5bmMsICZiaC0+Yl9zdGF0ZSk7Cn0KCgoKCgoKCnN0YXRpYyBpbmxp bmUgdm9pZCBidWZmZXJfSU9fZXJyb3Ioc3RydWN0IGJ1ZmZlcl9oZWFkICogYmgpCnsKICAgICAg ICBtYXJrX2J1ZmZlcl9jbGVhbihiaCk7CgoKCiAgICAgICAgYmgtPmJfZW5kX2lvKGJoLCAwKTsK fQoKZXh0ZXJuIHZvaWQgYnVmZmVyX2luc2VydF9pbm9kZV9xdWV1ZShzdHJ1Y3QgYnVmZmVyX2hl YWQgKiwgc3RydWN0IGlub2RlICopOwpzdGF0aWMgaW5saW5lIHZvaWQgbWFya19idWZmZXJfZGly dHlfaW5vZGUoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgc3RydWN0IGlub2RlICppbm9kZSkKewog ICAgICAgIG1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKICAgICAgICBidWZmZXJfaW5zZXJ0X2lub2Rl X3F1ZXVlKGJoLCBpbm9kZSk7Cn0KCmV4dGVybiB2b2lkIGJhbGFuY2VfZGlydHkodm9pZCk7CmV4 dGVybiBpbnQgY2hlY2tfZGlza19jaGFuZ2Uoa2Rldl90KTsKZXh0ZXJuIGludCBpbnZhbGlkYXRl X2lub2RlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CmV4dGVybiBpbnQgaW52YWxpZGF0ZV9kZXZp Y2Uoa2Rldl90LCBpbnQpOwpleHRlcm4gdm9pZCBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzKHN0cnVj dCBpbm9kZSAqKTsKZXh0ZXJuIHZvaWQgaW52YWxpZGF0ZV9pbm9kZV9wYWdlczIoc3RydWN0IGFk ZHJlc3Nfc3BhY2UgKik7CmV4dGVybiB2b2lkIGludmFsaWRhdGVfaW5vZGVfYnVmZmVycyhzdHJ1 Y3QgaW5vZGUgKik7CgoKZXh0ZXJuIHZvaWQgaW52YWxpZGF0ZV9iZGV2KHN0cnVjdCBibG9ja19k ZXZpY2UgKiwgaW50KTsKZXh0ZXJuIHZvaWQgX19pbnZhbGlkYXRlX2J1ZmZlcnMoa2Rldl90IGRl diwgaW50KTsKZXh0ZXJuIHZvaWQgc3luY19pbm9kZXMoa2Rldl90KTsKZXh0ZXJuIHZvaWQgc3lu Y191bmxvY2tlZF9pbm9kZXModm9pZCk7CmV4dGVybiB2b2lkIHdyaXRlX2lub2RlX25vdyhzdHJ1 Y3QgaW5vZGUgKiwgaW50KTsKZXh0ZXJuIGludCBzeW5jX2J1ZmZlcnMoa2Rldl90LCBpbnQpOwpl eHRlcm4gdm9pZCBzeW5jX2RldihrZGV2X3QpOwpleHRlcm4gaW50IGZzeW5jX2RldihrZGV2X3Qp OwpleHRlcm4gaW50IGZzeW5jX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKZXh0ZXJuIGlu dCBmc3luY19ub19zdXBlcihrZGV2X3QpOwpleHRlcm4gdm9pZCBzeW5jX2lub2Rlc19zYihzdHJ1 Y3Qgc3VwZXJfYmxvY2sgKik7CmV4dGVybiBpbnQgb3N5bmNfaW5vZGVfYnVmZmVycyhzdHJ1Y3Qg aW5vZGUgKik7CmV4dGVybiBpbnQgb3N5bmNfaW5vZGVfZGF0YV9idWZmZXJzKHN0cnVjdCBpbm9k ZSAqKTsKZXh0ZXJuIGludCBmc3luY19pbm9kZV9idWZmZXJzKHN0cnVjdCBpbm9kZSAqKTsKZXh0 ZXJuIGludCBmc3luY19pbm9kZV9kYXRhX2J1ZmZlcnMoc3RydWN0IGlub2RlICopOwpleHRlcm4g aW50IGlub2RlX2hhc19idWZmZXJzKHN0cnVjdCBpbm9kZSAqKTsKZXh0ZXJuIHZvaWQgZmlsZW1h cF9mZGF0YXN5bmMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKik7CmV4dGVybiB2b2lkIGZpbGVtYXBf ZmRhdGF3YWl0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICopOwpleHRlcm4gdm9pZCBzeW5jX3N1cGVy cyhrZGV2X3QpOwpleHRlcm4gaW50IGJtYXAoc3RydWN0IGlub2RlICosIGludCk7CmV4dGVybiBp bnQgbm90aWZ5X2NoYW5nZShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpYXR0ciAqKTsKZXh0ZXJu IGludCBwZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwpleHRlcm4gaW50IHZmc19wZXJt aXNzaW9uKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwpleHRlcm4gaW50IGdldF93cml0ZV9hY2Nlc3Mo c3RydWN0IGlub2RlICopOwpleHRlcm4gaW50IGRlbnlfd3JpdGVfYWNjZXNzKHN0cnVjdCBmaWxl ICopOwpzdGF0aWMgaW5saW5lIHZvaWQgcHV0X3dyaXRlX2FjY2VzcyhzdHJ1Y3QgaW5vZGUgKiBp bm9kZSkKewogICAgICAgIGF0b21pY19kZWMoJmlub2RlLT5pX3dyaXRlY291bnQpOwp9CnN0YXRp YyBpbmxpbmUgdm9pZCBhbGxvd193cml0ZV9hY2Nlc3Moc3RydWN0IGZpbGUgKmZpbGUpCnsKICAg ICAgICBpZiAoZmlsZSkKICAgICAgICAgICAgICAgIGF0b21pY19pbmMoJmZpbGUtPmZfZGVudHJ5 LT5kX2lub2RlLT5pX3dyaXRlY291bnQpOwp9CmV4dGVybiBpbnQgZG9fcGlwZShpbnQgKik7Cgpl eHRlcm4gaW50IG9wZW5fbmFtZWkoY29uc3QgY2hhciAqLCBpbnQsIGludCwgc3RydWN0IG5hbWVp ZGF0YSAqKTsKCmV4dGVybiBpbnQga2VybmVsX3JlYWQoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQg bG9uZywgY2hhciAqLCB1bnNpZ25lZCBsb25nKTsKZXh0ZXJuIHN0cnVjdCBmaWxlICogb3Blbl9l eGVjKGNvbnN0IGNoYXIgKik7CgoKZXh0ZXJuIGludCBpc19zdWJkaXIoc3RydWN0IGRlbnRyeSAq LCBzdHJ1Y3QgZGVudHJ5ICopOwpleHRlcm4gaW5vX3QgZmluZF9pbm9kZV9udW1iZXIoc3RydWN0 IGRlbnRyeSAqLCBzdHJ1Y3QgcXN0ciAqKTsKIyAxMjM0ICIvdXNyL3NyYy9saW51eC0yLjQuMTMv bGludXgvaW5jbHVkZS9saW51eC9mcy5oIgpzdGF0aWMgaW5saW5lIHZvaWQgKkVSUl9QVFIobG9u ZyBlcnJvcikKewogICAgICAgIHJldHVybiAodm9pZCAqKSBlcnJvcjsKfQoKc3RhdGljIGlubGlu ZSBsb25nIFBUUl9FUlIoY29uc3Qgdm9pZCAqcHRyKQp7CiAgICAgICAgcmV0dXJuIChsb25nKSBw dHI7Cn0KCnN0YXRpYyBpbmxpbmUgbG9uZyBJU19FUlIoY29uc3Qgdm9pZCAqcHRyKQp7CiAgICAg ICAgcmV0dXJuICh1bnNpZ25lZCBsb25nKXB0ciA+ICh1bnNpZ25lZCBsb25nKS0xMDAwTDsKfQoj IDEyNjUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiCmVu dW0ge0xBU1RfTk9STSwgTEFTVF9ST09ULCBMQVNUX0RPVCwgTEFTVF9ET1RET1QsIExBU1RfQklO RH07CiMgMTI3NiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvZnMu aCIKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIHNpemVfdCB3cml0dGVuOwogICAgICAgIHNpemVf dCBjb3VudDsKICAgICAgICBjaGFyICogYnVmOwogICAgICAgIGludCBlcnJvcjsKfSByZWFkX2Rl c2NyaXB0b3JfdDsKCnR5cGVkZWYgaW50ICgqcmVhZF9hY3Rvcl90KShyZWFkX2Rlc2NyaXB0b3Jf dCAqLCBzdHJ1Y3QgcGFnZSAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKCgpleHRl cm4gbG9mZl90IGRlZmF1bHRfbGxzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0 LCBpbnQgb3JpZ2luKTsKCmV4dGVybiBpbnQgX191c2VyX3dhbGsoY29uc3QgY2hhciAqLCB1bnNp Z25lZCwgc3RydWN0IG5hbWVpZGF0YSAqKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4 dGVybiBpbnQgcGF0aF9pbml0KGNvbnN0IGNoYXIgKiwgdW5zaWduZWQsIHN0cnVjdCBuYW1laWRh dGEgKikgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwpleHRlcm4gaW50IHBhdGhfd2Fsayhj b25zdCBjaGFyICosIHN0cnVjdCBuYW1laWRhdGEgKikgX19hdHRyaWJ1dGVfXygocmVncGFybSgz KSkpOwpleHRlcm4gaW50IGxpbmtfcGF0aF93YWxrKGNvbnN0IGNoYXIgKiwgc3RydWN0IG5hbWVp ZGF0YSAqKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVybiB2b2lkIHBhdGhfcmVs ZWFzZShzdHJ1Y3QgbmFtZWlkYXRhICopOwpleHRlcm4gaW50IGZvbGxvd19kb3duKHN0cnVjdCB2 ZnNtb3VudCAqKiwgc3RydWN0IGRlbnRyeSAqKik7CmV4dGVybiBpbnQgZm9sbG93X3VwKHN0cnVj dCB2ZnNtb3VudCAqKiwgc3RydWN0IGRlbnRyeSAqKik7CmV4dGVybiBzdHJ1Y3QgZGVudHJ5ICog bG9va3VwX29uZV9sZW4oY29uc3QgY2hhciAqLCBzdHJ1Y3QgZGVudHJ5ICosIGludCk7CmV4dGVy biBzdHJ1Y3QgZGVudHJ5ICogbG9va3VwX2hhc2goc3RydWN0IHFzdHIgKiwgc3RydWN0IGRlbnRy eSAqKTsKCgoKZXh0ZXJuIHZvaWQgaXB1dChzdHJ1Y3QgaW5vZGUgKik7CmV4dGVybiB2b2lkIGZv cmNlX2RlbGV0ZShzdHJ1Y3QgaW5vZGUgKik7CmV4dGVybiBzdHJ1Y3QgaW5vZGUgKiBpZ3JhYihz dHJ1Y3QgaW5vZGUgKik7CmV4dGVybiBpbm9fdCBpdW5pcXVlKHN0cnVjdCBzdXBlcl9ibG9jayAq LCBpbm9fdCk7Cgp0eXBlZGVmIGludCAoKmZpbmRfaW5vZGVfdCkoc3RydWN0IGlub2RlICosIHVu c2lnbmVkIGxvbmcsIHZvaWQgKik7CmV4dGVybiBzdHJ1Y3QgaW5vZGUgKiBpZ2V0NChzdHJ1Y3Qg c3VwZXJfYmxvY2sgKiwgdW5zaWduZWQgbG9uZywgZmluZF9pbm9kZV90LCB2b2lkICopOwpzdGF0 aWMgaW5saW5lIHN0cnVjdCBpbm9kZSAqaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNp Z25lZCBsb25nIGlubykKewogICAgICAgIHJldHVybiBpZ2V0NChzYiwgaW5vLCAoKHZvaWQgKikw KSwgKCh2b2lkICopMCkpOwp9CgpleHRlcm4gdm9pZCBjbGVhcl9pbm9kZShzdHJ1Y3QgaW5vZGUg Kik7CmV4dGVybiBzdHJ1Y3QgaW5vZGUgKiBnZXRfZW1wdHlfaW5vZGUodm9pZCk7CgpzdGF0aWMg aW5saW5lIHN0cnVjdCBpbm9kZSAqIG5ld19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQp7 CiAgICAgICAgc3RydWN0IGlub2RlICppbm9kZSA9IGdldF9lbXB0eV9pbm9kZSgpOwogICAgICAg IGlmIChpbm9kZSkgewogICAgICAgICAgICAgICAgaW5vZGUtPmlfc2IgPSBzYjsKICAgICAgICAg ICAgICAgIGlub2RlLT5pX2RldiA9IHNiLT5zX2RldjsKICAgICAgICAgICAgICAgIGlub2RlLT5p X2Jsa2JpdHMgPSBzYi0+c19ibG9ja3NpemVfYml0czsKICAgICAgICB9CiAgICAgICAgcmV0dXJu IGlub2RlOwp9CmV4dGVybiB2b2lkIHJlbW92ZV9zdWlkKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwoK ZXh0ZXJuIHZvaWQgaW5zZXJ0X2lub2RlX2hhc2goc3RydWN0IGlub2RlICopOwpleHRlcm4gdm9p ZCByZW1vdmVfaW5vZGVfaGFzaChzdHJ1Y3QgaW5vZGUgKik7CmV4dGVybiBzdHJ1Y3QgZmlsZSAq IGdldF9lbXB0eV9maWxwKHZvaWQpOwpleHRlcm4gdm9pZCBmaWxlX21vdmUoc3RydWN0IGZpbGUg KmYsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpOwpleHRlcm4gc3RydWN0IGJ1ZmZlcl9oZWFkICog Z2V0X2hhc2hfdGFibGUoa2Rldl90LCBpbnQsIGludCk7CmV4dGVybiBzdHJ1Y3QgYnVmZmVyX2hl YWQgKiBnZXRibGsoa2Rldl90LCBpbnQsIGludCk7CmV4dGVybiB2b2lkIGxsX3J3X2Jsb2NrKGlu dCwgaW50LCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaFtdKTsKZXh0ZXJuIHZvaWQgc3VibWl0X2Jo KGludCwgc3RydWN0IGJ1ZmZlcl9oZWFkICopOwpleHRlcm4gaW50IGlzX3JlYWRfb25seShrZGV2 X3QpOwpleHRlcm4gdm9pZCBfX2JyZWxzZShzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7CnN0YXRpYyBp bmxpbmUgdm9pZCBicmVsc2Uoc3RydWN0IGJ1ZmZlcl9oZWFkICpidWYpCnsKICAgICAgICBpZiAo YnVmKQogICAgICAgICAgICAgICAgX19icmVsc2UoYnVmKTsKfQpleHRlcm4gdm9pZCBfX2Jmb3Jn ZXQoc3RydWN0IGJ1ZmZlcl9oZWFkICopOwpzdGF0aWMgaW5saW5lIHZvaWQgYmZvcmdldChzdHJ1 Y3QgYnVmZmVyX2hlYWQgKmJ1ZikKewogICAgICAgIGlmIChidWYpCiAgICAgICAgICAgICAgICBf X2Jmb3JnZXQoYnVmKTsKfQpleHRlcm4gaW50IHNldF9ibG9ja3NpemUoa2Rldl90LCBpbnQpOwpl eHRlcm4gc3RydWN0IGJ1ZmZlcl9oZWFkICogYnJlYWQoa2Rldl90LCBpbnQsIGludCk7CmV4dGVy biB2b2lkIHdha2V1cF9iZGZsdXNoKHZvaWQpOwoKZXh0ZXJuIGludCBicndfcGFnZShpbnQsIHN0 cnVjdCBwYWdlICosIGtkZXZfdCwgaW50IFtdLCBpbnQpOwoKdHlwZWRlZiBpbnQgKGdldF9ibG9j a190KShzdHJ1Y3QgaW5vZGUqLGxvbmcsc3RydWN0IGJ1ZmZlcl9oZWFkKixpbnQpOwoKCmV4dGVy biBpbnQgZGlzY2FyZF9iaF9wYWdlKHN0cnVjdCBwYWdlICosIHVuc2lnbmVkIGxvbmcsIGludCk7 CgoKZXh0ZXJuIGludCBibG9ja19zeW1saW5rKHN0cnVjdCBpbm9kZSAqLCBjb25zdCBjaGFyICos IGludCk7CmV4dGVybiBpbnQgYmxvY2tfd3JpdGVfZnVsbF9wYWdlKHN0cnVjdCBwYWdlKiwgZ2V0 X2Jsb2NrX3QqKTsKZXh0ZXJuIGludCBibG9ja19yZWFkX2Z1bGxfcGFnZShzdHJ1Y3QgcGFnZSos IGdldF9ibG9ja190Kik7CmV4dGVybiBpbnQgYmxvY2tfcHJlcGFyZV93cml0ZShzdHJ1Y3QgcGFn ZSosIHVuc2lnbmVkLCB1bnNpZ25lZCwgZ2V0X2Jsb2NrX3QqKTsKZXh0ZXJuIGludCBjb250X3By ZXBhcmVfd3JpdGUoc3RydWN0IHBhZ2UqLCB1bnNpZ25lZCwgdW5zaWduZWQsIGdldF9ibG9ja190 KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICopOwpleHRl cm4gaW50IGJsb2NrX2NvbW1pdF93cml0ZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgZnJv bSwgdW5zaWduZWQgdG8pOwpleHRlcm4gaW50IGJsb2NrX3N5bmNfcGFnZShzdHJ1Y3QgcGFnZSAq KTsKCmludCBnZW5lcmljX2Jsb2NrX2JtYXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwgbG9uZywg Z2V0X2Jsb2NrX3QgKik7CmludCBnZW5lcmljX2NvbW1pdF93cml0ZShzdHJ1Y3QgZmlsZSAqLCBz dHJ1Y3QgcGFnZSAqLCB1bnNpZ25lZCwgdW5zaWduZWQpOwppbnQgYmxvY2tfdHJ1bmNhdGVfcGFn ZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqLCBsb2ZmX3QsIGdldF9ibG9ja190ICopOwpleHRlcm4g dm9pZCBjcmVhdGVfZW1wdHlfYnVmZmVycyhzdHJ1Y3QgcGFnZSAqLCBrZGV2X3QsIHVuc2lnbmVk IGxvbmcpOwoKZXh0ZXJuIGludCB3YWl0Zm9yX29uZV9wYWdlKHN0cnVjdCBwYWdlKik7CmV4dGVy biBpbnQgZ2VuZXJpY19maWxlX21tYXAoc3RydWN0IGZpbGUgKiwgc3RydWN0IHZtX2FyZWFfc3Ry dWN0ICopOwpleHRlcm4gaW50IGZpbGVfcmVhZF9hY3RvcihyZWFkX2Rlc2NyaXB0b3JfdCAqIGRl c2MsIHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9u ZyBzaXplKTsKZXh0ZXJuIHNzaXplX3QgZ2VuZXJpY19maWxlX3JlYWQoc3RydWN0IGZpbGUgKiwg Y2hhciAqLCBzaXplX3QsIGxvZmZfdCAqKTsKZXh0ZXJuIHNzaXplX3QgZ2VuZXJpY19maWxlX3dy aXRlKHN0cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CmV4dGVy biB2b2lkIGRvX2dlbmVyaWNfZmlsZV9yZWFkKHN0cnVjdCBmaWxlICosIGxvZmZfdCAqLCByZWFk X2Rlc2NyaXB0b3JfdCAqLCByZWFkX2FjdG9yX3QpOwpleHRlcm4gbG9mZl90IG5vX2xsc2Vlayhz dHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IG9yaWdpbik7CmV4dGVybiBsb2Zm X3QgZ2VuZXJpY19maWxlX2xsc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwg aW50IG9yaWdpbik7CmV4dGVybiBzc2l6ZV90IGdlbmVyaWNfcmVhZF9kaXIoc3RydWN0IGZpbGUg KiwgY2hhciAqLCBzaXplX3QsIGxvZmZfdCAqKTsKZXh0ZXJuIGludCBnZW5lcmljX2ZpbGVfb3Bl bihzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxwKTsKCmV4dGVybiBzdHJ1 Y3QgZmlsZV9vcGVyYXRpb25zIGdlbmVyaWNfcm9fZm9wczsKCmV4dGVybiBpbnQgdmZzX3JlYWRs aW5rKHN0cnVjdCBkZW50cnkgKiwgY2hhciAqLCBpbnQsIGNvbnN0IGNoYXIgKik7CmV4dGVybiBp bnQgdmZzX2ZvbGxvd19saW5rKHN0cnVjdCBuYW1laWRhdGEgKiwgY29uc3QgY2hhciAqKTsKZXh0 ZXJuIGludCBwYWdlX3JlYWRsaW5rKHN0cnVjdCBkZW50cnkgKiwgY2hhciAqLCBpbnQpOwpleHRl cm4gaW50IHBhZ2VfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgbmFtZWlkYXRh ICopOwpleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgcGFnZV9zeW1saW5rX2lub2RlX29w ZXJhdGlvbnM7CgpleHRlcm4gaW50IHZmc19yZWFkZGlyKHN0cnVjdCBmaWxlICosIGZpbGxkaXJf dCwgdm9pZCAqKTsKZXh0ZXJuIGludCBkY2FjaGVfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqLCB2b2lk ICosIGZpbGxkaXJfdCk7CgpleHRlcm4gc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmdldF9mc190 eXBlKGNvbnN0IGNoYXIgKm5hbWUpOwpleHRlcm4gc3RydWN0IHN1cGVyX2Jsb2NrICpnZXRfc3Vw ZXIoa2Rldl90KTsKZXh0ZXJuIHZvaWQgZHJvcF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNi KTsKc3RhdGljIGlubGluZSBpbnQgaXNfbW91bnRlZChrZGV2X3QgZGV2KQp7CiAgICAgICAgc3Ry dWN0IHN1cGVyX2Jsb2NrICpzYiA9IGdldF9zdXBlcihkZXYpOwogICAgICAgIGlmIChzYikgewog ICAgICAgICAgICAgICAgZHJvcF9zdXBlcihzYik7CiAgICAgICAgICAgICAgICByZXR1cm4gMTsK ICAgICAgICB9CiAgICAgICAgcmV0dXJuIDA7Cn0KdW5zaWduZWQgbG9uZyBnZW5lcmF0ZV9jbHVz dGVyKGtkZXZfdCwgaW50IGJbXSwgaW50KTsKdW5zaWduZWQgbG9uZyBnZW5lcmF0ZV9jbHVzdGVy X3N3YWIzMihrZGV2X3QsIGludCBiW10sIGludCk7CmV4dGVybiBrZGV2X3QgUk9PVF9ERVY7CmV4 dGVybiBjaGFyIHJvb3RfZGV2aWNlX25hbWVbXTsKCgpleHRlcm4gdm9pZCBzaG93X2J1ZmZlcnMo dm9pZCk7CmV4dGVybiB2b2lkIG1vdW50X3Jvb3Qodm9pZCk7CgoKCgoKCmV4dGVybiBzc2l6ZV90 IGNoYXJfcmVhZChzdHJ1Y3QgZmlsZSAqLCBjaGFyICosIHNpemVfdCwgbG9mZl90ICopOwpleHRl cm4gc3NpemVfdCBibG9ja19yZWFkKHN0cnVjdCBmaWxlICosIGNoYXIgKiwgc2l6ZV90LCBsb2Zm X3QgKik7CmV4dGVybiBpbnQgcmVhZF9haGVhZFtdOwoKZXh0ZXJuIHNzaXplX3QgY2hhcl93cml0 ZShzdHJ1Y3QgZmlsZSAqLCBjb25zdCBjaGFyICosIHNpemVfdCwgbG9mZl90ICopOwpleHRlcm4g c3NpemVfdCBibG9ja193cml0ZShzdHJ1Y3QgZmlsZSAqLCBjb25zdCBjaGFyICosIHNpemVfdCwg bG9mZl90ICopOwoKZXh0ZXJuIGludCBmaWxlX2ZzeW5jKHN0cnVjdCBmaWxlICosIHN0cnVjdCBk ZW50cnkgKiwgaW50KTsKZXh0ZXJuIGludCBnZW5lcmljX2J1ZmZlcl9mZGF0YXN5bmMoc3RydWN0 IGlub2RlICppbm9kZSwgdW5zaWduZWQgbG9uZyBzdGFydF9pZHgsIHVuc2lnbmVkIGxvbmcgZW5k X2lkeCk7CmV4dGVybiBpbnQgZ2VuZXJpY19vc3luY19pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgaW50 KTsKCgoKCmV4dGVybiBpbnQgaW5vZGVfY2hhbmdlX29rKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qg aWF0dHIgKik7CmV4dGVybiBpbnQgaW5vZGVfc2V0YXR0cihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0 IGlhdHRyICopOwojIDE0NTggIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xp bnV4L2ZzLmgiCnN0YXRpYyBpbmxpbmUgc3RydWN0IGRlbnRyeSAqbG9ja19wYXJlbnQoc3RydWN0 IGRlbnRyeSAqZGVudHJ5KQp7CiAgICAgICAgc3RydWN0IGRlbnRyeSAqZGlyID0gZGdldChkZW50 cnktPmRfcGFyZW50KTsKCiAgICAgICAgZG93bigmZGlyLT5kX2lub2RlLT5pX3NlbSk7CiAgICAg ICAgcmV0dXJuIGRpcjsKfQoKc3RhdGljIGlubGluZSBzdHJ1Y3QgZGVudHJ5ICpnZXRfcGFyZW50 KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKewogICAgICAgIHJldHVybiBkZ2V0KGRlbnRyeS0+ZF9w YXJlbnQpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX2RpcihzdHJ1Y3QgZGVudHJ5ICpk aXIpCnsKICAgICAgICB1cCgmZGlyLT5kX2lub2RlLT5pX3NlbSk7CiAgICAgICAgZHB1dChkaXIp Owp9CgoKCgoKc3RhdGljIGlubGluZSB2b2lkIGRvdWJsZV9kb3duKHN0cnVjdCBzZW1hcGhvcmUg KnMxLCBzdHJ1Y3Qgc2VtYXBob3JlICpzMikKewogICAgICAgIGlmIChzMSAhPSBzMikgewogICAg ICAgICAgICAgICAgaWYgKCh1bnNpZ25lZCBsb25nKSBzMSA8ICh1bnNpZ25lZCBsb25nKSBzMikg ewogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlICp0bXAgPSBzMjsKICAg ICAgICAgICAgICAgICAgICAgICAgczIgPSBzMTsgczEgPSB0bXA7CiAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgICBkb3duKHMxKTsKICAgICAgICB9CiAgICAgICAgZG93bihzMik7Cn0K IyAxNTAyICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9mcy5oIgpz dGF0aWMgaW5saW5lIHZvaWQgdHJpcGxlX2Rvd24oc3RydWN0IHNlbWFwaG9yZSAqczEsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlICpzMiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgKnMzKQp7CiAgICAgICAgaWYg KHMxICE9IHMyKSB7CiAgICAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkIGxvbmcpIHMxIDwgKHVu c2lnbmVkIGxvbmcpIHMyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodW5zaWduZWQg bG9uZykgczEgPCAodW5zaWduZWQgbG9uZykgczMpIHsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlICp0bXAgPSBzMzsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzMyA9IHMxOyBzMSA9IHRtcDsKICAgICAgICAgICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkIGxvbmcpIHMxIDwgKHVuc2lnbmVk IGxvbmcpIHMyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNlbWFw aG9yZSAqdG1wID0gczI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczIgPSBzMTsg czEgPSB0bXA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxz ZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodW5zaWduZWQgbG9uZykgczEgPCAodW5z aWduZWQgbG9uZykgczMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg c2VtYXBob3JlICp0bXAgPSBzMzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMyA9 IHMxOyBzMSA9IHRtcDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg ICAgICAgICBpZiAoKHVuc2lnbmVkIGxvbmcpIHMyIDwgKHVuc2lnbmVkIGxvbmcpIHMzKSB7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNlbWFwaG9yZSAqdG1wID0gczM7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczMgPSBzMjsgczIgPSB0bXA7CiAgICAg ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRv d24oczEpOwogICAgICAgIH0gZWxzZSBpZiAoKHVuc2lnbmVkIGxvbmcpIHMyIDwgKHVuc2lnbmVk IGxvbmcpIHMzKSB7CiAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlICp0bXAgPSBzMzsK ICAgICAgICAgICAgICAgIHMzID0gczI7IHMyID0gdG1wOwogICAgICAgIH0KICAgICAgICBkb3du KHMyKTsKICAgICAgICBkb3duKHMzKTsKfQoKc3RhdGljIGlubGluZSB2b2lkIGRvdWJsZV91cChz dHJ1Y3Qgc2VtYXBob3JlICpzMSwgc3RydWN0IHNlbWFwaG9yZSAqczIpCnsKICAgICAgICB1cChz MSk7CiAgICAgICAgaWYgKHMxICE9IHMyKQogICAgICAgICAgICAgICAgdXAoczIpOwp9CgpzdGF0 aWMgaW5saW5lIHZvaWQgdHJpcGxlX3VwKHN0cnVjdCBzZW1hcGhvcmUgKnMxLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgKnMyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgKnMzKQp7CiAgICAgICAgdXAoczEpOwogICAg ICAgIGlmIChzMSAhPSBzMikKICAgICAgICAgICAgICAgIHVwKHMyKTsKICAgICAgICB1cChzMyk7 Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBkb3VibGVfbG9jayhzdHJ1Y3QgZGVudHJ5ICpkMSwgc3Ry dWN0IGRlbnRyeSAqZDIpCnsKICAgICAgICBkb3VibGVfZG93bigmZDEtPmRfaW5vZGUtPmlfc2Vt LCAmZDItPmRfaW5vZGUtPmlfc2VtKTsKfQoKc3RhdGljIGlubGluZSB2b2lkIGRvdWJsZV91bmxv Y2soc3RydWN0IGRlbnRyeSAqZDEsIHN0cnVjdCBkZW50cnkgKmQyKQp7CiAgICAgICAgZG91Ymxl X3VwKCZkMS0+ZF9pbm9kZS0+aV9zZW0sJmQyLT5kX2lub2RlLT5pX3NlbSk7CiAgICAgICAgZHB1 dChkMSk7CiAgICAgICAgZHB1dChkMik7Cn0KIyAxOCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xp bnV4L2luY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oIiAyCiMgMzIgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaCIKdHlwZWRlZiBzdHJ1Y3QgX191 c2VyX2NhcF9oZWFkZXJfc3RydWN0IHsKICAgICAgICBfX3UzMiB2ZXJzaW9uOwogICAgICAgIGlu dCBwaWQ7Cn0gKmNhcF91c2VyX2hlYWRlcl90OwoKdHlwZWRlZiBzdHJ1Y3QgX191c2VyX2NhcF9k YXRhX3N0cnVjdCB7CiAgICAgICAgX191MzIgZWZmZWN0aXZlOwogICAgICAgIF9fdTMyIHBlcm1p dHRlZDsKICAgICAgICBfX3UzMiBpbmhlcml0YWJsZTsKfSAqY2FwX3VzZXJfZGF0YV90OwojIDU1 ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9jYXBhYmlsaXR5Lmgi CnR5cGVkZWYgX191MzIga2VybmVsX2NhcF90OwojIDI4NCAiL3Vzci9zcmMvbGludXgtMi40LjEz L2xpbnV4L2luY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oIgpleHRlcm4ga2VybmVsX2NhcF90IGNh cF9ic2V0OwojIDMxMiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgv Y2FwYWJpbGl0eS5oIgpzdGF0aWMgaW5saW5lIGtlcm5lbF9jYXBfdCBjYXBfY29tYmluZShrZXJu ZWxfY2FwX3QgYSwga2VybmVsX2NhcF90IGIpCnsKICAgICBrZXJuZWxfY2FwX3QgZGVzdDsKICAg ICAoZGVzdCkgPSAoYSkgfCAoYik7CiAgICAgcmV0dXJuIGRlc3Q7Cn0KCnN0YXRpYyBpbmxpbmUg a2VybmVsX2NhcF90IGNhcF9pbnRlcnNlY3Qoa2VybmVsX2NhcF90IGEsIGtlcm5lbF9jYXBfdCBi KQp7CiAgICAga2VybmVsX2NhcF90IGRlc3Q7CiAgICAgKGRlc3QpID0gKGEpICYgKGIpOwogICAg IHJldHVybiBkZXN0Owp9CgpzdGF0aWMgaW5saW5lIGtlcm5lbF9jYXBfdCBjYXBfZHJvcChrZXJu ZWxfY2FwX3QgYSwga2VybmVsX2NhcF90IGRyb3ApCnsKICAgICBrZXJuZWxfY2FwX3QgZGVzdDsK ICAgICAoZGVzdCkgPSAoYSkgJiB+KGRyb3ApOwogICAgIHJldHVybiBkZXN0Owp9CgpzdGF0aWMg aW5saW5lIGtlcm5lbF9jYXBfdCBjYXBfaW52ZXJ0KGtlcm5lbF9jYXBfdCBjKQp7CiAgICAga2Vy bmVsX2NhcF90IGRlc3Q7CiAgICAgKGRlc3QpID0gfihjKTsKICAgICByZXR1cm4gZGVzdDsKfQoj IDYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaCIg MgojIDIyICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9iaW5mbXRz LmgiCnN0cnVjdCBsaW51eF9iaW5wcm17CiAgICAgICAgY2hhciBidWZbMTI4XTsKICAgICAgICBz dHJ1Y3QgcGFnZSAqcGFnZVszMl07CiAgICAgICAgdW5zaWduZWQgbG9uZyBwOwogICAgICAgIGlu dCBzaF9iYW5nOwogICAgICAgIHN0cnVjdCBmaWxlICogZmlsZTsKICAgICAgICBpbnQgZV91aWQs IGVfZ2lkOwogICAgICAgIGtlcm5lbF9jYXBfdCBjYXBfaW5oZXJpdGFibGUsIGNhcF9wZXJtaXR0 ZWQsIGNhcF9lZmZlY3RpdmU7CiAgICAgICAgaW50IGFyZ2MsIGVudmM7CiAgICAgICAgY2hhciAq IGZpbGVuYW1lOwogICAgICAgIHVuc2lnbmVkIGxvbmcgbG9hZGVyLCBleGVjOwp9OwoKCgoKCnN0 cnVjdCBsaW51eF9iaW5mbXQgewogICAgICAgIHN0cnVjdCBsaW51eF9iaW5mbXQgKiBuZXh0Owog ICAgICAgIHN0cnVjdCBtb2R1bGUgKm1vZHVsZTsKICAgICAgICBpbnQgKCpsb2FkX2JpbmFyeSko c3RydWN0IGxpbnV4X2JpbnBybSAqLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpOwogICAgICAgIGlu dCAoKmxvYWRfc2hsaWIpKHN0cnVjdCBmaWxlICopOwogICAgICAgIGludCAoKmNvcmVfZHVtcCko bG9uZyBzaWduciwgc3RydWN0IHB0X3JlZ3MgKiByZWdzLCBzdHJ1Y3QgZmlsZSAqIGZpbGUpOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgbWluX2NvcmVkdW1wOwp9OwoKZXh0ZXJuIGludCByZWdpc3Rl cl9iaW5mbXQoc3RydWN0IGxpbnV4X2JpbmZtdCAqKTsKZXh0ZXJuIGludCB1bnJlZ2lzdGVyX2Jp bmZtdChzdHJ1Y3QgbGludXhfYmluZm10ICopOwoKZXh0ZXJuIGludCBwcmVwYXJlX2JpbnBybShz dHJ1Y3QgbGludXhfYmlucHJtICopOwpleHRlcm4gdm9pZCByZW1vdmVfYXJnX3plcm8oc3RydWN0 IGxpbnV4X2JpbnBybSAqKTsKZXh0ZXJuIGludCBzZWFyY2hfYmluYXJ5X2hhbmRsZXIoc3RydWN0 IGxpbnV4X2JpbnBybSAqLHN0cnVjdCBwdF9yZWdzICopOwpleHRlcm4gaW50IGZsdXNoX29sZF9l eGVjKHN0cnVjdCBsaW51eF9iaW5wcm0gKiBicHJtKTsKZXh0ZXJuIGludCBzZXR1cF9hcmdfcGFn ZXMoc3RydWN0IGxpbnV4X2JpbnBybSAqIGJwcm0pOwpleHRlcm4gaW50IGNvcHlfc3RyaW5ncyhp bnQgYXJnYyxjaGFyICoqIGFyZ3Ysc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSk7CmV4dGVybiBp bnQgY29weV9zdHJpbmdzX2tlcm5lbChpbnQgYXJnYyxjaGFyICoqIGFyZ3Ysc3RydWN0IGxpbnV4 X2JpbnBybSAqYnBybSk7CmV4dGVybiB2b2lkIGNvbXB1dGVfY3JlZHMoc3RydWN0IGxpbnV4X2Jp bnBybSAqYmlucHJtKTsKZXh0ZXJuIGludCBkb19jb3JlZHVtcChsb25nIHNpZ25yLCBzdHJ1Y3Qg cHRfcmVncyAqIHJlZ3MpOwpleHRlcm4gdm9pZCBzZXRfYmluZm10KHN0cnVjdCBsaW51eF9iaW5m bXQgKm5ldyk7CiMgMTAgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4 L3NjaGVkLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51 eC90aHJlYWRzLmgiIDEKIyAxMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUv bGludXgvc2NoZWQuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRl L2xpbnV4L2tlcm5lbC5oIiAxCiMgMTIgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNs dWRlL2xpbnV4L3NjaGVkLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5j bHVkZS9saW51eC90eXBlcy5oIiAxCiMgMTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9p bmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgv aW5jbHVkZS9saW51eC90aW1lcy5oIiAxCgoKCnN0cnVjdCB0bXMgewogICAgICAgIGNsb2NrX3Qg dG1zX3V0aW1lOwogICAgICAgIGNsb2NrX3QgdG1zX3N0aW1lOwogICAgICAgIGNsb2NrX3QgdG1z X2N1dGltZTsKICAgICAgICBjbG9ja190IHRtc19jc3RpbWU7Cn07CiMgMTQgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIKIyAxICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC90aW1leC5oIiAxCiMgNTQgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3RpbWV4LmgiCiMgMSAiL3Vzci9zcmMv bGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3BhcmFtLmgiIDEKIyA1NSAiL3Vzci9zcmMv bGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvdGltZXguaCIgMgojIDE1MiAiL3Vzci9z cmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvdGltZXguaCIKIyAxICIvdXNyL3Ny Yy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vdGltZXguaCIgMQojIDkgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS90aW1leC5oIgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2NvbmZpZy5oIiAxCiMgMTAgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS90aW1leC5oIiAyCiMgMSAiL3Vzci9zcmMv bGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL21zci5oIiAxCiMgMTEgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS90aW1leC5oIiAyCiMgMzIgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS90aW1leC5oIgp0eXBlZGVmIHVuc2lnbmVkIGxv bmcgbG9uZyBjeWNsZXNfdDsKCmV4dGVybiBjeWNsZXNfdCBjYWNoZWZsdXNoX3RpbWU7CgpzdGF0 aWMgaW5saW5lIGN5Y2xlc190IGdldF9jeWNsZXMgKHZvaWQpCnsKCgoKICAgICAgICB1bnNpZ25l ZCBsb25nIGxvbmcgcmV0OwoKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygicmR0c2MiIDog Ij1BIiAocmV0KSk7CiAgICAgICAgcmV0dXJuIHJldDsKCn0KCmV4dGVybiB1bnNpZ25lZCBsb25n IGNwdV9raHo7CiMgMTUzICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51 eC90aW1leC5oIiAyCiMgMTYxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9s aW51eC90aW1leC5oIgpzdHJ1Y3QgdGltZXggewogICAgICAgIHVuc2lnbmVkIGludCBtb2RlczsK ICAgICAgICBsb25nIG9mZnNldDsKICAgICAgICBsb25nIGZyZXE7CiAgICAgICAgbG9uZyBtYXhl cnJvcjsKICAgICAgICBsb25nIGVzdGVycm9yOwogICAgICAgIGludCBzdGF0dXM7CiAgICAgICAg bG9uZyBjb25zdGFudDsKICAgICAgICBsb25nIHByZWNpc2lvbjsKICAgICAgICBsb25nIHRvbGVy YW5jZTsKCgogICAgICAgIHN0cnVjdCB0aW1ldmFsIHRpbWU7CiAgICAgICAgbG9uZyB0aWNrOwoK ICAgICAgICBsb25nIHBwc2ZyZXE7CiAgICAgICAgbG9uZyBqaXR0ZXI7CiAgICAgICAgaW50IHNo aWZ0OwogICAgICAgIGxvbmcgc3RhYmlsOwogICAgICAgIGxvbmcgaml0Y250OwogICAgICAgIGxv bmcgY2FsY250OwogICAgICAgIGxvbmcgZXJyY250OwogICAgICAgIGxvbmcgc3RiY250OwoKICAg ICAgICBpbnQgOjMyOyBpbnQgOjMyOyBpbnQgOjMyOyBpbnQgOjMyOwogICAgICAgIGludCA6MzI7 IGludCA6MzI7IGludCA6MzI7IGludCA6MzI7CiAgICAgICAgaW50IDozMjsgaW50IDozMjsgaW50 IDozMjsgaW50IDozMjsKfTsKIyAyNTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNs dWRlL2xpbnV4L3RpbWV4LmgiCmV4dGVybiBsb25nIHRpY2s7CmV4dGVybiBpbnQgdGlja2FkajsK CgoKCmV4dGVybiBpbnQgdGltZV9zdGF0ZTsKZXh0ZXJuIGludCB0aW1lX3N0YXR1czsKZXh0ZXJu IGxvbmcgdGltZV9vZmZzZXQ7CmV4dGVybiBsb25nIHRpbWVfY29uc3RhbnQ7CmV4dGVybiBsb25n IHRpbWVfdG9sZXJhbmNlOwpleHRlcm4gbG9uZyB0aW1lX3ByZWNpc2lvbjsKZXh0ZXJuIGxvbmcg dGltZV9tYXhlcnJvcjsKZXh0ZXJuIGxvbmcgdGltZV9lc3RlcnJvcjsKCmV4dGVybiBsb25nIHRp bWVfcGhhc2U7CmV4dGVybiBsb25nIHRpbWVfZnJlcTsKZXh0ZXJuIGxvbmcgdGltZV9hZGo7CmV4 dGVybiBsb25nIHRpbWVfcmVmdGltZTsKCmV4dGVybiBsb25nIHRpbWVfYWRqdXN0OwoKCmV4dGVy biBsb25nIHBwc19vZmZzZXQ7CmV4dGVybiBsb25nIHBwc19qaXR0ZXI7CmV4dGVybiBsb25nIHBw c19mcmVxOwpleHRlcm4gbG9uZyBwcHNfc3RhYmlsOwpleHRlcm4gbG9uZyBwcHNfdmFsaWQ7CgoK ZXh0ZXJuIGludCBwcHNfc2hpZnQ7CmV4dGVybiBsb25nIHBwc19qaXRjbnQ7CmV4dGVybiBsb25n IHBwc19jYWxjbnQ7CmV4dGVybiBsb25nIHBwc19lcnJjbnQ7CmV4dGVybiBsb25nIHBwc19zdGJj bnQ7CiMgMTUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3NjaGVk LmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9yYnRy ZWUuaCIgMQojIDk3ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9y YnRyZWUuaCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9r ZXJuZWwuaCIgMQojIDk4ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51 eC9yYnRyZWUuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xp bnV4L3N0ZGRlZi5oIiAxCiMgOTkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRl L2xpbnV4L3JidHJlZS5oIiAyCgp0eXBlZGVmIHN0cnVjdCByYl9ub2RlX3MKewogICAgICAgIHN0 cnVjdCByYl9ub2RlX3MgKiByYl9wYXJlbnQ7CiAgICAgICAgaW50IHJiX2NvbG9yOwoKCiAgICAg ICAgc3RydWN0IHJiX25vZGVfcyAqIHJiX3JpZ2h0OwogICAgICAgIHN0cnVjdCByYl9ub2RlX3Mg KiByYl9sZWZ0Owp9CnJiX25vZGVfdDsKCnR5cGVkZWYgc3RydWN0IHJiX3Jvb3Rfcwp7CiAgICAg ICAgc3RydWN0IHJiX25vZGVfcyAqIHJiX25vZGU7Cn0KcmJfcm9vdF90OwoKCgoKCmV4dGVybiB2 b2lkIHJiX2luc2VydF9jb2xvcihyYl9ub2RlX3QgKiwgcmJfcm9vdF90ICopOwpleHRlcm4gdm9p ZCByYl9lcmFzZShyYl9ub2RlX3QgKiwgcmJfcm9vdF90ICopOwoKc3RhdGljIGlubGluZSB2b2lk IHJiX2xpbmtfbm9kZShyYl9ub2RlX3QgKiBub2RlLCByYl9ub2RlX3QgKiBwYXJlbnQsIHJiX25v ZGVfdCAqKiByYl9saW5rKQp7CiAgICAgICAgbm9kZS0+cmJfcGFyZW50ID0gcGFyZW50OwogICAg ICAgIG5vZGUtPnJiX2NvbG9yID0gMDsKICAgICAgICBub2RlLT5yYl9sZWZ0ID0gbm9kZS0+cmJf cmlnaHQgPSAoKHZvaWQgKikwKTsKCiAgICAgICAgKnJiX2xpbmsgPSBub2RlOwp9CiMgMTYgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIKCiMgMSAi L3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3N5c3RlbS5oIiAxCiMgMTgg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIKIyAx ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vc2VtYXBob3JlLmgiIDEK IyAxOSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc2NoZWQuaCIg MgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9wYWdlLmgiIDEK IyAyMCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc2NoZWQuaCIg MgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9wdHJhY2UuaCIg MQojIDIxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9zY2hlZC5o IiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL21tdS5oIiAx CgoKCgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgdm9pZCAqc2VnbWVudHM7CiAgICAgICAg dW5zaWduZWQgbG9uZyBjcHV2YWxpZDsKfSBtbV9jb250ZXh0X3Q7CiMgMjIgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIKCiMgMSAiL3Vzci9zcmMv bGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc21wLmgiIDEKIyA5ICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9zbXAuaCIKIyAxICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9jb25maWcuaCIgMQojIDEwICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9zbXAuaCIgMgoKCgojIDEgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oIiAxCiMgMTQgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3NtcC5oIiAyCiMgMSAiL3Vzci9z cmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3NtcC5oIiAxCgoKCgoKCgojIDEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2NvbmZpZy5oIiAxCiMgOSAi L3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3NtcC5oIiAyCiMgMSAiL3Vz ci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvdGhyZWFkcy5oIiAxCiMgMTAg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9zbXAuaCIgMgojIDEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3B0cmFjZS5oIiAxCiMgMTEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9zbXAuaCIgMgoKCgoKIyAx ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vZml4bWFwLmgiIDEKIyAx NiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL2ZpeG1hcC5oIgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2NvbmZpZy5oIiAxCiMg MTcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9maXhtYXAuaCIgMgoj IDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oIiAx CiMgMTggIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9maXhtYXAuaCIg MgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9hcGljZGVmLmgi IDEKIyAxMjIgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9hcGljZGVm LmgiCnN0cnVjdCBsb2NhbF9hcGljIHsKCiAgICAgICAgc3RydWN0IHsgdW5zaWduZWQgaW50IF9f cmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8wMTsKCiAgICAgICAgc3RydWN0IHsgdW5zaWduZWQg aW50IF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8wMjsKCiAgICAgICAgc3RydWN0IHsKICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX3Jlc2VydmVkXzEgOiAyNCwKICAgICAgICAgICAg ICAgICAgICAgICAgcGh5c19hcGljX2lkIDogNCwKICAgICAgICAgICAgICAgICAgICAgICAgX19y ZXNlcnZlZF8yIDogNDsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX3Jlc2VydmVkWzNd OwogICAgICAgIH0gaWQ7CgogICAgICAgIGNvbnN0CiAgICAgICAgc3RydWN0IHsKICAgICAgICAg ICAgICAgIHVuc2lnbmVkIGludCB2ZXJzaW9uIDogOCwKICAgICAgICAgICAgICAgICAgICAgICAg X19yZXNlcnZlZF8xIDogOCwKICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2x2dCA6IDgsCiAg ICAgICAgICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRfMiA6IDg7CiAgICAgICAgICAgICAgICB1 bnNpZ25lZCBpbnQgX19yZXNlcnZlZFszXTsKICAgICAgICB9IHZlcnNpb247CgogICAgICAgIHN0 cnVjdCB7IHVuc2lnbmVkIGludCBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMDM7CgogICAg ICAgIHN0cnVjdCB7IHVuc2lnbmVkIGludCBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMDQ7 CgogICAgICAgIHN0cnVjdCB7IHVuc2lnbmVkIGludCBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2 ZWRfMDU7CgogICAgICAgIHN0cnVjdCB7IHVuc2lnbmVkIGludCBfX3Jlc2VydmVkWzRdOyB9IF9f cmVzZXJ2ZWRfMDY7CgogICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBp bnQgcHJpb3JpdHkgOiA4LAogICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc2VydmVkXzEgOiAy NDsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX3Jlc2VydmVkXzJbM107CiAgICAgICAg fSB0cHI7CgogICAgICAgIGNvbnN0CiAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgIHVu c2lnbmVkIGludCBwcmlvcml0eSA6IDgsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzZXJ2 ZWRfMSA6IDI0OwogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRfMlszXTsK ICAgICAgICB9IGFwcjsKCiAgICAgICAgY29uc3QKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAg ICAgICAgdW5zaWduZWQgaW50IHByaW9yaXR5IDogOCwKICAgICAgICAgICAgICAgICAgICAgICAg X19yZXNlcnZlZF8xIDogMjQ7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19yZXNlcnZl ZF8yWzNdOwogICAgICAgIH0gcHByOwoKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAg dW5zaWduZWQgaW50IGVvaTsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX3Jlc2VydmVk WzNdOwogICAgICAgIH0gZW9pOwoKICAgICAgICBzdHJ1Y3QgeyB1bnNpZ25lZCBpbnQgX19yZXNl cnZlZFs0XTsgfSBfX3Jlc2VydmVkXzA3OwoKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAg ICAgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRfMSA6IDI0LAogICAgICAgICAgICAgICAgICAgICAg ICBsb2dpY2FsX2Rlc3QgOiA4OwogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fcmVzZXJ2 ZWRfMlszXTsKICAgICAgICB9IGxkcjsKCiAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAg IHVuc2lnbmVkIGludCBfX3Jlc2VydmVkXzEgOiAyOCwKICAgICAgICAgICAgICAgICAgICAgICAg bW9kZWwgOiA0OwogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRfMlszXTsK ICAgICAgICB9IGRmcjsKCiAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgIHVuc2lnbmVk IGludCBzcHVyaW91c192ZWN0b3IgOiA4LAogICAgICAgICAgICAgICAgICAgICAgICBhcGljX2Vu YWJsZWQgOiAxLAogICAgICAgICAgICAgICAgICAgICAgICBmb2N1c19jcHUgOiAxLAogICAgICAg ICAgICAgICAgICAgICAgICBfX3Jlc2VydmVkXzIgOiAyMjsKICAgICAgICAgICAgICAgIHVuc2ln bmVkIGludCBfX3Jlc2VydmVkXzNbM107CiAgICAgICAgfSBzdnI7CgogICAgICAgIHN0cnVjdCB7 CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYml0ZmllbGQ7CiAgICAgICAgICAgICAgICB1 bnNpZ25lZCBpbnQgX19yZXNlcnZlZFszXTsKICAgICAgICB9IGlzciBbOF07CgogICAgICAgIHN0 cnVjdCB7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYml0ZmllbGQ7CiAgICAgICAgICAg ICAgICB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZFszXTsKICAgICAgICB9IHRtciBbOF07CgogICAg ICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYml0ZmllbGQ7CiAgICAg ICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZFszXTsKICAgICAgICB9IGlyciBbOF07 CgogICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGludCBzZW5kX2NzX2Vycm9yIDogMSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICByZWNlaXZlX2NzX2Vycm9yIDogMSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzZW5kX2FjY2VwdF9lcnJvciA6IDEsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmVjZWl2ZV9hY2NlcHRfZXJyb3IgOiAxLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fcmVzZXJ2ZWRfMSA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2VuZF9pbGxlZ2FsX3ZlY3RvciA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcmVjZWl2ZV9pbGxlZ2FsX3ZlY3RvciA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaWxsZWdhbF9yZWdpc3Rlcl9hZGRyZXNzIDogMSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX3Jlc2VydmVkXzIgOiAyNDsKICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRfM1szXTsKICAgICAgICAgICAgICAgIH0gZXJyb3JfYml0 czsKICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGludCBlcnJvcnM7CiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX3Jl c2VydmVkXzNbM107CiAgICAgICAgICAgICAgICB9IGFsbF9lcnJvcnM7CiAgICAgICAgfSBlc3I7 CgogICAgICAgIHN0cnVjdCB7IHVuc2lnbmVkIGludCBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2 ZWRfMDg7CgogICAgICAgIHN0cnVjdCB7IHVuc2lnbmVkIGludCBfX3Jlc2VydmVkWzRdOyB9IF9f cmVzZXJ2ZWRfMDk7CgogICAgICAgIHN0cnVjdCB7IHVuc2lnbmVkIGludCBfX3Jlc2VydmVkWzRd OyB9IF9fcmVzZXJ2ZWRfMTA7CgogICAgICAgIHN0cnVjdCB7IHVuc2lnbmVkIGludCBfX3Jlc2Vy dmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMTE7CgogICAgICAgIHN0cnVjdCB7IHVuc2lnbmVkIGludCBf X3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMTI7CgogICAgICAgIHN0cnVjdCB7IHVuc2lnbmVk IGludCBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMTM7CgogICAgICAgIHN0cnVjdCB7IHVu c2lnbmVkIGludCBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMTQ7CgogICAgICAgIHN0cnVj dCB7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdmVjdG9yIDogOCwKICAgICAgICAgICAg ICAgICAgICAgICAgZGVsaXZlcnlfbW9kZSA6IDMsCiAgICAgICAgICAgICAgICAgICAgICAgIGRl c3RpbmF0aW9uX21vZGUgOiAxLAogICAgICAgICAgICAgICAgICAgICAgICBkZWxpdmVyeV9zdGF0 dXMgOiAxLAogICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc2VydmVkXzEgOiAxLAogICAgICAg ICAgICAgICAgICAgICAgICBsZXZlbCA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdn ZXIgOiAxLAogICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc2VydmVkXzIgOiAyLAogICAgICAg ICAgICAgICAgICAgICAgICBzaG9ydGhhbmQgOiAyLAogICAgICAgICAgICAgICAgICAgICAgICBf X3Jlc2VydmVkXzMgOiAxMjsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX3Jlc2VydmVk XzRbM107CiAgICAgICAgfSBpY3IxOwoKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAg dW5pb24gewogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZF8x IDogMjQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGh5c19kZXN0IDogNCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc2VydmVkXzIgOiA0OwogICAgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZF8zIDogMjQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbG9naWNhbF9kZXN0IDogODsKICAgICAgICAgICAgICAgIH0g ZGVzdDsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX3Jlc2VydmVkXzRbM107CiAgICAg ICAgfSBpY3IyOwoKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50 IHZlY3RvciA6IDgsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRfMSA6IDQsCiAg ICAgICAgICAgICAgICAgICAgICAgIGRlbGl2ZXJ5X3N0YXR1cyA6IDEsCiAgICAgICAgICAgICAg ICAgICAgICAgIF9fcmVzZXJ2ZWRfMiA6IDMsCiAgICAgICAgICAgICAgICAgICAgICAgIG1hc2sg OiAxLAogICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl9tb2RlIDogMSwKICAgICAgICAgICAg ICAgICAgICAgICAgX19yZXNlcnZlZF8zIDogMTQ7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBp bnQgX19yZXNlcnZlZF80WzNdOwogICAgICAgIH0gbHZ0X3RpbWVyOwoKICAgICAgICBzdHJ1Y3Qg eyB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzE1OwoKICAgICAgICBz dHJ1Y3QgewogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHZlY3RvciA6IDgsCiAgICAgICAg ICAgICAgICAgICAgICAgIGRlbGl2ZXJ5X21vZGUgOiAzLAogICAgICAgICAgICAgICAgICAgICAg ICBfX3Jlc2VydmVkXzEgOiAxLAogICAgICAgICAgICAgICAgICAgICAgICBkZWxpdmVyeV9zdGF0 dXMgOiAxLAogICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc2VydmVkXzIgOiAzLAogICAgICAg ICAgICAgICAgICAgICAgICBtYXNrIDogMSwKICAgICAgICAgICAgICAgICAgICAgICAgX19yZXNl cnZlZF8zIDogMTU7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZF80WzNd OwogICAgICAgIH0gbHZ0X3BjOwoKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgdW5z aWduZWQgaW50IHZlY3RvciA6IDgsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGl2ZXJ5X21v ZGUgOiAzLAogICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc2VydmVkXzEgOiAxLAogICAgICAg ICAgICAgICAgICAgICAgICBkZWxpdmVyeV9zdGF0dXMgOiAxLAogICAgICAgICAgICAgICAgICAg ICAgICBwb2xhcml0eSA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZV9pcnIgOiAx LAogICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyIDogMSwKICAgICAgICAgICAgICAgICAg ICAgICAgbWFzayA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRfMiA6IDE1 OwogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRfM1szXTsKICAgICAgICB9 IGx2dF9saW50MDsKCiAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu dCB2ZWN0b3IgOiA4LAogICAgICAgICAgICAgICAgICAgICAgICBkZWxpdmVyeV9tb2RlIDogMywK ICAgICAgICAgICAgICAgICAgICAgICAgX19yZXNlcnZlZF8xIDogMSwKICAgICAgICAgICAgICAg ICAgICAgICAgZGVsaXZlcnlfc3RhdHVzIDogMSwKICAgICAgICAgICAgICAgICAgICAgICAgcG9s YXJpdHkgOiAxLAogICAgICAgICAgICAgICAgICAgICAgICByZW1vdGVfaXJyIDogMSwKICAgICAg ICAgICAgICAgICAgICAgICAgdHJpZ2dlciA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIG1h c2sgOiAxLAogICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc2VydmVkXzIgOiAxNTsKICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGludCBfX3Jlc2VydmVkXzNbM107CiAgICAgICAgfSBsdnRfbGlu dDE7CgogICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdmVjdG9y IDogOCwKICAgICAgICAgICAgICAgICAgICAgICAgX19yZXNlcnZlZF8xIDogNCwKICAgICAgICAg ICAgICAgICAgICAgICAgZGVsaXZlcnlfc3RhdHVzIDogMSwKICAgICAgICAgICAgICAgICAgICAg ICAgX19yZXNlcnZlZF8yIDogMywKICAgICAgICAgICAgICAgICAgICAgICAgbWFzayA6IDEsCiAg ICAgICAgICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRfMyA6IDE1OwogICAgICAgICAgICAgICAg dW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRfNFszXTsKICAgICAgICB9IGx2dF9lcnJvcjsKCiAgICAg ICAgc3RydWN0IHsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbml0aWFsX2NvdW50Owog ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRfMlszXTsKICAgICAgICB9IHRp bWVyX2ljcjsKCiAgICAgICAgY29uc3QKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAg dW5zaWduZWQgaW50IGN1cnJfY291bnQ7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19y ZXNlcnZlZF8yWzNdOwogICAgICAgIH0gdGltZXJfY2NyOwoKICAgICAgICBzdHJ1Y3QgeyB1bnNp Z25lZCBpbnQgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzE2OwoKICAgICAgICBzdHJ1Y3Qg eyB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzE3OwoKICAgICAgICBz dHJ1Y3QgeyB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzE4OwoKICAg ICAgICBzdHJ1Y3QgeyB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzE5 OwoKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRpdmlzb3Ig OiA0LAogICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc2VydmVkXzEgOiAyODsKICAgICAgICAg ICAgICAgIHVuc2lnbmVkIGludCBfX3Jlc2VydmVkXzJbM107CiAgICAgICAgfSB0aW1lcl9kY3I7 CgogICAgICAgIHN0cnVjdCB7IHVuc2lnbmVkIGludCBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2 ZWRfMjA7Cgp9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIyAxOSAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL2ZpeG1hcC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3BhZ2UuaCIgMQojIDIwICIvdXNyL3NyYy9saW51eC0y LjQuMTMvbGludXgvaW5jbHVkZS9hc20vZml4bWFwLmgiIDIKIyA1MCAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL2ZpeG1hcC5oIgplbnVtIGZpeGVkX2FkZHJlc3NlcyB7 CgogICAgICAgIEZJWF9BUElDX0JBU0UsCgoKICAgICAgICBGSVhfSU9fQVBJQ19CQVNFXzAsCiAg ICAgICAgRklYX0lPX0FQSUNfQkFTRV9FTkQgPSBGSVhfSU9fQVBJQ19CQVNFXzAgKyA4IC0xLAoj IDY4ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vZml4bWFwLmgiCiAg ICAgICAgX19lbmRfb2ZfZml4ZWRfYWRkcmVzc2VzCn07CgpleHRlcm4gdm9pZCBfX3NldF9maXht YXAgKGVudW0gZml4ZWRfYWRkcmVzc2VzIGlkeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcGh5cywgcGdwcm90X3QgZmxhZ3MpOwojIDk0ICIv dXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vZml4bWFwLmgiCmV4dGVybiB2 b2lkIF9fdGhpc19maXhtYXBfZG9lc19ub3RfZXhpc3Qodm9pZCk7CgoKCgoKCnN0YXRpYyBpbmxp bmUgdW5zaWduZWQgbG9uZyBmaXhfdG9fdmlydChjb25zdCB1bnNpZ25lZCBpbnQgaWR4KQp7CiMg MTEyICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vZml4bWFwLmgiCiAg ICAgICAgaWYgKGlkeCA+PSBfX2VuZF9vZl9maXhlZF9hZGRyZXNzZXMpCiAgICAgICAgICAgICAg ICBfX3RoaXNfZml4bWFwX2RvZXNfbm90X2V4aXN0KCk7CgogICAgICAgIHJldHVybiAoKDB4ZmZm ZmUwMDBVTCkgLSAoKGlkeCkgPDwgMTIpKTsKfQojIDE2ICIvdXNyL3NyYy9saW51eC0yLjQuMTMv bGludXgvaW5jbHVkZS9hc20vc21wLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGlu dXgvaW5jbHVkZS9hc20vYml0b3BzLmgiIDEKIyAxNyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xp bnV4L2luY2x1ZGUvYXNtL3NtcC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4 L2luY2x1ZGUvYXNtL21wc3BlYy5oIiAxCiMgMjEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51 eC9pbmNsdWRlL2FzbS9tcHNwZWMuaCIKc3RydWN0IGludGVsX21wX2Zsb2F0aW5nCnsKICAgICAg ICBjaGFyIG1wZl9zaWduYXR1cmVbNF07CiAgICAgICAgdW5zaWduZWQgbG9uZyBtcGZfcGh5c3B0 cjsKICAgICAgICB1bnNpZ25lZCBjaGFyIG1wZl9sZW5ndGg7CiAgICAgICAgdW5zaWduZWQgY2hh ciBtcGZfc3BlY2lmaWNhdGlvbjsKICAgICAgICB1bnNpZ25lZCBjaGFyIG1wZl9jaGVja3N1bTsK ICAgICAgICB1bnNpZ25lZCBjaGFyIG1wZl9mZWF0dXJlMTsKICAgICAgICB1bnNpZ25lZCBjaGFy IG1wZl9mZWF0dXJlMjsKICAgICAgICB1bnNpZ25lZCBjaGFyIG1wZl9mZWF0dXJlMzsKICAgICAg ICB1bnNpZ25lZCBjaGFyIG1wZl9mZWF0dXJlNDsKICAgICAgICB1bnNpZ25lZCBjaGFyIG1wZl9m ZWF0dXJlNTsKfTsKCnN0cnVjdCBtcF9jb25maWdfdGFibGUKewogICAgICAgIGNoYXIgbXBjX3Np Z25hdHVyZVs0XTsKCiAgICAgICAgdW5zaWduZWQgc2hvcnQgbXBjX2xlbmd0aDsKICAgICAgICBj aGFyIG1wY19zcGVjOwogICAgICAgIGNoYXIgbXBjX2NoZWNrc3VtOwogICAgICAgIGNoYXIgbXBj X29lbVs4XTsKICAgICAgICBjaGFyIG1wY19wcm9kdWN0aWRbMTJdOwogICAgICAgIHVuc2lnbmVk IGxvbmcgbXBjX29lbXB0cjsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBtcGNfb2Vtc2l6ZTsKICAg ICAgICB1bnNpZ25lZCBzaG9ydCBtcGNfb2VtY291bnQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBt cGNfbGFwaWM7CiAgICAgICAgdW5zaWduZWQgbG9uZyByZXNlcnZlZDsKfTsKIyA1OSAiL3Vzci9z cmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL21wc3BlYy5oIgpzdHJ1Y3QgbXBjX2Nv bmZpZ19wcm9jZXNzb3IKewogICAgICAgIHVuc2lnbmVkIGNoYXIgbXBjX3R5cGU7CiAgICAgICAg dW5zaWduZWQgY2hhciBtcGNfYXBpY2lkOwogICAgICAgIHVuc2lnbmVkIGNoYXIgbXBjX2FwaWN2 ZXI7CiAgICAgICAgdW5zaWduZWQgY2hhciBtcGNfY3B1ZmxhZzsKCgogICAgICAgIHVuc2lnbmVk IGxvbmcgbXBjX2NwdWZlYXR1cmU7CgoKCiAgICAgICAgdW5zaWduZWQgbG9uZyBtcGNfZmVhdHVy ZWZsYWc7CiAgICAgICAgdW5zaWduZWQgbG9uZyBtcGNfcmVzZXJ2ZWRbMl07Cn07CgpzdHJ1Y3Qg bXBjX2NvbmZpZ19idXMKewogICAgICAgIHVuc2lnbmVkIGNoYXIgbXBjX3R5cGU7CiAgICAgICAg dW5zaWduZWQgY2hhciBtcGNfYnVzaWQ7CiAgICAgICAgdW5zaWduZWQgY2hhciBtcGNfYnVzdHlw ZVs2XSBfX2F0dHJpYnV0ZSgocGFja2VkKSk7Cn07CiMgMTAyICIvdXNyL3NyYy9saW51eC0yLjQu MTMvbGludXgvaW5jbHVkZS9hc20vbXBzcGVjLmgiCnN0cnVjdCBtcGNfY29uZmlnX2lvYXBpYwp7 CiAgICAgICAgdW5zaWduZWQgY2hhciBtcGNfdHlwZTsKICAgICAgICB1bnNpZ25lZCBjaGFyIG1w Y19hcGljaWQ7CiAgICAgICAgdW5zaWduZWQgY2hhciBtcGNfYXBpY3ZlcjsKICAgICAgICB1bnNp Z25lZCBjaGFyIG1wY19mbGFnczsKCiAgICAgICAgdW5zaWduZWQgbG9uZyBtcGNfYXBpY2FkZHI7 Cn07CgpzdHJ1Y3QgbXBjX2NvbmZpZ19pbnRzcmMKewogICAgICAgIHVuc2lnbmVkIGNoYXIgbXBj X3R5cGU7CiAgICAgICAgdW5zaWduZWQgY2hhciBtcGNfaXJxdHlwZTsKICAgICAgICB1bnNpZ25l ZCBzaG9ydCBtcGNfaXJxZmxhZzsKICAgICAgICB1bnNpZ25lZCBjaGFyIG1wY19zcmNidXM7CiAg ICAgICAgdW5zaWduZWQgY2hhciBtcGNfc3JjYnVzaXJxOwogICAgICAgIHVuc2lnbmVkIGNoYXIg bXBjX2RzdGFwaWM7CiAgICAgICAgdW5zaWduZWQgY2hhciBtcGNfZHN0aXJxOwp9OwoKZW51bSBt cF9pcnFfc291cmNlX3R5cGVzIHsKICAgICAgICBtcF9JTlQgPSAwLAogICAgICAgIG1wX05NSSA9 IDEsCiAgICAgICAgbXBfU01JID0gMiwKICAgICAgICBtcF9FeHRJTlQgPSAzCn07CgoKCgoKCnN0 cnVjdCBtcGNfY29uZmlnX2xpbnRzcmMKewogICAgICAgIHVuc2lnbmVkIGNoYXIgbXBjX3R5cGU7 CiAgICAgICAgdW5zaWduZWQgY2hhciBtcGNfaXJxdHlwZTsKICAgICAgICB1bnNpZ25lZCBzaG9y dCBtcGNfaXJxZmxhZzsKICAgICAgICB1bnNpZ25lZCBjaGFyIG1wY19zcmNidXNpZDsKICAgICAg ICB1bnNpZ25lZCBjaGFyIG1wY19zcmNidXNpcnE7CiAgICAgICAgdW5zaWduZWQgY2hhciBtcGNf ZGVzdGFwaWM7CgogICAgICAgIHVuc2lnbmVkIGNoYXIgbXBjX2Rlc3RhcGljbGludDsKfTsKIyAx NjEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9tcHNwZWMuaCIKZW51 bSBtcF9idXN0eXBlIHsKICAgICAgICBNUF9CVVNfSVNBID0gMSwKICAgICAgICBNUF9CVVNfRUlT QSwKICAgICAgICBNUF9CVVNfUENJLAogICAgICAgIE1QX0JVU19NQ0EKfTsKZXh0ZXJuIGludCBt cF9idXNfaWRfdG9fdHlwZSBbMzJdOwpleHRlcm4gaW50IG1wX2J1c19pZF90b19wY2lfYnVzIFsz Ml07CgpleHRlcm4gdW5zaWduZWQgaW50IGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZDsKZXh0ZXJu IHVuc2lnbmVkIGxvbmcgcGh5c19jcHVfcHJlc2VudF9tYXA7CmV4dGVybiBpbnQgc21wX2ZvdW5k X2NvbmZpZzsKZXh0ZXJuIHZvaWQgZmluZF9zbXBfY29uZmlnICh2b2lkKTsKZXh0ZXJuIHZvaWQg Z2V0X3NtcF9jb25maWcgKHZvaWQpOwpleHRlcm4gaW50IG5yX2lvYXBpY3M7CmV4dGVybiBpbnQg YXBpY192ZXJzaW9uIFsxNl07CmV4dGVybiBpbnQgbXBfYnVzX2lkX3RvX3R5cGUgWzMyXTsKZXh0 ZXJuIGludCBtcF9pcnFfZW50cmllczsKZXh0ZXJuIHN0cnVjdCBtcGNfY29uZmlnX2ludHNyYyBt cF9pcnFzIFsyNTZdOwpleHRlcm4gaW50IG1wY19kZWZhdWx0X3R5cGU7CmV4dGVybiBpbnQgbXBf YnVzX2lkX3RvX3BjaV9idXMgWzMyXTsKZXh0ZXJuIGludCBtcF9jdXJyZW50X3BjaV9pZDsKZXh0 ZXJuIHVuc2lnbmVkIGxvbmcgbXBfbGFwaWNfYWRkcjsKZXh0ZXJuIGludCBwaWNfbW9kZTsKZXh0 ZXJuIGludCB1c2luZ19hcGljX3RpbWVyOwojIDE4ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGlu dXgvaW5jbHVkZS9hc20vc21wLmgiIDIKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4 L2luY2x1ZGUvYXNtL2lvX2FwaWMuaCIgMQoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9s aW51eC9pbmNsdWRlL2xpbnV4L2NvbmZpZy5oIiAxCiMgNSAiL3Vzci9zcmMvbGludXgtMi40LjEz L2xpbnV4L2luY2x1ZGUvYXNtL2lvX2FwaWMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4x My9saW51eC9pbmNsdWRlL2FzbS90eXBlcy5oIiAxCiMgNiAiL3Vzci9zcmMvbGludXgtMi40LjEz L2xpbnV4L2luY2x1ZGUvYXNtL2lvX2FwaWMuaCIgMgojIDIzICIvdXNyL3NyYy9saW51eC0yLjQu MTMvbGludXgvaW5jbHVkZS9hc20vaW9fYXBpYy5oIgpzdHJ1Y3QgSU9fQVBJQ19yZWdfMDAgewog ICAgICAgIF9fdTMyIF9fcmVzZXJ2ZWRfMiA6IDI0LAogICAgICAgICAgICAgICAgSUQgOiA0LAog ICAgICAgICAgICAgICAgX19yZXNlcnZlZF8xIDogNDsKfSBfX2F0dHJpYnV0ZV9fICgocGFja2Vk KSk7CgpzdHJ1Y3QgSU9fQVBJQ19yZWdfMDEgewogICAgICAgIF9fdTMyIHZlcnNpb24gOiA4LAog ICAgICAgICAgICAgICAgX19yZXNlcnZlZF8yIDogNywKICAgICAgICAgICAgICAgIFBSUSA6IDEs CiAgICAgICAgICAgICAgICBlbnRyaWVzIDogOCwKICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRf MSA6IDg7Cn0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwoKc3RydWN0IElPX0FQSUNfcmVnXzAy IHsKICAgICAgICBfX3UzMiBfX3Jlc2VydmVkXzIgOiAyNCwKICAgICAgICAgICAgICAgIGFyYml0 cmF0aW9uIDogNCwKICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRfMSA6IDQ7Cn0gX19hdHRyaWJ1 dGVfXyAoKHBhY2tlZCkpOwoKCgoKZXh0ZXJuIGludCBucl9pb2FwaWNzOwpleHRlcm4gaW50IG5y X2lvYXBpY19yZWdpc3RlcnNbOF07CgplbnVtIGlvYXBpY19pcnFfZGVzdGluYXRpb25fdHlwZXMg ewogICAgICAgIGRlc3RfRml4ZWQgPSAwLAogICAgICAgIGRlc3RfTG93ZXN0UHJpbyA9IDEsCiAg ICAgICAgZGVzdF9TTUkgPSAyLAogICAgICAgIGRlc3RfX3Jlc2VydmVkXzEgPSAzLAogICAgICAg IGRlc3RfTk1JID0gNCwKICAgICAgICBkZXN0X0lOSVQgPSA1LAogICAgICAgIGRlc3RfX3Jlc2Vy dmVkXzIgPSA2LAogICAgICAgIGRlc3RfRXh0SU5UID0gNwp9OwoKc3RydWN0IElPX0FQSUNfcm91 dGVfZW50cnkgewogICAgICAgIF9fdTMyIHZlY3RvciA6IDgsCiAgICAgICAgICAgICAgICBkZWxp dmVyeV9tb2RlIDogMywKCgoKICAgICAgICAgICAgICAgIGRlc3RfbW9kZSA6IDEsCiAgICAgICAg ICAgICAgICBkZWxpdmVyeV9zdGF0dXMgOiAxLAogICAgICAgICAgICAgICAgcG9sYXJpdHkgOiAx LAogICAgICAgICAgICAgICAgaXJyIDogMSwKICAgICAgICAgICAgICAgIHRyaWdnZXIgOiAxLAog ICAgICAgICAgICAgICAgbWFzayA6IDEsCiAgICAgICAgICAgICAgICBfX3Jlc2VydmVkXzIgOiAx NTsKCiAgICAgICAgdW5pb24geyBzdHJ1Y3QgeyBfX3UzMgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19yZXNlcnZlZF8xIDogMjQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwaHlzaWNhbF9kZXN0IDogNCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRfMiA6IDQ7CiAgICAgICAgICAgICAgICAg ICAgICAgIH0gcGh5c2ljYWw7CgogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgeyBfX3Uz MgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXNlcnZlZF8xIDog MjQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dpY2FsX2Rlc3Qg OiA4OwogICAgICAgICAgICAgICAgICAgICAgICB9IGxvZ2ljYWw7CiAgICAgICAgfSBkZXN0OwoK fSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CgoKCgoKCmV4dGVybiBzdHJ1Y3QgbXBjX2NvbmZp Z19pb2FwaWMgbXBfaW9hcGljc1s4XTsKCgpleHRlcm4gaW50IG1wX2lycV9lbnRyaWVzOwoKCmV4 dGVybiBzdHJ1Y3QgbXBjX2NvbmZpZ19pbnRzcmMgbXBfaXJxc1syNTZdOwoKCmV4dGVybiBpbnQg bXBjX2RlZmF1bHRfdHlwZTsKCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlvX2FwaWNfcmVh ZCh1bnNpZ25lZCBpbnQgYXBpYywgdW5zaWduZWQgaW50IHJlZykKewogICAgICAgICooKHZvbGF0 aWxlIGludCAqKSgoMHhmZmZmZTAwMFVMKSAtICgoRklYX0lPX0FQSUNfQkFTRV8wICsgYXBpYykg PDwgMTIpKSkgPSByZWc7CiAgICAgICAgcmV0dXJuICooKCh2b2xhdGlsZSBpbnQgKikoKDB4ZmZm ZmUwMDBVTCkgLSAoKEZJWF9JT19BUElDX0JBU0VfMCArIGFwaWMpIDw8IDEyKSkpKzQpOwp9Cgpz dGF0aWMgaW5saW5lIHZvaWQgaW9fYXBpY193cml0ZSh1bnNpZ25lZCBpbnQgYXBpYywgdW5zaWdu ZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbHVlKQp7CiAgICAgICAgKigodm9sYXRpbGUgaW50 ICopKCgweGZmZmZlMDAwVUwpIC0gKChGSVhfSU9fQVBJQ19CQVNFXzAgKyBhcGljKSA8PCAxMikp KSA9IHJlZzsKICAgICAgICAqKCgodm9sYXRpbGUgaW50ICopKCgweGZmZmZlMDAwVUwpIC0gKChG SVhfSU9fQVBJQ19CQVNFXzAgKyBhcGljKSA8PCAxMikpKSs0KSA9IHZhbHVlOwp9CgoKCgoKc3Rh dGljIGlubGluZSB2b2lkIGlvX2FwaWNfbW9kaWZ5KHVuc2lnbmVkIGludCBhcGljLCB1bnNpZ25l ZCBpbnQgdmFsdWUpCnsKICAgICAgICAqKCgodm9sYXRpbGUgaW50ICopKCgweGZmZmZlMDAwVUwp IC0gKChGSVhfSU9fQVBJQ19CQVNFXzAgKyBhcGljKSA8PCAxMikpKSs0KSA9IHZhbHVlOwp9CgoK CgoKc3RhdGljIGlubGluZSB2b2lkIGlvX2FwaWNfc3luYyh1bnNpZ25lZCBpbnQgYXBpYykKewog ICAgICAgICh2b2lkKSAqKCgodm9sYXRpbGUgaW50ICopKCgweGZmZmZlMDAwVUwpIC0gKChGSVhf SU9fQVBJQ19CQVNFXzAgKyBhcGljKSA8PCAxMikpKSs0KTsKfQoKCmV4dGVybiBpbnQgc2tpcF9p b2FwaWNfc2V0dXA7CiMgMjAgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2Fz bS9zbXAuaCIgMgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20v YXBpYy5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGlu dXgvY29uZmlnLmgiIDEKIyA1ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9h c20vYXBpYy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGlu dXgvcG0uaCIgMQojIDI2ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51 eC9wbS5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2Nv bmZpZy5oIiAxCiMgMjcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4 L3BtLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9s aXN0LmgiIDEKIyAyOCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgv cG0uaCIgMgoKCgoKZW51bQp7CiAgICAgICAgUE1fU1VTUEVORCwKICAgICAgICBQTV9SRVNVTUUs CgogICAgICAgIFBNX1NBVkVfU1RBVEUsCgoKICAgICAgICBQTV9TRVRfV0FLRVVQLAoKCiAgICAg ICAgUE1fR0VUX1JFU09VUkNFUywKICAgICAgICBQTV9TRVRfUkVTT1VSQ0VTLAoKCiAgICAgICAg UE1fRUpFQ1QsCiAgICAgICAgUE1fTE9DSywKfTsKCnR5cGVkZWYgaW50IHBtX3JlcXVlc3RfdDsK CgoKCmVudW0KewogICAgICAgIFBNX1VOS05PV05fREVWID0gMCwKICAgICAgICBQTV9TWVNfREVW LAogICAgICAgIFBNX1BDSV9ERVYsCiAgICAgICAgUE1fVVNCX0RFViwKICAgICAgICBQTV9TQ1NJ X0RFViwKICAgICAgICBQTV9JU0FfREVWLAogICAgICAgIFBNX01URF9ERVYsCn07Cgp0eXBlZGVm IGludCBwbV9kZXZfdDsKCgoKCmVudW0KewogICAgICAgIFBNX1NZU19VTktOT1dOID0gMHgwMDAw MDAwMCwKICAgICAgICBQTV9TWVNfS0JDID0gMHg0MWQwMDMwMywKICAgICAgICBQTV9TWVNfQ09N ID0gMHg0MWQwMDUwMCwKICAgICAgICBQTV9TWVNfSVJEQSA9IDB4NDFkMDA1MTAsCiAgICAgICAg UE1fU1lTX0ZEQyA9IDB4NDFkMDA3MDAsCiAgICAgICAgUE1fU1lTX1ZHQSA9IDB4NDFkMDA5MDAs CiAgICAgICAgUE1fU1lTX1BDTUNJQSA9IDB4NDFkMDBlMDAsCn07CiMgOTEgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3BtLmgiCnN0cnVjdCBwbV9kZXY7Cgp0eXBl ZGVmIGludCAoKnBtX2NhbGxiYWNrKShzdHJ1Y3QgcG1fZGV2ICpkZXYsIHBtX3JlcXVlc3RfdCBy cXN0LCB2b2lkICpkYXRhKTsKCgoKCnN0cnVjdCBwbV9kZXYKewogICAgICAgIHBtX2Rldl90IHR5 cGU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBpZDsKICAgICAgICBwbV9jYWxsYmFjayBjYWxsYmFj azsKICAgICAgICB2b2lkICpkYXRhOwoKICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAg ICAgIGludCBzdGF0ZTsKICAgICAgICBpbnQgcHJldl9zdGF0ZTsKCiAgICAgICAgc3RydWN0IGxp c3RfaGVhZCBlbnRyeTsKfTsKCgoKZXh0ZXJuIGludCBwbV9hY3RpdmU7CgoKCgoKCnN0cnVjdCBw bV9kZXYgKnBtX3JlZ2lzdGVyKHBtX2Rldl90IHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGxvbmcgaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBtX2NhbGxi YWNrIGNhbGxiYWNrKTsKCgoKCnZvaWQgcG1fdW5yZWdpc3RlcihzdHJ1Y3QgcG1fZGV2ICpkZXYp OwoKCgoKdm9pZCBwbV91bnJlZ2lzdGVyX2FsbChwbV9jYWxsYmFjayBjYWxsYmFjayk7CgoKCgpp bnQgcG1fc2VuZChzdHJ1Y3QgcG1fZGV2ICpkZXYsIHBtX3JlcXVlc3RfdCBycXN0LCB2b2lkICpk YXRhKTsKCgoKCmludCBwbV9zZW5kX2FsbChwbV9yZXF1ZXN0X3QgcnFzdCwgdm9pZCAqZGF0YSk7 CgoKCgpzdHJ1Y3QgcG1fZGV2ICpwbV9maW5kKHBtX2Rldl90IHR5cGUsIHN0cnVjdCBwbV9kZXYg KmZyb20pOwoKc3RhdGljIGlubGluZSB2b2lkIHBtX2FjY2VzcyhzdHJ1Y3QgcG1fZGV2ICpkZXYp IHt9CnN0YXRpYyBpbmxpbmUgdm9pZCBwbV9kZXZfaWRsZShzdHJ1Y3QgcG1fZGV2ICpkZXYpIHt9 CiMgMTg4ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9wbS5oIgpl eHRlcm4gdm9pZCAoKnBtX2lkbGUpKHZvaWQpOwpleHRlcm4gdm9pZCAoKnBtX3Bvd2VyX29mZiko dm9pZCk7CiMgNiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL2FwaWMu aCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9hcGljZGVm LmgiIDEKIyA3ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vYXBpYy5o IiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3N5c3RlbS5o IiAxCiMgOCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL2FwaWMuaCIg MgojIDIzICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vYXBpYy5oIgpz dGF0aWMgX19pbmxpbmUgdm9pZCBhcGljX3dyaXRlKHVuc2lnbmVkIGxvbmcgcmVnLCB1bnNpZ25l ZCBsb25nIHYpCnsKICAgICAgICAqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKChmaXhfdG9f dmlydChGSVhfQVBJQ19CQVNFKSkrcmVnKSkgPSB2Owp9CgpzdGF0aWMgX19pbmxpbmUgdm9pZCBh cGljX3dyaXRlX2F0b21pYyh1bnNpZ25lZCBsb25nIHJlZywgdW5zaWduZWQgbG9uZyB2KQp7CiAg ICAgICAgKChfX3R5cGVvZl9fKCooKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoKGZpeF90b192 aXJ0KEZJWF9BUElDX0JBU0UpKStyZWcpKSkpX194Y2hnKCh1bnNpZ25lZCBsb25nKSh2KSwoKHZv bGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoKGZpeF90b192aXJ0KEZJWF9BUElDX0JBU0UpKStyZWcp KSxzaXplb2YoKigodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSgoZml4X3RvX3ZpcnQoRklYX0FQ SUNfQkFTRSkpK3JlZykpKSkpOwp9CgpzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgbG9uZyBhcGlj X3JlYWQodW5zaWduZWQgbG9uZyByZWcpCnsKICAgICAgICByZXR1cm4gKigodm9sYXRpbGUgdW5z aWduZWQgbG9uZyAqKSgoZml4X3RvX3ZpcnQoRklYX0FQSUNfQkFTRSkpK3JlZykpOwp9CgpzdGF0 aWMgX19pbmxpbmVfXyB2b2lkIGFwaWNfd2FpdF9pY3JfaWRsZSh2b2lkKQp7CiAgICAgICAgZG8g eyB9IHdoaWxlICggYXBpY19yZWFkKCAweDMwMCApICYgMHgwMTAwMCApOwp9CiMgNTMgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9hcGljLmgiCnN0YXRpYyBpbmxpbmUg dm9pZCBhY2tfQVBJQ19pcnEodm9pZCkKewojIDYzICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGlu dXgvaW5jbHVkZS9hc20vYXBpYy5oIgogICAgICAgIGFwaWNfd3JpdGUoKDB4QjApLCgwKSk7Cn0K CmV4dGVybiBpbnQgZ2V0X21heGx2dCh2b2lkKTsKZXh0ZXJuIHZvaWQgY2xlYXJfbG9jYWxfQVBJ Qyh2b2lkKTsKZXh0ZXJuIHZvaWQgY29ubmVjdF9ic3BfQVBJQyAodm9pZCk7CmV4dGVybiB2b2lk IGRpc2Nvbm5lY3RfYnNwX0FQSUMgKHZvaWQpOwpleHRlcm4gdm9pZCBkaXNhYmxlX2xvY2FsX0FQ SUMgKHZvaWQpOwpleHRlcm4gaW50IHZlcmlmeV9sb2NhbF9BUElDICh2b2lkKTsKZXh0ZXJuIHZv aWQgY2FjaGVfQVBJQ19yZWdpc3RlcnMgKHZvaWQpOwpleHRlcm4gdm9pZCBzeW5jX0FyYl9JRHMg KHZvaWQpOwpleHRlcm4gdm9pZCBpbml0X2JzcF9BUElDICh2b2lkKTsKZXh0ZXJuIHZvaWQgc2V0 dXBfbG9jYWxfQVBJQyAodm9pZCk7CmV4dGVybiB2b2lkIGluaXRfYXBpY19tYXBwaW5ncyAodm9p ZCk7CmV4dGVybiB2b2lkIHNtcF9sb2NhbF90aW1lcl9pbnRlcnJ1cHQgKHN0cnVjdCBwdF9yZWdz ICogcmVncyk7CmV4dGVybiB2b2lkIHNldHVwX0FQSUNfY2xvY2tzICh2b2lkKTsKZXh0ZXJuIHZv aWQgc2V0dXBfYXBpY19ubWlfd2F0Y2hkb2cgKHZvaWQpOwpleHRlcm4gaW5saW5lIHZvaWQgbm1p X3dhdGNoZG9nX3RpY2sgKHN0cnVjdCBwdF9yZWdzICogcmVncyk7CmV4dGVybiBpbnQgQVBJQ19p bml0X3VuaXByb2Nlc3NvciAodm9pZCk7CgpleHRlcm4gc3RydWN0IHBtX2RldiAqYXBpY19wbV9y ZWdpc3RlcihwbV9kZXZfdCwgdW5zaWduZWQgbG9uZywgcG1fY2FsbGJhY2spOwpleHRlcm4gdm9p ZCBhcGljX3BtX3VucmVnaXN0ZXIoc3RydWN0IHBtX2RldiopOwoKZXh0ZXJuIHVuc2lnbmVkIGlu dCBhcGljX3RpbWVyX2lycXMgWzMyXTsKZXh0ZXJuIGludCBjaGVja19ubWlfd2F0Y2hkb2cgKHZv aWQpOwoKZXh0ZXJuIHVuc2lnbmVkIGludCBubWlfd2F0Y2hkb2c7CiMgMjIgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9zbXAuaCIgMgojIDU1ICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vc21wLmgiCmV4dGVybiB2b2lkIHNtcF9hbGxvY19t ZW1vcnkodm9pZCk7CmV4dGVybiB1bnNpZ25lZCBsb25nIHBoeXNfY3B1X3ByZXNlbnRfbWFwOwpl eHRlcm4gdW5zaWduZWQgbG9uZyBjcHVfb25saW5lX21hcDsKZXh0ZXJuIHZvbGF0aWxlIHVuc2ln bmVkIGxvbmcgc21wX2ludmFsaWRhdGVfbmVlZGVkOwpleHRlcm4gaW50IHBpY19tb2RlOwpleHRl cm4gdm9pZCBzbXBfZmx1c2hfdGxiKHZvaWQpOwpleHRlcm4gdm9pZCBzbXBfbWVzc2FnZV9pcnEo aW50IGNwbCwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CmV4dGVybiB2b2lk IHNtcF9zZW5kX3Jlc2NoZWR1bGUoaW50IGNwdSk7CmV4dGVybiB2b2lkIHNtcF9pbnZhbGlkYXRl X3Jjdih2b2lkKTsKZXh0ZXJuIHZvaWQgKCptdHJyX2hvb2spICh2b2lkKTsKZXh0ZXJuIHZvaWQg emFwX2xvd19tYXBwaW5ncyAodm9pZCk7CgoKCgoKCnN0YXRpYyBpbmxpbmUgaW50IGNwdV9sb2dp Y2FsX21hcChpbnQgY3B1KQp7CiAgICAgICAgcmV0dXJuIGNwdTsKfQpzdGF0aWMgaW5saW5lIGlu dCBjcHVfbnVtYmVyX21hcChpbnQgY3B1KQp7CiAgICAgICAgcmV0dXJuIGNwdTsKfQoKCgoKCgpl eHRlcm4gdm9sYXRpbGUgaW50IGNwdV90b19waHlzaWNhbF9hcGljaWRbMzJdOwpleHRlcm4gdm9s YXRpbGUgaW50IHBoeXNpY2FsX2FwaWNpZF90b19jcHVbMjU2XTsKZXh0ZXJuIHZvbGF0aWxlIGlu dCBjcHVfdG9fbG9naWNhbF9hcGljaWRbMzJdOwpleHRlcm4gdm9sYXRpbGUgaW50IGxvZ2ljYWxf YXBpY2lkX3RvX2NwdVsyNTZdOwoKCgoKCmV4dGVybiB2b2lkIHNtcF9ib290X2NwdXModm9pZCk7 CmV4dGVybiB2b2lkIHNtcF9zdG9yZV9jcHVfaW5mbyhpbnQgaWQpOwojIDEwNiAiL3Vzci9zcmMv bGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3NtcC5oIgpzdGF0aWMgX19pbmxpbmUgaW50 IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCh2b2lkKQp7CgogICAgICAgIHJldHVybiAoKCgqKHVuc2ln bmVkIGxvbmcgKikoKGZpeF90b192aXJ0KEZJWF9BUElDX0JBU0UpKSsweDIwKSk+PjI0KSYweDBG KTsKfQoKc3RhdGljIF9faW5saW5lIGludCBsb2dpY2FsX3NtcF9wcm9jZXNzb3JfaWQodm9pZCkK ewoKICAgICAgICByZXR1cm4gKCgoKih1bnNpZ25lZCBsb25nICopKChmaXhfdG9fdmlydChGSVhf QVBJQ19CQVNFKSkrMHhEMCkpPj4yNCkmMHhGRik7Cn0KIyAxNSAiL3Vzci9zcmMvbGludXgtMi40 LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc21wLmgiIDIKIyAyNCAiL3Vzci9zcmMvbGludXgtMi40 LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc21wLmgiCmV4dGVybiB2b2lkIHNtcF9zZW5kX3N0b3Ao dm9pZCk7CgoKCgpleHRlcm4gdm9pZCBzbXBfc2VuZF9yZXNjaGVkdWxlKGludCBjcHUpIF9fYXR0 cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKCgoKCgpleHRlcm4gdm9pZCBzbXBfYm9vdF9jcHVzKHZv aWQpOwoKCgoKZXh0ZXJuIHZvaWQgc21wX2NhbGxpbih2b2lkKTsKCgoKCmV4dGVybiB2b2lkIHNt cF9jb21tZW5jZSh2b2lkKTsKCgoKCmV4dGVybiBpbnQgc21wX2NhbGxfZnVuY3Rpb24gKHZvaWQg KCpmdW5jKSAodm9pZCAqaW5mbyksIHZvaWQgKmluZm8sCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCByZXRyeSwgaW50IHdhaXQpOwoKCgoKZXh0ZXJuIGludCBzbXBfdGhyZWFkc19y ZWFkeTsKCmV4dGVybiBpbnQgc21wX251bV9jcHVzOwoKZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVk IGxvbmcgc21wX21zZ19kYXRhOwpleHRlcm4gdm9sYXRpbGUgaW50IHNtcF9zcmNfY3B1OwpleHRl cm4gdm9sYXRpbGUgaW50IHNtcF9tc2dfaWQ7CiMgMjQgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9s aW51eC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMv bGludXgvaW5jbHVkZS9saW51eC90dHkuaCIgMQojIDE5ICIvdXNyL3NyYy9saW51eC0yLjQuMTMv bGludXgvaW5jbHVkZS9saW51eC90dHkuaCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGlu dXgvaW5jbHVkZS9saW51eC9jb25maWcuaCIgMQojIDIwICIvdXNyL3NyYy9saW51eC0yLjQuMTMv bGludXgvaW5jbHVkZS9saW51eC90dHkuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9s aW51eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDEKIyAyMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xp bnV4L2luY2x1ZGUvbGludXgvdHR5LmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGlu dXgvaW5jbHVkZS9saW51eC9tYWpvci5oIiAxCiMgMTc3ICIvdXNyL3NyYy9saW51eC0yLjQuMTMv bGludXgvaW5jbHVkZS9saW51eC9tYWpvci5oIgpzdGF0aWMgX19pbmxpbmVfXyBpbnQgc2NzaV9i bGtfbWFqb3IoaW50IG0pIHsKICAgICAgICByZXR1cm4gKCgobSkgPT0gOCB8fCAoKG0pID49IDY1 ICYmIChtKSA8PSA3MSkpIHx8IChtKSA9PSAxMSk7Cn0KIyAxOTAgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L21ham9yLmgiCnN0YXRpYyBfX2lubGluZV9fIGludCBp ZGVfYmxrX21ham9yKGludCBtKQp7CiAgICAgICAgcmV0dXJuICgobSkgPT0gMyB8fCAobSkgPT0g MjIgfHwgKG0pID09IDMzIHx8IChtKSA9PSAzNCB8fCAobSkgPT0gNTYgfHwgKG0pID09IDU3IHx8 IChtKSA9PSA4OCB8fCAobSkgPT0gODkgfHwgKG0pID09IDkwIHx8IChtKSA9PSA5MSk7Cn0KIyAy MiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvdHR5LmgiIDIKIyAx ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC90ZXJtaW9zLmgiIDEK CgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC90eXBlcy5o IiAxCiMgNSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvdGVybWlv cy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3Rlcm1p b3MuaCIgMQoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS90 ZXJtYml0cy5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUv bGludXgvcG9zaXhfdHlwZXMuaCIgMQojIDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9p bmNsdWRlL2FzbS90ZXJtYml0cy5oIiAyCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgY2NfdDsKdHlw ZWRlZiB1bnNpZ25lZCBpbnQgc3BlZWRfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdGNmbGFnX3Q7 CgoKc3RydWN0IHRlcm1pb3MgewogICAgICAgIHRjZmxhZ190IGNfaWZsYWc7CiAgICAgICAgdGNm bGFnX3QgY19vZmxhZzsKICAgICAgICB0Y2ZsYWdfdCBjX2NmbGFnOwogICAgICAgIHRjZmxhZ190 IGNfbGZsYWc7CiAgICAgICAgY2NfdCBjX2xpbmU7CiAgICAgICAgY2NfdCBjX2NjWzE5XTsKfTsK IyA1ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vdGVybWlvcy5oIiAy CiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL2lvY3Rscy5oIiAx CgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL2lvY3RsLmgi IDEKIyA1ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vaW9jdGxzLmgi IDIKIyA2ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vdGVybWlvcy5o IiAyCgpzdHJ1Y3Qgd2luc2l6ZSB7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgd3Nfcm93OwogICAg ICAgIHVuc2lnbmVkIHNob3J0IHdzX2NvbDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCB3c194cGl4 ZWw7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgd3NfeXBpeGVsOwp9OwoKCnN0cnVjdCB0ZXJtaW8g ewogICAgICAgIHVuc2lnbmVkIHNob3J0IGNfaWZsYWc7CiAgICAgICAgdW5zaWduZWQgc2hvcnQg Y19vZmxhZzsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBjX2NmbGFnOwogICAgICAgIHVuc2lnbmVk IHNob3J0IGNfbGZsYWc7CiAgICAgICAgdW5zaWduZWQgY2hhciBjX2xpbmU7CiAgICAgICAgdW5z aWduZWQgY2hhciBjX2NjWzhdOwp9OwojIDYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9p bmNsdWRlL2xpbnV4L3Rlcm1pb3MuaCIgMgojIDIzICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGlu dXgvaW5jbHVkZS9saW51eC90dHkuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51 eC9pbmNsdWRlL2xpbnV4L3RxdWV1ZS5oIiAxCiMgMjQgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9s aW51eC9pbmNsdWRlL2xpbnV4L3R0eS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xp bnV4L2luY2x1ZGUvbGludXgvdHR5X2RyaXZlci5oIiAxCiMgMTE4ICIvdXNyL3NyYy9saW51eC0y LjQuMTMvbGludXgvaW5jbHVkZS9saW51eC90dHlfZHJpdmVyLmgiCiMgMSAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvZnMuaCIgMQojIDExOSAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvdHR5X2RyaXZlci5oIiAyCgpzdHJ1Y3QgdHR5 X2RyaXZlciB7CiAgICAgICAgaW50IG1hZ2ljOwogICAgICAgIGNvbnN0IGNoYXIgKmRyaXZlcl9u YW1lOwogICAgICAgIGNvbnN0IGNoYXIgKm5hbWU7CiAgICAgICAgaW50IG5hbWVfYmFzZTsKICAg ICAgICBzaG9ydCBtYWpvcjsKICAgICAgICBzaG9ydCBtaW5vcl9zdGFydDsKICAgICAgICBzaG9y dCBudW07CiAgICAgICAgc2hvcnQgdHlwZTsKICAgICAgICBzaG9ydCBzdWJ0eXBlOwogICAgICAg IHN0cnVjdCB0ZXJtaW9zIGluaXRfdGVybWlvczsKICAgICAgICBpbnQgZmxhZ3M7CiAgICAgICAg aW50ICpyZWZjb3VudDsKICAgICAgICBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfZW50cnk7 CiAgICAgICAgc3RydWN0IHR0eV9kcml2ZXIgKm90aGVyOwoKCgoKICAgICAgICBzdHJ1Y3QgdHR5 X3N0cnVjdCAqKnRhYmxlOwogICAgICAgIHN0cnVjdCB0ZXJtaW9zICoqdGVybWlvczsKICAgICAg ICBzdHJ1Y3QgdGVybWlvcyAqKnRlcm1pb3NfbG9ja2VkOwogICAgICAgIHZvaWQgKmRyaXZlcl9z dGF0ZTsKCgoKCgogICAgICAgIGludCAoKm9wZW4pKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBz dHJ1Y3QgZmlsZSAqIGZpbHApOwogICAgICAgIHZvaWQgKCpjbG9zZSkoc3RydWN0IHR0eV9zdHJ1 Y3QgKiB0dHksIHN0cnVjdCBmaWxlICogZmlscCk7CiAgICAgICAgaW50ICgqd3JpdGUpKHN0cnVj dCB0dHlfc3RydWN0ICogdHR5LCBpbnQgZnJvbV91c2VyLAogICAgICAgICAgICAgICAgICAgICAg Y29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOwogICAgICAgIHZvaWQgKCpwdXRf Y2hhcikoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgY2hhciBjaCk7CiAgICAgICAg dm9pZCAoKmZsdXNoX2NoYXJzKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKICAgICAgICBpbnQg KCp3cml0ZV9yb29tKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKICAgICAgICBpbnQgKCpjaGFy c19pbl9idWZmZXIpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogICAgICAgIGludCAoKmlvY3Rs KShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsCiAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogICAgICAgIHZv aWQgKCpzZXRfdGVybWlvcykoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHRlcm1pb3Mg KiBvbGQpOwogICAgICAgIHZvaWQgKCp0aHJvdHRsZSkoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkp OwogICAgICAgIHZvaWQgKCp1bnRocm90dGxlKShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSk7CiAg ICAgICAgdm9pZCAoKnN0b3ApKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogICAgICAgIHZvaWQg KCpzdGFydCkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiAgICAgICAgdm9pZCAoKmhhbmd1cCko c3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiAgICAgICAgdm9pZCAoKmJyZWFrX2N0bCkoc3RydWN0 IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IHN0YXRlKTsKICAgICAgICB2b2lkICgqZmx1c2hfYnVmZmVy KShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKICAgICAgICB2b2lkICgqc2V0X2xkaXNjKShzdHJ1 Y3QgdHR5X3N0cnVjdCAqdHR5KTsKICAgICAgICB2b2lkICgqd2FpdF91bnRpbF9zZW50KShzdHJ1 Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgdGltZW91dCk7CiAgICAgICAgdm9pZCAoKnNlbmRfeGNo YXIpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNoYXIgY2gpOwogICAgICAgIGludCAoKnJlYWRf cHJvYykoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7CiAgICAgICAgaW50 ICgqd3JpdGVfcHJvYykoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmJ1ZmZlciwKICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKTsK CgoKCiAgICAgICAgc3RydWN0IHR0eV9kcml2ZXIgKm5leHQ7CiAgICAgICAgc3RydWN0IHR0eV9k cml2ZXIgKnByZXY7Cn07CiMgMjUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRl L2xpbnV4L3R0eS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUv bGludXgvdHR5X2xkaXNjLmgiIDEKIyAxMDAgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9p bmNsdWRlL2xpbnV4L3R0eV9sZGlzYy5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51 eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDEKIyAxMDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51 eC9pbmNsdWRlL2xpbnV4L3R0eV9sZGlzYy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEz L2xpbnV4L2luY2x1ZGUvbGludXgvd2FpdC5oIiAxCiMgMTAyICIvdXNyL3NyYy9saW51eC0yLjQu MTMvbGludXgvaW5jbHVkZS9saW51eC90dHlfbGRpc2MuaCIgMgoKc3RydWN0IHR0eV9sZGlzYyB7 CiAgICAgICAgaW50IG1hZ2ljOwogICAgICAgIGNoYXIgKm5hbWU7CiAgICAgICAgaW50IG51bTsK ICAgICAgICBpbnQgZmxhZ3M7CgoKCiAgICAgICAgaW50ICgqb3Blbikoc3RydWN0IHR0eV9zdHJ1 Y3QgKik7CiAgICAgICAgdm9pZCAoKmNsb3NlKShzdHJ1Y3QgdHR5X3N0cnVjdCAqKTsKICAgICAg ICB2b2lkICgqZmx1c2hfYnVmZmVyKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKICAgICAgICBz c2l6ZV90ICgqY2hhcnNfaW5fYnVmZmVyKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKICAgICAg ICBzc2l6ZV90ICgqcmVhZCkoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIHN0cnVjdCBmaWxlICog ZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqIGJ1Ziwgc2l6ZV90 IG5yKTsKICAgICAgICBzc2l6ZV90ICgqd3JpdGUpKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBz dHJ1Y3QgZmlsZSAqIGZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l ZCBjaGFyICogYnVmLCBzaXplX3QgbnIpOwogICAgICAgIGludCAoKmlvY3RsKShzdHJ1Y3QgdHR5 X3N0cnVjdCAqIHR0eSwgc3RydWN0IGZpbGUgKiBmaWxlLAogICAgICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogICAgICAgIHZvaWQgKCpz ZXRfdGVybWlvcykoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHRlcm1pb3MgKiBvbGQp OwogICAgICAgIHVuc2lnbmVkIGludCAoKnBvbGwpKHN0cnVjdCB0dHlfc3RydWN0ICosIHN0cnVj dCBmaWxlICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHBvbGxfdGFibGVf c3RydWN0ICopOwoKCgoKICAgICAgICB2b2lkICgqcmVjZWl2ZV9idWYpKHN0cnVjdCB0dHlfc3Ry dWN0ICosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNwLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2hhciAqZnAsIGludCBjb3VudCk7CiAgICAgICAgaW50ICgqcmVjZWl2ZV9yb29tKShz dHJ1Y3QgdHR5X3N0cnVjdCAqKTsKICAgICAgICB2b2lkICgqd3JpdGVfd2FrZXVwKShzdHJ1Y3Qg dHR5X3N0cnVjdCAqKTsKfTsKIyAyNiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1 ZGUvbGludXgvdHR5LmgiIDIKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1 ZGUvYXNtL3N5c3RlbS5oIiAxCiMgMjggIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNs dWRlL2xpbnV4L3R0eS5oIiAyCiMgNTkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNs dWRlL2xpbnV4L3R0eS5oIgpzdHJ1Y3Qgc2NyZWVuX2luZm8gewogICAgICAgIHVuc2lnbmVkIGNo YXIgb3JpZ194OwogICAgICAgIHVuc2lnbmVkIGNoYXIgb3JpZ195OwogICAgICAgIHVuc2lnbmVk IHNob3J0IGRvbnR1c2UxOwogICAgICAgIHVuc2lnbmVkIHNob3J0IG9yaWdfdmlkZW9fcGFnZTsK ICAgICAgICB1bnNpZ25lZCBjaGFyIG9yaWdfdmlkZW9fbW9kZTsKICAgICAgICB1bnNpZ25lZCBj aGFyIG9yaWdfdmlkZW9fY29sczsKICAgICAgICB1bnNpZ25lZCBzaG9ydCB1bnVzZWQyOwogICAg ICAgIHVuc2lnbmVkIHNob3J0IG9yaWdfdmlkZW9fZWdhX2J4OwogICAgICAgIHVuc2lnbmVkIHNo b3J0IHVudXNlZDM7CiAgICAgICAgdW5zaWduZWQgY2hhciBvcmlnX3ZpZGVvX2xpbmVzOwogICAg ICAgIHVuc2lnbmVkIGNoYXIgb3JpZ192aWRlb19pc1ZHQTsKICAgICAgICB1bnNpZ25lZCBzaG9y dCBvcmlnX3ZpZGVvX3BvaW50czsKCgogICAgICAgIHVuc2lnbmVkIHNob3J0IGxmYl93aWR0aDsK ICAgICAgICB1bnNpZ25lZCBzaG9ydCBsZmJfaGVpZ2h0OwogICAgICAgIHVuc2lnbmVkIHNob3J0 IGxmYl9kZXB0aDsKICAgICAgICB1bnNpZ25lZCBsb25nIGxmYl9iYXNlOwogICAgICAgIHVuc2ln bmVkIGxvbmcgbGZiX3NpemU7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgZG9udHVzZTIsIGRvbnR1 c2UzOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGxmYl9saW5lbGVuZ3RoOwogICAgICAgIHVuc2ln bmVkIGNoYXIgcmVkX3NpemU7CiAgICAgICAgdW5zaWduZWQgY2hhciByZWRfcG9zOwogICAgICAg IHVuc2lnbmVkIGNoYXIgZ3JlZW5fc2l6ZTsKICAgICAgICB1bnNpZ25lZCBjaGFyIGdyZWVuX3Bv czsKICAgICAgICB1bnNpZ25lZCBjaGFyIGJsdWVfc2l6ZTsKICAgICAgICB1bnNpZ25lZCBjaGFy IGJsdWVfcG9zOwogICAgICAgIHVuc2lnbmVkIGNoYXIgcnN2ZF9zaXplOwogICAgICAgIHVuc2ln bmVkIGNoYXIgcnN2ZF9wb3M7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgdmVzYXBtX3NlZzsKICAg ICAgICB1bnNpZ25lZCBzaG9ydCB2ZXNhcG1fb2ZmOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHBh Z2VzOwoKfTsKCmV4dGVybiBzdHJ1Y3Qgc2NyZWVuX2luZm8gc2NyZWVuX2luZm87CiMgMTM5ICIv dXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC90dHkuaCIKc3RydWN0IHR0 eV9mbGlwX2J1ZmZlciB7CiAgICAgICAgc3RydWN0IHRxX3N0cnVjdCB0cXVldWU7CiAgICAgICAg c3RydWN0IHNlbWFwaG9yZSBwdHlfc2VtOwogICAgICAgIGNoYXIgKmNoYXJfYnVmX3B0cjsKICAg ICAgICB1bnNpZ25lZCBjaGFyICpmbGFnX2J1Zl9wdHI7CiAgICAgICAgaW50IGNvdW50OwogICAg ICAgIGludCBidWZfbnVtOwogICAgICAgIHVuc2lnbmVkIGNoYXIgY2hhcl9idWZbMio1MTJdOwog ICAgICAgIGNoYXIgZmxhZ19idWZbMio1MTJdOwogICAgICAgIHVuc2lnbmVkIGNoYXIgc2xvcFs0 XTsKfTsKIyAyNTkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3R0 eS5oIgpzdHJ1Y3QgdHR5X3N0cnVjdCB7CiAgICAgICAgaW50IG1hZ2ljOwogICAgICAgIHN0cnVj dCB0dHlfZHJpdmVyIGRyaXZlcjsKICAgICAgICBzdHJ1Y3QgdHR5X2xkaXNjIGxkaXNjOwogICAg ICAgIHN0cnVjdCB0ZXJtaW9zICp0ZXJtaW9zLCAqdGVybWlvc19sb2NrZWQ7CiAgICAgICAgaW50 IHBncnA7CiAgICAgICAgaW50IHNlc3Npb247CiAgICAgICAga2Rldl90IGRldmljZTsKICAgICAg ICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgICAgIGludCBjb3VudDsKICAgICAgICBzdHJ1Y3Qg d2luc2l6ZSB3aW5zaXplOwogICAgICAgIHVuc2lnbmVkIGNoYXIgc3RvcHBlZDoxLCBod19zdG9w cGVkOjEsIGZsb3dfc3RvcHBlZDoxLCBwYWNrZXQ6MTsKICAgICAgICB1bnNpZ25lZCBjaGFyIGxv d19sYXRlbmN5OjEsIHdhcm5lZDoxOwogICAgICAgIHVuc2lnbmVkIGNoYXIgY3RybF9zdGF0dXM7 CgogICAgICAgIHN0cnVjdCB0dHlfc3RydWN0ICpsaW5rOwogICAgICAgIHN0cnVjdCBmYXN5bmNf c3RydWN0ICpmYXN5bmM7CiAgICAgICAgc3RydWN0IHR0eV9mbGlwX2J1ZmZlciBmbGlwOwogICAg ICAgIGludCBtYXhfZmxpcF9jbnQ7CiAgICAgICAgaW50IGFsdF9zcGVlZDsKICAgICAgICB3YWl0 X3F1ZXVlX2hlYWRfdCB3cml0ZV93YWl0OwogICAgICAgIHdhaXRfcXVldWVfaGVhZF90IHJlYWRf d2FpdDsKICAgICAgICBzdHJ1Y3QgdHFfc3RydWN0IHRxX2hhbmd1cDsKICAgICAgICB2b2lkICpk aXNjX2RhdGE7CiAgICAgICAgdm9pZCAqZHJpdmVyX2RhdGE7CiAgICAgICAgc3RydWN0IGxpc3Rf aGVhZCB0dHlfZmlsZXM7CgoKCgoKCgogICAgICAgIHVuc2lnbmVkIGludCBjb2x1bW47CiAgICAg ICAgdW5zaWduZWQgY2hhciBsbmV4dDoxLCBlcmFzaW5nOjEsIHJhdzoxLCByZWFsX3JhdzoxLCBp Y2Fub246MTsKICAgICAgICB1bnNpZ25lZCBjaGFyIGNsb3Npbmc6MTsKICAgICAgICB1bnNpZ25l ZCBzaG9ydCBtaW5pbXVtX3RvX3dha2U7CiAgICAgICAgdW5zaWduZWQgb3ZlcnJ1bl90aW1lOwog ICAgICAgIGludCBudW1fb3ZlcnJ1bjsKICAgICAgICB1bnNpZ25lZCBsb25nIHByb2Nlc3NfY2hh cl9tYXBbMjU2Lyg4KnNpemVvZih1bnNpZ25lZCBsb25nKSldOwogICAgICAgIGNoYXIgKnJlYWRf YnVmOwogICAgICAgIGludCByZWFkX2hlYWQ7CiAgICAgICAgaW50IHJlYWRfdGFpbDsKICAgICAg ICBpbnQgcmVhZF9jbnQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyByZWFkX2ZsYWdzWzQwOTYvKDgq c2l6ZW9mKHVuc2lnbmVkIGxvbmcpKV07CiAgICAgICAgaW50IGNhbm9uX2RhdGE7CiAgICAgICAg dW5zaWduZWQgbG9uZyBjYW5vbl9oZWFkOwogICAgICAgIHVuc2lnbmVkIGludCBjYW5vbl9jb2x1 bW47CiAgICAgICAgc3RydWN0IHNlbWFwaG9yZSBhdG9taWNfcmVhZDsKICAgICAgICBzdHJ1Y3Qg c2VtYXBob3JlIGF0b21pY193cml0ZTsKICAgICAgICBzcGlubG9ja190IHJlYWRfbG9jazsKCiAg ICAgICAgc3RydWN0IHRxX3N0cnVjdCBTQUtfdHE7Cn07CiMgMzQxICIvdXNyL3NyYy9saW51eC0y LjQuMTMvbGludXgvaW5jbHVkZS9saW51eC90dHkuaCIKZXh0ZXJuIHZvaWQgdHR5X3dyaXRlX2Zs dXNoKHN0cnVjdCB0dHlfc3RydWN0ICopOwoKZXh0ZXJuIHN0cnVjdCB0ZXJtaW9zIHR0eV9zdGRf dGVybWlvczsKZXh0ZXJuIHN0cnVjdCB0dHlfc3RydWN0ICogcmVkaXJlY3Q7CmV4dGVybiBzdHJ1 Y3QgdHR5X2xkaXNjIGxkaXNjc1tdOwpleHRlcm4gaW50IGZnX2NvbnNvbGUsIGxhc3RfY29uc29s ZSwgd2FudF9jb25zb2xlOwoKZXh0ZXJuIGludCBrbXNnX3JlZGlyZWN0OwoKZXh0ZXJuIHZvaWQg Y29uX2luaXQodm9pZCk7CmV4dGVybiB2b2lkIGNvbnNvbGVfaW5pdCh2b2lkKTsKCmV4dGVybiBp bnQgbHBfaW5pdCh2b2lkKTsKZXh0ZXJuIGludCBwdHlfaW5pdCh2b2lkKTsKZXh0ZXJuIHZvaWQg dHR5X2luaXQodm9pZCk7CmV4dGVybiBpbnQgbXhzZXJfaW5pdCh2b2lkKTsKZXh0ZXJuIGludCBt b3hhX2luaXQodm9pZCk7CmV4dGVybiBpbnQgaXAyX2luaXQodm9pZCk7CmV4dGVybiBpbnQgcGN4 ZV9pbml0KHZvaWQpOwpleHRlcm4gaW50IHBjX2luaXQodm9pZCk7CmV4dGVybiBpbnQgdmNzX2lu aXQodm9pZCk7CmV4dGVybiBpbnQgcnBfaW5pdCh2b2lkKTsKZXh0ZXJuIGludCBjeV9pbml0KHZv aWQpOwpleHRlcm4gaW50IHN0bF9pbml0KHZvaWQpOwpleHRlcm4gaW50IHN0bGlfaW5pdCh2b2lk KTsKZXh0ZXJuIGludCBzcGVjaWFsaXhfaW5pdCh2b2lkKTsKZXh0ZXJuIGludCBlc3BzZXJpYWxf aW5pdCh2b2lkKTsKZXh0ZXJuIGludCBtYWNzZXJpYWxfaW5pdCh2b2lkKTsKZXh0ZXJuIGludCBh MjIzMmJvYXJkX2luaXQodm9pZCk7CgpleHRlcm4gaW50IHR0eV9wYXJhbm9pYV9jaGVjayhzdHJ1 Y3QgdHR5X3N0cnVjdCAqdHR5LCBrZGV2X3QgZGV2aWNlLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBjaGFyICpyb3V0aW5lKTsKZXh0ZXJuIGNoYXIgKnR0eV9uYW1lKHN0cnVj dCB0dHlfc3RydWN0ICp0dHksIGNoYXIgKmJ1Zik7CmV4dGVybiB2b2lkIHR0eV93YWl0X3VudGls X3NlbnQoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIGxvbmcgdGltZW91dCk7CmV4dGVybiBpbnQg dHR5X2NoZWNrX2NoYW5nZShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSk7CmV4dGVybiB2b2lkIHN0 b3BfdHR5KHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KTsKZXh0ZXJuIHZvaWQgc3RhcnRfdHR5KHN0 cnVjdCB0dHlfc3RydWN0ICogdHR5KTsKZXh0ZXJuIGludCB0dHlfcmVnaXN0ZXJfbGRpc2MoaW50 IGRpc2MsIHN0cnVjdCB0dHlfbGRpc2MgKm5ld19sZGlzYyk7CmV4dGVybiBpbnQgdHR5X3JlZ2lz dGVyX2RyaXZlcihzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyKTsKZXh0ZXJuIGludCB0dHlfdW5y ZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlcik7CmV4dGVybiB2b2lkIHR0 eV9yZWdpc3Rlcl9kZXZmcyAoc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlciwgdW5zaWduZWQgaW50 IGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG1pbm9yKTsK ZXh0ZXJuIHZvaWQgdHR5X3VucmVnaXN0ZXJfZGV2ZnMgKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2 ZXIsIHVuc2lnbmVkIG1pbm9yKTsKZXh0ZXJuIGludCB0dHlfcmVhZF9yYXdfZGF0YShzdHJ1Y3Qg dHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBjaGFyICpidWZwLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBidWZsZW4pOwpleHRlcm4gdm9pZCB0dHlfd3JpdGVfbWVzc2FnZShzdHJ1 Y3QgdHR5X3N0cnVjdCAqdHR5LCBjaGFyICptc2cpOwoKZXh0ZXJuIGludCBpc19vcnBoYW5lZF9w Z3JwKGludCBwZ3JwKTsKZXh0ZXJuIGludCBpc19pZ25vcmVkKGludCBzaWcpOwpleHRlcm4gaW50 IHR0eV9zaWduYWwoaW50IHNpZywgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CmV4dGVybiB2b2lk IHR0eV9oYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkpOwpleHRlcm4gdm9pZCB0dHlfdmhh bmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSk7CmV4dGVybiB2b2lkIHR0eV91bmhhbmd1cChz dHJ1Y3QgZmlsZSAqZmlscCk7CmV4dGVybiBpbnQgdHR5X2h1bmdfdXBfcChzdHJ1Y3QgZmlsZSAq IGZpbHApOwpleHRlcm4gdm9pZCBkb19TQUsoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CmV4dGVy biB2b2lkIGRpc2Fzc29jaWF0ZV9jdHR5KGludCBwcml2KTsKZXh0ZXJuIHZvaWQgdHR5X2ZsaXBf YnVmZmVyX3B1c2goc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CmV4dGVybiBpbnQgdHR5X2dldF9i YXVkX3JhdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CgoKZXh0ZXJuIHN0cnVjdCB0dHlfbGRp c2MgdHR5X2xkaXNjX05fVFRZOwoKCmV4dGVybiBpbnQgbl90dHlfaW9jdGwoc3RydWN0IHR0eV9z dHJ1Y3QgKiB0dHksIHN0cnVjdCBmaWxlICogZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CgoKCmV4dGVybiB2b2lkIHNlcmlh bF9jb25zb2xlX2luaXQodm9pZCk7CgoKCmV4dGVybiBpbnQgcGN4ZV9vcGVuKHN0cnVjdCB0dHlf c3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKTsKCgoKZXh0ZXJuIHZvaWQgY29uc29sZV9w cmludChjb25zdCBjaGFyICopOwoKCgpleHRlcm4gaW50IHZ0X2lvY3RsKHN0cnVjdCB0dHlfc3Ry dWN0ICp0dHksIHN0cnVjdCBmaWxlICogZmlsZSwKICAgICAgICAgICAgICAgICAgICB1bnNpZ25l ZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiMgMjUgIi91c3Ivc3JjL2xpbnV4LTIuNC4x My9saW51eC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQu MTMvbGludXgvaW5jbHVkZS9saW51eC9zZW0uaCIgMQoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2lwYy5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvdHlwZXMuaCIgMQojIDUgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2lwYy5oIiAyCgoKCgpzdHJ1Y3QgaXBjX3Blcm0K ewogICAgICAgIF9fa2VybmVsX2tleV90IGtleTsKICAgICAgICBfX2tlcm5lbF91aWRfdCB1aWQ7 CiAgICAgICAgX19rZXJuZWxfZ2lkX3QgZ2lkOwogICAgICAgIF9fa2VybmVsX3VpZF90IGN1aWQ7 CiAgICAgICAgX19rZXJuZWxfZ2lkX3QgY2dpZDsKICAgICAgICBfX2tlcm5lbF9tb2RlX3QgbW9k ZTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzZXE7Cn07CgoKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMTMvbGludXgvaW5jbHVkZS9hc20vaXBjYnVmLmgiIDEKIyAxNCAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL2lwY2J1Zi5oIgpzdHJ1Y3QgaXBjNjRfcGVybQp7CiAg ICAgICAgX19rZXJuZWxfa2V5X3Qga2V5OwogICAgICAgIF9fa2VybmVsX3VpZDMyX3QgdWlkOwog ICAgICAgIF9fa2VybmVsX2dpZDMyX3QgZ2lkOwogICAgICAgIF9fa2VybmVsX3VpZDMyX3QgY3Vp ZDsKICAgICAgICBfX2tlcm5lbF9naWQzMl90IGNnaWQ7CiAgICAgICAgX19rZXJuZWxfbW9kZV90 IG1vZGU7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgX19wYWQxOwogICAgICAgIHVuc2lnbmVkIHNo b3J0IHNlcTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBfX3BhZDI7CiAgICAgICAgdW5zaWduZWQg bG9uZyBfX3VudXNlZDE7CiAgICAgICAgdW5zaWduZWQgbG9uZyBfX3VudXNlZDI7Cn07CiMgMjIg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2lwYy5oIiAyCiMgNTcg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2lwYy5oIgpzdHJ1Y3Qg a2Vybl9pcGNfcGVybQp7CiAgICAgICAga2V5X3Qga2V5OwogICAgICAgIHVpZF90IHVpZDsKICAg ICAgICBnaWRfdCBnaWQ7CiAgICAgICAgdWlkX3QgY3VpZDsKICAgICAgICBnaWRfdCBjZ2lkOwog ICAgICAgIG1vZGVfdCBtb2RlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2VxOwp9OwojIDUgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3NlbS5oIiAyCiMgMjMgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3NlbS5oIgpzdHJ1Y3Qgc2Vt aWRfZHMgewogICAgICAgIHN0cnVjdCBpcGNfcGVybSBzZW1fcGVybTsKICAgICAgICBfX2tlcm5l bF90aW1lX3Qgc2VtX290aW1lOwogICAgICAgIF9fa2VybmVsX3RpbWVfdCBzZW1fY3RpbWU7CiAg ICAgICAgc3RydWN0IHNlbSAqc2VtX2Jhc2U7CiAgICAgICAgc3RydWN0IHNlbV9xdWV1ZSAqc2Vt X3BlbmRpbmc7CiAgICAgICAgc3RydWN0IHNlbV9xdWV1ZSAqKnNlbV9wZW5kaW5nX2xhc3Q7CiAg ICAgICAgc3RydWN0IHNlbV91bmRvICp1bmRvOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHNlbV9u c2VtczsKfTsKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9z ZW1idWYuaCIgMQojIDE0ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20v c2VtYnVmLmgiCnN0cnVjdCBzZW1pZDY0X2RzIHsKICAgICAgICBzdHJ1Y3QgaXBjNjRfcGVybSBz ZW1fcGVybTsKICAgICAgICBfX2tlcm5lbF90aW1lX3Qgc2VtX290aW1lOwogICAgICAgIHVuc2ln bmVkIGxvbmcgX191bnVzZWQxOwogICAgICAgIF9fa2VybmVsX3RpbWVfdCBzZW1fY3RpbWU7CiAg ICAgICAgdW5zaWduZWQgbG9uZyBfX3VudXNlZDI7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZW1f bnNlbXM7CiAgICAgICAgdW5zaWduZWQgbG9uZyBfX3VudXNlZDM7CiAgICAgICAgdW5zaWduZWQg bG9uZyBfX3VudXNlZDQ7Cn07CiMgMzYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNs dWRlL2xpbnV4L3NlbS5oIiAyCgoKc3RydWN0IHNlbWJ1ZiB7CiAgICAgICAgdW5zaWduZWQgc2hv cnQgc2VtX251bTsKICAgICAgICBzaG9ydCBzZW1fb3A7CiAgICAgICAgc2hvcnQgc2VtX2ZsZzsK fTsKCgp1bmlvbiBzZW11biB7CiAgICAgICAgaW50IHZhbDsKICAgICAgICBzdHJ1Y3Qgc2VtaWRf ZHMgKmJ1ZjsKICAgICAgICB1bnNpZ25lZCBzaG9ydCAqYXJyYXk7CiAgICAgICAgc3RydWN0IHNl bWluZm8gKl9fYnVmOwogICAgICAgIHZvaWQgKl9fcGFkOwp9OwoKc3RydWN0IHNlbWluZm8gewog ICAgICAgIGludCBzZW1tYXA7CiAgICAgICAgaW50IHNlbW1uaTsKICAgICAgICBpbnQgc2VtbW5z OwogICAgICAgIGludCBzZW1tbnU7CiAgICAgICAgaW50IHNlbW1zbDsKICAgICAgICBpbnQgc2Vt b3BtOwogICAgICAgIGludCBzZW11bWU7CiAgICAgICAgaW50IHNlbXVzejsKICAgICAgICBpbnQg c2Vtdm14OwogICAgICAgIGludCBzZW1hZW07Cn07CiMgODIgIi91c3Ivc3JjL2xpbnV4LTIuNC4x My9saW51eC9pbmNsdWRlL2xpbnV4L3NlbS5oIgpzdHJ1Y3Qgc2VtIHsKICAgICAgICBpbnQgc2Vt dmFsOwogICAgICAgIGludCBzZW1waWQ7Cn07CgoKc3RydWN0IHNlbV9hcnJheSB7CiAgICAgICAg c3RydWN0IGtlcm5faXBjX3Blcm0gc2VtX3Blcm07CiAgICAgICAgdGltZV90IHNlbV9vdGltZTsK ICAgICAgICB0aW1lX3Qgc2VtX2N0aW1lOwogICAgICAgIHN0cnVjdCBzZW0gKnNlbV9iYXNlOwog ICAgICAgIHN0cnVjdCBzZW1fcXVldWUgKnNlbV9wZW5kaW5nOwogICAgICAgIHN0cnVjdCBzZW1f cXVldWUgKipzZW1fcGVuZGluZ19sYXN0OwogICAgICAgIHN0cnVjdCBzZW1fdW5kbyAqdW5kbzsK ICAgICAgICB1bnNpZ25lZCBsb25nIHNlbV9uc2VtczsKfTsKCgpzdHJ1Y3Qgc2VtX3F1ZXVlIHsK ICAgICAgICBzdHJ1Y3Qgc2VtX3F1ZXVlICogbmV4dDsKICAgICAgICBzdHJ1Y3Qgc2VtX3F1ZXVl ICoqIHByZXY7CiAgICAgICAgc3RydWN0IHRhc2tfc3RydWN0KiBzbGVlcGVyOwogICAgICAgIHN0 cnVjdCBzZW1fdW5kbyAqIHVuZG87CiAgICAgICAgaW50IHBpZDsKICAgICAgICBpbnQgc3RhdHVz OwogICAgICAgIHN0cnVjdCBzZW1fYXJyYXkgKiBzbWE7CiAgICAgICAgaW50IGlkOwogICAgICAg IHN0cnVjdCBzZW1idWYgKiBzb3BzOwogICAgICAgIGludCBuc29wczsKICAgICAgICBpbnQgYWx0 ZXI7Cn07CgoKCgpzdHJ1Y3Qgc2VtX3VuZG8gewogICAgICAgIHN0cnVjdCBzZW1fdW5kbyAqIHBy b2NfbmV4dDsKICAgICAgICBzdHJ1Y3Qgc2VtX3VuZG8gKiBpZF9uZXh0OwogICAgICAgIGludCBz ZW1pZDsKICAgICAgICBzaG9ydCAqIHNlbWFkajsKfTsKCiBfX2F0dHJpYnV0ZV9fKChyZWdwYXJt KDApKSkgbG9uZyBzeXNfc2VtZ2V0IChrZXlfdCBrZXksIGludCBuc2VtcywgaW50IHNlbWZsZyk7 CiBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDApKSkgbG9uZyBzeXNfc2Vtb3AgKGludCBzZW1pZCwg c3RydWN0IHNlbWJ1ZiAqc29wcywgdW5zaWduZWQgbnNvcHMpOwogX19hdHRyaWJ1dGVfXygocmVn cGFybSgwKSkpIGxvbmcgc3lzX3NlbWN0bCAoaW50IHNlbWlkLCBpbnQgc2VtbnVtLCBpbnQgY21k LCB1bmlvbiBzZW11biBhcmcpOwojIDI2ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5j bHVkZS9saW51eC9zY2hlZC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2lu Y2x1ZGUvbGludXgvc2lnbmFsLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGlu dXgvaW5jbHVkZS9hc20vc2lnbmFsLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMv bGludXgvaW5jbHVkZS9saW51eC90eXBlcy5oIiAxCiMgNSAiL3Vzci9zcmMvbGludXgtMi40LjEz L2xpbnV4L2luY2x1ZGUvYXNtL3NpZ25hbC5oIiAyCgoKc3RydWN0IHNpZ2luZm87CiMgMTcgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9zaWduYWwuaCIKdHlwZWRlZiB1 bnNpZ25lZCBsb25nIG9sZF9zaWdzZXRfdDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICB1bnNp Z25lZCBsb25nIHNpZ1soNjQgLyAzMildOwp9IHNpZ3NldF90OwojIDEyOSAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3NpZ25hbC5oIgp0eXBlZGVmIHZvaWQgKCpfX3Np Z2hhbmRsZXJfdCkoaW50KTsKCgoKCgoKc3RydWN0IG9sZF9zaWdhY3Rpb24gewogICAgICAgIF9f c2lnaGFuZGxlcl90IHNhX2hhbmRsZXI7CiAgICAgICAgb2xkX3NpZ3NldF90IHNhX21hc2s7CiAg ICAgICAgdW5zaWduZWQgbG9uZyBzYV9mbGFnczsKICAgICAgICB2b2lkICgqc2FfcmVzdG9yZXIp KHZvaWQpOwp9OwoKc3RydWN0IHNpZ2FjdGlvbiB7CiAgICAgICAgX19zaWdoYW5kbGVyX3Qgc2Ff aGFuZGxlcjsKICAgICAgICB1bnNpZ25lZCBsb25nIHNhX2ZsYWdzOwogICAgICAgIHZvaWQgKCpz YV9yZXN0b3Jlcikodm9pZCk7CiAgICAgICAgc2lnc2V0X3Qgc2FfbWFzazsKfTsKCnN0cnVjdCBr X3NpZ2FjdGlvbiB7CiAgICAgICAgc3RydWN0IHNpZ2FjdGlvbiBzYTsKfTsKIyAxNzEgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9zaWduYWwuaCIKdHlwZWRlZiBzdHJ1 Y3Qgc2lnYWx0c3RhY2sgewogICAgICAgIHZvaWQgKnNzX3NwOwogICAgICAgIGludCBzc19mbGFn czsKICAgICAgICBzaXplX3Qgc3Nfc2l6ZTsKfSBzdGFja190OwoKCiMgMSAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaCIgMQojIDE3OSAiL3Vzci9z cmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3NpZ25hbC5oIiAyCgoKCnN0YXRpYyBf X2lubGluZV9fIHZvaWQgc2lnYWRkc2V0KHNpZ3NldF90ICpzZXQsIGludCBfc2lnKQp7CiAgICAg ICAgX19hc21fXygiYnRzbCAlMSwlMCIgOiAiPW0iKCpzZXQpIDogIklyIihfc2lnIC0gMSkgOiAi Y2MiKTsKfQoKc3RhdGljIF9faW5saW5lX18gdm9pZCBzaWdkZWxzZXQoc2lnc2V0X3QgKnNldCwg aW50IF9zaWcpCnsKICAgICAgICBfX2FzbV9fKCJidHJsICUxLCUwIiA6ICI9bSIoKnNldCkgOiAi SXIiKF9zaWcgLSAxKSA6ICJjYyIpOwp9CgpzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19jb25zdF9z aWdpc21lbWJlcihzaWdzZXRfdCAqc2V0LCBpbnQgX3NpZykKewogICAgICAgIHVuc2lnbmVkIGxv bmcgc2lnID0gX3NpZyAtIDE7CiAgICAgICAgcmV0dXJuIDEgJiAoc2V0LT5zaWdbc2lnIC8gMzJd ID4+IChzaWcgJSAzMikpOwp9CgpzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19nZW5fc2lnaXNtZW1i ZXIoc2lnc2V0X3QgKnNldCwgaW50IF9zaWcpCnsKICAgICAgICBpbnQgcmV0OwogICAgICAgIF9f YXNtX18oImJ0bCAlMiwlMVxuXHRzYmJsICUwLCUwIgogICAgICAgICAgICAgICAgOiAiPXIiKHJl dCkgOiAibSIoKnNldCksICJJciIoX3NpZy0xKSA6ICJjYyIpOwogICAgICAgIHJldHVybiByZXQ7 Cn0KIyAyMTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9zaWduYWwu aCIKc3RhdGljIF9faW5saW5lX18gaW50IHNpZ2ZpbmRpbndvcmQodW5zaWduZWQgbG9uZyB3b3Jk KQp7CiAgICAgICAgX19hc21fXygiYnNmbCAlMSwlMCIgOiAiPXIiKHdvcmQpIDogInJtIih3b3Jk KSA6ICJjYyIpOwogICAgICAgIHJldHVybiB3b3JkOwp9CiMgNSAiL3Vzci9zcmMvbGludXgtMi40 LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc2lnbmFsLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMTMvbGludXgvaW5jbHVkZS9hc20vc2lnaW5mby5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvdHlwZXMuaCIgMQojIDUgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9zaWdpbmZvLmgiIDIKCgoKdHlwZWRlZiB1bmlv biBzaWd2YWwgewogICAgICAgIGludCBzaXZhbF9pbnQ7CiAgICAgICAgdm9pZCAqc2l2YWxfcHRy Owp9IHNpZ3ZhbF90OwoKCgoKdHlwZWRlZiBzdHJ1Y3Qgc2lnaW5mbyB7CiAgICAgICAgaW50IHNp X3NpZ25vOwogICAgICAgIGludCBzaV9lcnJubzsKICAgICAgICBpbnQgc2lfY29kZTsKCiAgICAg ICAgdW5pb24gewogICAgICAgICAgICAgICAgaW50IF9wYWRbKCgxMjgvc2l6ZW9mKGludCkpIC0g MyldOwoKCiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICBw aWRfdCBfcGlkOwogICAgICAgICAgICAgICAgICAgICAgICB1aWRfdCBfdWlkOwogICAgICAgICAg ICAgICAgfSBfa2lsbDsKCgogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgaW50IF90aW1lcjE7CiAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGludCBfdGltZXIyOwogICAgICAgICAgICAgICAgfSBfdGltZXI7CgoKICAgICAgICAg ICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBpZF90IF9waWQ7CiAgICAg ICAgICAgICAgICAgICAgICAgIHVpZF90IF91aWQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHNp Z3ZhbF90IF9zaWd2YWw7CiAgICAgICAgICAgICAgICB9IF9ydDsKCgogICAgICAgICAgICAgICAg c3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgcGlkX3QgX3BpZDsKICAgICAgICAgICAg ICAgICAgICAgICAgdWlkX3QgX3VpZDsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9zdGF0 dXM7CiAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrX3QgX3V0aW1lOwogICAgICAgICAgICAg ICAgICAgICAgICBjbG9ja190IF9zdGltZTsKICAgICAgICAgICAgICAgIH0gX3NpZ2NobGQ7CgoK ICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9h ZGRyOwogICAgICAgICAgICAgICAgfSBfc2lnZmF1bHQ7CgoKICAgICAgICAgICAgICAgIHN0cnVj dCB7CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBfYmFuZDsKICAgICAgICAgICAgICAgICAg ICAgICAgaW50IF9mZDsKICAgICAgICAgICAgICAgIH0gX3NpZ3BvbGw7CiAgICAgICAgfSBfc2lm aWVsZHM7Cn0gc2lnaW5mb190OwojIDE5OSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2lu Y2x1ZGUvYXNtL3NpZ2luZm8uaCIKdHlwZWRlZiBzdHJ1Y3Qgc2lnZXZlbnQgewogICAgICAgIHNp Z3ZhbF90IHNpZ2V2X3ZhbHVlOwogICAgICAgIGludCBzaWdldl9zaWdubzsKICAgICAgICBpbnQg c2lnZXZfbm90aWZ5OwogICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgIGludCBfcGFkWygo NjQvc2l6ZW9mKGludCkpIC0gMyldOwoKICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAg ICAgICAgICAgICAgICAgIHZvaWQgKCpfZnVuY3Rpb24pKHNpZ3ZhbF90KTsKICAgICAgICAgICAg ICAgICAgICAgICAgdm9pZCAqX2F0dHJpYnV0ZTsKICAgICAgICAgICAgICAgIH0gX3NpZ2V2X3Ro cmVhZDsKICAgICAgICB9IF9zaWdldl91bjsKfSBzaWdldmVudF90OwoKCgoKCiMgMSAiL3Vzci9z cmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc3RyaW5nLmgiIDEKIyAyMTggIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9zaWdpbmZvLmgiIDIKCnN0YXRp YyBpbmxpbmUgdm9pZCBjb3B5X3NpZ2luZm8oc2lnaW5mb190ICp0bywgc2lnaW5mb190ICpmcm9t KQp7CiAgICAgICAgaWYgKGZyb20tPnNpX2NvZGUgPCAwKQogICAgICAgICAgICAgICAgKF9fYnVp bHRpbl9jb25zdGFudF9wKHNpemVvZihzaWdpbmZvX3QpKSA/IF9fY29uc3RhbnRfbWVtY3B5KCh0 byksKGZyb20pLChzaXplb2Yoc2lnaW5mb190KSkpIDogX19tZW1jcHkoKHRvKSwoZnJvbSksKHNp emVvZihzaWdpbmZvX3QpKSkpOwogICAgICAgIGVsc2UKCiAgICAgICAgICAgICAgICAoX19idWls dGluX2NvbnN0YW50X3AoMypzaXplb2YoaW50KSArIHNpemVvZihmcm9tLT5fc2lmaWVsZHMuX3Np Z2NobGQpKSA/IF9fY29uc3RhbnRfbWVtY3B5KCh0byksKGZyb20pLCgzKnNpemVvZihpbnQpICsg c2l6ZW9mKGZyb20tPl9zaWZpZWxkcy5fc2lnY2hsZCkpKSA6IF9fbWVtY3B5KCh0byksKGZyb20p LCgzKnNpemVvZihpbnQpICsgc2l6ZW9mKGZyb20tPl9zaWZpZWxkcy5fc2lnY2hsZCkpKSk7Cn0K CmV4dGVybiBpbnQgY29weV9zaWdpbmZvX3RvX3VzZXIoc2lnaW5mb190ICp0bywgc2lnaW5mb190 ICpmcm9tKTsKIyA2ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9z aWduYWwuaCIgMgoKCgoKCgpzdHJ1Y3Qgc2lncXVldWUgewogICAgICAgIHN0cnVjdCBzaWdxdWV1 ZSAqbmV4dDsKICAgICAgICBzaWdpbmZvX3QgaW5mbzsKfTsKCnN0cnVjdCBzaWdwZW5kaW5nIHsK ICAgICAgICBzdHJ1Y3Qgc2lncXVldWUgKmhlYWQsICoqdGFpbDsKICAgICAgICBzaWdzZXRfdCBz aWduYWw7Cn07CiMgNjggIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4 L3NpZ25hbC5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4 L3N0cmluZy5oIiAxCiMgNjkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xp bnV4L3NpZ25hbC5oIiAyCiMgMTA4ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVk ZS9saW51eC9zaWduYWwuaCIKc3RhdGljIGlubGluZSB2b2lkIHNpZ29yc2V0cyhzaWdzZXRfdCAq ciwgY29uc3Qgc2lnc2V0X3QgKmEsIGNvbnN0IHNpZ3NldF90ICpiKSB7IHVuc2lnbmVkIGxvbmcg YTAsIGExLCBhMiwgYTMsIGIwLCBiMSwgYjIsIGIzOyB1bnNpZ25lZCBsb25nIGk7IGZvciAoaSA9 IDA7IGkgPCAoNjQgLyAzMikvNDsgKytpKSB7IGEwID0gYS0+c2lnWzQqaSswXTsgYTEgPSBhLT5z aWdbNCppKzFdOyBhMiA9IGEtPnNpZ1s0KmkrMl07IGEzID0gYS0+c2lnWzQqaSszXTsgYjAgPSBi LT5zaWdbNCppKzBdOyBiMSA9IGItPnNpZ1s0KmkrMV07IGIyID0gYi0+c2lnWzQqaSsyXTsgYjMg PSBiLT5zaWdbNCppKzNdOyByLT5zaWdbNCppKzBdID0gKChhMCkgfCAoYjApKTsgci0+c2lnWzQq aSsxXSA9ICgoYTEpIHwgKGIxKSk7IHItPnNpZ1s0KmkrMl0gPSAoKGEyKSB8IChiMikpOyByLT5z aWdbNCppKzNdID0gKChhMykgfCAoYjMpKTsgfSBzd2l0Y2ggKCg2NCAvIDMyKSAlIDQpIHsgY2Fz ZSAzOiBhMCA9IGEtPnNpZ1s0KmkrMF07IGExID0gYS0+c2lnWzQqaSsxXTsgYTIgPSBhLT5zaWdb NCppKzJdOyBiMCA9IGItPnNpZ1s0KmkrMF07IGIxID0gYi0+c2lnWzQqaSsxXTsgYjIgPSBiLT5z aWdbNCppKzJdOyByLT5zaWdbNCppKzBdID0gKChhMCkgfCAoYjApKTsgci0+c2lnWzQqaSsxXSA9 ICgoYTEpIHwgKGIxKSk7IHItPnNpZ1s0KmkrMl0gPSAoKGEyKSB8IChiMikpOyBicmVhazsgY2Fz ZSAyOiBhMCA9IGEtPnNpZ1s0KmkrMF07IGExID0gYS0+c2lnWzQqaSsxXTsgYjAgPSBiLT5zaWdb NCppKzBdOyBiMSA9IGItPnNpZ1s0KmkrMV07IHItPnNpZ1s0KmkrMF0gPSAoKGEwKSB8IChiMCkp OyByLT5zaWdbNCppKzFdID0gKChhMSkgfCAoYjEpKTsgYnJlYWs7IGNhc2UgMTogYTAgPSBhLT5z aWdbNCppKzBdOyBiMCA9IGItPnNpZ1s0KmkrMF07IHItPnNpZ1s0KmkrMF0gPSAoKGEwKSB8IChi MCkpOyBicmVhazsgfSB9CgoKc3RhdGljIGlubGluZSB2b2lkIHNpZ2FuZHNldHMoc2lnc2V0X3Qg KnIsIGNvbnN0IHNpZ3NldF90ICphLCBjb25zdCBzaWdzZXRfdCAqYikgeyB1bnNpZ25lZCBsb25n IGEwLCBhMSwgYTIsIGEzLCBiMCwgYjEsIGIyLCBiMzsgdW5zaWduZWQgbG9uZyBpOyBmb3IgKGkg PSAwOyBpIDwgKDY0IC8gMzIpLzQ7ICsraSkgeyBhMCA9IGEtPnNpZ1s0KmkrMF07IGExID0gYS0+ c2lnWzQqaSsxXTsgYTIgPSBhLT5zaWdbNCppKzJdOyBhMyA9IGEtPnNpZ1s0KmkrM107IGIwID0g Yi0+c2lnWzQqaSswXTsgYjEgPSBiLT5zaWdbNCppKzFdOyBiMiA9IGItPnNpZ1s0KmkrMl07IGIz ID0gYi0+c2lnWzQqaSszXTsgci0+c2lnWzQqaSswXSA9ICgoYTApICYgKGIwKSk7IHItPnNpZ1s0 KmkrMV0gPSAoKGExKSAmIChiMSkpOyByLT5zaWdbNCppKzJdID0gKChhMikgJiAoYjIpKTsgci0+ c2lnWzQqaSszXSA9ICgoYTMpICYgKGIzKSk7IH0gc3dpdGNoICgoNjQgLyAzMikgJSA0KSB7IGNh c2UgMzogYTAgPSBhLT5zaWdbNCppKzBdOyBhMSA9IGEtPnNpZ1s0KmkrMV07IGEyID0gYS0+c2ln WzQqaSsyXTsgYjAgPSBiLT5zaWdbNCppKzBdOyBiMSA9IGItPnNpZ1s0KmkrMV07IGIyID0gYi0+ c2lnWzQqaSsyXTsgci0+c2lnWzQqaSswXSA9ICgoYTApICYgKGIwKSk7IHItPnNpZ1s0KmkrMV0g PSAoKGExKSAmIChiMSkpOyByLT5zaWdbNCppKzJdID0gKChhMikgJiAoYjIpKTsgYnJlYWs7IGNh c2UgMjogYTAgPSBhLT5zaWdbNCppKzBdOyBhMSA9IGEtPnNpZ1s0KmkrMV07IGIwID0gYi0+c2ln WzQqaSswXTsgYjEgPSBiLT5zaWdbNCppKzFdOyByLT5zaWdbNCppKzBdID0gKChhMCkgJiAoYjAp KTsgci0+c2lnWzQqaSsxXSA9ICgoYTEpICYgKGIxKSk7IGJyZWFrOyBjYXNlIDE6IGEwID0gYS0+ c2lnWzQqaSswXTsgYjAgPSBiLT5zaWdbNCppKzBdOyByLT5zaWdbNCppKzBdID0gKChhMCkgJiAo YjApKTsgYnJlYWs7IH0gfQoKCnN0YXRpYyBpbmxpbmUgdm9pZCBzaWduYW5kc2V0cyhzaWdzZXRf dCAqciwgY29uc3Qgc2lnc2V0X3QgKmEsIGNvbnN0IHNpZ3NldF90ICpiKSB7IHVuc2lnbmVkIGxv bmcgYTAsIGExLCBhMiwgYTMsIGIwLCBiMSwgYjIsIGIzOyB1bnNpZ25lZCBsb25nIGk7IGZvciAo aSA9IDA7IGkgPCAoNjQgLyAzMikvNDsgKytpKSB7IGEwID0gYS0+c2lnWzQqaSswXTsgYTEgPSBh LT5zaWdbNCppKzFdOyBhMiA9IGEtPnNpZ1s0KmkrMl07IGEzID0gYS0+c2lnWzQqaSszXTsgYjAg PSBiLT5zaWdbNCppKzBdOyBiMSA9IGItPnNpZ1s0KmkrMV07IGIyID0gYi0+c2lnWzQqaSsyXTsg YjMgPSBiLT5zaWdbNCppKzNdOyByLT5zaWdbNCppKzBdID0gKChhMCkgJiB+KGIwKSk7IHItPnNp Z1s0KmkrMV0gPSAoKGExKSAmIH4oYjEpKTsgci0+c2lnWzQqaSsyXSA9ICgoYTIpICYgfihiMikp OyByLT5zaWdbNCppKzNdID0gKChhMykgJiB+KGIzKSk7IH0gc3dpdGNoICgoNjQgLyAzMikgJSA0 KSB7IGNhc2UgMzogYTAgPSBhLT5zaWdbNCppKzBdOyBhMSA9IGEtPnNpZ1s0KmkrMV07IGEyID0g YS0+c2lnWzQqaSsyXTsgYjAgPSBiLT5zaWdbNCppKzBdOyBiMSA9IGItPnNpZ1s0KmkrMV07IGIy ID0gYi0+c2lnWzQqaSsyXTsgci0+c2lnWzQqaSswXSA9ICgoYTApICYgfihiMCkpOyByLT5zaWdb NCppKzFdID0gKChhMSkgJiB+KGIxKSk7IHItPnNpZ1s0KmkrMl0gPSAoKGEyKSAmIH4oYjIpKTsg YnJlYWs7IGNhc2UgMjogYTAgPSBhLT5zaWdbNCppKzBdOyBhMSA9IGEtPnNpZ1s0KmkrMV07IGIw ID0gYi0+c2lnWzQqaSswXTsgYjEgPSBiLT5zaWdbNCppKzFdOyByLT5zaWdbNCppKzBdID0gKChh MCkgJiB+KGIwKSk7IHItPnNpZ1s0KmkrMV0gPSAoKGExKSAmIH4oYjEpKTsgYnJlYWs7IGNhc2Ug MTogYTAgPSBhLT5zaWdbNCppKzBdOyBiMCA9IGItPnNpZ1s0KmkrMF07IHItPnNpZ1s0KmkrMF0g PSAoKGEwKSAmIH4oYjApKTsgYnJlYWs7IH0gfQojIDE0MCAiL3Vzci9zcmMvbGludXgtMi40LjEz L2xpbnV4L2luY2x1ZGUvbGludXgvc2lnbmFsLmgiCnN0YXRpYyBpbmxpbmUgdm9pZCBzaWdub3Rz ZXQoc2lnc2V0X3QgKnNldCkgeyB1bnNpZ25lZCBsb25nIGk7IGZvciAoaSA9IDA7IGkgPCAoNjQg LyAzMikvNDsgKytpKSB7IHNldC0+c2lnWzQqaSswXSA9ICh+KHNldC0+c2lnWzQqaSswXSkpOyBz ZXQtPnNpZ1s0KmkrMV0gPSAofihzZXQtPnNpZ1s0KmkrMV0pKTsgc2V0LT5zaWdbNCppKzJdID0g KH4oc2V0LT5zaWdbNCppKzJdKSk7IHNldC0+c2lnWzQqaSszXSA9ICh+KHNldC0+c2lnWzQqaSsz XSkpOyB9IHN3aXRjaCAoKDY0IC8gMzIpICUgNCkgeyBjYXNlIDM6IHNldC0+c2lnWzQqaSsyXSA9 ICh+KHNldC0+c2lnWzQqaSsyXSkpOyBjYXNlIDI6IHNldC0+c2lnWzQqaSsxXSA9ICh+KHNldC0+ c2lnWzQqaSsxXSkpOyBjYXNlIDE6IHNldC0+c2lnWzQqaSswXSA9ICh+KHNldC0+c2lnWzQqaSsw XSkpOyB9IH0KCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBzaWdlbXB0eXNldChzaWdzZXRfdCAqc2V0 KQp7CiAgICAgICAgc3dpdGNoICgoNjQgLyAzMikpIHsKICAgICAgICBkZWZhdWx0OgogICAgICAg ICAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKDApID8gKF9fYnVpbHRpbl9jb25zdGFudF9w KChzaXplb2Yoc2lnc2V0X3QpKSkgPyBfX2NvbnN0YW50X2NfYW5kX2NvdW50X21lbXNldCgoKHNl dCkpLCgoMHgwMTAxMDEwMVVMKih1bnNpZ25lZCBjaGFyKSgwKSkpLCgoc2l6ZW9mKHNpZ3NldF90 KSkpKSA6IF9fY29uc3RhbnRfY19tZW1zZXQoKChzZXQpKSwoKDB4MDEwMTAxMDFVTCoodW5zaWdu ZWQgY2hhcikoMCkpKSwoKHNpemVvZihzaWdzZXRfdCkpKSkpIDogKF9fYnVpbHRpbl9jb25zdGFu dF9wKChzaXplb2Yoc2lnc2V0X3QpKSkgPyBfX21lbXNldF9nZW5lcmljKCgoKHNldCkpKSwoKCgw KSkpLCgoKHNpemVvZihzaWdzZXRfdCkpKSkpIDogX19tZW1zZXRfZ2VuZXJpYygoKHNldCkpLCgo MCkpLCgoc2l6ZW9mKHNpZ3NldF90KSkpKSkpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgY2FzZSAyOiBzZXQtPnNpZ1sxXSA9IDA7CiAgICAgICAgY2FzZSAxOiBzZXQtPnNpZ1swXSA9 IDA7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9Cn0KCnN0YXRpYyBpbmxpbmUgdm9p ZCBzaWdmaWxsc2V0KHNpZ3NldF90ICpzZXQpCnsKICAgICAgICBzd2l0Y2ggKCg2NCAvIDMyKSkg ewogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAoX19idWlsdGluX2NvbnN0YW50X3Ao LTEpID8gKF9fYnVpbHRpbl9jb25zdGFudF9wKChzaXplb2Yoc2lnc2V0X3QpKSkgPyBfX2NvbnN0 YW50X2NfYW5kX2NvdW50X21lbXNldCgoKHNldCkpLCgoMHgwMTAxMDEwMVVMKih1bnNpZ25lZCBj aGFyKSgtMSkpKSwoKHNpemVvZihzaWdzZXRfdCkpKSkgOiBfX2NvbnN0YW50X2NfbWVtc2V0KCgo c2V0KSksKCgweDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIpKC0xKSkpLCgoc2l6ZW9mKHNpZ3Nl dF90KSkpKSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AoKHNpemVvZihzaWdzZXRfdCkpKSA/IF9f bWVtc2V0X2dlbmVyaWMoKCgoc2V0KSkpLCgoKC0xKSkpLCgoKHNpemVvZihzaWdzZXRfdCkpKSkp IDogX19tZW1zZXRfZ2VuZXJpYygoKHNldCkpLCgoLTEpKSwoKHNpemVvZihzaWdzZXRfdCkpKSkp KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMjogc2V0LT5zaWdbMV0gPSAt MTsKICAgICAgICBjYXNlIDE6IHNldC0+c2lnWzBdID0gLTE7CiAgICAgICAgICAgICAgICBicmVh azsKICAgICAgICB9Cn0KCmV4dGVybiBjaGFyICogcmVuZGVyX3NpZ3NldF90KHNpZ3NldF90ICpz ZXQsIGNoYXIgKmJ1ZmZlcik7CgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBzaWdhZGRzZXRtYXNrKHNp Z3NldF90ICpzZXQsIHVuc2lnbmVkIGxvbmcgbWFzaykKewogICAgICAgIHNldC0+c2lnWzBdIHw9 IG1hc2s7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBzaWdkZWxzZXRtYXNrKHNpZ3NldF90ICpzZXQs IHVuc2lnbmVkIGxvbmcgbWFzaykKewogICAgICAgIHNldC0+c2lnWzBdICY9IH5tYXNrOwp9Cgpz dGF0aWMgaW5saW5lIGludCBzaWd0ZXN0c2V0bWFzayhzaWdzZXRfdCAqc2V0LCB1bnNpZ25lZCBs b25nIG1hc2spCnsKICAgICAgICByZXR1cm4gKHNldC0+c2lnWzBdICYgbWFzaykgIT0gMDsKfQoK c3RhdGljIGlubGluZSB2b2lkIHNpZ2luaXRzZXQoc2lnc2V0X3QgKnNldCwgdW5zaWduZWQgbG9u ZyBtYXNrKQp7CiAgICAgICAgc2V0LT5zaWdbMF0gPSBtYXNrOwogICAgICAgIHN3aXRjaCAoKDY0 IC8gMzIpKSB7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIChfX2J1aWx0aW5fY29u c3RhbnRfcCgwKSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCgoc2l6ZW9mKGxvbmcpKigoNjQgLyAz MiktMSkpKSA/IF9fY29uc3RhbnRfY19hbmRfY291bnRfbWVtc2V0KCgoJnNldC0+c2lnWzFdKSks KCgweDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIpKDApKSksKChzaXplb2YobG9uZykqKCg2NCAv IDMyKS0xKSkpKSA6IF9fY29uc3RhbnRfY19tZW1zZXQoKCgmc2V0LT5zaWdbMV0pKSwoKDB4MDEw MTAxMDFVTCoodW5zaWduZWQgY2hhcikoMCkpKSwoKHNpemVvZihsb25nKSooKDY0IC8gMzIpLTEp KSkpKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCgoc2l6ZW9mKGxvbmcpKigoNjQgLyAzMiktMSkp KSA/IF9fbWVtc2V0X2dlbmVyaWMoKCgoJnNldC0+c2lnWzFdKSkpLCgoKDApKSksKCgoc2l6ZW9m KGxvbmcpKigoNjQgLyAzMiktMSkpKSkpIDogX19tZW1zZXRfZ2VuZXJpYygoKCZzZXQtPnNpZ1sx XSkpLCgoMCkpLCgoc2l6ZW9mKGxvbmcpKigoNjQgLyAzMiktMSkpKSkpKTsKICAgICAgICAgICAg ICAgIGJyZWFrOwogICAgICAgIGNhc2UgMjogc2V0LT5zaWdbMV0gPSAwOwogICAgICAgIGNhc2Ug MTogOwogICAgICAgIH0KfQoKc3RhdGljIGlubGluZSB2b2lkIHNpZ2luaXRzZXRpbnYoc2lnc2V0 X3QgKnNldCwgdW5zaWduZWQgbG9uZyBtYXNrKQp7CiAgICAgICAgc2V0LT5zaWdbMF0gPSB+bWFz azsKICAgICAgICBzd2l0Y2ggKCg2NCAvIDMyKSkgewogICAgICAgIGRlZmF1bHQ6CiAgICAgICAg ICAgICAgICAoX19idWlsdGluX2NvbnN0YW50X3AoLTEpID8gKF9fYnVpbHRpbl9jb25zdGFudF9w KChzaXplb2YobG9uZykqKCg2NCAvIDMyKS0xKSkpID8gX19jb25zdGFudF9jX2FuZF9jb3VudF9t ZW1zZXQoKCgmc2V0LT5zaWdbMV0pKSwoKDB4MDEwMTAxMDFVTCoodW5zaWduZWQgY2hhcikoLTEp KSksKChzaXplb2YobG9uZykqKCg2NCAvIDMyKS0xKSkpKSA6IF9fY29uc3RhbnRfY19tZW1zZXQo KCgmc2V0LT5zaWdbMV0pKSwoKDB4MDEwMTAxMDFVTCoodW5zaWduZWQgY2hhcikoLTEpKSksKChz aXplb2YobG9uZykqKCg2NCAvIDMyKS0xKSkpKSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AoKHNp emVvZihsb25nKSooKDY0IC8gMzIpLTEpKSkgPyBfX21lbXNldF9nZW5lcmljKCgoKCZzZXQtPnNp Z1sxXSkpKSwoKCgtMSkpKSwoKChzaXplb2YobG9uZykqKCg2NCAvIDMyKS0xKSkpKSkgOiBfX21l bXNldF9nZW5lcmljKCgoJnNldC0+c2lnWzFdKSksKCgtMSkpLCgoc2l6ZW9mKGxvbmcpKigoNjQg LyAzMiktMSkpKSkpKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMjogc2V0 LT5zaWdbMV0gPSAtMTsKICAgICAgICBjYXNlIDE6IDsKICAgICAgICB9Cn0KCgoKc3RhdGljIGlu bGluZSB2b2lkIGluaXRfc2lncGVuZGluZyhzdHJ1Y3Qgc2lncGVuZGluZyAqc2lnKQp7CiAgICAg ICAgc2lnZW1wdHlzZXQoJnNpZy0+c2lnbmFsKTsKICAgICAgICBzaWctPmhlYWQgPSAoKHZvaWQg KikwKTsKICAgICAgICBzaWctPnRhaWwgPSAmc2lnLT5oZWFkOwp9CgpleHRlcm4gbG9uZyBkb19z aWdwZW5kaW5nKHZvaWQgKiwgdW5zaWduZWQgbG9uZyk7CiMgMjcgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9zZWN1cmViaXRzLmgiIDEKCgoKCgpleHRlcm4gdW5z aWduZWQgc2VjdXJlYml0czsKIyAyOCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1 ZGUvbGludXgvc2NoZWQuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNs dWRlL2xpbnV4L2ZzX3N0cnVjdC5oIiAxCgoKCgpzdHJ1Y3QgZnNfc3RydWN0IHsKICAgICAgICBh dG9taWNfdCBjb3VudDsKICAgICAgICByd2xvY2tfdCBsb2NrOwogICAgICAgIGludCB1bWFzazsK ICAgICAgICBzdHJ1Y3QgZGVudHJ5ICogcm9vdCwgKiBwd2QsICogYWx0cm9vdDsKICAgICAgICBz dHJ1Y3QgdmZzbW91bnQgKiByb290bW50LCAqIHB3ZG1udCwgKiBhbHRyb290bW50Owp9OwojIDIw ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaCIK ZXh0ZXJuIHZvaWQgZXhpdF9mcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CmV4dGVybiB2b2lkIHNl dF9mc19hbHRyb290KHZvaWQpOwoKCgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2ZzX3Jvb3Qo c3RydWN0IGZzX3N0cnVjdCAqZnMsCiAgICAgICAgc3RydWN0IHZmc21vdW50ICptbnQsCiAgICAg ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQp7CiAgICAgICAgc3RydWN0IGRlbnRyeSAqb2xkX3Jv b3Q7CiAgICAgICAgc3RydWN0IHZmc21vdW50ICpvbGRfcm9vdG1udDsKICAgICAgICB3cml0ZV9s b2NrKCZmcy0+bG9jayk7CiAgICAgICAgb2xkX3Jvb3QgPSBmcy0+cm9vdDsKICAgICAgICBvbGRf cm9vdG1udCA9IGZzLT5yb290bW50OwogICAgICAgIGZzLT5yb290bW50ID0gbW50Z2V0KG1udCk7 CiAgICAgICAgZnMtPnJvb3QgPSBkZ2V0KGRlbnRyeSk7CiAgICAgICAgYXNtIHZvbGF0aWxlKCJs b2NrIDsgYWRkbCAkIiAiMHgwMTAwMDAwMCIgIiwlMCI6Ij1tIiAoKCZmcy0+bG9jayktPmxvY2sp IDogOiAibWVtb3J5Iik7CiAgICAgICAgaWYgKG9sZF9yb290KSB7CiAgICAgICAgICAgICAgICBk cHV0KG9sZF9yb290KTsKICAgICAgICAgICAgICAgIG1udHB1dChvbGRfcm9vdG1udCk7CiAgICAg ICAgfQp9CgoKCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZnNfcHdkKHN0cnVjdCBmc19zdHJ1 Y3QgKmZzLAogICAgICAgIHN0cnVjdCB2ZnNtb3VudCAqbW50LAogICAgICAgIHN0cnVjdCBkZW50 cnkgKmRlbnRyeSkKewogICAgICAgIHN0cnVjdCBkZW50cnkgKm9sZF9wd2Q7CiAgICAgICAgc3Ry dWN0IHZmc21vdW50ICpvbGRfcHdkbW50OwogICAgICAgIHdyaXRlX2xvY2soJmZzLT5sb2NrKTsK ICAgICAgICBvbGRfcHdkID0gZnMtPnB3ZDsKICAgICAgICBvbGRfcHdkbW50ID0gZnMtPnB3ZG1u dDsKICAgICAgICBmcy0+cHdkbW50ID0gbW50Z2V0KG1udCk7CiAgICAgICAgZnMtPnB3ZCA9IGRn ZXQoZGVudHJ5KTsKICAgICAgICBhc20gdm9sYXRpbGUoImxvY2sgOyBhZGRsICQiICIweDAxMDAw MDAwIiAiLCUwIjoiPW0iICgoJmZzLT5sb2NrKS0+bG9jaykgOiA6ICJtZW1vcnkiKTsKICAgICAg ICBpZiAob2xkX3B3ZCkgewogICAgICAgICAgICAgICAgZHB1dChvbGRfcHdkKTsKICAgICAgICAg ICAgICAgIG1udHB1dChvbGRfcHdkbW50KTsKICAgICAgICB9Cn0KCnN0cnVjdCBmc19zdHJ1Y3Qg KmNvcHlfZnNfc3RydWN0KHN0cnVjdCBmc19zdHJ1Y3QgKm9sZCk7CnZvaWQgcHV0X2ZzX3N0cnVj dChzdHJ1Y3QgZnNfc3RydWN0ICpmcyk7CiMgMjkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51 eC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIKCnN0cnVjdCBleGVjX2RvbWFpbjsKIyA1OCAiL3Vz ci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc2NoZWQuaCIKZXh0ZXJuIHVu c2lnbmVkIGxvbmcgYXZlbnJ1bltdOwojIDc1ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgv aW5jbHVkZS9saW51eC9zY2hlZC5oIgpleHRlcm4gaW50IG5yX3J1bm5pbmcsIG5yX3RocmVhZHM7 CmV4dGVybiBpbnQgbGFzdF9waWQ7CgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9p bmNsdWRlL2xpbnV4L2ZzLmgiIDEKIyA3OSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2lu Y2x1ZGUvbGludXgvc2NoZWQuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9p bmNsdWRlL2xpbnV4L3RpbWUuaCIgMQojIDgwICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgv aW5jbHVkZS9saW51eC9zY2hlZC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4 L2luY2x1ZGUvbGludXgvcGFyYW0uaCIgMQoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9s aW51eC9pbmNsdWRlL2FzbS9wYXJhbS5oIiAxCiMgNSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xp bnV4L2luY2x1ZGUvbGludXgvcGFyYW0uaCIgMgojIDgxICIvdXNyL3NyYy9saW51eC0yLjQuMTMv bGludXgvaW5jbHVkZS9saW51eC9zY2hlZC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEz L2xpbnV4L2luY2x1ZGUvbGludXgvcmVzb3VyY2UuaCIgMQoKCgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3RpbWUuaCIgMQojIDUgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3Jlc291cmNlLmgiIDIKIyAyMSAiL3Vzci9zcmMv bGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvcmVzb3VyY2UuaCIKc3RydWN0IHJ1c2Fn ZSB7CiAgICAgICAgc3RydWN0IHRpbWV2YWwgcnVfdXRpbWU7CiAgICAgICAgc3RydWN0IHRpbWV2 YWwgcnVfc3RpbWU7CiAgICAgICAgbG9uZyBydV9tYXhyc3M7CiAgICAgICAgbG9uZyBydV9peHJz czsKICAgICAgICBsb25nIHJ1X2lkcnNzOwogICAgICAgIGxvbmcgcnVfaXNyc3M7CiAgICAgICAg bG9uZyBydV9taW5mbHQ7CiAgICAgICAgbG9uZyBydV9tYWpmbHQ7CiAgICAgICAgbG9uZyBydV9u c3dhcDsKICAgICAgICBsb25nIHJ1X2luYmxvY2s7CiAgICAgICAgbG9uZyBydV9vdWJsb2NrOwog ICAgICAgIGxvbmcgcnVfbXNnc25kOwogICAgICAgIGxvbmcgcnVfbXNncmN2OwogICAgICAgIGxv bmcgcnVfbnNpZ25hbHM7CiAgICAgICAgbG9uZyBydV9udmNzdzsKICAgICAgICBsb25nIHJ1X25p dmNzdzsKfTsKCnN0cnVjdCBybGltaXQgewogICAgICAgIHVuc2lnbmVkIGxvbmcgcmxpbV9jdXI7 CiAgICAgICAgdW5zaWduZWQgbG9uZyBybGltX21heDsKfTsKIyA1NiAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvcmVzb3VyY2UuaCIKIyAxICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vcmVzb3VyY2UuaCIgMQojIDU3ICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9yZXNvdXJjZS5oIiAyCiMgODIgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIKIyAxICIvdXNy L3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC90aW1lci5oIiAxCgoKCiMgMSAi L3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvY29uZmlnLmgiIDEKIyA1 ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC90aW1lci5oIiAyCiMg MSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvbGlzdC5oIiAxCiMg NiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvdGltZXIuaCIgMgoj IDE2ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC90aW1lci5oIgpz dHJ1Y3QgdGltZXJfbGlzdCB7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogICAgICAg IHVuc2lnbmVkIGxvbmcgZXhwaXJlczsKICAgICAgICB1bnNpZ25lZCBsb25nIGRhdGE7CiAgICAg ICAgdm9pZCAoKmZ1bmN0aW9uKSh1bnNpZ25lZCBsb25nKTsKfTsKCmV4dGVybiB2b2lkIGFkZF90 aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqIHRpbWVyKTsKZXh0ZXJuIGludCBkZWxfdGltZXIoc3Ry dWN0IHRpbWVyX2xpc3QgKiB0aW1lcik7CgoKZXh0ZXJuIGludCBkZWxfdGltZXJfc3luYyhzdHJ1 Y3QgdGltZXJfbGlzdCAqIHRpbWVyKTsKZXh0ZXJuIHZvaWQgc3luY190aW1lcnModm9pZCk7CiMg NDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3RpbWVyLmgiCmlu dCBtb2RfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLCB1bnNpZ25lZCBsb25nIGV4cGly ZXMpOwoKZXh0ZXJuIHZvaWQgaXRfcmVhbF9mbih1bnNpZ25lZCBsb25nKTsKCnN0YXRpYyBpbmxp bmUgdm9pZCBpbml0X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICogdGltZXIpCnsKICAgICAgICB0 aW1lci0+bGlzdC5uZXh0ID0gdGltZXItPmxpc3QucHJldiA9ICgodm9pZCAqKTApOwp9CgpzdGF0 aWMgaW5saW5lIGludCB0aW1lcl9wZW5kaW5nIChjb25zdCBzdHJ1Y3QgdGltZXJfbGlzdCAqIHRp bWVyKQp7CiAgICAgICAgcmV0dXJuIHRpbWVyLT5saXN0Lm5leHQgIT0gKCh2b2lkICopMCk7Cn0K IyA4MyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc2NoZWQuaCIg MgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vcHJvY2Vzc29y LmgiIDEKIyA4NSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc2No ZWQuaCIgMgojIDEyNSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgv c2NoZWQuaCIKc3RydWN0IHNjaGVkX3BhcmFtIHsKICAgICAgICBpbnQgc2NoZWRfcHJpb3JpdHk7 Cn07CgpzdHJ1Y3QgY29tcGxldGlvbjsKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGlu dXgvaW5jbHVkZS9saW51eC9zcGlubG9jay5oIiAxCiMgMTM0ICIvdXNyL3NyYy9saW51eC0yLjQu MTMvbGludXgvaW5jbHVkZS9saW51eC9zY2hlZC5oIiAyCgoKCgoKCgpleHRlcm4gcndsb2NrX3Qg dGFza2xpc3RfbG9jazsKZXh0ZXJuIHNwaW5sb2NrX3QgcnVucXVldWVfbG9jazsKZXh0ZXJuIHNw aW5sb2NrX3QgbW1saXN0X2xvY2s7CgpleHRlcm4gdm9pZCBzY2hlZF9pbml0KHZvaWQpOwpleHRl cm4gdm9pZCBpbml0X2lkbGUodm9pZCk7CmV4dGVybiB2b2lkIHNob3dfc3RhdGUodm9pZCk7CmV4 dGVybiB2b2lkIGNwdV9pbml0ICh2b2lkKTsKZXh0ZXJuIHZvaWQgdHJhcF9pbml0KHZvaWQpOwpl eHRlcm4gdm9pZCB1cGRhdGVfcHJvY2Vzc190aW1lcyhpbnQgdXNlcik7CmV4dGVybiB2b2lkIHVw ZGF0ZV9vbmVfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuc2lnbmVkIGxvbmcgdXNl ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc3lzdGVtLCBp bnQgY3B1KTsKCgpleHRlcm4gc2lnbmVkIGxvbmcgc2NoZWR1bGVfdGltZW91dChzaWduZWQgbG9u ZyB0aW1lb3V0KSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CiBfX2F0dHJpYnV0ZV9fKChy ZWdwYXJtKDApKSkgdm9pZCBzY2hlZHVsZSh2b2lkKTsKCmV4dGVybiBpbnQgc2NoZWR1bGVfdGFz ayhzdHJ1Y3QgdHFfc3RydWN0ICp0YXNrKTsKZXh0ZXJuIHZvaWQgZmx1c2hfc2NoZWR1bGVkX3Rh c2tzKHZvaWQpOwpleHRlcm4gaW50IHN0YXJ0X2NvbnRleHRfdGhyZWFkKHZvaWQpOwpleHRlcm4g aW50IGN1cnJlbnRfaXNfa2V2ZW50ZCh2b2lkKTsKIyAxNzIgIi91c3Ivc3JjL2xpbnV4LTIuNC4x My9saW51eC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiCnN0cnVjdCBmaWxlc19zdHJ1Y3QgewogICAg ICAgIGF0b21pY190IGNvdW50OwogICAgICAgIHJ3bG9ja190IGZpbGVfbG9jazsKICAgICAgICBp bnQgbWF4X2ZkczsKICAgICAgICBpbnQgbWF4X2Zkc2V0OwogICAgICAgIGludCBuZXh0X2ZkOwog ICAgICAgIHN0cnVjdCBmaWxlICoqIGZkOwogICAgICAgIGZkX3NldCAqY2xvc2Vfb25fZXhlYzsK ICAgICAgICBmZF9zZXQgKm9wZW5fZmRzOwogICAgICAgIGZkX3NldCBjbG9zZV9vbl9leGVjX2lu aXQ7CiAgICAgICAgZmRfc2V0IG9wZW5fZmRzX2luaXQ7CiAgICAgICAgc3RydWN0IGZpbGUgKiBm ZF9hcnJheVszMl07Cn07CiMgMjA0ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVk ZS9saW51eC9zY2hlZC5oIgpzdHJ1Y3QgbW1fc3RydWN0IHsKICAgICAgICBzdHJ1Y3Qgdm1fYXJl YV9zdHJ1Y3QgKiBtbWFwOwogICAgICAgIHJiX3Jvb3RfdCBtbV9yYjsKICAgICAgICBzdHJ1Y3Qg dm1fYXJlYV9zdHJ1Y3QgKiBtbWFwX2NhY2hlOwogICAgICAgIHBnZF90ICogcGdkOwogICAgICAg IGF0b21pY190IG1tX3VzZXJzOwogICAgICAgIGF0b21pY190IG1tX2NvdW50OwogICAgICAgIGlu dCBtYXBfY291bnQ7CiAgICAgICAgc3RydWN0IHJ3X3NlbWFwaG9yZSBtbWFwX3NlbTsKICAgICAg ICBzcGlubG9ja190IHBhZ2VfdGFibGVfbG9jazsKCiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBt bWxpc3Q7CgoKCgogICAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfY29kZSwgZW5kX2NvZGUsIHN0 YXJ0X2RhdGEsIGVuZF9kYXRhOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfYnJrLCBicmss IHN0YXJ0X3N0YWNrOwogICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnX3N0YXJ0LCBhcmdfZW5kLCBl bnZfc3RhcnQsIGVudl9lbmQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyByc3MsIHRvdGFsX3ZtLCBs b2NrZWRfdm07CiAgICAgICAgdW5zaWduZWQgbG9uZyBkZWZfZmxhZ3M7CiAgICAgICAgdW5zaWdu ZWQgbG9uZyBjcHVfdm1fbWFzazsKICAgICAgICB1bnNpZ25lZCBsb25nIHN3YXBfYWRkcmVzczsK CiAgICAgICAgdW5zaWduZWQgZHVtcGFibGU6MTsKCgogICAgICAgIG1tX2NvbnRleHRfdCBjb250 ZXh0Owp9OwoKZXh0ZXJuIGludCBtbWxpc3RfbnI7CiMgMjQ3ICIvdXNyL3NyYy9saW51eC0yLjQu MTMvbGludXgvaW5jbHVkZS9saW51eC9zY2hlZC5oIgpzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCB7CiAg ICAgICAgYXRvbWljX3QgY291bnQ7CiAgICAgICAgc3RydWN0IGtfc2lnYWN0aW9uIGFjdGlvbls2 NF07CiAgICAgICAgc3BpbmxvY2tfdCBzaWdsb2NrOwp9OwojIDI2MyAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc2NoZWQuaCIKc3RydWN0IHVzZXJfc3RydWN0IHsK ICAgICAgICBhdG9taWNfdCBfX2NvdW50OwogICAgICAgIGF0b21pY190IHByb2Nlc3NlczsKICAg ICAgICBhdG9taWNfdCBmaWxlczsKCgogICAgICAgIHN0cnVjdCB1c2VyX3N0cnVjdCAqbmV4dCwg KipwcHJldjsKICAgICAgICB1aWRfdCB1aWQ7Cn07CgoKCgoKCmV4dGVybiBzdHJ1Y3QgdXNlcl9z dHJ1Y3Qgcm9vdF91c2VyOwoKCnN0cnVjdCB0YXNrX3N0cnVjdCB7CgoKCiAgICAgICAgdm9sYXRp bGUgbG9uZyBzdGF0ZTsKICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgICAgIGludCBz aWdwZW5kaW5nOwogICAgICAgIG1tX3NlZ21lbnRfdCBhZGRyX2xpbWl0OwoKCgogICAgICAgIHN0 cnVjdCBleGVjX2RvbWFpbiAqZXhlY19kb21haW47CiAgICAgICAgdm9sYXRpbGUgbG9uZyBuZWVk X3Jlc2NoZWQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBwdHJhY2U7CgogICAgICAgIGludCBsb2Nr X2RlcHRoOwoKCgoKCgogICAgICAgIGxvbmcgY291bnRlcjsKICAgICAgICBsb25nIG5pY2U7CiAg ICAgICAgdW5zaWduZWQgbG9uZyBwb2xpY3k7CiAgICAgICAgc3RydWN0IG1tX3N0cnVjdCAqbW07 CiAgICAgICAgaW50IGhhc19jcHUsIHByb2Nlc3NvcjsKICAgICAgICB1bnNpZ25lZCBsb25nIGNw dXNfYWxsb3dlZDsKCgoKCiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBydW5fbGlzdDsKICAgICAg ICB1bnNpZ25lZCBsb25nIHNsZWVwX3RpbWU7CgogICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAq bmV4dF90YXNrLCAqcHJldl90YXNrOwogICAgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKmFjdGl2ZV9t bTsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGxvY2FsX3BhZ2VzOwogICAgICAgIHVuc2lnbmVk IGludCBhbGxvY2F0aW9uX29yZGVyLCBucl9sb2NhbF9wYWdlczsKCgogICAgICAgIHN0cnVjdCBs aW51eF9iaW5mbXQgKmJpbmZtdDsKICAgICAgICBpbnQgZXhpdF9jb2RlLCBleGl0X3NpZ25hbDsK ICAgICAgICBpbnQgcGRlYXRoX3NpZ25hbDsKCiAgICAgICAgdW5zaWduZWQgbG9uZyBwZXJzb25h bGl0eTsKICAgICAgICBpbnQgZGlkX2V4ZWM6MTsKICAgICAgICBwaWRfdCBwaWQ7CiAgICAgICAg cGlkX3QgcGdycDsKICAgICAgICBwaWRfdCB0dHlfb2xkX3BncnA7CiAgICAgICAgcGlkX3Qgc2Vz c2lvbjsKICAgICAgICBwaWRfdCB0Z2lkOwoKICAgICAgICBpbnQgbGVhZGVyOwoKCgoKCiAgICAg ICAgc3RydWN0IHRhc2tfc3RydWN0ICpwX29wcHRyLCAqcF9wcHRyLCAqcF9jcHRyLCAqcF95c3B0 ciwgKnBfb3NwdHI7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCB0aHJlYWRfZ3JvdXA7CgoKICAg ICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBpZGhhc2hfbmV4dDsKICAgICAgICBzdHJ1Y3QgdGFz a19zdHJ1Y3QgKipwaWRoYXNoX3BwcmV2OwoKICAgICAgICB3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0 X2NobGRleGl0OwogICAgICAgIHN0cnVjdCBjb21wbGV0aW9uICp2Zm9ya19kb25lOwogICAgICAg IHVuc2lnbmVkIGxvbmcgcnRfcHJpb3JpdHk7CiAgICAgICAgdW5zaWduZWQgbG9uZyBpdF9yZWFs X3ZhbHVlLCBpdF9wcm9mX3ZhbHVlLCBpdF92aXJ0X3ZhbHVlOwogICAgICAgIHVuc2lnbmVkIGxv bmcgaXRfcmVhbF9pbmNyLCBpdF9wcm9mX2luY3IsIGl0X3ZpcnRfaW5jcjsKICAgICAgICBzdHJ1 Y3QgdGltZXJfbGlzdCByZWFsX3RpbWVyOwogICAgICAgIHN0cnVjdCB0bXMgdGltZXM7CiAgICAg ICAgdW5zaWduZWQgbG9uZyBzdGFydF90aW1lOwogICAgICAgIGxvbmcgcGVyX2NwdV91dGltZVsz Ml0sIHBlcl9jcHVfc3RpbWVbMzJdOwoKICAgICAgICB1bnNpZ25lZCBsb25nIG1pbl9mbHQsIG1h al9mbHQsIG5zd2FwLCBjbWluX2ZsdCwgY21hal9mbHQsIGNuc3dhcDsKICAgICAgICBpbnQgc3dh cHBhYmxlOjE7CgogICAgICAgIHVpZF90IHVpZCxldWlkLHN1aWQsZnN1aWQ7CiAgICAgICAgZ2lk X3QgZ2lkLGVnaWQsc2dpZCxmc2dpZDsKICAgICAgICBpbnQgbmdyb3VwczsKICAgICAgICBnaWRf dCBncm91cHNbMzJdOwogICAgICAgIGtlcm5lbF9jYXBfdCBjYXBfZWZmZWN0aXZlLCBjYXBfaW5o ZXJpdGFibGUsIGNhcF9wZXJtaXR0ZWQ7CiAgICAgICAgaW50IGtlZXBfY2FwYWJpbGl0aWVzOjE7 CiAgICAgICAgc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyOwoKICAgICAgICBzdHJ1Y3QgcmxpbWl0 IHJsaW1bMTFdOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHVzZWRfbWF0aDsKICAgICAgICBjaGFy IGNvbW1bMTZdOwoKICAgICAgICBpbnQgbGlua19jb3VudCwgdG90YWxfbGlua19jb3VudDsKICAg ICAgICBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogICAgICAgIHVuc2lnbmVkIGludCBsb2NrczsK CiAgICAgICAgc3RydWN0IHNlbV91bmRvICpzZW11bmRvOwogICAgICAgIHN0cnVjdCBzZW1fcXVl dWUgKnNlbXNsZWVwaW5nOwoKICAgICAgICBzdHJ1Y3QgdGhyZWFkX3N0cnVjdCB0aHJlYWQ7Cgog ICAgICAgIHN0cnVjdCBmc19zdHJ1Y3QgKmZzOwoKICAgICAgICBzdHJ1Y3QgZmlsZXNfc3RydWN0 ICpmaWxlczsKCiAgICAgICAgc3BpbmxvY2tfdCBzaWdtYXNrX2xvY2s7CiAgICAgICAgc3RydWN0 IHNpZ25hbF9zdHJ1Y3QgKnNpZzsKCiAgICAgICAgc2lnc2V0X3QgYmxvY2tlZDsKICAgICAgICBz dHJ1Y3Qgc2lncGVuZGluZyBwZW5kaW5nOwoKICAgICAgICB1bnNpZ25lZCBsb25nIHNhc19zc19z cDsKICAgICAgICBzaXplX3Qgc2FzX3NzX3NpemU7CiAgICAgICAgaW50ICgqbm90aWZpZXIpKHZv aWQgKnByaXYpOwogICAgICAgIHZvaWQgKm5vdGlmaWVyX2RhdGE7CiAgICAgICAgc2lnc2V0X3Qg Km5vdGlmaWVyX21hc2s7CgoKICAgICAgICB1MzIgcGFyZW50X2V4ZWNfaWQ7CiAgICAgICAgdTMy IHNlbGZfZXhlY19pZDsKCiAgICAgICAgc3BpbmxvY2tfdCBhbGxvY19sb2NrOwp9OwojIDQ0NCAi L3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc2NoZWQuaCIKZXh0ZXJu IHN0cnVjdCBleGVjX2RvbWFpbiBkZWZhdWx0X2V4ZWNfZG9tYWluOwojIDQ5NiAiL3Vzci9zcmMv bGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc2NoZWQuaCIKdW5pb24gdGFza191bmlv biB7CiAgICAgICAgc3RydWN0IHRhc2tfc3RydWN0IHRhc2s7CiAgICAgICAgdW5zaWduZWQgbG9u ZyBzdGFja1syMDQ4KnNpemVvZihsb25nKS9zaXplb2YobG9uZyldOwp9OwoKZXh0ZXJuIHVuaW9u IHRhc2tfdW5pb24gaW5pdF90YXNrX3VuaW9uOwoKZXh0ZXJuIHN0cnVjdCBtbV9zdHJ1Y3QgaW5p dF9tbTsKZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqaW5pdF90YXNrc1szMl07CgoKCmV4dGVy biBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBpZGhhc2hbKDQwOTYgPj4gMildOwoKCgpzdGF0aWMgaW5s aW5lIHZvaWQgaGFzaF9waWQoc3RydWN0IHRhc2tfc3RydWN0ICpwKQp7CiAgICAgICAgc3RydWN0 IHRhc2tfc3RydWN0ICoqaHRhYmxlID0gJnBpZGhhc2hbKCgoKHAtPnBpZCkgPj4gOCkgXiAocC0+ cGlkKSkgJiAoKDQwOTYgPj4gMikgLSAxKSldOwoKICAgICAgICBpZigocC0+cGlkaGFzaF9uZXh0 ID0gKmh0YWJsZSkgIT0gKCh2b2lkICopMCkpCiAgICAgICAgICAgICAgICAoKmh0YWJsZSktPnBp ZGhhc2hfcHByZXYgPSAmcC0+cGlkaGFzaF9uZXh0OwogICAgICAgICpodGFibGUgPSBwOwogICAg ICAgIHAtPnBpZGhhc2hfcHByZXYgPSBodGFibGU7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCB1bmhh c2hfcGlkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKewogICAgICAgIGlmKHAtPnBpZGhhc2hfbmV4 dCkKICAgICAgICAgICAgICAgIHAtPnBpZGhhc2hfbmV4dC0+cGlkaGFzaF9wcHJldiA9IHAtPnBp ZGhhc2hfcHByZXY7CiAgICAgICAgKnAtPnBpZGhhc2hfcHByZXYgPSBwLT5waWRoYXNoX25leHQ7 Cn0KCnN0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICpmaW5kX3Rhc2tfYnlfcGlkKGlu dCBwaWQpCnsKICAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsICoqaHRhYmxlID0gJnBpZGhh c2hbKCgoKHBpZCkgPj4gOCkgXiAocGlkKSkgJiAoKDQwOTYgPj4gMikgLSAxKSldOwoKICAgICAg ICBmb3IocCA9ICpodGFibGU7IHAgJiYgcC0+cGlkICE9IHBpZDsgcCA9IHAtPnBpZGhhc2hfbmV4 dCkKICAgICAgICAgICAgICAgIDsKCiAgICAgICAgcmV0dXJuIHA7Cn0KCgpleHRlcm4gc3RydWN0 IHVzZXJfc3RydWN0ICogYWxsb2NfdWlkKHVpZF90KTsKZXh0ZXJuIHZvaWQgZnJlZV91aWQoc3Ry dWN0IHVzZXJfc3RydWN0ICopOwoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5j bHVkZS9hc20vY3VycmVudC5oIiAxCgoKCnN0cnVjdCB0YXNrX3N0cnVjdDsKCnN0YXRpYyBpbmxp bmUgc3RydWN0IHRhc2tfc3RydWN0ICogZ2V0X2N1cnJlbnQodm9pZCkKewogICAgICAgIHN0cnVj dCB0YXNrX3N0cnVjdCAqY3VycmVudDsKICAgICAgICBfX2FzbV9fKCJhbmRsICUlZXNwLCUwOyAi OiI9ciIgKGN1cnJlbnQpIDogIjAiICh+ODE5MVVMKSk7CiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7 CiB9CiMgNTQ0ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9zY2hl ZC5oIiAyCgpleHRlcm4gdW5zaWduZWQgbG9uZyB2b2xhdGlsZSBqaWZmaWVzOwpleHRlcm4gdW5z aWduZWQgbG9uZyBpdGltZXJfdGlja3M7CmV4dGVybiB1bnNpZ25lZCBsb25nIGl0aW1lcl9uZXh0 OwpleHRlcm4gc3RydWN0IHRpbWV2YWwgeHRpbWU7CmV4dGVybiB2b2lkIGRvX3RpbWVyKHN0cnVj dCBwdF9yZWdzICopOwoKZXh0ZXJuIHVuc2lnbmVkIGludCAqIHByb2ZfYnVmZmVyOwpleHRlcm4g dW5zaWduZWQgbG9uZyBwcm9mX2xlbjsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcHJvZl9zaGlmdDsK CgoKZXh0ZXJuIHZvaWQgX193YWtlX3VwKHdhaXRfcXVldWVfaGVhZF90ICpxLCB1bnNpZ25lZCBp bnQgbW9kZSwgaW50IG5yKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVybiB2b2lk IF9fd2FrZV91cF9zeW5jKHdhaXRfcXVldWVfaGVhZF90ICpxLCB1bnNpZ25lZCBpbnQgbW9kZSwg aW50IG5yKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVybiB2b2lkIHNsZWVwX29u KHdhaXRfcXVldWVfaGVhZF90ICpxKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVy biBsb25nIHNsZWVwX29uX3RpbWVvdXQod2FpdF9xdWV1ZV9oZWFkX3QgKnEsIHNpZ25lZCBsb25n IHRpbWVvdXQpIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKCmV4dGVybiB2b2lkIGludGVy cnVwdGlibGVfc2xlZXBfb24od2FpdF9xdWV1ZV9oZWFkX3QgKnEpIF9fYXR0cmlidXRlX18oKHJl Z3Bhcm0oMykpKTsKZXh0ZXJuIGxvbmcgaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1lb3V0KHdh aXRfcXVldWVfaGVhZF90ICpxLCBzaWduZWQgbG9uZyB0aW1lb3V0KSBfX2F0dHJpYnV0ZV9fKChy ZWdwYXJtKDMpKSk7CgpleHRlcm4gaW50IHdha2VfdXBfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1 Y3QgKiB0c2spIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKIyA1NzcgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiCiBfX2F0dHJpYnV0ZV9fKChy ZWdwYXJtKDApKSkgbG9uZyBzeXNfd2FpdDQocGlkX3QgcGlkLHVuc2lnbmVkIGludCAqIHN0YXRf YWRkciwgaW50IG9wdGlvbnMsIHN0cnVjdCBydXNhZ2UgKiBydSk7CgpleHRlcm4gaW50IGluX2dy b3VwX3AoZ2lkX3QpOwpleHRlcm4gaW50IGluX2Vncm91cF9wKGdpZF90KTsKCmV4dGVybiB2b2lk IHByb2NfY2FjaGVzX2luaXQodm9pZCk7CmV4dGVybiB2b2lkIGZsdXNoX3NpZ25hbHMoc3RydWN0 IHRhc2tfc3RydWN0ICopOwpleHRlcm4gdm9pZCBmbHVzaF9zaWduYWxfaGFuZGxlcnMoc3RydWN0 IHRhc2tfc3RydWN0ICopOwpleHRlcm4gaW50IGRlcXVldWVfc2lnbmFsKHNpZ3NldF90ICosIHNp Z2luZm9fdCAqKTsKZXh0ZXJuIHZvaWQgYmxvY2tfYWxsX3NpZ25hbHMoaW50ICgqbm90aWZpZXIp KHZvaWQgKnByaXYpLCB2b2lkICpwcml2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz aWdzZXRfdCAqbWFzayk7CmV4dGVybiB2b2lkIHVuYmxvY2tfYWxsX3NpZ25hbHModm9pZCk7CmV4 dGVybiBpbnQgc2VuZF9zaWdfaW5mbyhpbnQsIHN0cnVjdCBzaWdpbmZvICosIHN0cnVjdCB0YXNr X3N0cnVjdCAqKTsKZXh0ZXJuIGludCBmb3JjZV9zaWdfaW5mbyhpbnQsIHN0cnVjdCBzaWdpbmZv ICosIHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKZXh0ZXJuIGludCBraWxsX3BnX2luZm8oaW50LCBz dHJ1Y3Qgc2lnaW5mbyAqLCBwaWRfdCk7CmV4dGVybiBpbnQga2lsbF9zbF9pbmZvKGludCwgc3Ry dWN0IHNpZ2luZm8gKiwgcGlkX3QpOwpleHRlcm4gaW50IGtpbGxfcHJvY19pbmZvKGludCwgc3Ry dWN0IHNpZ2luZm8gKiwgcGlkX3QpOwpleHRlcm4gdm9pZCBub3RpZnlfcGFyZW50KHN0cnVjdCB0 YXNrX3N0cnVjdCAqLCBpbnQpOwpleHRlcm4gdm9pZCBkb19ub3RpZnlfcGFyZW50KHN0cnVjdCB0 YXNrX3N0cnVjdCAqLCBpbnQpOwpleHRlcm4gdm9pZCBmb3JjZV9zaWcoaW50LCBzdHJ1Y3QgdGFz a19zdHJ1Y3QgKik7CmV4dGVybiBpbnQgc2VuZF9zaWcoaW50LCBzdHJ1Y3QgdGFza19zdHJ1Y3Qg KiwgaW50KTsKZXh0ZXJuIGludCBraWxsX3BnKHBpZF90LCBpbnQsIGludCk7CmV4dGVybiBpbnQg a2lsbF9zbChwaWRfdCwgaW50LCBpbnQpOwpleHRlcm4gaW50IGtpbGxfcHJvYyhwaWRfdCwgaW50 LCBpbnQpOwpleHRlcm4gaW50IGRvX3NpZ2FjdGlvbihpbnQsIGNvbnN0IHN0cnVjdCBrX3NpZ2Fj dGlvbiAqLCBzdHJ1Y3Qga19zaWdhY3Rpb24gKik7CmV4dGVybiBpbnQgZG9fc2lnYWx0c3RhY2so Y29uc3Qgc3RhY2tfdCAqLCBzdGFja190ICosIHVuc2lnbmVkIGxvbmcpOwoKc3RhdGljIGlubGlu ZSBpbnQgc2lnbmFsX3BlbmRpbmcoc3RydWN0IHRhc2tfc3RydWN0ICpwKQp7CiAgICAgICAgcmV0 dXJuIChwLT5zaWdwZW5kaW5nICE9IDApOwp9CgoKCgoKc3RhdGljIGlubGluZSBpbnQgaGFzX3Bl bmRpbmdfc2lnbmFscyhzaWdzZXRfdCAqc2lnbmFsLCBzaWdzZXRfdCAqYmxvY2tlZCkKewogICAg ICAgIHVuc2lnbmVkIGxvbmcgcmVhZHk7CiAgICAgICAgbG9uZyBpOwoKICAgICAgICBzd2l0Y2gg KCg2NCAvIDMyKSkgewogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBmb3IgKGkgPSAo NjQgLyAzMiksIHJlYWR5ID0gMDsgLS1pID49IDAgOykKICAgICAgICAgICAgICAgICAgICAgICAg cmVhZHkgfD0gc2lnbmFsLT5zaWdbaV0gJn4gYmxvY2tlZC0+c2lnW2ldOwogICAgICAgICAgICAg ICAgYnJlYWs7CgogICAgICAgIGNhc2UgNDogcmVhZHkgPSBzaWduYWwtPnNpZ1szXSAmfiBibG9j a2VkLT5zaWdbM107CiAgICAgICAgICAgICAgICByZWFkeSB8PSBzaWduYWwtPnNpZ1syXSAmfiBi bG9ja2VkLT5zaWdbMl07CiAgICAgICAgICAgICAgICByZWFkeSB8PSBzaWduYWwtPnNpZ1sxXSAm fiBibG9ja2VkLT5zaWdbMV07CiAgICAgICAgICAgICAgICByZWFkeSB8PSBzaWduYWwtPnNpZ1sw XSAmfiBibG9ja2VkLT5zaWdbMF07CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2Fz ZSAyOiByZWFkeSA9IHNpZ25hbC0+c2lnWzFdICZ+IGJsb2NrZWQtPnNpZ1sxXTsKICAgICAgICAg ICAgICAgIHJlYWR5IHw9IHNpZ25hbC0+c2lnWzBdICZ+IGJsb2NrZWQtPnNpZ1swXTsKICAgICAg ICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDE6IHJlYWR5ID0gc2lnbmFsLT5zaWdbMF0g Jn4gYmxvY2tlZC0+c2lnWzBdOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVhZHkgIT0gMDsK fQoKCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCByZWNhbGNfc2lncGVuZGluZyhzdHJ1Y3QgdGFza19z dHJ1Y3QgKnQpCnsKICAgICAgICB0LT5zaWdwZW5kaW5nID0gaGFzX3BlbmRpbmdfc2lnbmFscygm dC0+cGVuZGluZy5zaWduYWwsICZ0LT5ibG9ja2VkKTsKfQoKCgpzdGF0aWMgaW5saW5lIGludCBv bl9zaWdfc3RhY2sodW5zaWduZWQgbG9uZyBzcCkKewogICAgICAgIHJldHVybiAoc3AgLSBnZXRf Y3VycmVudCgpLT5zYXNfc3Nfc3AgPCBnZXRfY3VycmVudCgpLT5zYXNfc3Nfc2l6ZSk7Cn0KCnN0 YXRpYyBpbmxpbmUgaW50IHNhc19zc19mbGFncyh1bnNpZ25lZCBsb25nIHNwKQp7CiAgICAgICAg cmV0dXJuIChnZXRfY3VycmVudCgpLT5zYXNfc3Nfc2l6ZSA9PSAwID8gMgogICAgICAgICAgICAg ICAgOiBvbl9zaWdfc3RhY2soc3ApID8gMSA6IDApOwp9CgpleHRlcm4gaW50IHJlcXVlc3RfaXJx KHVuc2lnbmVkIGludCwKICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqaGFuZGxlcikoaW50 LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopLAogICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGxvbmcsIGNvbnN0IGNoYXIgKiwgdm9pZCAqKTsKZXh0ZXJuIHZvaWQgZnJlZV9pcnEodW5z aWduZWQgaW50LCB2b2lkICopOwojIDY4MCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2lu Y2x1ZGUvbGludXgvc2NoZWQuaCIKc3RhdGljIGlubGluZSBpbnQgc3VzZXIodm9pZCkKewogICAg ICAgIGlmICghKCAoMSA8PCAoMCArMSkpICYgMHgwMDAwMDAwMCA/ICgxIDw8ICgwKSkgJiAweDAw MDAwMDAwIDogKDEgPDwgKDApKSAmIHNlY3VyZWJpdHMgKSAmJiBnZXRfY3VycmVudCgpLT5ldWlk ID09IDApIHsKICAgICAgICAgICAgICAgIGdldF9jdXJyZW50KCktPmZsYWdzIHw9IDB4MDAwMDAx MDA7CiAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIDA7 Cn0KCnN0YXRpYyBpbmxpbmUgaW50IGZzdXNlcih2b2lkKQp7CiAgICAgICAgaWYgKCEoICgxIDw8 ICgwICsxKSkgJiAweDAwMDAwMDAwID8gKDEgPDwgKDApKSAmIDB4MDAwMDAwMDAgOiAoMSA8PCAo MCkpICYgc2VjdXJlYml0cyApICYmIGdldF9jdXJyZW50KCktPmZzdWlkID09IDApIHsKICAgICAg ICAgICAgICAgIGdldF9jdXJyZW50KCktPmZsYWdzIHw9IDB4MDAwMDAxMDA7CiAgICAgICAgICAg ICAgICByZXR1cm4gMTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIDA7Cn0KCgoKCgoKCnN0YXRp YyBpbmxpbmUgaW50IGNhcGFibGUoaW50IGNhcCkKewoKICAgICAgICBpZiAoKChnZXRfY3VycmVu dCgpLT5jYXBfZWZmZWN0aXZlKSAmICgxIDw8IChjYXApKSkpCgoKCiAgICAgICAgewogICAgICAg ICAgICAgICAgZ2V0X2N1cnJlbnQoKS0+ZmxhZ3MgfD0gMHgwMDAwMDEwMDsKICAgICAgICAgICAg ICAgIHJldHVybiAxOwogICAgICAgIH0KICAgICAgICByZXR1cm4gMDsKfQoKCgoKZXh0ZXJuIHN0 cnVjdCBtbV9zdHJ1Y3QgKiBtbV9hbGxvYyh2b2lkKTsKCmV4dGVybiBzdHJ1Y3QgbW1fc3RydWN0 ICogc3RhcnRfbGF6eV90bGIodm9pZCk7CmV4dGVybiB2b2lkIGVuZF9sYXp5X3RsYihzdHJ1Y3Qg bW1fc3RydWN0ICptbSk7CgoKZXh0ZXJuIGlubGluZSB2b2lkIF9fbW1kcm9wKHN0cnVjdCBtbV9z dHJ1Y3QgKikgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwpzdGF0aWMgaW5saW5lIHZvaWQg bW1kcm9wKHN0cnVjdCBtbV9zdHJ1Y3QgKiBtbSkKewogICAgICAgIGlmIChhdG9taWNfZGVjX2Fu ZF90ZXN0KCZtbS0+bW1fY291bnQpKQogICAgICAgICAgICAgICAgX19tbWRyb3AobW0pOwp9CgoK ZXh0ZXJuIHZvaWQgbW1wdXQoc3RydWN0IG1tX3N0cnVjdCAqKTsKCmV4dGVybiB2b2lkIG1tX3Jl bGVhc2Uodm9pZCk7CgoKCgpleHRlcm4gc3RydWN0IGZpbGUgKiogYWxsb2NfZmRfYXJyYXkoaW50 KTsKZXh0ZXJuIGludCBleHBhbmRfZmRfYXJyYXkoc3RydWN0IGZpbGVzX3N0cnVjdCAqLCBpbnQg bnIpOwpleHRlcm4gdm9pZCBmcmVlX2ZkX2FycmF5KHN0cnVjdCBmaWxlICoqLCBpbnQpOwoKZXh0 ZXJuIGZkX3NldCAqYWxsb2NfZmRzZXQoaW50KTsKZXh0ZXJuIGludCBleHBhbmRfZmRzZXQoc3Ry dWN0IGZpbGVzX3N0cnVjdCAqLCBpbnQgbnIpOwpleHRlcm4gdm9pZCBmcmVlX2Zkc2V0KGZkX3Nl dCAqLCBpbnQpOwoKZXh0ZXJuIGludCBjb3B5X3RocmVhZChpbnQsIHVuc2lnbmVkIGxvbmcsIHVu c2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBzdHJ1Y3Qg cHRfcmVncyAqKTsKZXh0ZXJuIHZvaWQgZmx1c2hfdGhyZWFkKHZvaWQpOwpleHRlcm4gdm9pZCBl eGl0X3RocmVhZCh2b2lkKTsKCmV4dGVybiB2b2lkIGV4aXRfbW0oc3RydWN0IHRhc2tfc3RydWN0 ICopOwpleHRlcm4gdm9pZCBleGl0X2ZpbGVzKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKZXh0ZXJu IHZvaWQgZXhpdF9zaWdoYW5kKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKCmV4dGVybiB2b2lkIHJl cGFyZW50X3RvX2luaXQodm9pZCk7CmV4dGVybiB2b2lkIGRhZW1vbml6ZSh2b2lkKTsKCmV4dGVy biBpbnQgZG9fZXhlY3ZlKGNoYXIgKiwgY2hhciAqKiwgY2hhciAqKiwgc3RydWN0IHB0X3JlZ3Mg Kik7CmV4dGVybiBpbnQgZG9fZm9yayh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBzdHJ1 Y3QgcHRfcmVncyAqLCB1bnNpZ25lZCBsb25nKTsKCmV4dGVybiB2b2lkIGFkZF93YWl0X3F1ZXVl KHdhaXRfcXVldWVfaGVhZF90ICpxLCB3YWl0X3F1ZXVlX3QgKiB3YWl0KSBfX2F0dHJpYnV0ZV9f KChyZWdwYXJtKDMpKSk7CmV4dGVybiB2b2lkIGFkZF93YWl0X3F1ZXVlX2V4Y2x1c2l2ZSh3YWl0 X3F1ZXVlX2hlYWRfdCAqcSwgd2FpdF9xdWV1ZV90ICogd2FpdCkgX19hdHRyaWJ1dGVfXygocmVn cGFybSgzKSkpOwpleHRlcm4gdm9pZCByZW1vdmVfd2FpdF9xdWV1ZSh3YWl0X3F1ZXVlX2hlYWRf dCAqcSwgd2FpdF9xdWV1ZV90ICogd2FpdCkgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwoj IDg0OCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc2NoZWQuaCIK c3RhdGljIGlubGluZSB2b2lkIGRlbF9mcm9tX3J1bnF1ZXVlKHN0cnVjdCB0YXNrX3N0cnVjdCAq IHApCnsKICAgICAgICBucl9ydW5uaW5nLS07CiAgICAgICAgcC0+c2xlZXBfdGltZSA9IGppZmZp ZXM7CiAgICAgICAgbGlzdF9kZWwoJnAtPnJ1bl9saXN0KTsKICAgICAgICBwLT5ydW5fbGlzdC5u ZXh0ID0gKCh2b2lkICopMCk7Cn0KCnN0YXRpYyBpbmxpbmUgaW50IHRhc2tfb25fcnVucXVldWUo c3RydWN0IHRhc2tfc3RydWN0ICpwKQp7CiAgICAgICAgcmV0dXJuIChwLT5ydW5fbGlzdC5uZXh0 ICE9ICgodm9pZCAqKTApKTsKfQoKc3RhdGljIGlubGluZSB2b2lkIHVuaGFzaF9wcm9jZXNzKHN0 cnVjdCB0YXNrX3N0cnVjdCAqcCkKewogICAgICAgIGlmICh0YXNrX29uX3J1bnF1ZXVlKHApKSBf X2FzbV9fIF9fdm9sYXRpbGVfXygiLmJ5dGUgMHgwZiwweDBiIik7CiAgICAgICAgZG8geyBfX2Fz bV9fIF9fdm9sYXRpbGVfXygiY2xpIjogOiA6Im1lbW9yeSIpOyB3cml0ZV9sb2NrKCZ0YXNrbGlz dF9sb2NrKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgbnJfdGhyZWFkcy0tOwogICAgICAgIHVuaGFz aF9waWQocCk7CiAgICAgICAgZG8geyAocCktPm5leHRfdGFzay0+cHJldl90YXNrID0gKHApLT5w cmV2X3Rhc2s7IChwKS0+cHJldl90YXNrLT5uZXh0X3Rhc2sgPSAocCktPm5leHRfdGFzazsgaWYg KChwKS0+cF9vc3B0cikgKHApLT5wX29zcHRyLT5wX3lzcHRyID0gKHApLT5wX3lzcHRyOyBpZiAo KHApLT5wX3lzcHRyKSAocCktPnBfeXNwdHItPnBfb3NwdHIgPSAocCktPnBfb3NwdHI7IGVsc2Ug KHApLT5wX3BwdHItPnBfY3B0ciA9IChwKS0+cF9vc3B0cjsgfSB3aGlsZSAoMCk7CiAgICAgICAg bGlzdF9kZWwoJnAtPnRocmVhZF9ncm91cCk7CiAgICAgICAgZG8geyBhc20gdm9sYXRpbGUoImxv Y2sgOyBhZGRsICQiICIweDAxMDAwMDAwIiAiLCUwIjoiPW0iICgoJnRhc2tsaXN0X2xvY2spLT5s b2NrKSA6IDogIm1lbW9yeSIpOyBfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RpIjogOiA6Im1lbW9y eSIpOyB9IHdoaWxlICgwKTsKfQoKCnN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX2xvY2soc3RydWN0 IHRhc2tfc3RydWN0ICpwKQp7CiAgICAgICAgc3Bpbl9sb2NrKCZwLT5hbGxvY19sb2NrKTsKfQoK c3RhdGljIGlubGluZSB2b2lkIHRhc2tfdW5sb2NrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKewog ICAgICAgIHNwaW5fdW5sb2NrKCZwLT5hbGxvY19sb2NrKTsKfQoKCnN0YXRpYyBpbmxpbmUgY2hh ciAqIGRfcGF0aChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCB2ZnNtb3VudCAqdmZzbW50 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZiwgaW50IGJ1ZmxlbikK ewogICAgICAgIGNoYXIgKnJlczsKICAgICAgICBzdHJ1Y3QgdmZzbW91bnQgKnJvb3RtbnQ7CiAg ICAgICAgc3RydWN0IGRlbnRyeSAqcm9vdDsKICAgICAgICByZWFkX2xvY2soJmdldF9jdXJyZW50 KCktPmZzLT5sb2NrKTsKICAgICAgICByb290bW50ID0gbW50Z2V0KGdldF9jdXJyZW50KCktPmZz LT5yb290bW50KTsKICAgICAgICByb290ID0gZGdldChnZXRfY3VycmVudCgpLT5mcy0+cm9vdCk7 CiAgICAgICAgYXNtIHZvbGF0aWxlKCJsb2NrIDsgaW5jbCAlMCIgOiI9bSIgKCgmZ2V0X2N1cnJl bnQoKS0+ZnMtPmxvY2spLT5sb2NrKSA6IDogIm1lbW9yeSIpOwogICAgICAgIHNwaW5fbG9jaygm ZGNhY2hlX2xvY2spOwogICAgICAgIHJlcyA9IF9fZF9wYXRoKGRlbnRyeSwgdmZzbW50LCByb290 LCByb290bW50LCBidWYsIGJ1Zmxlbik7CiAgICAgICAgc3Bpbl91bmxvY2soJmRjYWNoZV9sb2Nr KTsKICAgICAgICBkcHV0KHJvb3QpOwogICAgICAgIG1udHB1dChyb290bW50KTsKICAgICAgICBy ZXR1cm4gcmVzOwp9CiMgNSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGlu dXgvbW0uaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4 L2Vycm5vLmgiIDEKIyA2ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51 eC9tbS5oIiAyCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGlu dXgvY29uZmlnLmgiIDEKIyAxMCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUv bGludXgvbW0uaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xp bnV4L3N0cmluZy5oIiAxCiMgMTEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRl L2xpbnV4L21tLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9s aW51eC9saXN0LmgiIDEKIyAxMiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUv bGludXgvbW0uaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xp bnV4L21tem9uZS5oIiAxCgoKCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2lu Y2x1ZGUvbGludXgvY29uZmlnLmgiIDEKIyA4ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgv aW5jbHVkZS9saW51eC9tbXpvbmUuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51 eC9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmgiIDEKIyA5ICIvdXNyL3NyYy9saW51eC0yLjQuMTMv bGludXgvaW5jbHVkZS9saW51eC9tbXpvbmUuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4x My9saW51eC9pbmNsdWRlL2xpbnV4L2xpc3QuaCIgMQojIDEwICIvdXNyL3NyYy9saW51eC0yLjQu MTMvbGludXgvaW5jbHVkZS9saW51eC9tbXpvbmUuaCIgMgojIDIxICIvdXNyL3NyYy9saW51eC0y LjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9tbXpvbmUuaCIKdHlwZWRlZiBzdHJ1Y3QgZnJlZV9h cmVhX3N0cnVjdCB7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBmcmVlX2xpc3Q7CiAgICAgICAg dW5zaWduZWQgbG9uZyAqbWFwOwp9IGZyZWVfYXJlYV90OwoKc3RydWN0IHBnbGlzdF9kYXRhOwoj IDM2ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9tbXpvbmUuaCIK dHlwZWRlZiBzdHJ1Y3Qgem9uZV9zdHJ1Y3QgewoKCgogICAgICAgIHNwaW5sb2NrX3QgbG9jazsK ICAgICAgICB1bnNpZ25lZCBsb25nIGZyZWVfcGFnZXM7CiAgICAgICAgdW5zaWduZWQgbG9uZyBw YWdlc19taW4sIHBhZ2VzX2xvdywgcGFnZXNfaGlnaDsKICAgICAgICBpbnQgbmVlZF9iYWxhbmNl OwoKCgoKICAgICAgICBmcmVlX2FyZWFfdCBmcmVlX2FyZWFbMTBdOwoKCgoKICAgICAgICBzdHJ1 Y3QgcGdsaXN0X2RhdGEgKnpvbmVfcGdkYXQ7CiAgICAgICAgc3RydWN0IHBhZ2UgKnpvbmVfbWVt X21hcDsKICAgICAgICB1bnNpZ25lZCBsb25nIHpvbmVfc3RhcnRfcGFkZHI7CiAgICAgICAgdW5z aWduZWQgbG9uZyB6b25lX3N0YXJ0X21hcG5yOwoKCgoKICAgICAgICBjaGFyICpuYW1lOwogICAg ICAgIHVuc2lnbmVkIGxvbmcgc2l6ZTsKfSB6b25lX3Q7CiMgODEgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L21tem9uZS5oIgp0eXBlZGVmIHN0cnVjdCB6b25lbGlz dF9zdHJ1Y3QgewogICAgICAgIHpvbmVfdCAqIHpvbmVzIFszICsxXTsKfSB6b25lbGlzdF90Owoj IDk4ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9tbXpvbmUuaCIK c3RydWN0IGJvb3RtZW1fZGF0YTsKdHlwZWRlZiBzdHJ1Y3QgcGdsaXN0X2RhdGEgewogICAgICAg IHpvbmVfdCBub2RlX3pvbmVzWzNdOwogICAgICAgIHpvbmVsaXN0X3Qgbm9kZV96b25lbGlzdHNb MHgwZiArMV07CiAgICAgICAgaW50IG5yX3pvbmVzOwogICAgICAgIHN0cnVjdCBwYWdlICpub2Rl X21lbV9tYXA7CiAgICAgICAgdW5zaWduZWQgbG9uZyAqdmFsaWRfYWRkcl9iaXRtYXA7CiAgICAg ICAgc3RydWN0IGJvb3RtZW1fZGF0YSAqYmRhdGE7CiAgICAgICAgdW5zaWduZWQgbG9uZyBub2Rl X3N0YXJ0X3BhZGRyOwogICAgICAgIHVuc2lnbmVkIGxvbmcgbm9kZV9zdGFydF9tYXBucjsKICAg ICAgICB1bnNpZ25lZCBsb25nIG5vZGVfc2l6ZTsKICAgICAgICBpbnQgbm9kZV9pZDsKICAgICAg ICBzdHJ1Y3QgcGdsaXN0X2RhdGEgKm5vZGVfbmV4dDsKfSBwZ19kYXRhX3Q7CgpleHRlcm4gaW50 IG51bW5vZGVzOwpleHRlcm4gcGdfZGF0YV90ICpwZ2RhdF9saXN0OwojIDEyMyAiL3Vzci9zcmMv bGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvbW16b25lLmgiCnN0cnVjdCBwYWdlOwpl eHRlcm4gdm9pZCBzaG93X2ZyZWVfYXJlYXNfY29yZShwZ19kYXRhX3QgKnBnZGF0KTsKZXh0ZXJu IHZvaWQgZnJlZV9hcmVhX2luaXRfY29yZShpbnQgbmlkLCBwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1 Y3QgcGFnZSAqKmdtYXAsCiAgdW5zaWduZWQgbG9uZyAqem9uZXNfc2l6ZSwgdW5zaWduZWQgbG9u ZyBwYWRkciwgdW5zaWduZWQgbG9uZyAqemhvbGVzX3NpemUsCiAgc3RydWN0IHBhZ2UgKnBtYXAp OwoKZXh0ZXJuIHBnX2RhdGFfdCBjb250aWdfcGFnZV9kYXRhOwojIDEzICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9tbS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc3dhcC5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc3BpbmxvY2suaCIgMQojIDUgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3N3YXAuaCIgMgojIDEgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9wYWdlLmgiIDEKIyA2ICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9zd2FwLmgiIDIKIyAyNSAiL3Vzci9zcmMv bGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc3dhcC5oIgp1bmlvbiBzd2FwX2hlYWRl ciB7CiAgICAgICAgc3RydWN0CiAgICAgICAgewogICAgICAgICAgICAgICAgY2hhciByZXNlcnZl ZFsoMVVMIDw8IDEyKSAtIDEwXTsKICAgICAgICAgICAgICAgIGNoYXIgbWFnaWNbMTBdOwogICAg ICAgIH0gbWFnaWM7CiAgICAgICAgc3RydWN0CiAgICAgICAgewogICAgICAgICAgICAgICAgY2hh ciBib290Yml0c1sxMDI0XTsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB2ZXJzaW9uOwog ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxhc3RfcGFnZTsKICAgICAgICAgICAgICAgIHVu c2lnbmVkIGludCBucl9iYWRwYWdlczsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwYWRk aW5nWzEyNV07CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmFkcGFnZXNbMV07CiAgICAg ICAgfSBpbmZvOwp9OwojIDUxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9s aW51eC9zd2FwLmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNt L2F0b21pYy5oIiAxCiMgNTIgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xp bnV4L3N3YXAuaCIgMgojIDY0ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9s aW51eC9zd2FwLmgiCnN0cnVjdCBzd2FwX2luZm9fc3RydWN0IHsKICAgICAgICB1bnNpZ25lZCBp bnQgZmxhZ3M7CiAgICAgICAga2Rldl90IHN3YXBfZGV2aWNlOwogICAgICAgIHNwaW5sb2NrX3Qg c2Rldl9sb2NrOwogICAgICAgIHN0cnVjdCBkZW50cnkgKiBzd2FwX2ZpbGU7CiAgICAgICAgc3Ry dWN0IHZmc21vdW50ICpzd2FwX3Zmc21udDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCAqIHN3YXBf bWFwOwogICAgICAgIHVuc2lnbmVkIGludCBsb3dlc3RfYml0OwogICAgICAgIHVuc2lnbmVkIGlu dCBoaWdoZXN0X2JpdDsKICAgICAgICB1bnNpZ25lZCBpbnQgY2x1c3Rlcl9uZXh0OwogICAgICAg IHVuc2lnbmVkIGludCBjbHVzdGVyX25yOwogICAgICAgIGludCBwcmlvOwogICAgICAgIGludCBw YWdlczsKICAgICAgICB1bnNpZ25lZCBsb25nIG1heDsKICAgICAgICBpbnQgbmV4dDsKfTsKCmV4 dGVybiBpbnQgbnJfc3dhcF9wYWdlczsKZXh0ZXJuIHVuc2lnbmVkIGludCBucl9mcmVlX3BhZ2Vz KHZvaWQpOwpleHRlcm4gdW5zaWduZWQgaW50IG5yX2ZyZWVfYnVmZmVyX3BhZ2VzKHZvaWQpOwpl eHRlcm4gaW50IG5yX2FjdGl2ZV9wYWdlczsKZXh0ZXJuIGludCBucl9pbmFjdGl2ZV9wYWdlczsK ZXh0ZXJuIGF0b21pY190IG5yX2FzeW5jX3BhZ2VzOwpleHRlcm4gYXRvbWljX3QgcGFnZV9jYWNo ZV9zaXplOwpleHRlcm4gYXRvbWljX3QgYnVmZmVybWVtX3BhZ2VzOwpleHRlcm4gc3BpbmxvY2tf dCBwYWdlY2FjaGVfbG9jazsKZXh0ZXJuIHZvaWQgX19yZW1vdmVfaW5vZGVfcGFnZShzdHJ1Y3Qg cGFnZSAqKTsKCgpzdHJ1Y3QgdGFza19zdHJ1Y3Q7CnN0cnVjdCB2bV9hcmVhX3N0cnVjdDsKc3Ry dWN0IHN5c2luZm87CgpzdHJ1Y3Qgem9uZV90OwoKCmV4dGVybiB2b2lkIGxydV9jYWNoZV9hZGQo c3RydWN0IHBhZ2UgKikgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwpleHRlcm4gdm9pZCBf X2xydV9jYWNoZV9kZWwoc3RydWN0IHBhZ2UgKikgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkp OwpleHRlcm4gdm9pZCBscnVfY2FjaGVfZGVsKHN0cnVjdCBwYWdlICopIF9fYXR0cmlidXRlX18o KHJlZ3Bhcm0oMykpKTsKCmV4dGVybiB2b2lkIGRlYWN0aXZhdGVfcGFnZShzdHJ1Y3QgcGFnZSAq KSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVybiB2b2lkIGFjdGl2YXRlX3BhZ2Uo c3RydWN0IHBhZ2UgKikgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwoKZXh0ZXJuIHZvaWQg c3dhcF9zZXR1cCh2b2lkKTsKCgpleHRlcm4gd2FpdF9xdWV1ZV9oZWFkX3Qga3N3YXBkX3dhaXQ7 CmV4dGVybiBpbnQgdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZV90ICosIHVuc2lnbmVkIGludCwgdW5z aWduZWQgaW50KSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CgoKZXh0ZXJuIHZvaWQgcndf c3dhcF9wYWdlKGludCwgc3RydWN0IHBhZ2UgKik7CmV4dGVybiB2b2lkIHJ3X3N3YXBfcGFnZV9u b2xvY2soaW50LCBzd3BfZW50cnlfdCwgY2hhciAqKTsKCgoKCgoKZXh0ZXJuIHZvaWQgc2hvd19z d2FwX2NhY2hlX2luZm8odm9pZCk7CgpleHRlcm4gaW50IGFkZF90b19zd2FwX2NhY2hlKHN0cnVj dCBwYWdlICosIHN3cF9lbnRyeV90KTsKZXh0ZXJuIHZvaWQgX19kZWxldGVfZnJvbV9zd2FwX2Nh Y2hlKHN0cnVjdCBwYWdlICpwYWdlKTsKZXh0ZXJuIHZvaWQgZGVsZXRlX2Zyb21fc3dhcF9jYWNo ZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CmV4dGVybiB2b2lkIGZyZWVfcGFnZV9hbmRfc3dhcF9jYWNo ZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CmV4dGVybiBzdHJ1Y3QgcGFnZSAqIGxvb2t1cF9zd2FwX2Nh Y2hlKHN3cF9lbnRyeV90KTsKZXh0ZXJuIHN0cnVjdCBwYWdlICogcmVhZF9zd2FwX2NhY2hlX2Fz eW5jKHN3cF9lbnRyeV90KTsKCgpleHRlcm4gaW50IG91dF9vZl9tZW1vcnkodm9pZCk7CmV4dGVy biB2b2lkIG9vbV9raWxsKHZvaWQpOwoKCmV4dGVybiBpbnQgdG90YWxfc3dhcF9wYWdlczsKZXh0 ZXJuIHVuc2lnbmVkIGludCBucl9zd2FwZmlsZXM7CmV4dGVybiBzdHJ1Y3Qgc3dhcF9pbmZvX3N0 cnVjdCBzd2FwX2luZm9bXTsKZXh0ZXJuIGludCBpc19zd2FwX3BhcnRpdGlvbihrZGV2X3QpOwpl eHRlcm4gdm9pZCBzaV9zd2FwaW5mbyhzdHJ1Y3Qgc3lzaW5mbyAqKTsKZXh0ZXJuIHN3cF9lbnRy eV90IGdldF9zd2FwX3BhZ2Uodm9pZCk7CmV4dGVybiB2b2lkIGdldF9zd2FwaGFuZGxlX2luZm8o c3dwX2VudHJ5X3QsIHVuc2lnbmVkIGxvbmcgKiwga2Rldl90ICosCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW5vZGUgKiopOwpleHRlcm4gaW50IHN3YXBf ZHVwbGljYXRlKHN3cF9lbnRyeV90KTsKZXh0ZXJuIGludCBzd2FwX2NvdW50KHN0cnVjdCBwYWdl ICopOwpleHRlcm4gaW50IHZhbGlkX3N3YXBoYW5kbGVzKHN3cF9lbnRyeV90LCB1bnNpZ25lZCBs b25nICopOwpleHRlcm4gdm9pZCBzd2FwX2ZyZWUoc3dwX2VudHJ5X3QpOwpzdHJ1Y3Qgc3dhcF9s aXN0X3QgewogICAgICAgIGludCBoZWFkOwogICAgICAgIGludCBuZXh0Owp9OwpleHRlcm4gc3Ry dWN0IHN3YXBfbGlzdF90IHN3YXBfbGlzdDsKIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSBs b25nIHN5c19zd2Fwb2ZmKGNvbnN0IGNoYXIgKik7CiBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDAp KSkgbG9uZyBzeXNfc3dhcG9uKGNvbnN0IGNoYXIgKiwgaW50KTsKCmV4dGVybiBzcGlubG9ja190 IHBhZ2VtYXBfbHJ1X2xvY2s7CgpleHRlcm4gdm9pZCBtYXJrX3BhZ2VfYWNjZXNzZWQoc3RydWN0 IHBhZ2UgKikgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwojIDIyMCAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc3dhcC5oIgpleHRlcm4gc3BpbmxvY2tfdCBz d2FwbG9jazsKCgoKCgoKZXh0ZXJuIHZvaWQgc2htZW1fdW51c2Uoc3dwX2VudHJ5X3QgZW50cnks IHN0cnVjdCBwYWdlICpwYWdlKTsKIyAxNCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2lu Y2x1ZGUvbGludXgvbW0uaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNs dWRlL2xpbnV4L3JidHJlZS5oIiAxCiMgMTUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9p bmNsdWRlL2xpbnV4L21tLmgiIDIKCmV4dGVybiB1bnNpZ25lZCBsb25nIG1heF9tYXBucjsKZXh0 ZXJuIHVuc2lnbmVkIGxvbmcgbnVtX3BoeXNwYWdlczsKZXh0ZXJuIHZvaWQgKiBoaWdoX21lbW9y eTsKZXh0ZXJuIGludCBwYWdlX2NsdXN0ZXI7CgpleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBhY3Rp dmVfbGlzdDsKZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgaW5hY3RpdmVfbGlzdDsKCiMgMSAiL3Vz ci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3BhZ2UuaCIgMQojIDI1ICIvdXNy L3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9tbS5oIiAyCiMgMSAiL3Vzci9z cmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3BndGFibGUuaCIgMQoKCgojIDEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2NvbmZpZy5oIiAxCiMgNSAi L3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3BndGFibGUuaCIgMgojIDE2 ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vcGd0YWJsZS5oIgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCIgMQoj IDE3ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vcGd0YWJsZS5oIiAy CiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL2ZpeG1hcC5oIiAx CiMgMTggIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgi IDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC90aHJlYWRz LmgiIDEKIyAxOSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3BndGFi bGUuaCIgMgoKCgoKCmV4dGVybiBwZ2RfdCBzd2FwcGVyX3BnX2RpclsxMDI0XTsKZXh0ZXJuIHZv aWQgcGFnaW5nX2luaXQodm9pZCk7CiMgNjcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9p bmNsdWRlL2FzbS9wZ3RhYmxlLmgiCmV4dGVybiB1bnNpZ25lZCBsb25nIHBna2Vybl9tYXNrOwoj IDk1ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vcGd0YWJsZS5oIgpl eHRlcm4gdW5zaWduZWQgbG9uZyBlbXB0eV96ZXJvX3BhZ2VbMTAyNF07CiMgMTA5ICIvdXNyL3Ny Yy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vcGd0YWJsZS5oIgojIDEgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC5oIiAxCiMgMzIg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC5o IgpzdGF0aWMgaW5saW5lIGludCBwZ2Rfbm9uZShwZ2RfdCBwZ2QpIHsgcmV0dXJuIDA7IH0Kc3Rh dGljIGlubGluZSBpbnQgcGdkX2JhZChwZ2RfdCBwZ2QpIHsgcmV0dXJuIDA7IH0Kc3RhdGljIGlu bGluZSBpbnQgcGdkX3ByZXNlbnQocGdkX3QgcGdkKSB7IHJldHVybiAxOyB9CiMgNTMgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC5oIgpzdGF0 aWMgaW5saW5lIHBtZF90ICogcG1kX29mZnNldChwZ2RfdCAqIGRpciwgdW5zaWduZWQgbG9uZyBh ZGRyZXNzKQp7CiAgICAgICAgcmV0dXJuIChwbWRfdCAqKSBkaXI7Cn0KIyAxMTAgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgiIDIKIyAyNDQgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgiCmV4dGVybiB1bnNp Z25lZCBsb25nIHBnMFsxMDI0XTsKIyAyNjUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9p bmNsdWRlL2FzbS9wZ3RhYmxlLmgiCnN0YXRpYyBpbmxpbmUgaW50IHB0ZV9yZWFkKHB0ZV90IHB0 ZSkgeyByZXR1cm4gKHB0ZSkucHRlX2xvdyAmIDB4MDA0OyB9CnN0YXRpYyBpbmxpbmUgaW50IHB0 ZV9leGVjKHB0ZV90IHB0ZSkgeyByZXR1cm4gKHB0ZSkucHRlX2xvdyAmIDB4MDA0OyB9CnN0YXRp YyBpbmxpbmUgaW50IHB0ZV9kaXJ0eShwdGVfdCBwdGUpIHsgcmV0dXJuIChwdGUpLnB0ZV9sb3cg JiAweDA0MDsgfQpzdGF0aWMgaW5saW5lIGludCBwdGVfeW91bmcocHRlX3QgcHRlKSB7IHJldHVy biAocHRlKS5wdGVfbG93ICYgMHgwMjA7IH0Kc3RhdGljIGlubGluZSBpbnQgcHRlX3dyaXRlKHB0 ZV90IHB0ZSkgeyByZXR1cm4gKHB0ZSkucHRlX2xvdyAmIDB4MDAyOyB9CgpzdGF0aWMgaW5saW5l IHB0ZV90IHB0ZV9yZHByb3RlY3QocHRlX3QgcHRlKSB7IChwdGUpLnB0ZV9sb3cgJj0gfjB4MDA0 OyByZXR1cm4gcHRlOyB9CnN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX2V4cHJvdGVjdChwdGVfdCBw dGUpIHsgKHB0ZSkucHRlX2xvdyAmPSB+MHgwMDQ7IHJldHVybiBwdGU7IH0Kc3RhdGljIGlubGlu ZSBwdGVfdCBwdGVfbWtjbGVhbihwdGVfdCBwdGUpIHsgKHB0ZSkucHRlX2xvdyAmPSB+MHgwNDA7 IHJldHVybiBwdGU7IH0Kc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtvbGQocHRlX3QgcHRlKSB7 IChwdGUpLnB0ZV9sb3cgJj0gfjB4MDIwOyByZXR1cm4gcHRlOyB9CnN0YXRpYyBpbmxpbmUgcHRl X3QgcHRlX3dycHJvdGVjdChwdGVfdCBwdGUpIHsgKHB0ZSkucHRlX2xvdyAmPSB+MHgwMDI7IHJl dHVybiBwdGU7IH0Kc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtyZWFkKHB0ZV90IHB0ZSkgeyAo cHRlKS5wdGVfbG93IHw9IDB4MDA0OyByZXR1cm4gcHRlOyB9CnN0YXRpYyBpbmxpbmUgcHRlX3Qg cHRlX21rZXhlYyhwdGVfdCBwdGUpIHsgKHB0ZSkucHRlX2xvdyB8PSAweDAwNDsgcmV0dXJuIHB0 ZTsgfQpzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2RpcnR5KHB0ZV90IHB0ZSkgeyAocHRlKS5w dGVfbG93IHw9IDB4MDQwOyByZXR1cm4gcHRlOyB9CnN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21r eW91bmcocHRlX3QgcHRlKSB7IChwdGUpLnB0ZV9sb3cgfD0gMHgwMjA7IHJldHVybiBwdGU7IH0K c3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUpIHsgKHB0ZSkucHRlX2xv dyB8PSAweDAwMjsgcmV0dXJuIHB0ZTsgfQoKc3RhdGljIGlubGluZSBpbnQgcHRlcF90ZXN0X2Fu ZF9jbGVhcl9kaXJ0eShwdGVfdCAqcHRlcCkgeyByZXR1cm4gdGVzdF9hbmRfY2xlYXJfYml0KDYs IHB0ZXApOyB9CnN0YXRpYyBpbmxpbmUgaW50IHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcocHRl X3QgKnB0ZXApIHsgcmV0dXJuIHRlc3RfYW5kX2NsZWFyX2JpdCg1LCBwdGVwKTsgfQpzdGF0aWMg aW5saW5lIHZvaWQgcHRlcF9zZXRfd3Jwcm90ZWN0KHB0ZV90ICpwdGVwKSB7IGNsZWFyX2JpdCgx LCBwdGVwKTsgfQpzdGF0aWMgaW5saW5lIHZvaWQgcHRlcF9ta2RpcnR5KHB0ZV90ICpwdGVwKSB7 IHNldF9iaXQoNiwgcHRlcCk7IH0KIyAyOTcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9p bmNsdWRlL2FzbS9wZ3RhYmxlLmgiCnN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21vZGlmeShwdGVf dCBwdGUsIHBncHJvdF90IG5ld3Byb3QpCnsKICAgICAgICBwdGUucHRlX2xvdyAmPSAoKH4oKDFV TCA8PCAxMiktMSkpIHwgMHgwMjAgfCAweDA0MCk7CiAgICAgICAgcHRlLnB0ZV9sb3cgfD0gKChu ZXdwcm90KS5wZ3Byb3QpOwogICAgICAgIHJldHVybiBwdGU7Cn0KIyAyNiAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvbW0uaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9hdG9taWMuaCIgMQojIDI3ICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9tbS5oIiAyCiMgNDMgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L21tLmgiCnN0cnVjdCB2bV9hcmVhX3N0cnVjdCB7 CiAgICAgICAgc3RydWN0IG1tX3N0cnVjdCAqIHZtX21tOwogICAgICAgIHVuc2lnbmVkIGxvbmcg dm1fc3RhcnQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyB2bV9lbmQ7CgoKICAgICAgICBzdHJ1Y3Qg dm1fYXJlYV9zdHJ1Y3QgKnZtX25leHQ7CgogICAgICAgIHBncHJvdF90IHZtX3BhZ2VfcHJvdDsK ICAgICAgICB1bnNpZ25lZCBsb25nIHZtX2ZsYWdzOwoKICAgICAgICByYl9ub2RlX3Qgdm1fcmI7 CgoKCgoKCiAgICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bV9uZXh0X3NoYXJlOwogICAg ICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtX3BwcmV2X3NoYXJlOwoKCiAgICAgICAgc3Ry dWN0IHZtX29wZXJhdGlvbnNfc3RydWN0ICogdm1fb3BzOwoKCiAgICAgICAgdW5zaWduZWQgbG9u ZyB2bV9wZ29mZjsKCiAgICAgICAgc3RydWN0IGZpbGUgKiB2bV9maWxlOwogICAgICAgIHVuc2ln bmVkIGxvbmcgdm1fcmFlbmQ7CiAgICAgICAgdm9pZCAqIHZtX3ByaXZhdGVfZGF0YTsKfTsKIyAx MTcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L21tLmgiCmV4dGVy biBwZ3Byb3RfdCBwcm90ZWN0aW9uX21hcFsxNl07CgoKCgoKCgpzdHJ1Y3Qgdm1fb3BlcmF0aW9u c19zdHJ1Y3QgewogICAgICAgIHZvaWQgKCpvcGVuKShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiBh cmVhKTsKICAgICAgICB2b2lkICgqY2xvc2UpKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIGFyZWEp OwogICAgICAgIHN0cnVjdCBwYWdlICogKCpub3BhZ2UpKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq IGFyZWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgaW50IHdyaXRlX2FjY2Vzcyk7Cn07CiMgMTQ2 ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9tbS5oIgp0eXBlZGVm IHN0cnVjdCBwYWdlIHsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAgICAgICAgc3Ry dWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CiAgICAgICAgdW5zaWduZWQgbG9uZyBpbmRleDsK ICAgICAgICBzdHJ1Y3QgcGFnZSAqbmV4dF9oYXNoOwoKICAgICAgICBhdG9taWNfdCBjb3VudDsK ICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwoKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGxy dTsKCiAgICAgICAgd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKICAgICAgICBzdHJ1Y3QgcGFnZSAq KnBwcmV2X2hhc2g7CiAgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICogYnVmZmVyczsKICAgICAg ICB2b2lkICp2aXJ0dWFsOwoKICAgICAgICBzdHJ1Y3Qgem9uZV9zdHJ1Y3QgKnpvbmU7Cn0gbWVt X21hcF90OwojIDI5OSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgv bW0uaCIKZXh0ZXJuIHZvaWQgX19zZXRfcGFnZV9kaXJ0eShzdHJ1Y3QgcGFnZSAqKTsKCnN0YXRp YyBpbmxpbmUgdm9pZCBzZXRfcGFnZV9kaXJ0eShzdHJ1Y3QgcGFnZSAqIHBhZ2UpCnsKICAgICAg ICBpZiAoIXRlc3RfYW5kX3NldF9iaXQoNCwgJnBhZ2UtPmZsYWdzKSkKICAgICAgICAgICAgICAg IF9fc2V0X3BhZ2VfZGlydHkocGFnZSk7Cn0KIyAzNjQgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9s aW51eC9pbmNsdWRlL2xpbnV4L21tLmgiCmV4dGVybiBtZW1fbWFwX3QgKiBtZW1fbWFwOwoKCgoK CgoKZXh0ZXJuIHN0cnVjdCBwYWdlICogX2FsbG9jX3BhZ2VzKHVuc2lnbmVkIGludCBnZnBfbWFz aywgdW5zaWduZWQgaW50IG9yZGVyKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVy biBzdHJ1Y3QgcGFnZSAqIF9fYWxsb2NfcGFnZXModW5zaWduZWQgaW50IGdmcF9tYXNrLCB1bnNp Z25lZCBpbnQgb3JkZXIsIHpvbmVsaXN0X3QgKnpvbmVsaXN0KSBfX2F0dHJpYnV0ZV9fKChyZWdw YXJtKDMpKSk7CmV4dGVybiBzdHJ1Y3QgcGFnZSAqIGFsbG9jX3BhZ2VzX25vZGUoaW50IG5pZCwg dW5zaWduZWQgaW50IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpOwoKc3RhdGljIGlubGlu ZSBzdHJ1Y3QgcGFnZSAqIGFsbG9jX3BhZ2VzKHVuc2lnbmVkIGludCBnZnBfbWFzaywgdW5zaWdu ZWQgaW50IG9yZGVyKQp7CgoKCiAgICAgICAgaWYgKG9yZGVyID49IDEwKQogICAgICAgICAgICAg ICAgcmV0dXJuICgodm9pZCAqKTApOwogICAgICAgIHJldHVybiBfYWxsb2NfcGFnZXMoZ2ZwX21h c2ssIG9yZGVyKTsKfQoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBfX2dldF9mcmVlX3BhZ2VzKHVu c2lnbmVkIGludCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKSBfX2F0dHJpYnV0ZV9fKChy ZWdwYXJtKDMpKSk7CmV4dGVybiB1bnNpZ25lZCBsb25nIGdldF96ZXJvZWRfcGFnZSh1bnNpZ25l ZCBpbnQgZ2ZwX21hc2spIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKIyA0MDUgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L21tLmgiCmV4dGVybiB2b2lkIF9f ZnJlZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKSBfX2F0dHJp YnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVybiB2b2lkIGZyZWVfcGFnZXModW5zaWduZWQgbG9u ZyBhZGRyLCB1bnNpZ25lZCBpbnQgb3JkZXIpIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsK CgoKCmV4dGVybiB2b2lkIHNob3dfZnJlZV9hcmVhcyh2b2lkKTsKZXh0ZXJuIHZvaWQgc2hvd19m cmVlX2FyZWFzX25vZGUocGdfZGF0YV90ICpwZ2RhdCk7CgpleHRlcm4gdm9pZCBjbGVhcl9wYWdl X3RhYmxlcyhzdHJ1Y3QgbW1fc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIGludCk7CgpzdHJ1Y3Qg cGFnZSAqIHNobWVtX25vcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEsIHVuc2lnbmVk IGxvbmcgYWRkcmVzcywgaW50IG5vX3NoYXJlKTsKc3RydWN0IGZpbGUgKnNobWVtX2ZpbGVfc2V0 dXAoY2hhciAqIG5hbWUsIGxvZmZfdCBzaXplKTsKZXh0ZXJuIHZvaWQgc2htZW1fbG9jayhzdHJ1 Y3QgZmlsZSAqIGZpbGUsIGludCBsb2NrKTsKZXh0ZXJuIGludCBzaG1lbV96ZXJvX3NldHVwKHN0 cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKCmV4dGVybiB2b2lkIHphcF9wYWdlX3JhbmdlKHN0cnVj dCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgc2l6 ZSk7CmV4dGVybiBpbnQgY29weV9wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdCwgc3Ry dWN0IG1tX3N0cnVjdCAqc3JjLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CmV4dGVybiBp bnQgcmVtYXBfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIGZyb20sIHVuc2lnbmVkIGxvbmcgdG8s IHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgcHJvdCk7CmV4dGVybiBpbnQgemVyb21hcF9w YWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgZnJvbSwgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3Rf dCBwcm90KTsKCmV4dGVybiBpbnQgdm10cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgbG9m Zl90IG9mZnNldCk7CmV4dGVybiBwbWRfdCAqX19wbWRfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAq bW0sIHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykgX19hdHRyaWJ1dGVfXygocmVn cGFybSgzKSkpOwpleHRlcm4gcHRlX3QgKnB0ZV9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwg cG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJt KDMpKSk7CmV4dGVybiBpbnQgaGFuZGxlX21tX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLHN0 cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCB3cml0 ZV9hY2Nlc3MpOwpleHRlcm4gaW50IG1ha2VfcGFnZXNfcHJlc2VudCh1bnNpZ25lZCBsb25nIGFk ZHIsIHVuc2lnbmVkIGxvbmcgZW5kKTsKZXh0ZXJuIGludCBhY2Nlc3NfcHJvY2Vzc192bShzdHJ1 Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpidWYsIGludCBs ZW4sIGludCB3cml0ZSk7CmV4dGVybiBpbnQgcHRyYWNlX3JlYWRkYXRhKHN0cnVjdCB0YXNrX3N0 cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIHNyYywgY2hhciAqZHN0LCBpbnQgbGVuKTsKZXh0ZXJu IGludCBwdHJhY2Vfd3JpdGVkYXRhKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBjaGFyICogc3Jj LCB1bnNpZ25lZCBsb25nIGRzdCwgaW50IGxlbik7CmV4dGVybiBpbnQgcHRyYWNlX2F0dGFjaChz dHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CmV4dGVybiBpbnQgcHRyYWNlX2RldGFjaChzdHJ1Y3Qg dGFza19zdHJ1Y3QgKiwgdW5zaWduZWQgaW50KTsKZXh0ZXJuIHZvaWQgcHRyYWNlX2Rpc2FibGUo c3RydWN0IHRhc2tfc3RydWN0ICopOwoKCgoKCgpzdGF0aWMgaW5saW5lIHBtZF90ICpwbWRfYWxs b2Moc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVz cykKewogICAgICAgIGlmIChwZ2Rfbm9uZSgqcGdkKSkKICAgICAgICAgICAgICAgIHJldHVybiBf X3BtZF9hbGxvYyhtbSwgcGdkLCBhZGRyZXNzKTsKICAgICAgICByZXR1cm4gcG1kX29mZnNldChw Z2QsIGFkZHJlc3MpOwp9CgpleHRlcm4gaW50IHBndF9jYWNoZV93YXRlclsyXTsKZXh0ZXJuIGlu dCBjaGVja19wZ3RfY2FjaGUodm9pZCk7CgpleHRlcm4gdm9pZCBmcmVlX2FyZWFfaW5pdCh1bnNp Z25lZCBsb25nICogem9uZXNfc2l6ZSk7CmV4dGVybiB2b2lkIGZyZWVfYXJlYV9pbml0X25vZGUo aW50IG5pZCwgcGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHBhZ2UgKnBtYXAsCiAgICAgICAgdW5z aWduZWQgbG9uZyAqIHpvbmVzX3NpemUsIHVuc2lnbmVkIGxvbmcgem9uZV9zdGFydF9wYWRkciwK ICAgICAgICB1bnNpZ25lZCBsb25nICp6aG9sZXNfc2l6ZSk7CmV4dGVybiB2b2lkIG1lbV9pbml0 KHZvaWQpOwpleHRlcm4gdm9pZCBzaG93X21lbSh2b2lkKTsKZXh0ZXJuIHZvaWQgc2lfbWVtaW5m byhzdHJ1Y3Qgc3lzaW5mbyAqIHZhbCk7CmV4dGVybiB2b2lkIHN3YXBpbl9yZWFkYWhlYWQoc3dw X2VudHJ5X3QpOwoKZXh0ZXJuIHN0cnVjdCBhZGRyZXNzX3NwYWNlIHN3YXBwZXJfc3BhY2U7CgoK c3RhdGljIGlubGluZSBpbnQgaXNfcGFnZV9jYWNoZV9mcmVlYWJsZShzdHJ1Y3QgcGFnZSAqIHBh Z2UpCnsKICAgICAgICByZXR1cm4gKCgmKHBhZ2UpLT5jb3VudCktPmNvdW50ZXIpIC0gISFwYWdl LT5idWZmZXJzID09IDE7Cn0KCgoKCgpzdGF0aWMgaW5saW5lIGludCBleGNsdXNpdmVfc3dhcF9w YWdlKHN0cnVjdCBwYWdlICpwYWdlKQp7CiAgICAgICAgaWYgKCEoX19idWlsdGluX2NvbnN0YW50 X3AoMCkgPyBjb25zdGFudF90ZXN0X2JpdCgoMCksKCYocGFnZSktPmZsYWdzKSkgOiB2YXJpYWJs ZV90ZXN0X2JpdCgoMCksKCYocGFnZSktPmZsYWdzKSkpKQogICAgICAgICAgICAgICAgX19hc21f XyBfX3ZvbGF0aWxlX18oIi5ieXRlIDB4MGYsMHgwYiIpOwogICAgICAgIGlmICghKChwYWdlKS0+ bWFwcGluZyA9PSAmc3dhcHBlcl9zcGFjZSkpCiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAg ICAgICBpZiAoKCgmKHBhZ2UpLT5jb3VudCktPmNvdW50ZXIpIC0gISFwYWdlLT5idWZmZXJzICE9 IDIpCiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICByZXR1cm4gc3dhcF9jb3VudChw YWdlKSA9PSAxOwp9CgpleHRlcm4gdm9pZCBfX2ZyZWVfcHRlKHB0ZV90KTsKCgpleHRlcm4gdm9p ZCBsb2NrX3ZtYV9tYXBwaW5ncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CmV4dGVybiB2b2lk IHVubG9ja192bWFfbWFwcGluZ3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOwpleHRlcm4gdm9p ZCBpbnNlcnRfdm1fc3RydWN0KHN0cnVjdCBtbV9zdHJ1Y3QgKiwgc3RydWN0IHZtX2FyZWFfc3Ry dWN0ICopOwpleHRlcm4gdm9pZCBfX2luc2VydF92bV9zdHJ1Y3Qoc3RydWN0IG1tX3N0cnVjdCAq LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CmV4dGVybiB2b2lkIGJ1aWxkX21tYXBfcmIoc3Ry dWN0IG1tX3N0cnVjdCAqKTsKZXh0ZXJuIHZvaWQgZXhpdF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3Qg Kik7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBnZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAq LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBs b25nKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGRvX21tYXBfcGdvZmYoc3RydWN0IGZpbGUgKmZp bGUsIHVuc2lnbmVkIGxvbmcgYWRkciwKICAgICAgICB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWdu ZWQgbG9uZyBwcm90LAogICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZywgdW5zaWduZWQgbG9uZyBw Z29mZik7CgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZG9fbW1hcChzdHJ1Y3QgZmlsZSAq ZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLAogICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNp Z25lZCBsb25nIHByb3QsCiAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnLCB1bnNpZ25lZCBsb25n IG9mZnNldCkKewogICAgICAgIHVuc2lnbmVkIGxvbmcgcmV0ID0gLTIyOwogICAgICAgIGlmICgo b2Zmc2V0ICsgKCgobGVuKSsoMVVMIDw8IDEyKS0xKSYofigoMVVMIDw8IDEyKS0xKSkpKSA8IG9m ZnNldCkKICAgICAgICAgICAgICAgIGdvdG8gb3V0OwogICAgICAgIGlmICghKG9mZnNldCAmIH4o figoMVVMIDw8IDEyKS0xKSkpKQogICAgICAgICAgICAgICAgcmV0ID0gZG9fbW1hcF9wZ29mZihm aWxlLCBhZGRyLCBsZW4sIHByb3QsIGZsYWcsIG9mZnNldCA+PiAxMik7Cm91dDoKICAgICAgICBy ZXR1cm4gcmV0Owp9CgpleHRlcm4gaW50IGRvX211bm1hcChzdHJ1Y3QgbW1fc3RydWN0ICosIHVu c2lnbmVkIGxvbmcsIHNpemVfdCk7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBkb19icmsodW5zaWdu ZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CgpzdGF0aWMgaW5saW5lIHZvaWQgX192bWFfdW5saW5r KHN0cnVjdCBtbV9zdHJ1Y3QgKiBtbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hLCBzdHJ1 Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiBwcmV2KQp7CiAgICAgICAgcHJldi0+dm1fbmV4dCA9IHZtYS0+ dm1fbmV4dDsKICAgICAgICByYl9lcmFzZSgmdm1hLT52bV9yYiwgJm1tLT5tbV9yYik7CiAgICAg ICAgaWYgKG1tLT5tbWFwX2NhY2hlID09IHZtYSkKICAgICAgICAgICAgICAgIG1tLT5tbWFwX2Nh Y2hlID0gcHJldjsKfQoKc3RhdGljIGlubGluZSBpbnQgY2FuX3ZtYV9tZXJnZShzdHJ1Y3Qgdm1f YXJlYV9zdHJ1Y3QgKiB2bWEsIHVuc2lnbmVkIGxvbmcgdm1fZmxhZ3MpCnsKICAgICAgICBpZiAo IXZtYS0+dm1fZmlsZSAmJiB2bWEtPnZtX2ZsYWdzID09IHZtX2ZsYWdzKQogICAgICAgICAgICAg ICAgcmV0dXJuIDE7CiAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgcmV0dXJuIDA7Cn0KCnN0 cnVjdCB6b25lX3Q7CgpleHRlcm4gdm9pZCByZW1vdmVfaW5vZGVfcGFnZShzdHJ1Y3QgcGFnZSAq KTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGFnZV91bnVzZShzdHJ1Y3QgcGFnZSAqKTsKZXh0ZXJu IHZvaWQgdHJ1bmNhdGVfaW5vZGVfcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwgbG9mZl90 KTsKCgpleHRlcm4gaW50IGZpbGVtYXBfc3luYyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5z aWduZWQgbG9uZywgc2l6ZV90LCB1bnNpZ25lZCBpbnQpOwpleHRlcm4gc3RydWN0IHBhZ2UgKmZp bGVtYXBfbm9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCBpbnQp OwojIDU3NSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvbW0uaCIK c3RhdGljIGlubGluZSBpbnQgZXhwYW5kX3N0YWNrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZt YSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQp7CiAgICAgICAgdW5zaWduZWQgbG9uZyBncm93OwoK CgoKCgogICAgICAgIGFkZHJlc3MgJj0gKH4oKDFVTCA8PCAxMiktMSkpOwogICAgICAgIGdyb3cg PSAodm1hLT52bV9zdGFydCAtIGFkZHJlc3MpID4+IDEyOwogICAgICAgIGlmICh2bWEtPnZtX2Vu ZCAtIGFkZHJlc3MgPiBnZXRfY3VycmVudCgpLT5ybGltWzNdLnJsaW1fY3VyIHx8CiAgICAgICAg ICAgICgodm1hLT52bV9tbS0+dG90YWxfdm0gKyBncm93KSA8PCAxMikgPiBnZXRfY3VycmVudCgp LT5ybGltWzldLnJsaW1fY3VyKQogICAgICAgICAgICAgICAgcmV0dXJuIC0xMjsKICAgICAgICBz cGluX2xvY2soJnZtYS0+dm1fbW0tPnBhZ2VfdGFibGVfbG9jayk7CiAgICAgICAgdm1hLT52bV9z dGFydCA9IGFkZHJlc3M7CiAgICAgICAgdm1hLT52bV9wZ29mZiAtPSBncm93OwogICAgICAgIHZt YS0+dm1fbW0tPnRvdGFsX3ZtICs9IGdyb3c7CiAgICAgICAgaWYgKHZtYS0+dm1fZmxhZ3MgJiAw eDAwMDAyMDAwKQogICAgICAgICAgICAgICAgdm1hLT52bV9tbS0+bG9ja2VkX3ZtICs9IGdyb3c7 CiAgICAgICAgc3Bpbl91bmxvY2soJnZtYS0+dm1fbW0tPnBhZ2VfdGFibGVfbG9jayk7CiAgICAg ICAgcmV0dXJuIDA7Cn0KCgpleHRlcm4gc3RydWN0IHZtX2FyZWFfc3RydWN0ICogZmluZF92bWEo c3RydWN0IG1tX3N0cnVjdCAqIG1tLCB1bnNpZ25lZCBsb25nIGFkZHIpOwpleHRlcm4gc3RydWN0 IHZtX2FyZWFfc3RydWN0ICogZmluZF92bWFfcHJldihzdHJ1Y3QgbW1fc3RydWN0ICogbW0sIHVu c2lnbmVkIGxvbmcgYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqcHByZXYpOwoKCgpzdGF0aWMgaW5saW5lIHN0 cnVjdCB2bV9hcmVhX3N0cnVjdCAqIGZpbmRfdm1hX2ludGVyc2VjdGlvbihzdHJ1Y3QgbW1fc3Ry dWN0ICogbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnRfYWRkciwgdW5zaWduZWQgbG9uZyBlbmRfYWRk cikKewogICAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSA9IGZpbmRfdm1hKG1tLHN0 YXJ0X2FkZHIpOwoKICAgICAgICBpZiAodm1hICYmIGVuZF9hZGRyIDw9IHZtYS0+dm1fc3RhcnQp CiAgICAgICAgICAgICAgICB2bWEgPSAoKHZvaWQgKikwKTsKICAgICAgICByZXR1cm4gdm1hOwp9 CgpleHRlcm4gc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX2V4dGVuZF92bWEoc3RydWN0IG1t X3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcik7CiMgMTUgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3NsYWIuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2NhY2hlLmgiIDEKIyAxNiAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc2xhYi5oIiAyCiMgNDggIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3NsYWIuaCIKZXh0ZXJuIHZvaWQga21lbV9jYWNo ZV9pbml0KHZvaWQpOwpleHRlcm4gdm9pZCBrbWVtX2NhY2hlX3NpemVzX2luaXQodm9pZCk7Cgpl eHRlcm4ga21lbV9jYWNoZV90ICprbWVtX2ZpbmRfZ2VuZXJhbF9jYWNoZXAoc2l6ZV90LCBpbnQg Z2ZwZmxhZ3MpOwpleHRlcm4ga21lbV9jYWNoZV90ICprbWVtX2NhY2hlX2NyZWF0ZShjb25zdCBj aGFyICosIHNpemVfdCwgc2l6ZV90LCB1bnNpZ25lZCBsb25nLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2b2lkICgqKSh2b2lkICosIGttZW1fY2FjaGVfdCAqLCB1bnNp Z25lZCBsb25nKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAo Kikodm9pZCAqLCBrbWVtX2NhY2hlX3QgKiwgdW5zaWduZWQgbG9uZykpOwpleHRlcm4gaW50IGtt ZW1fY2FjaGVfZGVzdHJveShrbWVtX2NhY2hlX3QgKik7CmV4dGVybiBpbnQga21lbV9jYWNoZV9z aHJpbmsoa21lbV9jYWNoZV90ICopOwpleHRlcm4gdm9pZCAqa21lbV9jYWNoZV9hbGxvYyhrbWVt X2NhY2hlX3QgKiwgaW50KTsKZXh0ZXJuIHZvaWQga21lbV9jYWNoZV9mcmVlKGttZW1fY2FjaGVf dCAqLCB2b2lkICopOwoKZXh0ZXJuIHZvaWQgKmttYWxsb2Moc2l6ZV90LCBpbnQpOwpleHRlcm4g dm9pZCBrZnJlZShjb25zdCB2b2lkICopOwoKZXh0ZXJuIGludCBrbWVtX2NhY2hlX3JlYXAoaW50 KSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVybiBpbnQgc2xhYmluZm9fcmVhZF9w cm9jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKTsKZXh0ZXJu IGludCBzbGFiaW5mb193cml0ZV9wcm9jKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyICpi dWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIHZv aWQgKmRhdGEpOwoKCmV4dGVybiBrbWVtX2NhY2hlX3QgKnZtX2FyZWFfY2FjaGVwOwpleHRlcm4g a21lbV9jYWNoZV90ICptbV9jYWNoZXA7CmV4dGVybiBrbWVtX2NhY2hlX3QgKm5hbWVzX2NhY2hl cDsKZXh0ZXJuIGttZW1fY2FjaGVfdCAqZmlsZXNfY2FjaGVwOwpleHRlcm4ga21lbV9jYWNoZV90 ICpmaWxwX2NhY2hlcDsKZXh0ZXJuIGttZW1fY2FjaGVfdCAqZHF1b3RfY2FjaGVwOwpleHRlcm4g a21lbV9jYWNoZV90ICpiaF9jYWNoZXA7CmV4dGVybiBrbWVtX2NhY2hlX3QgKmZzX2NhY2hlcDsK ZXh0ZXJuIGttZW1fY2FjaGVfdCAqc2lnYWN0X2NhY2hlcDsKIyAzMSAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3BjaS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40 LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgiIDEKCgoKc3RydWN0IHNjYXR0ZXJs aXN0IHsKICAgIGNoYXIgKiBhZGRyZXNzOwoKICAgIHN0cnVjdCBwYWdlICogcGFnZTsKICAgIHVu c2lnbmVkIGludCBvZmZzZXQ7CgogICAgZG1hX2FkZHJfdCBkbWFfYWRkcmVzczsKICAgIHVuc2ln bmVkIGludCBsZW5ndGg7Cn07CiMgMzIgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNs dWRlL2FzbS9wY2kuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRl L2xpbnV4L3N0cmluZy5oIiAxCiMgMzMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNs dWRlL2FzbS9wY2kuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRl L2FzbS9pby5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUv bGludXgvY29uZmlnLmgiIDEKIyA1ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVk ZS9hc20vaW8uaCIgMgojIDQ2ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9h c20vaW8uaCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC92 bWFsbG9jLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9s aW51eC9zY2hlZC5oIiAxCiMgNSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUv bGludXgvdm1hbGxvYy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1 ZGUvbGludXgvbW0uaCIgMQojIDYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRl L2xpbnV4L3ZtYWxsb2MuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNs dWRlL2xpbnV4L3NwaW5sb2NrLmgiIDEKIyA3ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgv aW5jbHVkZS9saW51eC92bWFsbG9jLmgiIDIKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xp bnV4L2luY2x1ZGUvYXNtL3BndGFibGUuaCIgMQojIDkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9s aW51eC9pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaCIgMgoKCgoKCnN0cnVjdCB2bV9zdHJ1Y3Qgewog ICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgICAgICAgdm9pZCAqIGFkZHI7CiAgICAgICAg dW5zaWduZWQgbG9uZyBzaXplOwogICAgICAgIHN0cnVjdCB2bV9zdHJ1Y3QgKiBuZXh0Owp9OwoK ZXh0ZXJuIHN0cnVjdCB2bV9zdHJ1Y3QgKiBnZXRfdm1fYXJlYSAodW5zaWduZWQgbG9uZyBzaXpl LCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKZXh0ZXJuIHZvaWQgdmZyZWUodm9pZCAqIGFkZHIpOwpl eHRlcm4gdm9pZCAqIF9fdm1hbGxvYyAodW5zaWduZWQgbG9uZyBzaXplLCBpbnQgZ2ZwX21hc2ss IHBncHJvdF90IHByb3QpOwpleHRlcm4gbG9uZyB2cmVhZChjaGFyICpidWYsIGNoYXIgKmFkZHIs IHVuc2lnbmVkIGxvbmcgY291bnQpOwpleHRlcm4gdm9pZCB2bWZyZWVfYXJlYV9wYWdlcyh1bnNp Z25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CmV4dGVybiBpbnQgdm1hbGxv Y19hcmVhX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgbG9uZyBzaXplLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZ2ZwX21hc2ssIHBncHJvdF90IHByb3Qp OwoKCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCAqIHZtYWxsb2MgKHVuc2lnbmVkIGxvbmcgc2l6ZSkK ewogICAgICAgIHJldHVybiBfX3ZtYWxsb2Moc2l6ZSwgKDB4MjAgfCAweDEwIHwgMHg0MCB8IDB4 ODAgfCAweDEwMCkgfCAweDAyLCAoKHBncHJvdF90KSB7ICgoKDB4MDAxIHwgMHgwMDIgfCAweDA0 MCB8IDB4MDIwKSkgfCAweDEwMCkgfSApKTsKfQoKCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCAqIHZt YWxsb2NfZG1hICh1bnNpZ25lZCBsb25nIHNpemUpCnsKICAgICAgICByZXR1cm4gX192bWFsbG9j KHNpemUsICgweDIwIHwgMHgxMCB8IDB4NDAgfCAweDgwIHwgMHgxMDApfDB4MDEsICgocGdwcm90 X3QpIHsgKCgoMHgwMDEgfCAweDAwMiB8IDB4MDQwIHwgMHgwMjApKSB8IDB4MTAwKSB9ICkpOwp9 CgoKCgoKc3RhdGljIGlubGluZSB2b2lkICogdm1hbGxvY18zMih1bnNpZ25lZCBsb25nIHNpemUp CnsKICAgICAgICByZXR1cm4gX192bWFsbG9jKHNpemUsICgweDIwIHwgMHgxMCB8IDB4NDAgfCAw eDgwIHwgMHgxMDApLCAoKHBncHJvdF90KSB7ICgoKDB4MDAxIHwgMHgwMDIgfCAweDA0MCB8IDB4 MDIwKSkgfCAweDEwMCkgfSApKTsKfQoKCgoKCmV4dGVybiByd2xvY2tfdCB2bWxpc3RfbG9jazsK CmV4dGVybiBzdHJ1Y3Qgdm1fc3RydWN0ICogdm1saXN0OwojIDQ3ICIvdXNyL3NyYy9saW51eC0y LjQuMTMvbGludXgvaW5jbHVkZS9hc20vaW8uaCIgMgojIDY2ICIvdXNyL3NyYy9saW51eC0yLjQu MTMvbGludXgvaW5jbHVkZS9hc20vaW8uaCIKc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZp cnRfdG9fcGh5cyh2b2xhdGlsZSB2b2lkICogYWRkcmVzcykKewogICAgICAgIHJldHVybiAoKHVu c2lnbmVkIGxvbmcpKGFkZHJlc3MpLSgodW5zaWduZWQgbG9uZykoMHhDMDAwMDAwMCkpKTsKfQoK c3RhdGljIGlubGluZSB2b2lkICogcGh5c190b192aXJ0KHVuc2lnbmVkIGxvbmcgYWRkcmVzcykK ewogICAgICAgIHJldHVybiAoKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKGFkZHJlc3MpKygodW5z aWduZWQgbG9uZykoMHhDMDAwMDAwMCkpKSk7Cn0KCgoKCgoKZXh0ZXJuIHZvaWQgKiBfX2lvcmVt YXAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9u ZyBmbGFncyk7CgpzdGF0aWMgaW5saW5lIHZvaWQgKiBpb3JlbWFwICh1bnNpZ25lZCBsb25nIG9m ZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKQp7CiAgICAgICAgcmV0dXJuIF9faW9yZW1hcChvZmZz ZXQsIHNpemUsIDApOwp9CgoKCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCAqIGlvcmVtYXBfbm9jYWNo ZSAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKewogICAgICAgIHJl dHVybiBfX2lvcmVtYXAob2Zmc2V0LCBzaXplLCAweDAxMCk7Cn0KCmV4dGVybiB2b2lkIGlvdW5t YXAodm9pZCAqYWRkcik7CiMgMTYwICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVk ZS9hc20vaW8uaCIKc3RhdGljIGlubGluZSBpbnQgY2hlY2tfc2lnbmF0dXJlKHVuc2lnbmVkIGxv bmcgaW9fYWRkciwKICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaWduYXR1cmUsIGludCBs ZW5ndGgpCnsKICAgICAgICBpbnQgcmV0dmFsID0gMDsKICAgICAgICBkbyB7CiAgICAgICAgICAg ICAgICBpZiAoKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoKHZvaWQgKikoaW9fYWRkcikp KSAhPSAqc2lnbmF0dXJlKQogICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG91dDsKICAgICAg ICAgICAgICAgIGlvX2FkZHIrKzsKICAgICAgICAgICAgICAgIHNpZ25hdHVyZSsrOwogICAgICAg ICAgICAgICAgbGVuZ3RoLS07CiAgICAgICAgfSB3aGlsZSAobGVuZ3RoKTsKICAgICAgICByZXR2 YWwgPSAxOwpvdXQ6CiAgICAgICAgcmV0dXJuIHJldHZhbDsKfQoKc3RhdGljIGlubGluZSBpbnQg aXNhX2NoZWNrX3NpZ25hdHVyZSh1bnNpZ25lZCBsb25nIGlvX2FkZHIsCiAgICAgICAgY29uc3Qg dW5zaWduZWQgY2hhciAqc2lnbmF0dXJlLCBpbnQgbGVuZ3RoKQp7CiAgICAgICAgaW50IHJldHZh bCA9IDA7CiAgICAgICAgZG8gewogICAgICAgICAgICAgICAgaWYgKCgqKHZvbGF0aWxlIHVuc2ln bmVkIGNoYXIgKikgKCh2b2lkICopKCgoY2hhciAqKSgoKHVuc2lnbmVkIGxvbmcpKDB4QzAwMDAw MDApKSkpICsgKGlvX2FkZHIpKSkpICE9ICpzaWduYXR1cmUpCiAgICAgICAgICAgICAgICAgICAg ICAgIGdvdG8gb3V0OwogICAgICAgICAgICAgICAgaW9fYWRkcisrOwogICAgICAgICAgICAgICAg c2lnbmF0dXJlKys7CiAgICAgICAgICAgICAgICBsZW5ndGgtLTsKICAgICAgICB9IHdoaWxlIChs ZW5ndGgpOwogICAgICAgIHJldHZhbCA9IDE7Cm91dDoKICAgICAgICByZXR1cm4gcmV0dmFsOwp9 CiMgMjg1ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vaW8uaCIKc3Rh dGljIGlubGluZSB1bnNpZ25lZCBjaGFyIGluYih1bnNpZ25lZCBzaG9ydCBwb3J0KSB7IHVuc2ln bmVkIGNoYXIgX3Y7IF9fYXNtX18gX192b2xhdGlsZV9fICgiaW4iICJiIiAiICUiICJ3IiAiMSwl IiAiIiAiMCIgOiAiPWEiIChfdikgOiAiTmQiIChwb3J0KSApOyByZXR1cm4gX3Y7IH0gc3RhdGlj IGlubGluZSB1bnNpZ25lZCBjaGFyIGluYl9wKHVuc2lnbmVkIHNob3J0IHBvcnQpIHsgdW5zaWdu ZWQgY2hhciBfdjsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJpbiIgImIiICIgJSIgInciICIxLCUi ICIiICIwIiAiXG5vdXRiICUlYWwsJDB4ODAiIDogIj1hIiAoX3YpIDogIk5kIiAocG9ydCkgKTsg cmV0dXJuIF92OyB9CgoKc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBpbncodW5zaWduZWQg c2hvcnQgcG9ydCkgeyB1bnNpZ25lZCBzaG9ydCBfdjsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJp biIgInciICIgJSIgInciICIxLCUiICIiICIwIiA6ICI9YSIgKF92KSA6ICJOZCIgKHBvcnQpICk7 IHJldHVybiBfdjsgfSBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGlud19wKHVuc2lnbmVk IHNob3J0IHBvcnQpIHsgdW5zaWduZWQgc2hvcnQgX3Y7IF9fYXNtX18gX192b2xhdGlsZV9fICgi aW4iICJ3IiAiICUiICJ3IiAiMSwlIiAiIiAiMCIgIlxub3V0YiAlJWFsLCQweDgwIiA6ICI9YSIg KF92KSA6ICJOZCIgKHBvcnQpICk7IHJldHVybiBfdjsgfQoKCnN0YXRpYyBpbmxpbmUgdW5zaWdu ZWQgaW50IGlubCh1bnNpZ25lZCBzaG9ydCBwb3J0KSB7IHVuc2lnbmVkIGludCBfdjsgX19hc21f XyBfX3ZvbGF0aWxlX18gKCJpbiIgImwiICIgJSIgInciICIxLCUiICIiICIwIiA6ICI9YSIgKF92 KSA6ICJOZCIgKHBvcnQpICk7IHJldHVybiBfdjsgfSBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGlu dCBpbmxfcCh1bnNpZ25lZCBzaG9ydCBwb3J0KSB7IHVuc2lnbmVkIGludCBfdjsgX19hc21fXyBf X3ZvbGF0aWxlX18gKCJpbiIgImwiICIgJSIgInciICIxLCUiICIiICIwIiAiXG5vdXRiICUlYWws JDB4ODAiIDogIj1hIiAoX3YpIDogIk5kIiAocG9ydCkgKTsgcmV0dXJuIF92OyB9CgoKc3RhdGlj IGlubGluZSB2b2lkIG91dGIodW5zaWduZWQgY2hhciB2YWx1ZSwgdW5zaWduZWQgc2hvcnQgcG9y dCkgeyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm91dCIgImIiICIgJSIgImIiICIwLCUiICJ3IiAi MSIgOiA6ICJhIiAodmFsdWUpLCAiTmQiIChwb3J0KSk7IH0gc3RhdGljIGlubGluZSB2b2lkIG91 dGJfcCh1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBzaG9ydCBwb3J0KSB7IF9fYXNtX18g X192b2xhdGlsZV9fICgib3V0IiAiYiIgIiAlIiAiYiIgIjAsJSIgInciICIxIiAiXG5vdXRiICUl YWwsJDB4ODAiIDogOiAiYSIgKHZhbHVlKSwgIk5kIiAocG9ydCkpO30Kc3RhdGljIGlubGluZSB2 b2lkIG91dHcodW5zaWduZWQgc2hvcnQgdmFsdWUsIHVuc2lnbmVkIHNob3J0IHBvcnQpIHsgX19h c21fXyBfX3ZvbGF0aWxlX18gKCJvdXQiICJ3IiAiICUiICJ3IiAiMCwlIiAidyIgIjEiIDogOiAi YSIgKHZhbHVlKSwgIk5kIiAocG9ydCkpOyB9IHN0YXRpYyBpbmxpbmUgdm9pZCBvdXR3X3AodW5z aWduZWQgc2hvcnQgdmFsdWUsIHVuc2lnbmVkIHNob3J0IHBvcnQpIHsgX19hc21fXyBfX3ZvbGF0 aWxlX18gKCJvdXQiICJ3IiAiICUiICJ3IiAiMCwlIiAidyIgIjEiICJcbm91dGIgJSVhbCwkMHg4 MCIgOiA6ICJhIiAodmFsdWUpLCAiTmQiIChwb3J0KSk7fQpzdGF0aWMgaW5saW5lIHZvaWQgb3V0 bCh1bnNpZ25lZCBpbnQgdmFsdWUsIHVuc2lnbmVkIHNob3J0IHBvcnQpIHsgX19hc21fXyBfX3Zv bGF0aWxlX18gKCJvdXQiICJsIiAiICUiICIwLCUiICJ3IiAiMSIgOiA6ICJhIiAodmFsdWUpLCAi TmQiIChwb3J0KSk7IH0gc3RhdGljIGlubGluZSB2b2lkIG91dGxfcCh1bnNpZ25lZCBpbnQgdmFs dWUsIHVuc2lnbmVkIHNob3J0IHBvcnQpIHsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJvdXQiICJs IiAiICUiICIwLCUiICJ3IiAiMSIgIlxub3V0YiAlJWFsLCQweDgwIiA6IDogImEiICh2YWx1ZSks ICJOZCIgKHBvcnQpKTt9CgpzdGF0aWMgaW5saW5lIHZvaWQgaW5zYih1bnNpZ25lZCBzaG9ydCBw b3J0LCB2b2lkICogYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCkgeyBfX2FzbV9fIF9fdm9sYXRp bGVfXyAoInJlcCA7IGlucyIgImIiIDogIj1EIiAoYWRkciksICI9YyIgKGNvdW50KSA6ICJkIiAo cG9ydCksIjAiIChhZGRyKSwiMSIgKGNvdW50KSk7IH0Kc3RhdGljIGlubGluZSB2b2lkIGluc3co dW5zaWduZWQgc2hvcnQgcG9ydCwgdm9pZCAqIGFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpIHsg X19hc21fXyBfX3ZvbGF0aWxlX18gKCJyZXAgOyBpbnMiICJ3IiA6ICI9RCIgKGFkZHIpLCAiPWMi IChjb3VudCkgOiAiZCIgKHBvcnQpLCIwIiAoYWRkciksIjEiIChjb3VudCkpOyB9CnN0YXRpYyBp bmxpbmUgdm9pZCBpbnNsKHVuc2lnbmVkIHNob3J0IHBvcnQsIHZvaWQgKiBhZGRyLCB1bnNpZ25l ZCBsb25nIGNvdW50KSB7IF9fYXNtX18gX192b2xhdGlsZV9fICgicmVwIDsgaW5zIiAibCIgOiAi PUQiIChhZGRyKSwgIj1jIiAoY291bnQpIDogImQiIChwb3J0KSwiMCIgKGFkZHIpLCIxIiAoY291 bnQpKTsgfQoKc3RhdGljIGlubGluZSB2b2lkIG91dHNiKHVuc2lnbmVkIHNob3J0IHBvcnQsIGNv bnN0IHZvaWQgKiBhZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KSB7IF9fYXNtX18gX192b2xhdGls ZV9fICgicmVwIDsgb3V0cyIgImIiIDogIj1TIiAoYWRkciksICI9YyIgKGNvdW50KSA6ICJkIiAo cG9ydCksIjAiIChhZGRyKSwiMSIgKGNvdW50KSk7IH0Kc3RhdGljIGlubGluZSB2b2lkIG91dHN3 KHVuc2lnbmVkIHNob3J0IHBvcnQsIGNvbnN0IHZvaWQgKiBhZGRyLCB1bnNpZ25lZCBsb25nIGNv dW50KSB7IF9fYXNtX18gX192b2xhdGlsZV9fICgicmVwIDsgb3V0cyIgInciIDogIj1TIiAoYWRk ciksICI9YyIgKGNvdW50KSA6ICJkIiAocG9ydCksIjAiIChhZGRyKSwiMSIgKGNvdW50KSk7IH0K c3RhdGljIGlubGluZSB2b2lkIG91dHNsKHVuc2lnbmVkIHNob3J0IHBvcnQsIGNvbnN0IHZvaWQg KiBhZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KSB7IF9fYXNtX18gX192b2xhdGlsZV9fICgicmVw IDsgb3V0cyIgImwiIDogIj1TIiAoYWRkciksICI9YyIgKGNvdW50KSA6ICJkIiAocG9ydCksIjAi IChhZGRyKSwiMSIgKGNvdW50KSk7IH0KIyAzNCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4 L2luY2x1ZGUvYXNtL3BjaS5oIiAyCgpzdHJ1Y3QgcGNpX2RldjsKIyA1MCAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3BjaS5oIgpleHRlcm4gdm9pZCAqcGNpX2FsbG9j X2NvbnNpc3RlbnQoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzaXplX3Qgc2l6ZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUpOwojIDYxICIv dXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vcGNpLmgiCmV4dGVybiB2b2lk IHBjaV9mcmVlX2NvbnNpc3RlbnQoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzaXplX3Qgc2l6ZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBk bWFfaGFuZGxlKTsKCgoKCgoKCnN0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBwY2lfbWFwX3Npbmds ZShzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHZvaWQgKnB0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQp7CiAgICAgICAg aWYgKGRpcmVjdGlvbiA9PSAzKQogICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18o Ii5ieXRlIDB4MGYsMHgwYiIpOwogICAgICAgIHJldHVybiB2aXJ0X3RvX3BoeXMocHRyKTsKfQoj IDg1ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vcGNpLmgiCnN0YXRp YyBpbmxpbmUgdm9pZCBwY2lfdW5tYXBfc2luZ2xlKHN0cnVjdCBwY2lfZGV2ICpod2RldiwgZG1h X2FkZHJfdCBkbWFfYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCnsKICAgICAgICBpZiAoZGlyZWN0aW9uID09IDMpCiAg ICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiLmJ5dGUgMHgwZiwweDBiIik7Cgp9 CgoKCgoKc3RhdGljIGlubGluZSBkbWFfYWRkcl90IHBjaV9tYXBfcGFnZShzdHJ1Y3QgcGNpX2Rl diAqaHdkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlv bikKewogICAgICAgIGlmIChkaXJlY3Rpb24gPT0gMykKICAgICAgICAgICAgICAgIF9fYXNtX18g X192b2xhdGlsZV9fKCIuYnl0ZSAweDBmLDB4MGIiKTsKCiAgICAgICAgcmV0dXJuIChwYWdlIC0g bWVtX21hcCkgKiAoMVVMIDw8IDEyKSArIG9mZnNldDsKfQoKc3RhdGljIGlubGluZSB2b2lkIHBj aV91bm1hcF9wYWdlKHN0cnVjdCBwY2lfZGV2ICpod2RldiwgZG1hX2FkZHJfdCBkbWFfYWRkcmVz cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplLCBpbnQgZGly ZWN0aW9uKQp7CiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSAzKQogICAgICAgICAgICAgICAgX19h c21fXyBfX3ZvbGF0aWxlX18oIi5ieXRlIDB4MGYsMHgwYiIpOwoKfQojIDEyOSAiL3Vzci9zcmMv bGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3BjaS5oIgpzdGF0aWMgaW5saW5lIGludCBw Y2lfbWFwX3NnKHN0cnVjdCBwY2lfZGV2ICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pCnsK ICAgICAgICBpbnQgaTsKCiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSAzKQogICAgICAgICAgICAg ICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIi5ieXRlIDB4MGYsMHgwYiIpOwoKCgoKICAgICAgICBm b3IgKGkgPSAwOyBpIDwgbmVudHM7IGkrKyApIHsKICAgICAgICAgICAgICAgIGlmIChzZ1tpXS5h ZGRyZXNzICYmIHNnW2ldLnBhZ2UpCiAgICAgICAgICAgICAgICAgICAgICAgIF9fYXNtX18gX192 b2xhdGlsZV9fKCIuYnl0ZSAweDBmLDB4MGIiKTsKICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFz Z1tpXS5hZGRyZXNzICYmICFzZ1tpXS5wYWdlKQogICAgICAgICAgICAgICAgICAgICAgICBfX2Fz bV9fIF9fdm9sYXRpbGVfXygiLmJ5dGUgMHgwZiwweDBiIik7CgogICAgICAgICAgICAgICAgaWYg KHNnW2ldLmFkZHJlc3MpCiAgICAgICAgICAgICAgICAgICAgICAgIHNnW2ldLmRtYV9hZGRyZXNz ID0gdmlydF90b19waHlzKHNnW2ldLmFkZHJlc3MpOwogICAgICAgICAgICAgICAgZWxzZQogICAg ICAgICAgICAgICAgICAgICAgICBzZ1tpXS5kbWFfYWRkcmVzcyA9ICgoc2dbaV0ucGFnZSAtIG1l bV9tYXApIDw8IDEyKSArIHNnW2ldLm9mZnNldDsKICAgICAgICB9CgogICAgICAgIHJldHVybiBu ZW50czsKfQoKCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfdW5tYXBfc2coc3RydWN0IHBjaV9k ZXYgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBuZW50cywgaW50IGRpcmVjdGlvbikKewogICAgICAgIGlmIChkaXJlY3Rp b24gPT0gMykKICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCIuYnl0ZSAweDBm LDB4MGIiKTsKCn0KIyAxNzYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2Fz bS9wY2kuaCIKc3RhdGljIGlubGluZSB2b2lkIHBjaV9kbWFfc3luY19zaW5nbGUoc3RydWN0IHBj aV9kZXYgKmh3ZGV2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWFf YWRkcl90IGRtYV9oYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQp7CiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSAz KQogICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIi5ieXRlIDB4MGYsMHgwYiIp OwoKfQoKCgoKCgoKc3RhdGljIGlubGluZSB2b2lkIHBjaV9kbWFfc3luY19zZyhzdHJ1Y3QgcGNp X2RldiAqaHdkZXYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNj YXR0ZXJsaXN0ICpzZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmVs ZW1zLCBpbnQgZGlyZWN0aW9uKQp7CiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSAzKQogICAgICAg ICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIi5ieXRlIDB4MGYsMHgwYiIpOwoKfQoKCgoK CgpzdGF0aWMgaW5saW5lIGludCBwY2lfZG1hX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqaHdk ZXYsIHU2NCBtYXNrKQp7CgoKCgoKICAgICAgICBpZihtYXNrIDwgMHgwMGZmZmZmZikKICAgICAg ICAgICAgICAgIHJldHVybiAwOwoKICAgICAgICByZXR1cm4gMTsKfQoKCgoKc3RhdGljIF9faW5s aW5lX18gZG1hNjRfYWRkcl90CnBjaV9kYWNfcGFnZV90b19kbWEoc3RydWN0IHBjaV9kZXYgKnBk ZXYsIHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgaW50IGRpcmVjdGlv bikKewogICAgICAgIHJldHVybiAoKGRtYTY0X2FkZHJfdCkgKChwYWdlIC0gbWVtX21hcCkgPDwg MTIpICsKICAgICAgICAgICAgICAgIChkbWE2NF9hZGRyX3QpIG9mZnNldCk7Cn0KCnN0YXRpYyBf X2lubGluZV9fIHN0cnVjdCBwYWdlICoKcGNpX2RhY19kbWFfdG9fcGFnZShzdHJ1Y3QgcGNpX2Rl diAqcGRldiwgZG1hNjRfYWRkcl90IGRtYV9hZGRyKQp7CiAgICAgICAgdW5zaWduZWQgbG9uZyBw b2ZmID0gKGRtYV9hZGRyID4+IDEyKTsKCiAgICAgICAgcmV0dXJuIG1lbV9tYXAgKyBwb2ZmOwp9 CgpzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nCnBjaV9kYWNfZG1hX3RvX29mZnNldChz dHJ1Y3QgcGNpX2RldiAqcGRldiwgZG1hNjRfYWRkcl90IGRtYV9hZGRyKQp7CiAgICAgICAgcmV0 dXJuIChkbWFfYWRkciAmIH4ofigoMVVMIDw8IDEyKS0xKSkpOwp9CgpzdGF0aWMgX19pbmxpbmVf XyB2b2lkCnBjaV9kYWNfZG1hX3N5bmNfc2luZ2xlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBkbWE2 NF9hZGRyX3QgZG1hX2FkZHIsIHNpemVfdCBsZW4sIGludCBkaXJlY3Rpb24pCnsKCn0KIyAyNTcg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9wY2kuaCIKc3RhdGljIGlu bGluZSBpbnQgcGNpX2NvbnRyb2xsZXJfbnVtKHN0cnVjdCBwY2lfZGV2ICpkZXYpCnsKICAgICAg ICByZXR1cm4gMDsKfQoKCmV4dGVybiBpbnQgcGNpX21tYXBfcGFnZV9yYW5nZShzdHJ1Y3QgcGNp X2RldiAqZGV2LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGVudW0gcGNpX21tYXBfc3RhdGUgbW1hcF9zdGF0ZSwgaW50IHdyaXRlX2Nv bWJpbmUpOwojIDYwNiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgv cGNpLmgiIDIKIyA2NzEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4 L3BjaS5oIgpzdGF0aWMgaW5saW5lIGludCBwY2lfbW9kdWxlX2luaXQoc3RydWN0IHBjaV9kcml2 ZXIgKmRydikKewogICAgICAgIGludCByYyA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIgKGRydik7Cgog ICAgICAgIGlmIChyYyA+IDApCiAgICAgICAgICAgICAgICByZXR1cm4gMDsKIyA2ODYgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3BjaS5oIgogICAgICAgIGlmIChy YyA9PSAwKQogICAgICAgICAgICAgICAgcmMgPSAtMTk7CgoKCgogICAgICAgIHBjaV91bnJlZ2lz dGVyX2RyaXZlciAoZHJ2KTsKCiAgICAgICAgcmV0dXJuIHJjOwp9CiMgNzE2ICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9wY2kuaCIKc3RhdGljIGlubGluZSB2b2lk ICpwY2lfZ2V0X2RydmRhdGEgKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQp7CiAgICAgICAgcmV0dXJu IHBkZXYtPmRyaXZlcl9kYXRhOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgcGNpX3NldF9kcnZkYXRh IChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdm9pZCAqZGF0YSkKewogICAgICAgIHBkZXYtPmRyaXZl cl9kYXRhID0gZGF0YTsKfQojIDczMyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1 ZGUvbGludXgvcGNpLmgiCnN0cnVjdCBwY2lfZml4dXAgewogICAgICAgIGludCBwYXNzOwogICAg ICAgIHUxNiB2ZW5kb3IsIGRldmljZTsKICAgICAgICB2b2lkICgqaG9vaykoc3RydWN0IHBjaV9k ZXYgKmRldik7Cn07CgpleHRlcm4gc3RydWN0IHBjaV9maXh1cCBwY2liaW9zX2ZpeHVwc1tdOwoK CgoKdm9pZCBwY2lfZml4dXBfZGV2aWNlKGludCBwYXNzLCBzdHJ1Y3QgcGNpX2RldiAqZGV2KTsK CmV4dGVybiBpbnQgcGNpX3BjaV9wcm9ibGVtczsKIyAxNDkgIjgxMzl0b28uYyIgMgojIDEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2luaXQuaCIgMQoKCgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2NvbmZpZy5oIiAxCiMg NSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvaW5pdC5oIiAyCiMg NDggIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2luaXQuaCIKdHlw ZWRlZiBpbnQgKCppbml0Y2FsbF90KSh2b2lkKTsKdHlwZWRlZiB2b2lkICgqZXhpdGNhbGxfdCko dm9pZCk7CgpleHRlcm4gaW5pdGNhbGxfdCBfX2luaXRjYWxsX3N0YXJ0LCBfX2luaXRjYWxsX2Vu ZDsKIyA2MSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvaW5pdC5o IgpzdHJ1Y3Qga2VybmVsX3BhcmFtIHsKICAgICAgICBjb25zdCBjaGFyICpzdHI7CiAgICAgICAg aW50ICgqc2V0dXBfZnVuYykoY2hhciAqKTsKfTsKCmV4dGVybiBzdHJ1Y3Qga2VybmVsX3BhcmFt IF9fc2V0dXBfc3RhcnQsIF9fc2V0dXBfZW5kOwojIDE1MCAiODEzOXRvby5jIiAyCiMgMSAiL3Vz ci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvaW9wb3J0LmgiIDEKIyAxNTEg IjgxMzl0b28uYyIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xp bnV4L25ldGRldmljZS5oIiAxCiMgMjggIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNs dWRlL2xpbnV4L25ldGRldmljZS5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9p bmNsdWRlL2xpbnV4L2lmLmgiIDEKIyAyMiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2lu Y2x1ZGUvbGludXgvaWYuaCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVk ZS9saW51eC90eXBlcy5oIiAxCiMgMjMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNs dWRlL2xpbnV4L2lmLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVk ZS9saW51eC9zb2NrZXQuaCIgMQojIDI0ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5j bHVkZS9saW51eC9pZi5oIiAyCiMgNTggIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNs dWRlL2xpbnV4L2lmLmgiCnN0cnVjdCBpZm1hcAp7CiAgICAgICAgdW5zaWduZWQgbG9uZyBtZW1f c3RhcnQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBtZW1fZW5kOwogICAgICAgIHVuc2lnbmVkIHNo b3J0IGJhc2VfYWRkcjsKICAgICAgICB1bnNpZ25lZCBjaGFyIGlycTsKICAgICAgICB1bnNpZ25l ZCBjaGFyIGRtYTsKICAgICAgICB1bnNpZ25lZCBjaGFyIHBvcnQ7Cgp9OwojIDc2ICIvdXNyL3Ny Yy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9pZi5oIgpzdHJ1Y3QgaWZyZXEKewoK CiAgICAgICAgdW5pb24KICAgICAgICB7CiAgICAgICAgICAgICAgICBjaGFyIGlmcm5fbmFtZVsx Nl07CiAgICAgICAgfSBpZnJfaWZybjsKCiAgICAgICAgdW5pb24gewogICAgICAgICAgICAgICAg c3RydWN0IHNvY2thZGRyIGlmcnVfYWRkcjsKICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRk ciBpZnJ1X2RzdGFkZHI7CiAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgaWZydV9icm9h ZGFkZHI7CiAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgaWZydV9uZXRtYXNrOwogICAg ICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyIGlmcnVfaHdhZGRyOwogICAgICAgICAgICAgICAg c2hvcnQgaWZydV9mbGFnczsKICAgICAgICAgICAgICAgIGludCBpZnJ1X2l2YWx1ZTsKICAgICAg ICAgICAgICAgIGludCBpZnJ1X210dTsKICAgICAgICAgICAgICAgIHN0cnVjdCBpZm1hcCBpZnJ1 X21hcDsKICAgICAgICAgICAgICAgIGNoYXIgaWZydV9zbGF2ZVsxNl07CiAgICAgICAgICAgICAg ICBjaGFyIGlmcnVfbmV3bmFtZVsxNl07CiAgICAgICAgICAgICAgICBjaGFyICogaWZydV9kYXRh OwogICAgICAgIH0gaWZyX2lmcnU7Cn07CiMgMTI1ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGlu dXgvaW5jbHVkZS9saW51eC9pZi5oIgpzdHJ1Y3QgaWZjb25mCnsKICAgICAgICBpbnQgaWZjX2xl bjsKICAgICAgICB1bmlvbgogICAgICAgIHsKICAgICAgICAgICAgICAgIGNoYXIgKiBpZmN1X2J1 ZjsKICAgICAgICAgICAgICAgIHN0cnVjdCBpZnJlcSAqaWZjdV9yZXE7CiAgICAgICAgfSBpZmNf aWZjdTsKfTsKIyAyOSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgv bmV0ZGV2aWNlLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9s aW51eC9pZl9ldGhlci5oIiAxCiMgOTIgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNs dWRlL2xpbnV4L2lmX2V0aGVyLmgiCnN0cnVjdCBldGhoZHIKewogICAgICAgIHVuc2lnbmVkIGNo YXIgaF9kZXN0WzZdOwogICAgICAgIHVuc2lnbmVkIGNoYXIgaF9zb3VyY2VbNl07CiAgICAgICAg dW5zaWduZWQgc2hvcnQgaF9wcm90bzsKfTsKIyAzMCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xp bnV4L2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQu MTMvbGludXgvaW5jbHVkZS9saW51eC9pZl9wYWNrZXQuaCIgMQoKCgpzdHJ1Y3Qgc29ja2FkZHJf cGt0CnsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzcGt0X2ZhbWlseTsKICAgICAgICB1bnNpZ25l ZCBjaGFyIHNwa3RfZGV2aWNlWzE0XTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzcGt0X3Byb3Rv Y29sOwp9OwoKc3RydWN0IHNvY2thZGRyX2xsCnsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzbGxf ZmFtaWx5OwogICAgICAgIHVuc2lnbmVkIHNob3J0IHNsbF9wcm90b2NvbDsKICAgICAgICBpbnQg c2xsX2lmaW5kZXg7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc2xsX2hhdHlwZTsKICAgICAgICB1 bnNpZ25lZCBjaGFyIHNsbF9wa3R0eXBlOwogICAgICAgIHVuc2lnbmVkIGNoYXIgc2xsX2hhbGVu OwogICAgICAgIHVuc2lnbmVkIGNoYXIgc2xsX2FkZHJbOF07Cn07CiMgNDMgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2lmX3BhY2tldC5oIgpzdHJ1Y3QgdHBhY2tl dF9zdGF0cwp7CiAgICAgICAgdW5zaWduZWQgaW50IHRwX3BhY2tldHM7CiAgICAgICAgdW5zaWdu ZWQgaW50IHRwX2Ryb3BzOwp9OwoKc3RydWN0IHRwYWNrZXRfaGRyCnsKICAgICAgICB1bnNpZ25l ZCBsb25nIHRwX3N0YXR1czsKCgoKCgogICAgICAgIHVuc2lnbmVkIGludCB0cF9sZW47CiAgICAg ICAgdW5zaWduZWQgaW50IHRwX3NuYXBsZW47CiAgICAgICAgdW5zaWduZWQgc2hvcnQgdHBfbWFj OwogICAgICAgIHVuc2lnbmVkIHNob3J0IHRwX25ldDsKICAgICAgICB1bnNpZ25lZCBpbnQgdHBf c2VjOwogICAgICAgIHVuc2lnbmVkIGludCB0cF91c2VjOwp9OwojIDgyICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9pZl9wYWNrZXQuaCIKc3RydWN0IHRwYWNrZXRf cmVxCnsKICAgICAgICB1bnNpZ25lZCBpbnQgdHBfYmxvY2tfc2l6ZTsKICAgICAgICB1bnNpZ25l ZCBpbnQgdHBfYmxvY2tfbnI7CiAgICAgICAgdW5zaWduZWQgaW50IHRwX2ZyYW1lX3NpemU7CiAg ICAgICAgdW5zaWduZWQgaW50IHRwX2ZyYW1lX25yOwp9OwoKc3RydWN0IHBhY2tldF9tcmVxCnsK ICAgICAgICBpbnQgbXJfaWZpbmRleDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBtcl90eXBlOwog ICAgICAgIHVuc2lnbmVkIHNob3J0IG1yX2FsZW47CiAgICAgICAgdW5zaWduZWQgY2hhciBtcl9h ZGRyZXNzWzhdOwp9OwojIDMxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9s aW51eC9uZXRkZXZpY2UuaCIgMgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5j bHVkZS9hc20vYXRvbWljLmgiIDEKIyAzMyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2lu Y2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGlu dXgvaW5jbHVkZS9hc20vY2FjaGUuaCIgMQojIDM0ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGlu dXgvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4x My9saW51eC9pbmNsdWRlL2FzbS9ieXRlb3JkZXIuaCIgMQojIDM1ICIvdXNyL3NyYy9saW51eC0y LjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCIgMgoKCiMgMSAiL3Vzci9zcmMv bGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvY29uZmlnLmgiIDEKIyAzOCAiL3Vzci9z cmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgiIDIKCgoKCnN0 cnVjdCBkaXZlcnRfYmxrOwojIDk2ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVk ZS9saW51eC9uZXRkZXZpY2UuaCIKc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMKewogICAgICAgIHVu c2lnbmVkIGxvbmcgcnhfcGFja2V0czsKICAgICAgICB1bnNpZ25lZCBsb25nIHR4X3BhY2tldHM7 CiAgICAgICAgdW5zaWduZWQgbG9uZyByeF9ieXRlczsKICAgICAgICB1bnNpZ25lZCBsb25nIHR4 X2J5dGVzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgcnhfZXJyb3JzOwogICAgICAgIHVuc2lnbmVk IGxvbmcgdHhfZXJyb3JzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgcnhfZHJvcHBlZDsKICAgICAg ICB1bnNpZ25lZCBsb25nIHR4X2Ryb3BwZWQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBtdWx0aWNh c3Q7CiAgICAgICAgdW5zaWduZWQgbG9uZyBjb2xsaXNpb25zOwoKCiAgICAgICAgdW5zaWduZWQg bG9uZyByeF9sZW5ndGhfZXJyb3JzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgcnhfb3Zlcl9lcnJv cnM7CiAgICAgICAgdW5zaWduZWQgbG9uZyByeF9jcmNfZXJyb3JzOwogICAgICAgIHVuc2lnbmVk IGxvbmcgcnhfZnJhbWVfZXJyb3JzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgcnhfZmlmb19lcnJv cnM7CiAgICAgICAgdW5zaWduZWQgbG9uZyByeF9taXNzZWRfZXJyb3JzOwoKCiAgICAgICAgdW5z aWduZWQgbG9uZyB0eF9hYm9ydGVkX2Vycm9yczsKICAgICAgICB1bnNpZ25lZCBsb25nIHR4X2Nh cnJpZXJfZXJyb3JzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgdHhfZmlmb19lcnJvcnM7CiAgICAg ICAgdW5zaWduZWQgbG9uZyB0eF9oZWFydGJlYXRfZXJyb3JzOwogICAgICAgIHVuc2lnbmVkIGxv bmcgdHhfd2luZG93X2Vycm9yczsKCgogICAgICAgIHVuc2lnbmVkIGxvbmcgcnhfY29tcHJlc3Nl ZDsKICAgICAgICB1bnNpZ25lZCBsb25nIHR4X2NvbXByZXNzZWQ7Cn07CgoKCmVudW0gewogICAg ICAgIElGX1BPUlRfVU5LTk9XTiA9IDAsCiAgICAgICAgSUZfUE9SVF8xMEJBU0UyLAogICAgICAg IElGX1BPUlRfMTBCQVNFVCwKICAgICAgICBJRl9QT1JUX0FVSSwKICAgICAgICBJRl9QT1JUXzEw MEJBU0VULAogICAgICAgIElGX1BPUlRfMTAwQkFTRVRYLAogICAgICAgIElGX1BPUlRfMTAwQkFT RUZYCn07CgoKCmV4dGVybiBjb25zdCBjaGFyICppZl9wb3J0X3RleHRbXTsKCiMgMSAiL3Vzci9z cmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvY2FjaGUuaCIgMQojIDE0NiAiL3Vz ci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgiIDIKIyAx ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9za2J1ZmYuaCIgMQoj IDE3ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9za2J1ZmYuaCIK IyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9jb25maWcuaCIg MQojIDE4ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9za2J1ZmYu aCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2tlcm5l bC5oIiAxCiMgMTkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3Nr YnVmZi5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgv c2NoZWQuaCIgMQojIDIwICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51 eC9za2J1ZmYuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xp bnV4L3RpbWUuaCIgMQojIDIxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9s aW51eC9za2J1ZmYuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRl L2xpbnV4L2NhY2hlLmgiIDEKIyAyMiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1 ZGUvbGludXgvc2tidWZmLmgiIDIKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2lu Y2x1ZGUvYXNtL2F0b21pYy5oIiAxCiMgMjQgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9p bmNsdWRlL2xpbnV4L3NrYnVmZi5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4 L2luY2x1ZGUvYXNtL3R5cGVzLmgiIDEKIyAyNSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4 L2luY2x1ZGUvbGludXgvc2tidWZmLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGlu dXgvaW5jbHVkZS9saW51eC9zcGlubG9jay5oIiAxCiMgMjYgIi91c3Ivc3JjL2xpbnV4LTIuNC4x My9saW51eC9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40 LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvbW0uaCIgMQojIDI3ICIvdXNyL3NyYy9saW51eC0yLjQu MTMvbGludXgvaW5jbHVkZS9saW51eC9za2J1ZmYuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2hpZ2htZW0uaCIgMQoKCgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2NvbmZpZy5oIiAxCiMgNSAiL3Vzci9zcmMv bGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvaGlnaG1lbS5oIiAyCiMgMSAiL3Vzci9z cmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3BnYWxsb2MuaCIgMQoKCgojIDEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2NvbmZpZy5oIiAxCiMgNSAi L3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3BnYWxsb2MuaCIgMgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCIgMQoj IDYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgiIDIK IyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vZml4bWFwLmgiIDEK IyA3ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vcGdhbGxvYy5oIiAy CiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvdGhyZWFkcy5o IiAxCiMgOCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3BnYWxsb2Mu aCIgMgojIDUxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vcGdhbGxv Yy5oIgpzdGF0aWMgX19pbmxpbmVfXyBwZ2RfdCAqZ2V0X3BnZF9zbG93KHZvaWQpCnsKICAgICAg ICBwZ2RfdCAqcGdkID0gKHBnZF90ICopX19nZXRfZnJlZV9wYWdlcygoKDB4MjAgfCAweDEwIHwg MHg0MCB8IDB4ODAgfCAweDEwMCkpLDApOwoKICAgICAgICBpZiAocGdkKSB7CiAgICAgICAgICAg ICAgICAoX19idWlsdGluX2NvbnN0YW50X3AoMCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AoKCgo KCh1bnNpZ25lZCBsb25nKSgweEMwMDAwMDAwKSkpLygxVUwgPDwgMjIpKSAqIHNpemVvZihwZ2Rf dCkpKSA/IF9fY29uc3RhbnRfY19hbmRfY291bnRfbWVtc2V0KCgocGdkKSksKCgweDAxMDEwMTAx VUwqKHVuc2lnbmVkIGNoYXIpKDApKSksKCgoKCgodW5zaWduZWQgbG9uZykoMHhDMDAwMDAwMCkp KS8oMVVMIDw8IDIyKSkgKiBzaXplb2YocGdkX3QpKSkpIDogX19jb25zdGFudF9jX21lbXNldCgo KHBnZCkpLCgoMHgwMTAxMDEwMVVMKih1bnNpZ25lZCBjaGFyKSgwKSkpLCgoKCgoKHVuc2lnbmVk IGxvbmcpKDB4QzAwMDAwMDApKSkvKDFVTCA8PCAyMikpICogc2l6ZW9mKHBnZF90KSkpKSkgOiAo X19idWlsdGluX2NvbnN0YW50X3AoKCgoKCh1bnNpZ25lZCBsb25nKSgweEMwMDAwMDAwKSkpLygx VUwgPDwgMjIpKSAqIHNpemVvZihwZ2RfdCkpKSA/IF9fbWVtc2V0X2dlbmVyaWMoKCgocGdkKSkp LCgoKDApKSksKCgoKCgoKHVuc2lnbmVkIGxvbmcpKDB4QzAwMDAwMDApKSkvKDFVTCA8PCAyMikp ICogc2l6ZW9mKHBnZF90KSkpKSkgOiBfX21lbXNldF9nZW5lcmljKCgocGdkKSksKCgwKSksKCgo KCgodW5zaWduZWQgbG9uZykoMHhDMDAwMDAwMCkpKS8oMVVMIDw8IDIyKSkgKiBzaXplb2YocGdk X3QpKSkpKSk7CiAgICAgICAgICAgICAgICAoX19idWlsdGluX2NvbnN0YW50X3AoKDEwMjQgLSAo KCgodW5zaWduZWQgbG9uZykoMHhDMDAwMDAwMCkpKS8oMVVMIDw8IDIyKSkpICogc2l6ZW9mKHBn ZF90KSkgPyBfX2NvbnN0YW50X21lbWNweSgocGdkICsgKCgoKHVuc2lnbmVkIGxvbmcpKDB4QzAw MDAwMDApKSkvKDFVTCA8PCAyMikpKSwoc3dhcHBlcl9wZ19kaXIgKyAoKCgodW5zaWduZWQgbG9u ZykoMHhDMDAwMDAwMCkpKS8oMVVMIDw8IDIyKSkpLCgoMTAyNCAtICgoKCh1bnNpZ25lZCBsb25n KSgweEMwMDAwMDAwKSkpLygxVUwgPDwgMjIpKSkgKiBzaXplb2YocGdkX3QpKSkgOiBfX21lbWNw eSgocGdkICsgKCgoKHVuc2lnbmVkIGxvbmcpKDB4QzAwMDAwMDApKSkvKDFVTCA8PCAyMikpKSwo c3dhcHBlcl9wZ19kaXIgKyAoKCgodW5zaWduZWQgbG9uZykoMHhDMDAwMDAwMCkpKS8oMVVMIDw8 IDIyKSkpLCgoMTAyNCAtICgoKCh1bnNpZ25lZCBsb25nKSgweEMwMDAwMDAwKSkpLygxVUwgPDwg MjIpKSkgKiBzaXplb2YocGdkX3QpKSkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcGdkOwp9 CgoKCnN0YXRpYyBfX2lubGluZV9fIHBnZF90ICpnZXRfcGdkX2Zhc3Qodm9pZCkKewogICAgICAg IHVuc2lnbmVkIGxvbmcgKnJldDsKCiAgICAgICAgaWYgKChyZXQgPSAoY3B1X2RhdGFbKGdldF9j dXJyZW50KCktPnByb2Nlc3NvcildLnBnZF9xdWljaykpICE9ICgodm9pZCAqKTApKSB7CiAgICAg ICAgICAgICAgICAoY3B1X2RhdGFbKGdldF9jdXJyZW50KCktPnByb2Nlc3NvcildLnBnZF9xdWlj aykgPSAodW5zaWduZWQgbG9uZyAqKSgqcmV0KTsKICAgICAgICAgICAgICAgIHJldFswXSA9IDA7 CiAgICAgICAgICAgICAgICAoY3B1X2RhdGFbKGdldF9jdXJyZW50KCktPnByb2Nlc3NvcildLnBn dGFibGVfY2FjaGVfc3opLS07CiAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICByZXQgPSAo dW5zaWduZWQgbG9uZyAqKWdldF9wZ2Rfc2xvdygpOwogICAgICAgIHJldHVybiAocGdkX3QgKily ZXQ7Cn0KCnN0YXRpYyBfX2lubGluZV9fIHZvaWQgZnJlZV9wZ2RfZmFzdChwZ2RfdCAqcGdkKQp7 CiAgICAgICAgKih1bnNpZ25lZCBsb25nICopcGdkID0gKHVuc2lnbmVkIGxvbmcpIChjcHVfZGF0 YVsoZ2V0X2N1cnJlbnQoKS0+cHJvY2Vzc29yKV0ucGdkX3F1aWNrKTsKICAgICAgICAoY3B1X2Rh dGFbKGdldF9jdXJyZW50KCktPnByb2Nlc3NvcildLnBnZF9xdWljaykgPSAodW5zaWduZWQgbG9u ZyAqKSBwZ2Q7CiAgICAgICAgKGNwdV9kYXRhWyhnZXRfY3VycmVudCgpLT5wcm9jZXNzb3IpXS5w Z3RhYmxlX2NhY2hlX3N6KSsrOwp9CgpzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGZyZWVfcGdkX3Ns b3cocGdkX3QgKnBnZCkKewoKCgoKCgoKICAgICAgICBmcmVlX3BhZ2VzKCgodW5zaWduZWQgbG9u ZylwZ2QpLDApOwoKfQoKc3RhdGljIGlubGluZSBwdGVfdCAqcHRlX2FsbG9jX29uZShzdHJ1Y3Qg bW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQp7CiAgICAgICAgcHRlX3QgKnB0 ZTsKCiAgICAgICAgcHRlID0gKHB0ZV90ICopIF9fZ2V0X2ZyZWVfcGFnZXMoKCgweDIwIHwgMHgx MCB8IDB4NDAgfCAweDgwIHwgMHgxMDApKSwwKTsKICAgICAgICBpZiAocHRlKQogICAgICAgICAg ICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKDApID8gKF9fYnVpbHRpbl9jb25zdGFudF9wKCgo MVVMIDw8IDEyKSkpID8gX19jb25zdGFudF9jX2FuZF9jb3VudF9tZW1zZXQoKCgodm9pZCAqKShw dGUpKSksKCgweDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIpKDApKSksKCgoMVVMIDw8IDEyKSkp KSA6IF9fY29uc3RhbnRfY19tZW1zZXQoKCgodm9pZCAqKShwdGUpKSksKCgweDAxMDEwMTAxVUwq KHVuc2lnbmVkIGNoYXIpKDApKSksKCgoMVVMIDw8IDEyKSkpKSkgOiAoX19idWlsdGluX2NvbnN0 YW50X3AoKCgxVUwgPDwgMTIpKSkgPyBfX21lbXNldF9nZW5lcmljKCgoKCh2b2lkICopKHB0ZSkp KSksKCgoMCkpKSwoKCgoMVVMIDw8IDEyKSkpKSkgOiBfX21lbXNldF9nZW5lcmljKCgoKHZvaWQg KikocHRlKSkpLCgoMCkpLCgoKDFVTCA8PCAxMikpKSkpKTsKICAgICAgICByZXR1cm4gcHRlOwp9 CgpzdGF0aWMgaW5saW5lIHB0ZV90ICpwdGVfYWxsb2Nfb25lX2Zhc3Qoc3RydWN0IG1tX3N0cnVj dCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKewogICAgICAgIHVuc2lnbmVkIGxvbmcgKnJl dDsKCiAgICAgICAgaWYgKChyZXQgPSAodW5zaWduZWQgbG9uZyAqKShjcHVfZGF0YVsoZ2V0X2N1 cnJlbnQoKS0+cHJvY2Vzc29yKV0ucHRlX3F1aWNrKSkgIT0gKCh2b2lkICopMCkpIHsKICAgICAg ICAgICAgICAgIChjcHVfZGF0YVsoZ2V0X2N1cnJlbnQoKS0+cHJvY2Vzc29yKV0ucHRlX3F1aWNr KSA9ICh1bnNpZ25lZCBsb25nICopKCpyZXQpOwogICAgICAgICAgICAgICAgcmV0WzBdID0gcmV0 WzFdOwogICAgICAgICAgICAgICAgKGNwdV9kYXRhWyhnZXRfY3VycmVudCgpLT5wcm9jZXNzb3Ip XS5wZ3RhYmxlX2NhY2hlX3N6KS0tOwogICAgICAgIH0KICAgICAgICByZXR1cm4gKHB0ZV90ICop cmV0Owp9CgpzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHB0ZV9mcmVlX2Zhc3QocHRlX3QgKnB0ZSkK ewogICAgICAgICoodW5zaWduZWQgbG9uZyAqKXB0ZSA9ICh1bnNpZ25lZCBsb25nKSAoY3B1X2Rh dGFbKGdldF9jdXJyZW50KCktPnByb2Nlc3NvcildLnB0ZV9xdWljayk7CiAgICAgICAgKGNwdV9k YXRhWyhnZXRfY3VycmVudCgpLT5wcm9jZXNzb3IpXS5wdGVfcXVpY2spID0gKHVuc2lnbmVkIGxv bmcgKikgcHRlOwogICAgICAgIChjcHVfZGF0YVsoZ2V0X2N1cnJlbnQoKS0+cHJvY2Vzc29yKV0u cGd0YWJsZV9jYWNoZV9zeikrKzsKfQoKc3RhdGljIF9faW5saW5lX18gdm9pZCBwdGVfZnJlZV9z bG93KHB0ZV90ICpwdGUpCnsKICAgICAgICBmcmVlX3BhZ2VzKCgodW5zaWduZWQgbG9uZylwdGUp LDApOwp9CiMgMTUzICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vcGdh bGxvYy5oIgpleHRlcm4gaW50IGRvX2NoZWNrX3BndF9jYWNoZShpbnQsIGludCk7CiMgMTk3ICIv dXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vcGdhbGxvYy5oIgojIDEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9zbXAuaCIgMQojIDE5OCAiL3Vz ci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3BnYWxsb2MuaCIgMgoKCgoKZXh0 ZXJuIHZvaWQgZmx1c2hfdGxiX2FsbCh2b2lkKTsKZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX2N1cnJl bnRfdGFzayh2b2lkKTsKZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX21tKHN0cnVjdCBtbV9zdHJ1Y3Qg Kik7CmV4dGVybiB2b2lkIGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1 bnNpZ25lZCBsb25nKTsKCgoKc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9yYW5nZShzdHJ1 Y3QgbW1fc3RydWN0ICogbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5k KQp7CiAgICAgICAgZmx1c2hfdGxiX21tKG1tKTsKfQoKCgoKc3RydWN0IHRsYl9zdGF0ZQp7CiAg ICAgICAgc3RydWN0IG1tX3N0cnVjdCAqYWN0aXZlX21tOwogICAgICAgIGludCBzdGF0ZTsKfTsK ZXh0ZXJuIHN0cnVjdCB0bGJfc3RhdGUgY3B1X3RsYnN0YXRlWzMyXTsKCgoKCnN0YXRpYyBpbmxp bmUgdm9pZCBmbHVzaF90bGJfcGd0YWJsZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWdu ZWQgbG9uZyBlbmQpCnsKCn0KIyA2ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVk ZS9saW51eC9oaWdobWVtLmgiIDIKIyAzMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2lu Y2x1ZGUvbGludXgvaGlnaG1lbS5oIgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBucl9mcmVl X2hpZ2hwYWdlcyh2b2lkKSB7IHJldHVybiAwOyB9CgpzdGF0aWMgaW5saW5lIHZvaWQgKmttYXAo c3RydWN0IHBhZ2UgKnBhZ2UpIHsgcmV0dXJuICgocGFnZSktPnZpcnR1YWwpOyB9CiMgNDYgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2hpZ2htZW0uaCIKc3RhdGlj IGlubGluZSB2b2lkIGNsZWFyX3VzZXJfaGlnaHBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2ln bmVkIGxvbmcgdmFkZHIpCnsKICAgICAgICB2b2lkICphZGRyID0ga21hcChwYWdlKTsKICAgICAg ICAoX19idWlsdGluX2NvbnN0YW50X3AoMCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AoKCgxVUwg PDwgMTIpKSkgPyBfX2NvbnN0YW50X2NfYW5kX2NvdW50X21lbXNldCgoKCh2b2lkICopKGFkZHIp KSksKCgweDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIpKDApKSksKCgoMVVMIDw8IDEyKSkpKSA6 IF9fY29uc3RhbnRfY19tZW1zZXQoKCgodm9pZCAqKShhZGRyKSkpLCgoMHgwMTAxMDEwMVVMKih1 bnNpZ25lZCBjaGFyKSgwKSkpLCgoKDFVTCA8PCAxMikpKSkpIDogKF9fYnVpbHRpbl9jb25zdGFu dF9wKCgoMVVMIDw8IDEyKSkpID8gX19tZW1zZXRfZ2VuZXJpYygoKCgodm9pZCAqKShhZGRyKSkp KSwoKCgwKSkpLCgoKCgxVUwgPDwgMTIpKSkpKSA6IF9fbWVtc2V0X2dlbmVyaWMoKCgodm9pZCAq KShhZGRyKSkpLCgoMCkpLCgoKDFVTCA8PCAxMikpKSkpKTsKICAgICAgICBkbyB7IH0gd2hpbGUg KDApOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfaGlnaHBhZ2Uoc3RydWN0IHBhZ2UgKnBh Z2UpCnsKICAgICAgICAoX19idWlsdGluX2NvbnN0YW50X3AoMCkgPyAoX19idWlsdGluX2NvbnN0 YW50X3AoKCgxVUwgPDwgMTIpKSkgPyBfX2NvbnN0YW50X2NfYW5kX2NvdW50X21lbXNldCgoKCh2 b2lkICopKGttYXAocGFnZSkpKSksKCgweDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIpKDApKSks KCgoMVVMIDw8IDEyKSkpKSA6IF9fY29uc3RhbnRfY19tZW1zZXQoKCgodm9pZCAqKShrbWFwKHBh Z2UpKSkpLCgoMHgwMTAxMDEwMVVMKih1bnNpZ25lZCBjaGFyKSgwKSkpLCgoKDFVTCA8PCAxMikp KSkpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wKCgoMVVMIDw8IDEyKSkpID8gX19tZW1zZXRfZ2Vu ZXJpYygoKCgodm9pZCAqKShrbWFwKHBhZ2UpKSkpKSwoKCgwKSkpLCgoKCgxVUwgPDwgMTIpKSkp KSA6IF9fbWVtc2V0X2dlbmVyaWMoKCgodm9pZCAqKShrbWFwKHBhZ2UpKSkpLCgoMCkpLCgoKDFV TCA8PCAxMikpKSkpKTsKICAgICAgICBkbyB7IH0gd2hpbGUgKDApOwp9CgpzdGF0aWMgaW5saW5l IHZvaWQgbWVtY2xlYXJfaGlnaHBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBv ZmZzZXQsIHVuc2lnbmVkIGludCBzaXplKQp7CiAgICAgICAgY2hhciAqa2FkZHI7CgogICAgICAg IGlmIChvZmZzZXQgKyBzaXplID4gKDFVTCA8PCAxMikpCiAgICAgICAgICAgICAgICBfX2FzbV9f IF9fdm9sYXRpbGVfXygiLmJ5dGUgMHgwZiwweDBiIik7CiAgICAgICAga2FkZHIgPSBrbWFwKHBh Z2UpOwogICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCgwKSA/IChfX2J1aWx0aW5fY29uc3Rh bnRfcCgoc2l6ZSkpID8gX19jb25zdGFudF9jX2FuZF9jb3VudF9tZW1zZXQoKChrYWRkciArIG9m ZnNldCkpLCgoMHgwMTAxMDEwMVVMKih1bnNpZ25lZCBjaGFyKSgwKSkpLCgoc2l6ZSkpKSA6IF9f Y29uc3RhbnRfY19tZW1zZXQoKChrYWRkciArIG9mZnNldCkpLCgoMHgwMTAxMDEwMVVMKih1bnNp Z25lZCBjaGFyKSgwKSkpLCgoc2l6ZSkpKSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AoKHNpemUp KSA/IF9fbWVtc2V0X2dlbmVyaWMoKCgoa2FkZHIgKyBvZmZzZXQpKSksKCgoMCkpKSwoKChzaXpl KSkpKSA6IF9fbWVtc2V0X2dlbmVyaWMoKChrYWRkciArIG9mZnNldCkpLCgoMCkpLCgoc2l6ZSkp KSkpOwogICAgICAgIGRvIHsgfSB3aGlsZSAoMCk7Cn0KCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBt ZW1jbGVhcl9oaWdocGFnZV9mbHVzaChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9m ZnNldCwgdW5zaWduZWQgaW50IHNpemUpCnsKICAgICAgICBjaGFyICprYWRkcjsKCiAgICAgICAg aWYgKG9mZnNldCArIHNpemUgPiAoMVVMIDw8IDEyKSkKICAgICAgICAgICAgICAgIF9fYXNtX18g X192b2xhdGlsZV9fKCIuYnl0ZSAweDBmLDB4MGIiKTsKICAgICAgICBrYWRkciA9IGttYXAocGFn ZSk7CiAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKDApID8gKF9fYnVpbHRpbl9jb25zdGFu dF9wKChzaXplKSkgPyBfX2NvbnN0YW50X2NfYW5kX2NvdW50X21lbXNldCgoKGthZGRyICsgb2Zm c2V0KSksKCgweDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIpKDApKSksKChzaXplKSkpIDogX19j b25zdGFudF9jX21lbXNldCgoKGthZGRyICsgb2Zmc2V0KSksKCgweDAxMDEwMTAxVUwqKHVuc2ln bmVkIGNoYXIpKDApKSksKChzaXplKSkpKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCgoc2l6ZSkp ID8gX19tZW1zZXRfZ2VuZXJpYygoKChrYWRkciArIG9mZnNldCkpKSwoKCgwKSkpLCgoKHNpemUp KSkpIDogX19tZW1zZXRfZ2VuZXJpYygoKGthZGRyICsgb2Zmc2V0KSksKCgwKSksKChzaXplKSkp KSk7CiAgICAgICAgZG8geyB9IHdoaWxlICgwKTsKICAgICAgICBkbyB7IH0gd2hpbGUgKDApOwp9 CgpzdGF0aWMgaW5saW5lIHZvaWQgY29weV91c2VyX2hpZ2hwYWdlKHN0cnVjdCBwYWdlICp0bywg c3RydWN0IHBhZ2UgKmZyb20sIHVuc2lnbmVkIGxvbmcgdmFkZHIpCnsKICAgICAgICBjaGFyICp2 ZnJvbSwgKnZ0bzsKCiAgICAgICAgdmZyb20gPSBrbWFwKGZyb20pOwogICAgICAgIHZ0byA9IGtt YXAodG8pOwogICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCgoMVVMIDw8IDEyKSkgPyBfX2Nv bnN0YW50X21lbWNweSgoKHZvaWQgKikodnRvKSksKCh2b2lkICopKHZmcm9tKSksKCgxVUwgPDwg MTIpKSkgOiBfX21lbWNweSgoKHZvaWQgKikodnRvKSksKCh2b2lkICopKHZmcm9tKSksKCgxVUwg PDwgMTIpKSkpOwogICAgICAgIGRvIHsgfSB3aGlsZSAoMCk7CiAgICAgICAgZG8geyB9IHdoaWxl ICgwKTsKfQoKc3RhdGljIGlubGluZSB2b2lkIGNvcHlfaGlnaHBhZ2Uoc3RydWN0IHBhZ2UgKnRv LCBzdHJ1Y3QgcGFnZSAqZnJvbSkKewogICAgICAgIGNoYXIgKnZmcm9tLCAqdnRvOwoKICAgICAg ICB2ZnJvbSA9IGttYXAoZnJvbSk7CiAgICAgICAgdnRvID0ga21hcCh0byk7CiAgICAgICAgKF9f YnVpbHRpbl9jb25zdGFudF9wKCgxVUwgPDwgMTIpKSA/IF9fY29uc3RhbnRfbWVtY3B5KCgodm9p ZCAqKSh2dG8pKSwoKHZvaWQgKikodmZyb20pKSwoKDFVTCA8PCAxMikpKSA6IF9fbWVtY3B5KCgo dm9pZCAqKSh2dG8pKSwoKHZvaWQgKikodmZyb20pKSwoKDFVTCA8PCAxMikpKSk7CiAgICAgICAg ZG8geyB9IHdoaWxlICgwKTsKICAgICAgICBkbyB7IH0gd2hpbGUgKDApOwp9CiMgMjggIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIiAyCiMgOTUgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIgpzdHJ1Y3Qg c2tfYnVmZl9oZWFkIHsKCiAgICAgICAgc3RydWN0IHNrX2J1ZmYgKiBuZXh0OwogICAgICAgIHN0 cnVjdCBza19idWZmICogcHJldjsKCiAgICAgICAgX191MzIgcWxlbjsKICAgICAgICBzcGlubG9j a190IGxvY2s7Cn07CgpzdHJ1Y3Qgc2tfYnVmZjsKCgoKdHlwZWRlZiBzdHJ1Y3Qgc2tiX2ZyYWdf c3RydWN0IHNrYl9mcmFnX3Q7CgpzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0CnsKICAgICAgICBzdHJ1 Y3QgcGFnZSAqcGFnZTsKICAgICAgICBfX3UxNiBwYWdlX29mZnNldDsKICAgICAgICBfX3UxNiBz aXplOwp9OwoKCgoKc3RydWN0IHNrYl9zaGFyZWRfaW5mbyB7CiAgICAgICAgYXRvbWljX3QgZGF0 YXJlZjsKICAgICAgICB1bnNpZ25lZCBpbnQgbnJfZnJhZ3M7CiAgICAgICAgc3RydWN0IHNrX2J1 ZmYgKmZyYWdfbGlzdDsKICAgICAgICBza2JfZnJhZ190IGZyYWdzWzZdOwp9OwoKc3RydWN0IHNr X2J1ZmYgewoKICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqIG5leHQ7CiAgICAgICAgc3RydWN0IHNr X2J1ZmYgKiBwcmV2OwoKICAgICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICogbGlzdDsKICAgICAg ICBzdHJ1Y3Qgc29jayAqc2s7CiAgICAgICAgc3RydWN0IHRpbWV2YWwgc3RhbXA7CiAgICAgICAg c3RydWN0IG5ldF9kZXZpY2UgKmRldjsKCgogICAgICAgIHVuaW9uCiAgICAgICAgewogICAgICAg ICAgICAgICAgc3RydWN0IHRjcGhkciAqdGg7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgdWRwaGRy ICp1aDsKICAgICAgICAgICAgICAgIHN0cnVjdCBpY21waGRyICppY21waDsKICAgICAgICAgICAg ICAgIHN0cnVjdCBpZ21waGRyICppZ21waDsKICAgICAgICAgICAgICAgIHN0cnVjdCBpcGhkciAq aXBpcGg7CiAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3B4aGRyICpzcHhoOwogICAgICAgICAgICAg ICAgdW5zaWduZWQgY2hhciAqcmF3OwogICAgICAgIH0gaDsKCgogICAgICAgIHVuaW9uCiAgICAg ICAgewogICAgICAgICAgICAgICAgc3RydWN0IGlwaGRyICppcGg7CiAgICAgICAgICAgICAgICBz dHJ1Y3QgaXB2NmhkciAqaXB2Nmg7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgYXJwaGRyICphcnBo OwogICAgICAgICAgICAgICAgc3RydWN0IGlweGhkciAqaXB4aDsKICAgICAgICAgICAgICAgIHVu c2lnbmVkIGNoYXIgKnJhdzsKICAgICAgICB9IG5oOwoKCiAgICAgICAgdW5pb24KICAgICAgICB7 CiAgICAgICAgICAgICAgICBzdHJ1Y3QgZXRoaGRyICpldGhlcm5ldDsKICAgICAgICAgICAgICAg IHVuc2lnbmVkIGNoYXIgKnJhdzsKICAgICAgICB9IG1hYzsKCiAgICAgICAgc3RydWN0IGRzdF9l bnRyeSAqZHN0OwoKCgoKCgoKICAgICAgICBjaGFyIGNiWzQ4XTsKCiAgICAgICAgdW5zaWduZWQg aW50IGxlbjsKICAgICAgICB1bnNpZ25lZCBpbnQgZGF0YV9sZW47CiAgICAgICAgdW5zaWduZWQg aW50IGNzdW07CiAgICAgICAgdW5zaWduZWQgY2hhciBfX3VudXNlZCwKICAgICAgICAgICAgICAg ICAgICAgICAgY2xvbmVkLAogICAgICAgICAgICAgICAgICAgICAgICBwa3RfdHlwZSwKICAgICAg ICAgICAgICAgICAgICAgICAgaXBfc3VtbWVkOwogICAgICAgIF9fdTMyIHByaW9yaXR5OwogICAg ICAgIGF0b21pY190IHVzZXJzOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHByb3RvY29sOwogICAg ICAgIHVuc2lnbmVkIHNob3J0IHNlY3VyaXR5OwogICAgICAgIHVuc2lnbmVkIGludCB0cnVlc2l6 ZTsKCiAgICAgICAgdW5zaWduZWQgY2hhciAqaGVhZDsKICAgICAgICB1bnNpZ25lZCBjaGFyICpk YXRhOwogICAgICAgIHVuc2lnbmVkIGNoYXIgKnRhaWw7CiAgICAgICAgdW5zaWduZWQgY2hhciAq ZW5kOwoKICAgICAgICB2b2lkICgqZGVzdHJ1Y3Rvcikoc3RydWN0IHNrX2J1ZmYgKik7CiMgMjE2 ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9za2J1ZmYuaCIKfTsK IyAyMjUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3NrYnVmZi5o IgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3NsYWIuaCIg MQojIDIyNiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc2tidWZm LmgiIDIKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3N5c3Rl bS5oIiAxCiMgMjI4ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9z a2J1ZmYuaCIgMgoKZXh0ZXJuIHZvaWQgX19rZnJlZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYik7 CmV4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqIGFsbG9jX3NrYih1bnNpZ25lZCBpbnQgc2l6ZSwgaW50 IHByaW9yaXR5KTsKZXh0ZXJuIHZvaWQga2ZyZWVfc2tibWVtKHN0cnVjdCBza19idWZmICpza2Ip OwpleHRlcm4gc3RydWN0IHNrX2J1ZmYgKiBza2JfY2xvbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwg aW50IHByaW9yaXR5KTsKZXh0ZXJuIHN0cnVjdCBza19idWZmICogc2tiX2NvcHkoY29uc3Qgc3Ry dWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByaW9yaXR5KTsKZXh0ZXJuIHN0cnVjdCBza19idWZmICog cHNrYl9jb3B5KHN0cnVjdCBza19idWZmICpza2IsIGludCBnZnBfbWFzayk7CmV4dGVybiBpbnQg cHNrYl9leHBhbmRfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmhlYWQsIGludCBudGFp bCwgaW50IGdmcF9tYXNrKTsKZXh0ZXJuIHN0cnVjdCBza19idWZmICogc2tiX3JlYWxsb2NfaGVh ZHJvb20oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhlYWRyb29tKTsKZXh0ZXJu IHN0cnVjdCBza19idWZmICogc2tiX2NvcHlfZXhwYW5kKGNvbnN0IHN0cnVjdCBza19idWZmICpz a2IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBu ZXdoZWFkcm9vbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IG5ld3RhaWxyb29tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgcHJpb3JpdHkpOwoKZXh0ZXJuIHZvaWQgc2tiX292ZXJfcGFuaWMoc3Ry dWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbiwgdm9pZCAqaGVyZSk7CmV4dGVybiB2b2lkIHNrYl91 bmRlcl9wYW5pYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuLCB2b2lkICpoZXJlKTsKIyAy NTUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIgpz dGF0aWMgaW5saW5lIGludCBza2JfcXVldWVfZW1wdHkoc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlz dCkKewogICAgICAgIHJldHVybiAobGlzdC0+bmV4dCA9PSAoc3RydWN0IHNrX2J1ZmYgKikgbGlz dCk7Cn0KIyAyNjggIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3Nr YnVmZi5oIgpzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpza2JfZ2V0KHN0cnVjdCBza19i dWZmICpza2IpCnsKICAgICAgICBhdG9taWNfaW5jKCZza2ItPnVzZXJzKTsKICAgICAgICByZXR1 cm4gc2tiOwp9CiMgMjg3ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51 eC9za2J1ZmYuaCIKc3RhdGljIGlubGluZSB2b2lkIGtmcmVlX3NrYihzdHJ1Y3Qgc2tfYnVmZiAq c2tiKQp7CiAgICAgICAgaWYgKCgoJnNrYi0+dXNlcnMpLT5jb3VudGVyKSA9PSAxIHx8IGF0b21p Y19kZWNfYW5kX3Rlc3QoJnNrYi0+dXNlcnMpKQogICAgICAgICAgICAgICAgX19rZnJlZV9za2Io c2tiKTsKfQoKCnN0YXRpYyBpbmxpbmUgdm9pZCBrZnJlZV9za2JfZmFzdChzdHJ1Y3Qgc2tfYnVm ZiAqc2tiKQp7CiAgICAgICAgaWYgKCgoJnNrYi0+dXNlcnMpLT5jb3VudGVyKSA9PSAxIHx8IGF0 b21pY19kZWNfYW5kX3Rlc3QoJnNrYi0+dXNlcnMpKQogICAgICAgICAgICAgICAga2ZyZWVfc2ti bWVtKHNrYik7Cn0KIyAzMDkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xp bnV4L3NrYnVmZi5oIgpzdGF0aWMgaW5saW5lIGludCBza2JfY2xvbmVkKHN0cnVjdCBza19idWZm ICpza2IpCnsKICAgICAgICByZXR1cm4gc2tiLT5jbG9uZWQgJiYgKCgmKChzdHJ1Y3Qgc2tiX3No YXJlZF9pbmZvICopKChza2IpLT5lbmQpKS0+ZGF0YXJlZiktPmNvdW50ZXIpICE9IDE7Cn0KIyAz MjIgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIgpz dGF0aWMgaW5saW5lIGludCBza2Jfc2hhcmVkKHN0cnVjdCBza19idWZmICpza2IpCnsKICAgICAg ICByZXR1cm4gKCgoJnNrYi0+dXNlcnMpLT5jb3VudGVyKSAhPSAxKTsKfQojIDM0MSAiL3Vzci9z cmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc2tidWZmLmgiCnN0YXRpYyBpbmxp bmUgc3RydWN0IHNrX2J1ZmYgKnNrYl9zaGFyZV9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBp bnQgcHJpKQp7CiAgICAgICAgaWYgKHNrYl9zaGFyZWQoc2tiKSkgewogICAgICAgICAgICAgICAg c3RydWN0IHNrX2J1ZmYgKm5za2I7CiAgICAgICAgICAgICAgICBuc2tiID0gc2tiX2Nsb25lKHNr YiwgcHJpKTsKICAgICAgICAgICAgICAgIGtmcmVlX3NrYihza2IpOwogICAgICAgICAgICAgICAg cmV0dXJuIG5za2I7CiAgICAgICAgfQogICAgICAgIHJldHVybiBza2I7Cn0KIyAzNzQgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIgpzdGF0aWMgaW5s aW5lIHN0cnVjdCBza19idWZmICpza2JfdW5zaGFyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQg cHJpKQp7CiAgICAgICAgc3RydWN0IHNrX2J1ZmYgKm5za2I7CiAgICAgICAgaWYoIXNrYl9jbG9u ZWQoc2tiKSkKICAgICAgICAgICAgICAgIHJldHVybiBza2I7CiAgICAgICAgbnNrYj1za2JfY29w eShza2IsIHByaSk7CiAgICAgICAga2ZyZWVfc2tiKHNrYik7CiAgICAgICAgcmV0dXJuIG5za2I7 Cn0KIyAzOTggIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3NrYnVm Zi5oIgpzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpza2JfcGVlayhzdHJ1Y3Qgc2tfYnVm Zl9oZWFkICpsaXN0XykKewogICAgICAgIHN0cnVjdCBza19idWZmICpsaXN0ID0gKChzdHJ1Y3Qg c2tfYnVmZiAqKWxpc3RfKS0+bmV4dDsKICAgICAgICBpZiAobGlzdCA9PSAoc3RydWN0IHNrX2J1 ZmYgKilsaXN0XykKICAgICAgICAgICAgICAgIGxpc3QgPSAoKHZvaWQgKikwKTsKICAgICAgICBy ZXR1cm4gbGlzdDsKfQojIDQyMCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUv bGludXgvc2tidWZmLmgiCnN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnNrYl9wZWVrX3Rh aWwoc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdF8pCnsKICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAq bGlzdCA9ICgoc3RydWN0IHNrX2J1ZmYgKilsaXN0XyktPnByZXY7CiAgICAgICAgaWYgKGxpc3Qg PT0gKHN0cnVjdCBza19idWZmICopbGlzdF8pCiAgICAgICAgICAgICAgICBsaXN0ID0gKCh2b2lk ICopMCk7CiAgICAgICAgcmV0dXJuIGxpc3Q7Cn0KIyA0MzUgIi91c3Ivc3JjL2xpbnV4LTIuNC4x My9saW51eC9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIgpzdGF0aWMgaW5saW5lIF9fdTMyIHNrYl9x dWV1ZV9sZW4oc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdF8pCnsKICAgICAgICByZXR1cm4obGlz dF8tPnFsZW4pOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3F1ZXVlX2hlYWRfaW5pdChzdHJ1 Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KQp7CiAgICAgICAgZG8geyAqKCZsaXN0LT5sb2NrKSA9IChz cGlubG9ja190KSB7IDEgfTsgfSB3aGlsZSgwKTsKICAgICAgICBsaXN0LT5wcmV2ID0gKHN0cnVj dCBza19idWZmICopbGlzdDsKICAgICAgICBsaXN0LT5uZXh0ID0gKHN0cnVjdCBza19idWZmICop bGlzdDsKICAgICAgICBsaXN0LT5xbGVuID0gMDsKfQojIDQ2NiAiL3Vzci9zcmMvbGludXgtMi40 LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc2tidWZmLmgiCnN0YXRpYyBpbmxpbmUgdm9pZCBfX3Nr Yl9xdWV1ZV9oZWFkKHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsIHN0cnVjdCBza19idWZmICpu ZXdzaykKewogICAgICAgIHN0cnVjdCBza19idWZmICpwcmV2LCAqbmV4dDsKCiAgICAgICAgbmV3 c2stPmxpc3QgPSBsaXN0OwogICAgICAgIGxpc3QtPnFsZW4rKzsKICAgICAgICBwcmV2ID0gKHN0 cnVjdCBza19idWZmICopbGlzdDsKICAgICAgICBuZXh0ID0gcHJldi0+bmV4dDsKICAgICAgICBu ZXdzay0+bmV4dCA9IG5leHQ7CiAgICAgICAgbmV3c2stPnByZXYgPSBwcmV2OwogICAgICAgIG5l eHQtPnByZXYgPSBuZXdzazsKICAgICAgICBwcmV2LT5uZXh0ID0gbmV3c2s7Cn0KIyA0OTMgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIgpzdGF0aWMg aW5saW5lIHZvaWQgc2tiX3F1ZXVlX2hlYWQoc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCwgc3Ry dWN0IHNrX2J1ZmYgKm5ld3NrKQp7CiAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKCiAgICAg ICAgZG8geyBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGZsIDsgcG9wbCAlMCA7IGNsaSI6Ij1n IiAoZmxhZ3MpOiA6Im1lbW9yeSIpOyBzcGluX2xvY2soJmxpc3QtPmxvY2spOyB9IHdoaWxlICgw KTsKICAgICAgICBfX3NrYl9xdWV1ZV9oZWFkKGxpc3QsIG5ld3NrKTsKICAgICAgICBkbyB7IHNw aW5fdW5sb2NrKCZsaXN0LT5sb2NrKTsgX19hc21fXyBfX3ZvbGF0aWxlX18oInB1c2hsICUwIDsg cG9wZmwiOiA6ImciIChmbGFncyk6Im1lbW9yeSIsICJjYyIpOyB9IHdoaWxlICgwKTsKfQojIDUx NCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc2tidWZmLmgiCnN0 YXRpYyBpbmxpbmUgdm9pZCBfX3NrYl9xdWV1ZV90YWlsKHN0cnVjdCBza19idWZmX2hlYWQgKmxp c3QsIHN0cnVjdCBza19idWZmICpuZXdzaykKewogICAgICAgIHN0cnVjdCBza19idWZmICpwcmV2 LCAqbmV4dDsKCiAgICAgICAgbmV3c2stPmxpc3QgPSBsaXN0OwogICAgICAgIGxpc3QtPnFsZW4r KzsKICAgICAgICBuZXh0ID0gKHN0cnVjdCBza19idWZmICopbGlzdDsKICAgICAgICBwcmV2ID0g bmV4dC0+cHJldjsKICAgICAgICBuZXdzay0+bmV4dCA9IG5leHQ7CiAgICAgICAgbmV3c2stPnBy ZXYgPSBwcmV2OwogICAgICAgIG5leHQtPnByZXYgPSBuZXdzazsKICAgICAgICBwcmV2LT5uZXh0 ID0gbmV3c2s7Cn0KIyA1NDAgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xp bnV4L3NrYnVmZi5oIgpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3F1ZXVlX3RhaWwoc3RydWN0IHNr X2J1ZmZfaGVhZCAqbGlzdCwgc3RydWN0IHNrX2J1ZmYgKm5ld3NrKQp7CiAgICAgICAgdW5zaWdu ZWQgbG9uZyBmbGFnczsKCiAgICAgICAgZG8geyBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGZs IDsgcG9wbCAlMCA7IGNsaSI6Ij1nIiAoZmxhZ3MpOiA6Im1lbW9yeSIpOyBzcGluX2xvY2soJmxp c3QtPmxvY2spOyB9IHdoaWxlICgwKTsKICAgICAgICBfX3NrYl9xdWV1ZV90YWlsKGxpc3QsIG5l d3NrKTsKICAgICAgICBkbyB7IHNwaW5fdW5sb2NrKCZsaXN0LT5sb2NrKTsgX19hc21fXyBfX3Zv bGF0aWxlX18oInB1c2hsICUwIDsgcG9wZmwiOiA6ImciIChmbGFncyk6Im1lbW9yeSIsICJjYyIp OyB9IHdoaWxlICgwKTsKfQojIDU1OCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1 ZGUvbGludXgvc2tidWZmLmgiCnN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKl9fc2tiX2Rl cXVldWUoc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCkKewogICAgICAgIHN0cnVjdCBza19idWZm ICpuZXh0LCAqcHJldiwgKnJlc3VsdDsKCiAgICAgICAgcHJldiA9IChzdHJ1Y3Qgc2tfYnVmZiAq KSBsaXN0OwogICAgICAgIG5leHQgPSBwcmV2LT5uZXh0OwogICAgICAgIHJlc3VsdCA9ICgodm9p ZCAqKTApOwogICAgICAgIGlmIChuZXh0ICE9IHByZXYpIHsKICAgICAgICAgICAgICAgIHJlc3Vs dCA9IG5leHQ7CiAgICAgICAgICAgICAgICBuZXh0ID0gbmV4dC0+bmV4dDsKICAgICAgICAgICAg ICAgIGxpc3QtPnFsZW4tLTsKICAgICAgICAgICAgICAgIG5leHQtPnByZXYgPSBwcmV2OwogICAg ICAgICAgICAgICAgcHJldi0+bmV4dCA9IG5leHQ7CiAgICAgICAgICAgICAgICByZXN1bHQtPm5l eHQgPSAoKHZvaWQgKikwKTsKICAgICAgICAgICAgICAgIHJlc3VsdC0+cHJldiA9ICgodm9pZCAq KTApOwogICAgICAgICAgICAgICAgcmVzdWx0LT5saXN0ID0gKCh2b2lkICopMCk7CiAgICAgICAg fQogICAgICAgIHJldHVybiByZXN1bHQ7Cn0KIyA1ODcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9s aW51eC9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIgpzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZm ICpza2JfZGVxdWV1ZShzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KQp7CiAgICAgICAgbG9uZyBm bGFnczsKICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqcmVzdWx0OwoKICAgICAgICBkbyB7IF9fYXNt X18gX192b2xhdGlsZV9fKCJwdXNoZmwgOyBwb3BsICUwIDsgY2xpIjoiPWciIChmbGFncyk6IDoi bWVtb3J5Iik7IHNwaW5fbG9jaygmbGlzdC0+bG9jayk7IH0gd2hpbGUgKDApOwogICAgICAgIHJl c3VsdCA9IF9fc2tiX2RlcXVldWUobGlzdCk7CiAgICAgICAgZG8geyBzcGluX3VubG9jaygmbGlz dC0+bG9jayk7IF9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNobCAlMCA7IHBvcGZsIjogOiJnIiAo ZmxhZ3MpOiJtZW1vcnkiLCAiY2MiKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgcmV0dXJuIHJlc3Vs dDsKfQoKCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBfX3NrYl9pbnNlcnQoc3RydWN0IHNrX2J1ZmYg Km5ld3NrLAogICAgICAgIHN0cnVjdCBza19idWZmICogcHJldiwgc3RydWN0IHNrX2J1ZmYgKm5l eHQsCiAgICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqIGxpc3QpCnsKICAgICAgICBuZXdzay0+ bmV4dCA9IG5leHQ7CiAgICAgICAgbmV3c2stPnByZXYgPSBwcmV2OwogICAgICAgIG5leHQtPnBy ZXYgPSBuZXdzazsKICAgICAgICBwcmV2LT5uZXh0ID0gbmV3c2s7CiAgICAgICAgbmV3c2stPmxp c3QgPSBsaXN0OwogICAgICAgIGxpc3QtPnFsZW4rKzsKfQojIDYyNCAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc2tidWZmLmgiCnN0YXRpYyBpbmxpbmUgdm9pZCBz a2JfaW5zZXJ0KHN0cnVjdCBza19idWZmICpvbGQsIHN0cnVjdCBza19idWZmICpuZXdzaykKewog ICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CgogICAgICAgIGRvIHsgX19hc21fXyBfX3ZvbGF0 aWxlX18oInB1c2hmbCA7IHBvcGwgJTAgOyBjbGkiOiI9ZyIgKGZsYWdzKTogOiJtZW1vcnkiKTsg c3Bpbl9sb2NrKCZvbGQtPmxpc3QtPmxvY2spOyB9IHdoaWxlICgwKTsKICAgICAgICBfX3NrYl9p bnNlcnQobmV3c2ssIG9sZC0+cHJldiwgb2xkLCBvbGQtPmxpc3QpOwogICAgICAgIGRvIHsgc3Bp bl91bmxvY2soJm9sZC0+bGlzdC0+bG9jayk7IF9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNobCAl MCA7IHBvcGZsIjogOiJnIiAoZmxhZ3MpOiJtZW1vcnkiLCAiY2MiKTsgfSB3aGlsZSAoMCk7Cn0K CgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgX19za2JfYXBwZW5kKHN0cnVjdCBza19idWZmICpvbGQs IHN0cnVjdCBza19idWZmICpuZXdzaykKewogICAgICAgIF9fc2tiX2luc2VydChuZXdzaywgb2xk LCBvbGQtPm5leHQsIG9sZC0+bGlzdCk7Cn0KIyA2NTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9s aW51eC9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIgpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX2FwcGVu ZChzdHJ1Y3Qgc2tfYnVmZiAqb2xkLCBzdHJ1Y3Qgc2tfYnVmZiAqbmV3c2spCnsKICAgICAgICB1 bnNpZ25lZCBsb25nIGZsYWdzOwoKICAgICAgICBkbyB7IF9fYXNtX18gX192b2xhdGlsZV9fKCJw dXNoZmwgOyBwb3BsICUwIDsgY2xpIjoiPWciIChmbGFncyk6IDoibWVtb3J5Iik7IHNwaW5fbG9j aygmb2xkLT5saXN0LT5sb2NrKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgX19za2JfYXBwZW5kKG9s ZCwgbmV3c2spOwogICAgICAgIGRvIHsgc3Bpbl91bmxvY2soJm9sZC0+bGlzdC0+bG9jayk7IF9f YXNtX18gX192b2xhdGlsZV9fKCJwdXNobCAlMCA7IHBvcGZsIjogOiJnIiAoZmxhZ3MpOiJtZW1v cnkiLCAiY2MiKTsgfSB3aGlsZSAoMCk7Cn0KCgoKCgoKc3RhdGljIGlubGluZSB2b2lkIF9fc2ti X3VubGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KQp7 CiAgICAgICAgc3RydWN0IHNrX2J1ZmYgKiBuZXh0LCAqIHByZXY7CgogICAgICAgIGxpc3QtPnFs ZW4tLTsKICAgICAgICBuZXh0ID0gc2tiLT5uZXh0OwogICAgICAgIHByZXYgPSBza2ItPnByZXY7 CiAgICAgICAgc2tiLT5uZXh0ID0gKCh2b2lkICopMCk7CiAgICAgICAgc2tiLT5wcmV2ID0gKCh2 b2lkICopMCk7CiAgICAgICAgc2tiLT5saXN0ID0gKCh2b2lkICopMCk7CiAgICAgICAgbmV4dC0+ cHJldiA9IHByZXY7CiAgICAgICAgcHJldi0+bmV4dCA9IG5leHQ7Cn0KIyA2OTQgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIgpzdGF0aWMgaW5saW5l IHZvaWQgc2tiX3VubGluayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQp7CiAgICAgICAgc3RydWN0IHNr X2J1ZmZfaGVhZCAqbGlzdCA9IHNrYi0+bGlzdDsKCiAgICAgICAgaWYobGlzdCkgewogICAgICAg ICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKCiAgICAgICAgICAgICAgICBkbyB7IF9fYXNt X18gX192b2xhdGlsZV9fKCJwdXNoZmwgOyBwb3BsICUwIDsgY2xpIjoiPWciIChmbGFncyk6IDoi bWVtb3J5Iik7IHNwaW5fbG9jaygmbGlzdC0+bG9jayk7IH0gd2hpbGUgKDApOwogICAgICAgICAg ICAgICAgaWYoc2tiLT5saXN0ID09IGxpc3QpCiAgICAgICAgICAgICAgICAgICAgICAgIF9fc2ti X3VubGluayhza2IsIHNrYi0+bGlzdCk7CiAgICAgICAgICAgICAgICBkbyB7IHNwaW5fdW5sb2Nr KCZsaXN0LT5sb2NrKTsgX19hc21fXyBfX3ZvbGF0aWxlX18oInB1c2hsICUwIDsgcG9wZmwiOiA6 ImciIChmbGFncyk6Im1lbW9yeSIsICJjYyIpOyB9IHdoaWxlICgwKTsKICAgICAgICB9Cn0KIyA3 MTkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIgpz dGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpfX3NrYl9kZXF1ZXVlX3RhaWwoc3RydWN0IHNr X2J1ZmZfaGVhZCAqbGlzdCkKewogICAgICAgIHN0cnVjdCBza19idWZmICpza2IgPSBza2JfcGVl a190YWlsKGxpc3QpOwogICAgICAgIGlmIChza2IpCiAgICAgICAgICAgICAgICBfX3NrYl91bmxp bmsoc2tiLCBsaXN0KTsKICAgICAgICByZXR1cm4gc2tiOwp9CiMgNzM2ICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9za2J1ZmYuaCIKc3RhdGljIGlubGluZSBzdHJ1 Y3Qgc2tfYnVmZiAqc2tiX2RlcXVldWVfdGFpbChzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KQp7 CiAgICAgICAgbG9uZyBmbGFnczsKICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqcmVzdWx0OwoKICAg ICAgICBkbyB7IF9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNoZmwgOyBwb3BsICUwIDsgY2xpIjoi PWciIChmbGFncyk6IDoibWVtb3J5Iik7IHNwaW5fbG9jaygmbGlzdC0+bG9jayk7IH0gd2hpbGUg KDApOwogICAgICAgIHJlc3VsdCA9IF9fc2tiX2RlcXVldWVfdGFpbChsaXN0KTsKICAgICAgICBk byB7IHNwaW5fdW5sb2NrKCZsaXN0LT5sb2NrKTsgX19hc21fXyBfX3ZvbGF0aWxlX18oInB1c2hs ICUwIDsgcG9wZmwiOiA6ImciIChmbGFncyk6Im1lbW9yeSIsICJjYyIpOyB9IHdoaWxlICgwKTsK ICAgICAgICByZXR1cm4gcmVzdWx0Owp9CgpzdGF0aWMgaW5saW5lIGludCBza2JfaXNfbm9ubGlu ZWFyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCnsKICAgICAgICByZXR1cm4gc2tiLT5kYXRh X2xlbjsKfQoKc3RhdGljIGlubGluZSBpbnQgc2tiX2hlYWRsZW4oY29uc3Qgc3RydWN0IHNrX2J1 ZmYgKnNrYikKewogICAgICAgIHJldHVybiBza2ItPmxlbiAtIHNrYi0+ZGF0YV9sZW47Cn0KIyA3 NjUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIgpz dGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgKl9fc2tiX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqc2ti LCB1bnNpZ25lZCBpbnQgbGVuKQp7CiAgICAgICAgdW5zaWduZWQgY2hhciAqdG1wPXNrYi0+dGFp bDsKICAgICAgICBkbyB7IGlmIChza2JfaXNfbm9ubGluZWFyKHNrYikpIF9fYXNtX18gX192b2xh dGlsZV9fKCIuYnl0ZSAweDBmLDB4MGIiKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgc2tiLT50YWls Kz1sZW47CiAgICAgICAgc2tiLT5sZW4rPWxlbjsKICAgICAgICByZXR1cm4gdG1wOwp9CiMgNzg0 ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9za2J1ZmYuaCIKc3Rh dGljIGlubGluZSB1bnNpZ25lZCBjaGFyICpza2JfcHV0KHN0cnVjdCBza19idWZmICpza2IsIHVu c2lnbmVkIGludCBsZW4pCnsKICAgICAgICB1bnNpZ25lZCBjaGFyICp0bXA9c2tiLT50YWlsOwog ICAgICAgIGRvIHsgaWYgKHNrYl9pc19ub25saW5lYXIoc2tiKSkgX19hc21fXyBfX3ZvbGF0aWxl X18oIi5ieXRlIDB4MGYsMHgwYiIpOyB9IHdoaWxlICgwKTsKICAgICAgICBza2ItPnRhaWwrPWxl bjsKICAgICAgICBza2ItPmxlbis9bGVuOwogICAgICAgIGlmKHNrYi0+dGFpbD5za2ItPmVuZCkg ewogICAgICAgICAgICAgICAgc2tiX292ZXJfcGFuaWMoc2tiLCBsZW4sICh7IHZvaWQgKnBjOyBf X2FzbV9fKCJtb3ZsICQxZiwlMFxuMToiOiI9ZyIgKHBjKSk7IHBjOyB9KSk7CiAgICAgICAgfQog ICAgICAgIHJldHVybiB0bXA7Cn0KCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqX19za2Jf cHVzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKQp7CiAgICAgICAgc2ti LT5kYXRhLT1sZW47CiAgICAgICAgc2tiLT5sZW4rPWxlbjsKICAgICAgICByZXR1cm4gc2tiLT5k YXRhOwp9CiMgODEzICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9z a2J1ZmYuaCIKc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyICpza2JfcHVzaChzdHJ1Y3Qgc2tf YnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKQp7CiAgICAgICAgc2tiLT5kYXRhLT1sZW47CiAg ICAgICAgc2tiLT5sZW4rPWxlbjsKICAgICAgICBpZihza2ItPmRhdGE8c2tiLT5oZWFkKSB7CiAg ICAgICAgICAgICAgICBza2JfdW5kZXJfcGFuaWMoc2tiLCBsZW4sICh7IHZvaWQgKnBjOyBfX2Fz bV9fKCJtb3ZsICQxZiwlMFxuMToiOiI9ZyIgKHBjKSk7IHBjOyB9KSk7CiAgICAgICAgfQogICAg ICAgIHJldHVybiBza2ItPmRhdGE7Cn0KCnN0YXRpYyBpbmxpbmUgY2hhciAqX19za2JfcHVsbChz dHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKQp7CiAgICAgICAgc2tiLT5sZW4t PWxlbjsKICAgICAgICBpZiAoc2tiLT5sZW4gPCBza2ItPmRhdGFfbGVuKQogICAgICAgICAgICAg ICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIi5ieXRlIDB4MGYsMHgwYiIpOwogICAgICAgIHJldHVy biBza2ItPmRhdGErPWxlbjsKfQojIDg0MiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2lu Y2x1ZGUvbGludXgvc2tidWZmLmgiCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqIHNrYl9w dWxsKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pCnsKICAgICAgICBpZiAo bGVuID4gc2tiLT5sZW4pCiAgICAgICAgICAgICAgICByZXR1cm4gKCh2b2lkICopMCk7CiAgICAg ICAgcmV0dXJuIF9fc2tiX3B1bGwoc2tiLGxlbik7Cn0KCmV4dGVybiB1bnNpZ25lZCBjaGFyICog X19wc2tiX3B1bGxfdGFpbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZGVsdGEpOwoKc3RhdGlj IGlubGluZSBjaGFyICpfX3Bza2JfcHVsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBp bnQgbGVuKQp7CiAgICAgICAgaWYgKGxlbiA+IHNrYl9oZWFkbGVuKHNrYikgJiYKICAgICAgICAg ICAgX19wc2tiX3B1bGxfdGFpbChza2IsIGxlbi1za2JfaGVhZGxlbihza2IpKSA9PSAoKHZvaWQg KikwKSkKICAgICAgICAgICAgICAgIHJldHVybiAoKHZvaWQgKikwKTsKICAgICAgICBza2ItPmxl biAtPSBsZW47CiAgICAgICAgcmV0dXJuIHNrYi0+ZGF0YSArPSBsZW47Cn0KCnN0YXRpYyBpbmxp bmUgdW5zaWduZWQgY2hhciAqIHBza2JfcHVsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25l ZCBpbnQgbGVuKQp7CiAgICAgICAgaWYgKGxlbiA+IHNrYi0+bGVuKQogICAgICAgICAgICAgICAg cmV0dXJuICgodm9pZCAqKTApOwogICAgICAgIHJldHVybiBfX3Bza2JfcHVsbChza2IsbGVuKTsK fQoKc3RhdGljIGlubGluZSBpbnQgcHNrYl9tYXlfcHVsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1 bnNpZ25lZCBpbnQgbGVuKQp7CiAgICAgICAgaWYgKGxlbiA8PSBza2JfaGVhZGxlbihza2IpKQog ICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgaWYgKGxlbiA+IHNrYi0+bGVuKQogICAg ICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgcmV0dXJuIChfX3Bza2JfcHVsbF90YWlsKHNr YiwgbGVuLXNrYl9oZWFkbGVuKHNrYikpICE9ICgodm9pZCAqKTApKTsKfQojIDg4MyAiL3Vzci9z cmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc2tidWZmLmgiCnN0YXRpYyBpbmxp bmUgaW50IHNrYl9oZWFkcm9vbShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQp7CiAgICAgICAg cmV0dXJuIHNrYi0+ZGF0YS1za2ItPmhlYWQ7Cn0KIyA4OTUgIi91c3Ivc3JjL2xpbnV4LTIuNC4x My9saW51eC9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIgpzdGF0aWMgaW5saW5lIGludCBza2JfdGFp bHJvb20oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKewogICAgICAgIHJldHVybiBza2JfaXNf bm9ubGluZWFyKHNrYikgPyAwIDogc2tiLT5lbmQtc2tiLT50YWlsOwp9CiMgOTA5ICIvdXNyL3Ny Yy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9za2J1ZmYuaCIKc3RhdGljIGlubGlu ZSB2b2lkIHNrYl9yZXNlcnZlKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4p CnsKICAgICAgICBza2ItPmRhdGErPWxlbjsKICAgICAgICBza2ItPnRhaWwrPWxlbjsKfQoKZXh0 ZXJuIGludCBfX19wc2tiX3RyaW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxl biwgaW50IHJlYWxsb2MpOwoKc3RhdGljIGlubGluZSB2b2lkIF9fc2tiX3RyaW0oc3RydWN0IHNr X2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbikKewogICAgICAgIGlmICghc2tiLT5kYXRhX2xl bikgewogICAgICAgICAgICAgICAgc2tiLT5sZW4gPSBsZW47CiAgICAgICAgICAgICAgICBza2It PnRhaWwgPSBza2ItPmRhdGErbGVuOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBf X19wc2tiX3RyaW0oc2tiLCBsZW4sIDApOwogICAgICAgIH0KfQojIDkzNiAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc2tidWZmLmgiCnN0YXRpYyBpbmxpbmUgdm9p ZCBza2JfdHJpbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKQp7CiAgICAg ICAgaWYgKHNrYi0+bGVuID4gbGVuKSB7CiAgICAgICAgICAgICAgICBfX3NrYl90cmltKHNrYiwg bGVuKTsKICAgICAgICB9Cn0KCgpzdGF0aWMgaW5saW5lIGludCBfX3Bza2JfdHJpbShzdHJ1Y3Qg c2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKQp7CiAgICAgICAgaWYgKCFza2ItPmRhdGFf bGVuKSB7CiAgICAgICAgICAgICAgICBza2ItPmxlbiA9IGxlbjsKICAgICAgICAgICAgICAgIHNr Yi0+dGFpbCA9IHNrYi0+ZGF0YStsZW47CiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAg ICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIF9fX3Bza2JfdHJpbShza2IsIGxlbiwg MSk7CiAgICAgICAgfQp9CgpzdGF0aWMgaW5saW5lIGludCBwc2tiX3RyaW0oc3RydWN0IHNrX2J1 ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbikKewogICAgICAgIGlmIChsZW4gPCBza2ItPmxlbikK ICAgICAgICAgICAgICAgIHJldHVybiBfX3Bza2JfdHJpbShza2IsIGxlbik7CiAgICAgICAgcmV0 dXJuIDA7Cn0KIyA5NzIgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4 L3NrYnVmZi5oIgpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX29ycGhhbihzdHJ1Y3Qgc2tfYnVmZiAq c2tiKQp7CiAgICAgICAgaWYgKHNrYi0+ZGVzdHJ1Y3RvcikKICAgICAgICAgICAgICAgIHNrYi0+ ZGVzdHJ1Y3Rvcihza2IpOwogICAgICAgIHNrYi0+ZGVzdHJ1Y3RvciA9ICgodm9pZCAqKTApOwog ICAgICAgIHNrYi0+c2sgPSAoKHZvaWQgKikwKTsKfQojIDk5MCAiL3Vzci9zcmMvbGludXgtMi40 LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc2tidWZmLmgiCnN0YXRpYyBpbmxpbmUgdm9pZCBza2Jf cXVldWVfcHVyZ2Uoc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCkKewogICAgICAgIHN0cnVjdCBz a19idWZmICpza2I7CiAgICAgICAgd2hpbGUgKChza2I9c2tiX2RlcXVldWUobGlzdCkpIT0oKHZv aWQgKikwKSkKICAgICAgICAgICAgICAgIGtmcmVlX3NrYihza2IpOwp9CiMgMTAwNyAiL3Vzci9z cmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc2tidWZmLmgiCnN0YXRpYyBpbmxp bmUgdm9pZCBfX3NrYl9xdWV1ZV9wdXJnZShzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KQp7CiAg ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYjsKICAgICAgICB3aGlsZSAoKHNrYj1fX3NrYl9kZXF1 ZXVlKGxpc3QpKSE9KCh2b2lkICopMCkpCiAgICAgICAgICAgICAgICBrZnJlZV9za2Ioc2tiKTsK fQojIDEwMjcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3NrYnVm Zi5oIgpzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpfX2Rldl9hbGxvY19za2IodW5zaWdu ZWQgaW50IGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCBnZnBfbWFzaykKewogICAgICAgIHN0cnVjdCBza19idWZmICpza2I7CgogICAgICAg IHNrYiA9IGFsbG9jX3NrYihsZW5ndGgrMTYsIGdmcF9tYXNrKTsKICAgICAgICBpZiAoc2tiKQog ICAgICAgICAgICAgICAgc2tiX3Jlc2VydmUoc2tiLDE2KTsKICAgICAgICByZXR1cm4gc2tiOwp9 CiMgMTA1MSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvc2tidWZm LmgiCnN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKmRldl9hbGxvY19za2IodW5zaWduZWQg aW50IGxlbmd0aCkKewogICAgICAgIHJldHVybiBfX2Rldl9hbGxvY19za2IobGVuZ3RoLCAoMHgy MCkpOwp9CiMgMTA2OSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgv c2tidWZmLmgiCnN0YXRpYyBpbmxpbmUgaW50CnNrYl9jb3coc3RydWN0IHNrX2J1ZmYgKnNrYiwg dW5zaWduZWQgaW50IGhlYWRyb29tKQp7CiAgICAgICAgaW50IGRlbHRhID0gKGhlYWRyb29tID4g MTYgPyBoZWFkcm9vbSA6IDE2KSAtIHNrYl9oZWFkcm9vbShza2IpOwoKICAgICAgICBpZiAoZGVs dGEgPCAwKQogICAgICAgICAgICAgICAgZGVsdGEgPSAwOwoKICAgICAgICBpZiAoZGVsdGEgfHwg c2tiX2Nsb25lZChza2IpKQogICAgICAgICAgICAgICAgcmV0dXJuIHBza2JfZXhwYW5kX2hlYWQo c2tiLCAoZGVsdGErMTUpJn4xNSwgMCwgKDB4MjApKTsKICAgICAgICByZXR1cm4gMDsKfQojIDEw ODkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIgpp bnQgc2tiX2xpbmVhcml6ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZ2ZwKTsKCnN0YXRpYyBp bmxpbmUgdm9pZCAqa21hcF9za2JfZnJhZyhjb25zdCBza2JfZnJhZ190ICpmcmFnKQp7CgoKCgoK CiAgICAgICAgcmV0dXJuIGttYXAoZnJhZy0+cGFnZSk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBr dW5tYXBfc2tiX2ZyYWcodm9pZCAqdmFkZHIpCnsKICAgICAgICBkbyB7IH0gd2hpbGUgKDApOwoK Cgp9CgoKCgoKCgpleHRlcm4gc3RydWN0IHNrX2J1ZmYgKiBza2JfcmVjdl9kYXRhZ3JhbShzdHJ1 Y3Qgc29jayAqc2ssdW5zaWduZWQgZmxhZ3MsaW50IG5vYmxvY2ssIGludCAqZXJyKTsKZXh0ZXJu IHVuc2lnbmVkIGludCBkYXRhZ3JhbV9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29j a2V0ICpzb2NrLCBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpOwpleHRlcm4gaW50IHNr Yl9jb3B5X2RhdGFncmFtKGNvbnN0IHN0cnVjdCBza19idWZmICpmcm9tLCBpbnQgb2Zmc2V0LCBj aGFyICp0byxpbnQgc2l6ZSk7CmV4dGVybiBpbnQgc2tiX2NvcHlfZGF0YWdyYW1faW92ZWMoY29u c3Qgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBvZmZzZXQsIHN0cnVjdCBpb3ZlYyAqdG8saW50 IHNpemUpOwpleHRlcm4gaW50IHNrYl9jb3B5X2FuZF9jc3VtX2RhdGFncmFtKGNvbnN0IHN0cnVj dCBza19idWZmICpza2IsIGludCBvZmZzZXQsIHU4ICp0bywgaW50IGxlbiwgdW5zaWduZWQgaW50 ICpjc3VtcCk7CmV4dGVybiBpbnQgc2tiX2NvcHlfYW5kX2NzdW1fZGF0YWdyYW1faW92ZWMoY29u c3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhsZW4sIHN0cnVjdCBpb3ZlYyAqaW92KTsKZXh0 ZXJuIHZvaWQgc2tiX2ZyZWVfZGF0YWdyYW0oc3RydWN0IHNvY2sgKiBzaywgc3RydWN0IHNrX2J1 ZmYgKnNrYik7CgpleHRlcm4gdW5zaWduZWQgaW50IHNrYl9jaGVja3N1bShjb25zdCBzdHJ1Y3Qg c2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgY3N1bSk7CmV4 dGVybiBpbnQgc2tiX2NvcHlfYml0cyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zm c2V0LCB2b2lkICp0bywgaW50IGxlbik7CmV4dGVybiB1bnNpZ25lZCBpbnQgc2tiX2NvcHlfYW5k X2NzdW1fYml0cyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LCB1OCAqdG8s IGludCBsZW4sIHVuc2lnbmVkIGludCBjc3VtKTsKZXh0ZXJuIHZvaWQgc2tiX2NvcHlfYW5kX2Nz dW1fZGV2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHU4ICp0byk7CgpleHRlcm4gdm9pZCBz a2JfaW5pdCh2b2lkKTsKZXh0ZXJuIHZvaWQgc2tiX2FkZF9tdHUoaW50IG10dSk7CiMgMTQ3ICIv dXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCIgMgoK c3RydWN0IG5laWdoYm91cjsKc3RydWN0IG5laWdoX3Bhcm1zOwpzdHJ1Y3Qgc2tfYnVmZjsKCnN0 cnVjdCBuZXRpZl9yeF9zdGF0cwp7CiAgICAgICAgdW5zaWduZWQgdG90YWw7CiAgICAgICAgdW5z aWduZWQgZHJvcHBlZDsKICAgICAgICB1bnNpZ25lZCB0aW1lX3NxdWVlemU7CiAgICAgICAgdW5z aWduZWQgdGhyb3R0bGVkOwogICAgICAgIHVuc2lnbmVkIGZhc3Ryb3V0ZV9oaXQ7CiAgICAgICAg dW5zaWduZWQgZmFzdHJvdXRlX3N1Y2Nlc3M7CiAgICAgICAgdW5zaWduZWQgZmFzdHJvdXRlX2Rl ZmVyOwogICAgICAgIHVuc2lnbmVkIGZhc3Ryb3V0ZV9kZWZlcnJlZF9vdXQ7CiAgICAgICAgdW5z aWduZWQgZmFzdHJvdXRlX2xhdGVuY3lfcmVkdWN0aW9uOwogICAgICAgIHVuc2lnbmVkIGNwdV9j b2xsaXNpb247Cn0gX19hdHRyaWJ1dGVfXyAoKF9fYWxpZ25lZF9fKCgxIDw8ICgoNSkpKSkpKTsK CmV4dGVybiBzdHJ1Y3QgbmV0aWZfcnhfc3RhdHMgbmV0ZGV2X3J4X3N0YXRbXTsKCgoKCgoKc3Ry dWN0IGRldl9tY19saXN0CnsKICAgICAgICBzdHJ1Y3QgZGV2X21jX2xpc3QgKm5leHQ7CiAgICAg ICAgX191OCBkbWlfYWRkcls4XTsKICAgICAgICB1bnNpZ25lZCBjaGFyIGRtaV9hZGRybGVuOwog ICAgICAgIGludCBkbWlfdXNlcnM7CiAgICAgICAgaW50IGRtaV9ndXNlcnM7Cn07CgpzdHJ1Y3Qg aGhfY2FjaGUKewogICAgICAgIHN0cnVjdCBoaF9jYWNoZSAqaGhfbmV4dDsKICAgICAgICBhdG9t aWNfdCBoaF9yZWZjbnQ7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgaGhfdHlwZTsKICAgICAgICBp bnQgaGhfbGVuOwogICAgICAgIGludCAoKmhoX291dHB1dCkoc3RydWN0IHNrX2J1ZmYgKnNrYik7 CiAgICAgICAgcndsb2NrX3QgaGhfbG9jazsKCiAgICAgICAgdW5zaWduZWQgbG9uZyBoaF9kYXRh WzE2L3NpemVvZih1bnNpZ25lZCBsb25nKV07Cn07CgoKCgoKCmVudW0gbmV0ZGV2X3N0YXRlX3QK ewogICAgICAgIF9fTElOS19TVEFURV9YT0ZGPTAsCiAgICAgICAgX19MSU5LX1NUQVRFX1NUQVJU LAogICAgICAgIF9fTElOS19TVEFURV9QUkVTRU5ULAogICAgICAgIF9fTElOS19TVEFURV9TQ0hF RCwKICAgICAgICBfX0xJTktfU1RBVEVfTk9DQVJSSUVSCn07CgoKCgoKCnN0cnVjdCBuZXRkZXZf Ym9vdF9zZXR1cCB7CiAgICAgICAgY2hhciBuYW1lWzE2XTsKICAgICAgICBzdHJ1Y3QgaWZtYXAg bWFwOwp9OwojIDIzMCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgv bmV0ZGV2aWNlLmgiCnN0cnVjdCBuZXRfZGV2aWNlCnsKCgoKCgoKICAgICAgICBjaGFyIG5hbWVb MTZdOwoKCgoKCiAgICAgICAgdW5zaWduZWQgbG9uZyBybWVtX2VuZDsKICAgICAgICB1bnNpZ25l ZCBsb25nIHJtZW1fc3RhcnQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBtZW1fZW5kOwogICAgICAg IHVuc2lnbmVkIGxvbmcgbWVtX3N0YXJ0OwogICAgICAgIHVuc2lnbmVkIGxvbmcgYmFzZV9hZGRy OwogICAgICAgIHVuc2lnbmVkIGludCBpcnE7CgoKCgoKCiAgICAgICAgdW5zaWduZWQgY2hhciBp Zl9wb3J0OwogICAgICAgIHVuc2lnbmVkIGNoYXIgZG1hOwoKICAgICAgICB1bnNpZ25lZCBsb25n IHN0YXRlOwoKICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV4dDsKCgogICAgICAgIGludCAo KmluaXQpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwoKCgogICAgICAgIHN0cnVjdCBuZXRfZGV2 aWNlICpuZXh0X3NjaGVkOwoKCiAgICAgICAgaW50IGlmaW5kZXg7CiAgICAgICAgaW50IGlmbGlu azsKCgogICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKiAoKmdldF9zdGF0cykoc3RydWN0 IG5ldF9kZXZpY2UgKmRldik7CiAgICAgICAgc3RydWN0IGl3X3N0YXRpc3RpY3MqICgqZ2V0X3dp cmVsZXNzX3N0YXRzKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIyAyODUgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIgogICAgICAgIHVuc2ln bmVkIGxvbmcgdHJhbnNfc3RhcnQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBsYXN0X3J4OwoKICAg ICAgICB1bnNpZ25lZCBzaG9ydCBmbGFnczsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBnZmxhZ3M7 CiAgICAgICAgdW5zaWduZWQgbXR1OwogICAgICAgIHVuc2lnbmVkIHNob3J0IHR5cGU7CiAgICAg ICAgdW5zaWduZWQgc2hvcnQgaGFyZF9oZWFkZXJfbGVuOwogICAgICAgIHZvaWQgKnByaXY7Cgog ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICptYXN0ZXI7CgoKCgogICAgICAgIHVuc2lnbmVkIGNo YXIgYnJvYWRjYXN0WzhdOwogICAgICAgIHVuc2lnbmVkIGNoYXIgZGV2X2FkZHJbOF07CiAgICAg ICAgdW5zaWduZWQgY2hhciBhZGRyX2xlbjsKCiAgICAgICAgc3RydWN0IGRldl9tY19saXN0ICpt Y19saXN0OwogICAgICAgIGludCBtY19jb3VudDsKICAgICAgICBpbnQgcHJvbWlzY3VpdHk7CiAg ICAgICAgaW50IGFsbG11bHRpOwoKICAgICAgICBpbnQgd2F0Y2hkb2dfdGltZW87CiAgICAgICAg c3RydWN0IHRpbWVyX2xpc3Qgd2F0Y2hkb2dfdGltZXI7CgoKCiAgICAgICAgdm9pZCAqYXRhbGtf cHRyOwogICAgICAgIHZvaWQgKmlwX3B0cjsKICAgICAgICB2b2lkICpkbl9wdHI7CiAgICAgICAg dm9pZCAqaXA2X3B0cjsKICAgICAgICB2b2lkICplY19wdHI7CgogICAgICAgIHN0cnVjdCBRZGlz YyAqcWRpc2M7CiAgICAgICAgc3RydWN0IFFkaXNjICpxZGlzY19zbGVlcGluZzsKICAgICAgICBz dHJ1Y3QgUWRpc2MgKnFkaXNjX2xpc3Q7CiAgICAgICAgc3RydWN0IFFkaXNjICpxZGlzY19pbmdy ZXNzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgdHhfcXVldWVfbGVuOwoKCiAgICAgICAgc3Bpbmxv Y2tfdCB4bWl0X2xvY2s7CgoKCiAgICAgICAgaW50IHhtaXRfbG9ja19vd25lcjsKCiAgICAgICAg c3BpbmxvY2tfdCBxdWV1ZV9sb2NrOwoKICAgICAgICBhdG9taWNfdCByZWZjbnQ7CgogICAgICAg IGludCBkZWFkYmVhZjsKCgogICAgICAgIGludCBmZWF0dXJlczsKIyAzNTAgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIgogICAgICAgIHZvaWQg KCp1bmluaXQpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwoKICAgICAgICB2b2lkICgqZGVzdHJ1 Y3Rvcikoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CgoKICAgICAgICBpbnQgKCpvcGVuKShzdHJ1 Y3QgbmV0X2RldmljZSAqZGV2KTsKICAgICAgICBpbnQgKCpzdG9wKShzdHJ1Y3QgbmV0X2Rldmlj ZSAqZGV2KTsKICAgICAgICBpbnQgKCpoYXJkX3N0YXJ0X3htaXQpIChzdHJ1Y3Qgc2tfYnVmZiAq c2tiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAgICAgICAgaW50ICgqaGFyZF9oZWFkZXIpIChzdHJ1 Y3Qgc2tfYnVmZiAqc2tiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCB0eXBlLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYWRkciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc2FkZHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlbik7 CiAgICAgICAgaW50ICgqcmVidWlsZF9oZWFkZXIpKHN0cnVjdCBza19idWZmICpza2IpOwoKICAg ICAgICB2b2lkICgqc2V0X211bHRpY2FzdF9saXN0KShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsK CiAgICAgICAgaW50ICgqc2V0X21hY19hZGRyZXNzKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICph ZGRyKTsKCiAgICAgICAgaW50ICgqZG9faW9jdGwpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGlmcmVxICpp ZnIsIGludCBjbWQpOwoKICAgICAgICBpbnQgKCpzZXRfY29uZmlnKShzdHJ1Y3QgbmV0X2Rldmlj ZSAqZGV2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IGlmbWFwICptYXApOwoKICAgICAgICBpbnQgKCpoYXJkX2hlYWRlcl9jYWNoZSkoc3RydWN0 IG5laWdoYm91ciAqbmVpZ2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IGhoX2NhY2hlICpoaCk7CiAgICAgICAgdm9pZCAoKmhlYWRl cl9jYWNoZV91cGRhdGUpKHN0cnVjdCBoaF9jYWNoZSAqaGgsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgY2hhciAqIGhhZGRyKTsKCiAgICAgICAgaW50ICgqY2hhbmdlX210dSkoc3RydWN0 IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpOwoKCiAgICAgICAgdm9pZCAoKnR4X3RpbWVv dXQpIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKCiAgICAgICAgaW50ICgqaGFyZF9oZWFkZXJf cGFyc2UpKHN0cnVjdCBza19idWZmICpza2IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqaGFkZHIpOwogICAgICAgIGlu dCAoKm5laWdoX3NldHVwKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmVpZ2hfcGFy bXMgKik7CiAgICAgICAgaW50ICgqYWNjZXB0X2Zhc3RwYXRoKShzdHJ1Y3QgbmV0X2RldmljZSAq LCBzdHJ1Y3QgZHN0X2VudHJ5Kik7CgoKICAgICAgICBzdHJ1Y3QgbW9kdWxlICpvd25lcjsKCgog ICAgICAgIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKmJyX3BvcnQ7CiMgNDEwICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCIKfTsKCgpzdHJ1Y3Qg cGFja2V0X3R5cGUKewogICAgICAgIHVuc2lnbmVkIHNob3J0IHR5cGU7CiAgICAgICAgc3RydWN0 IG5ldF9kZXZpY2UgKmRldjsKICAgICAgICBpbnQgKCpmdW5jKSAoc3RydWN0IHNrX2J1ZmYgKiwg c3RydWN0IG5ldF9kZXZpY2UgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKik7CiAgICAgICAgdm9pZCAqZGF0YTsKICAgICAgICBz dHJ1Y3QgcGFja2V0X3R5cGUgKm5leHQ7Cn07CgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMv bGludXgvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaCIgMQoKCgoKIyAxICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9jb25maWcuaCIgMQojIDYgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oIiAyCiMgMSAiL3Vzci9z cmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgva2VybmVsLmgiIDEKIyA3ICIvdXNy L3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaCIgMgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3NtcC5oIiAxCiMgOCAi L3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgiIDIK IyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9jYWNoZS5oIiAx CiMgOSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvaW50ZXJydXB0 LmgiIDIKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL2JpdG9w cy5oIiAxCiMgMTEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2lu dGVycnVwdC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNt L2F0b21pYy5oIiAxCiMgMTIgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xp bnV4L2ludGVycnVwdC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1 ZGUvYXNtL3B0cmFjZS5oIiAxCiMgMTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNs dWRlL2xpbnV4L2ludGVycnVwdC5oIiAyCgpzdHJ1Y3QgaXJxYWN0aW9uIHsKICAgICAgICB2b2lk ICgqaGFuZGxlcikoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopOwogICAgICAgIHVuc2ln bmVkIGxvbmcgZmxhZ3M7CiAgICAgICAgdW5zaWduZWQgbG9uZyBtYXNrOwogICAgICAgIGNvbnN0 IGNoYXIgKm5hbWU7CiAgICAgICAgdm9pZCAqZGV2X2lkOwogICAgICAgIHN0cnVjdCBpcnFhY3Rp b24gKm5leHQ7Cn07CgoKCgoKZW51bSB7CiAgICAgICAgVElNRVJfQkggPSAwLAogICAgICAgIFRR VUVVRV9CSCwKICAgICAgICBESUdJX0JILAogICAgICAgIFNFUklBTF9CSCwKICAgICAgICBSSVND T004X0JILAogICAgICAgIFNQRUNJQUxJWF9CSCwKICAgICAgICBBVVJPUkFfQkgsCiAgICAgICAg RVNQX0JILAogICAgICAgIFNDU0lfQkgsCiAgICAgICAgSU1NRURJQVRFX0JILAogICAgICAgIENZ Q0xBREVTX0JILAogICAgICAgIENNMjA2X0JILAogICAgICAgIEpTX0JILAogICAgICAgIE1BQ1NF UklBTF9CSCwKICAgICAgICBJU0lDT01fQkgKfTsKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEz L2xpbnV4L2luY2x1ZGUvYXNtL2hhcmRpcnEuaCIgMQoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2NvbmZpZy5oIiAxCiMgNSAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL2hhcmRpcnEuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3RocmVhZHMuaCIgMQojIDYgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9oYXJkaXJxLmgiIDIKIyAxICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9pcnEuaCIgMQojIDEyICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9pcnEuaCIKIyAxICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9jb25maWcuaCIgMQojIDEzICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9pcnEuaCIgMgoKCgojIDEgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2NhY2hlLmgiIDEKIyAxNyAiL3Vzci9z cmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvaXJxLmgiIDIKIyAxICIvdXNyL3Ny Yy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9zcGlubG9jay5oIiAxCiMgMTggIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2lycS5oIiAyCgojIDEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9pcnEuaCIgMQojIDEzICIvdXNy L3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vaXJxLmgiCiMgMSAiL3Vzci9zcmMv bGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvY29uZmlnLmgiIDEKIyAxNCAiL3Vzci9z cmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL2lycS5oIiAyCiMgMjggIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9pcnEuaCIKc3RhdGljIF9faW5saW5lX18g aW50IGlycV9jYW5ub25pY2FsaXplKGludCBpcnEpCnsKICAgICAgICByZXR1cm4gKChpcnEgPT0g MikgPyA5IDogaXJxKTsKfQoKZXh0ZXJuIHZvaWQgZGlzYWJsZV9pcnEodW5zaWduZWQgaW50KTsK ZXh0ZXJuIHZvaWQgZGlzYWJsZV9pcnFfbm9zeW5jKHVuc2lnbmVkIGludCk7CmV4dGVybiB2b2lk IGVuYWJsZV9pcnEodW5zaWduZWQgaW50KTsKIyAyMCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xp bnV4L2luY2x1ZGUvbGludXgvaXJxLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGlu dXgvaW5jbHVkZS9hc20vcHRyYWNlLmgiIDEKIyAyMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xp bnV4L2luY2x1ZGUvbGludXgvaXJxLmgiIDIKIyAzOSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xp bnV4L2luY2x1ZGUvbGludXgvaXJxLmgiCnN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSB7CiAgICAg ICAgY29uc3QgY2hhciAqIHR5cGVuYW1lOwogICAgICAgIHVuc2lnbmVkIGludCAoKnN0YXJ0dXAp KHVuc2lnbmVkIGludCBpcnEpOwogICAgICAgIHZvaWQgKCpzaHV0ZG93bikodW5zaWduZWQgaW50 IGlycSk7CiAgICAgICAgdm9pZCAoKmVuYWJsZSkodW5zaWduZWQgaW50IGlycSk7CiAgICAgICAg dm9pZCAoKmRpc2FibGUpKHVuc2lnbmVkIGludCBpcnEpOwogICAgICAgIHZvaWQgKCphY2spKHVu c2lnbmVkIGludCBpcnEpOwogICAgICAgIHZvaWQgKCplbmQpKHVuc2lnbmVkIGludCBpcnEpOwog ICAgICAgIHZvaWQgKCpzZXRfYWZmaW5pdHkpKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGxv bmcgbWFzayk7Cn07Cgp0eXBlZGVmIHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSBod19pcnFfY29u dHJvbGxlcjsKIyA1OSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgv aXJxLmgiCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICB1bnNpZ25lZCBpbnQgc3RhdHVzOwogICAg ICAgIGh3X2lycV9jb250cm9sbGVyICpoYW5kbGVyOwogICAgICAgIHN0cnVjdCBpcnFhY3Rpb24g KmFjdGlvbjsKICAgICAgICB1bnNpZ25lZCBpbnQgZGVwdGg7CiAgICAgICAgc3BpbmxvY2tfdCBs b2NrOwp9IF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKCgxIDw8ICgoNSkpKSkpKSBpcnFfZGVz Y190OwoKZXh0ZXJuIGlycV9kZXNjX3QgaXJxX2Rlc2MgWzIyNF07CgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9od19pcnEuaCIgMQojIDE1ICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vaHdfaXJxLmgiCiMgMSAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvY29uZmlnLmgiIDEKIyAxNiAiL3Vzci9zcmMv bGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL2h3X2lycS5oIiAyCiMgMSAiL3Vzci9zcmMv bGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL2F0b21pYy5oIiAxCiMgMTcgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9od19pcnEuaCIgMgojIDEgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9pcnEuaCIgMQojIDE4ICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vaHdfaXJxLmgiIDIKIyA2MSAiL3Vzci9zcmMv bGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL2h3X2lycS5oIgpleHRlcm4gaW50IGlycV92 ZWN0b3JbMjI0XTsKIyA3MSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNt L2h3X2lycS5oIgpleHRlcm4gdm9pZCBtYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKZXh0ZXJu IHZvaWQgdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKZXh0ZXJuIHZvaWQgZGlzYWJsZV84 MjU5QV9pcnEodW5zaWduZWQgaW50IGlycSk7CmV4dGVybiB2b2lkIGVuYWJsZV84MjU5QV9pcnEo dW5zaWduZWQgaW50IGlycSk7CmV4dGVybiBpbnQgaTgyNTlBX2lycV9wZW5kaW5nKHVuc2lnbmVk IGludCBpcnEpOwpleHRlcm4gdm9pZCBtYWtlXzgyNTlBX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsK ZXh0ZXJuIHZvaWQgaW5pdF84MjU5QShpbnQgYWVvaSk7CmV4dGVybiB2b2lkIHNlbmRfSVBJX3Nl bGYoaW50IHZlY3RvcikgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwpleHRlcm4gdm9pZCBp bml0X1ZJU1dTX0FQSUNfaXJxcyh2b2lkKTsKZXh0ZXJuIHZvaWQgc2V0dXBfSU9fQVBJQyh2b2lk KTsKZXh0ZXJuIHZvaWQgZGlzYWJsZV9JT19BUElDKHZvaWQpOwpleHRlcm4gdm9pZCBwcmludF9J T19BUElDKHZvaWQpOwpleHRlcm4gaW50IElPX0FQSUNfZ2V0X1BDSV9pcnFfdmVjdG9yKGludCBi dXMsIGludCBzbG90LCBpbnQgZm4pOwpleHRlcm4gdm9pZCBzZW5kX0lQSShpbnQgZGVzdCwgaW50 IHZlY3Rvcik7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpb19hcGljX2lycXM7CgpleHRlcm4gYXRv bWljX3QgaXJxX2Vycl9jb3VudDsKZXh0ZXJuIGF0b21pY190IGlycV9taXNfY291bnQ7CgpleHRl cm4gY2hhciBfc3RleHQsIF9ldGV4dDsKIyAxODMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51 eC9pbmNsdWRlL2FzbS9od19pcnEuaCIKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcHJvZl9jcHVfbWFz azsKZXh0ZXJuIHVuc2lnbmVkIGludCAqIHByb2ZfYnVmZmVyOwpleHRlcm4gdW5zaWduZWQgbG9u ZyBwcm9mX2xlbjsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcHJvZl9zaGlmdDsKCgoKCgpzdGF0aWMg aW5saW5lIHZvaWQgeDg2X2RvX3Byb2ZpbGUgKHVuc2lnbmVkIGxvbmcgZWlwKQp7CiAgICAgICAg aWYgKCFwcm9mX2J1ZmZlcikKICAgICAgICAgICAgICAgIHJldHVybjsKCgoKCgogICAgICAgIGlm ICghKCgxPDwoZ2V0X2N1cnJlbnQoKS0+cHJvY2Vzc29yKSkgJiBwcm9mX2NwdV9tYXNrKSkKICAg ICAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgZWlwIC09ICh1bnNpZ25lZCBsb25nKSAmX3N0 ZXh0OwogICAgICAgIGVpcCA+Pj0gcHJvZl9zaGlmdDsKCgoKCgogICAgICAgIGlmIChlaXAgPiBw cm9mX2xlbi0xKQogICAgICAgICAgICAgICAgZWlwID0gcHJvZl9sZW4tMTsKICAgICAgICBhdG9t aWNfaW5jKChhdG9taWNfdCAqKSZwcm9mX2J1ZmZlcltlaXBdKTsKfQoKCnN0YXRpYyBpbmxpbmUg dm9pZCBod19yZXNlbmRfaXJxKHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSAqaCwgdW5zaWduZWQg aW50IGkpIHsKICAgICAgICBpZiAoKCgoaSkgPj0gMTYpIHx8ICgoMTw8KGkpKSAmIGlvX2FwaWNf aXJxcykpKQogICAgICAgICAgICAgICAgc2VuZF9JUElfc2VsZihpcnFfdmVjdG9yW2ldKTsKfQoj IDcwICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9pcnEuaCIgMgoK ZXh0ZXJuIGludCBoYW5kbGVfSVJRX2V2ZW50KHVuc2lnbmVkIGludCwgc3RydWN0IHB0X3JlZ3Mg Kiwgc3RydWN0IGlycWFjdGlvbiAqKTsKZXh0ZXJuIGludCBzZXR1cF9pcnEodW5zaWduZWQgaW50 ICwgc3RydWN0IGlycWFjdGlvbiAqICk7CgpleHRlcm4gaHdfaXJxX2NvbnRyb2xsZXIgbm9faXJx X3R5cGU7CmV4dGVybiB2b2lkIG5vX2FjdGlvbihpbnQgY3BsLCB2b2lkICpkZXZfaWQsIHN0cnVj dCBwdF9yZWdzICpyZWdzKTsKIyA3ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVk ZS9hc20vaGFyZGlycS5oIiAyCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIHVuc2lnbmVkIGlu dCBfX3NvZnRpcnFfcGVuZGluZzsKICAgICAgICB1bnNpZ25lZCBpbnQgX19sb2NhbF9pcnFfY291 bnQ7CiAgICAgICAgdW5zaWduZWQgaW50IF9fbG9jYWxfYmhfY291bnQ7CiAgICAgICAgdW5zaWdu ZWQgaW50IF9fc3lzY2FsbF9jb3VudDsKICAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBfX2tz b2Z0aXJxZF90YXNrOwogICAgICAgIHVuc2lnbmVkIGludCBfX25taV9jb3VudDsKfSBfX2F0dHJp YnV0ZV9fKChfX2FsaWduZWRfXygoMSA8PCAoKDUpKSkpKSkgaXJxX2NwdXN0YXRfdDsKCiMgMSAi L3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvaXJxX2NwdXN0YXQuaCIg MQojIDEyICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9pcnFfY3B1 c3RhdC5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2Nv bmZpZy5oIiAxCiMgMTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4 L2lycV9jcHVzdGF0LmgiIDIKCgoKCgoKCmV4dGVybiBpcnFfY3B1c3RhdF90IGlycV9zdGF0W107 CiMgMTkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9oYXJkaXJxLmgi IDIKIyA0MSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL2hhcmRpcnEu aCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vYXRvbWljLmgi IDEKIyA0MiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL2hhcmRpcnEu aCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9zbXAuaCIg MQojIDQzICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vaGFyZGlycS5o IiAyCgpleHRlcm4gdW5zaWduZWQgY2hhciBnbG9iYWxfaXJxX2hvbGRlcjsKZXh0ZXJuIHVuc2ln bmVkIHZvbGF0aWxlIGxvbmcgZ2xvYmFsX2lycV9sb2NrOwoKc3RhdGljIGlubGluZSBpbnQgaXJx c19ydW5uaW5nICh2b2lkKQp7CiAgICAgICAgaW50IGk7CgogICAgICAgIGZvciAoaSA9IDA7IGkg PCBzbXBfbnVtX2NwdXM7IGkrKykKICAgICAgICAgICAgICAgIGlmICgoaXJxX3N0YXRbKGkpXS5f X2xvY2FsX2lycV9jb3VudCkpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAg ICAgIHJldHVybiAwOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgcmVsZWFzZV9pcnFsb2NrKGludCBj cHUpCnsKCiAgICAgICAgaWYgKGdsb2JhbF9pcnFfaG9sZGVyID09ICh1bnNpZ25lZCBjaGFyKSBj cHUpIHsKICAgICAgICAgICAgICAgIGdsb2JhbF9pcnFfaG9sZGVyID0gMHhGRjsKICAgICAgICAg ICAgICAgIGNsZWFyX2JpdCgwLCZnbG9iYWxfaXJxX2xvY2spOwogICAgICAgIH0KfQoKc3RhdGlj IGlubGluZSB2b2lkIGlycV9lbnRlcihpbnQgY3B1LCBpbnQgaXJxKQp7CiAgICAgICAgKysoaXJx X3N0YXRbKGNwdSldLl9fbG9jYWxfaXJxX2NvdW50KTsKCiAgICAgICAgd2hpbGUgKChfX2J1aWx0 aW5fY29uc3RhbnRfcCgwKSA/IGNvbnN0YW50X3Rlc3RfYml0KCgwKSwoJmdsb2JhbF9pcnFfbG9j aykpIDogdmFyaWFibGVfdGVzdF9iaXQoKDApLCgmZ2xvYmFsX2lycV9sb2NrKSkpKSB7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgIH0KfQoKc3RhdGljIGlubGluZSB2b2lk IGlycV9leGl0KGludCBjcHUsIGludCBpcnEpCnsKICAgICAgICAtLShpcnFfc3RhdFsoY3B1KV0u X19sb2NhbF9pcnFfY291bnQpOwp9CgpzdGF0aWMgaW5saW5lIGludCBoYXJkaXJxX3RyeWxvY2so aW50IGNwdSkKewogICAgICAgIHJldHVybiAhKGlycV9zdGF0WyhjcHUpXS5fX2xvY2FsX2lycV9j b3VudCkgJiYgIShfX2J1aWx0aW5fY29uc3RhbnRfcCgwKSA/IGNvbnN0YW50X3Rlc3RfYml0KCgw KSwoJmdsb2JhbF9pcnFfbG9jaykpIDogdmFyaWFibGVfdGVzdF9iaXQoKDApLCgmZ2xvYmFsX2ly cV9sb2NrKSkpOwp9CgoKCmV4dGVybiB2b2lkIHN5bmNocm9uaXplX2lycSh2b2lkKTsKIyA0NiAi L3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgiIDIK IyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vc29mdGlycS5oIiAx CgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL2F0b21pYy5o IiAxCiMgNSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3NvZnRpcnEu aCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9oYXJkaXJx LmgiIDEKIyA2ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vc29mdGly cS5oIiAyCiMgNDcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2lu dGVycnVwdC5oIiAyCiMgNTYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xp bnV4L2ludGVycnVwdC5oIgplbnVtCnsKICAgICAgICBISV9TT0ZUSVJRPTAsCiAgICAgICAgTkVU X1RYX1NPRlRJUlEsCiAgICAgICAgTkVUX1JYX1NPRlRJUlEsCiAgICAgICAgVEFTS0xFVF9TT0ZU SVJRCn07CgoKCgoKc3RydWN0IHNvZnRpcnFfYWN0aW9uCnsKICAgICAgICB2b2lkICgqYWN0aW9u KShzdHJ1Y3Qgc29mdGlycV9hY3Rpb24gKik7CiAgICAgICAgdm9pZCAqZGF0YTsKfTsKCiBfX2F0 dHJpYnV0ZV9fKChyZWdwYXJtKDApKSkgdm9pZCBkb19zb2Z0aXJxKHZvaWQpOwpleHRlcm4gdm9p ZCBvcGVuX3NvZnRpcnEoaW50IG5yLCB2b2lkICgqYWN0aW9uKShzdHJ1Y3Qgc29mdGlycV9hY3Rp b24qKSwgdm9pZCAqZGF0YSk7CmV4dGVybiB2b2lkIHNvZnRpcnFfaW5pdCh2b2lkKTsKCmV4dGVy biB2b2lkIGNwdV9yYWlzZV9zb2Z0aXJxKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBu cikgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwpleHRlcm4gdm9pZCByYWlzZV9zb2Z0aXJx KHVuc2lnbmVkIGludCBucikgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwojIDEwMyAiL3Vz ci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgiCnN0cnVj dCB0YXNrbGV0X3N0cnVjdAp7CiAgICAgICAgc3RydWN0IHRhc2tsZXRfc3RydWN0ICpuZXh0Owog ICAgICAgIHVuc2lnbmVkIGxvbmcgc3RhdGU7CiAgICAgICAgYXRvbWljX3QgY291bnQ7CiAgICAg ICAgdm9pZCAoKmZ1bmMpKHVuc2lnbmVkIGxvbmcpOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZGF0 YTsKfTsKIyAxMTkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2lu dGVycnVwdC5oIgplbnVtCnsKICAgICAgICBUQVNLTEVUX1NUQVRFX1NDSEVELAogICAgICAgIFRB U0tMRVRfU1RBVEVfUlVOCn07CgpzdHJ1Y3QgdGFza2xldF9oZWFkCnsKICAgICAgICBzdHJ1Y3Qg dGFza2xldF9zdHJ1Y3QgKmxpc3Q7Cn0gX19hdHRyaWJ1dGVfXyAoKF9fYWxpZ25lZF9fKCgxIDw8 ICgoNSkpKSkpKTsKCmV4dGVybiBzdHJ1Y3QgdGFza2xldF9oZWFkIHRhc2tsZXRfdmVjWzMyXTsK ZXh0ZXJuIHN0cnVjdCB0YXNrbGV0X2hlYWQgdGFza2xldF9oaV92ZWNbMzJdOwoKCnN0YXRpYyBp bmxpbmUgaW50IHRhc2tsZXRfdHJ5bG9jayhzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpCnsKICAg ICAgICByZXR1cm4gIXRlc3RfYW5kX3NldF9iaXQoVEFTS0xFVF9TVEFURV9SVU4sICYodCktPnN0 YXRlKTsKfQoKc3RhdGljIGlubGluZSB2b2lkIHRhc2tsZXRfdW5sb2NrKHN0cnVjdCB0YXNrbGV0 X3N0cnVjdCAqdCkKewogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCIiOiA6IDoibWVtb3J5 Iik7CiAgICAgICAgY2xlYXJfYml0KFRBU0tMRVRfU1RBVEVfUlVOLCAmKHQpLT5zdGF0ZSk7Cn0K CnN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrbGV0X3VubG9ja193YWl0KHN0cnVjdCB0YXNrbGV0X3N0 cnVjdCAqdCkKewogICAgICAgIHdoaWxlICgoX19idWlsdGluX2NvbnN0YW50X3AoVEFTS0xFVF9T VEFURV9SVU4pID8gY29uc3RhbnRfdGVzdF9iaXQoKFRBU0tMRVRfU1RBVEVfUlVOKSwoJih0KS0+ c3RhdGUpKSA6IHZhcmlhYmxlX3Rlc3RfYml0KChUQVNLTEVUX1NUQVRFX1JVTiksKCYodCktPnN0 YXRlKSkpKSB7IF9fYXNtX18gX192b2xhdGlsZV9fKCIiOiA6IDoibWVtb3J5Iik7IH0KfQoKCgoK CgpleHRlcm4gdm9pZCBfX3Rhc2tsZXRfc2NoZWR1bGUoc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0 KSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CgpzdGF0aWMgaW5saW5lIHZvaWQgdGFza2xl dF9zY2hlZHVsZShzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpCnsKICAgICAgICBpZiAoIXRlc3Rf YW5kX3NldF9iaXQoVEFTS0xFVF9TVEFURV9TQ0hFRCwgJnQtPnN0YXRlKSkKICAgICAgICAgICAg ICAgIF9fdGFza2xldF9zY2hlZHVsZSh0KTsKfQoKZXh0ZXJuIHZvaWQgX190YXNrbGV0X2hpX3Nj aGVkdWxlKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCkgX19hdHRyaWJ1dGVfXygocmVncGFybSgz KSkpOwoKc3RhdGljIGlubGluZSB2b2lkIHRhc2tsZXRfaGlfc2NoZWR1bGUoc3RydWN0IHRhc2ts ZXRfc3RydWN0ICp0KQp7CiAgICAgICAgaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFRBU0tMRVRfU1RB VEVfU0NIRUQsICZ0LT5zdGF0ZSkpCiAgICAgICAgICAgICAgICBfX3Rhc2tsZXRfaGlfc2NoZWR1 bGUodCk7Cn0KCgpzdGF0aWMgaW5saW5lIHZvaWQgdGFza2xldF9kaXNhYmxlX25vc3luYyhzdHJ1 Y3QgdGFza2xldF9zdHJ1Y3QgKnQpCnsKICAgICAgICBhdG9taWNfaW5jKCZ0LT5jb3VudCk7CiAg ICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6IDogOiJtZW1vcnkiKTsKfQoKc3RhdGljIGlu bGluZSB2b2lkIHRhc2tsZXRfZGlzYWJsZShzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpCnsKICAg ICAgICB0YXNrbGV0X2Rpc2FibGVfbm9zeW5jKHQpOwogICAgICAgIHRhc2tsZXRfdW5sb2NrX3dh aXQodCk7CiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsb2NrOyBhZGRsICQwLDAoJSVl c3ApIjogOiA6Im1lbW9yeSIpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgdGFza2xldF9lbmFibGUo c3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KQp7CiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18o IiI6IDogOiJtZW1vcnkiKTsKICAgICAgICBhdG9taWNfZGVjKCZ0LT5jb3VudCk7Cn0KCnN0YXRp YyBpbmxpbmUgdm9pZCB0YXNrbGV0X2hpX2VuYWJsZShzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQp CnsKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1lbW9yeSIpOwogICAgICAg IGF0b21pY19kZWMoJnQtPmNvdW50KTsKfQoKZXh0ZXJuIHZvaWQgdGFza2xldF9raWxsKHN0cnVj dCB0YXNrbGV0X3N0cnVjdCAqdCk7CmV4dGVybiB2b2lkIHRhc2tsZXRfaW5pdChzdHJ1Y3QgdGFz a2xldF9zdHJ1Y3QgKnQsCiAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqZnVuYykodW5z aWduZWQgbG9uZyksIHVuc2lnbmVkIGxvbmcgZGF0YSk7CiMgMjIyICIvdXNyL3NyYy9saW51eC0y LjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaCIKZXh0ZXJuIHN0cnVjdCB0YXNr bGV0X3N0cnVjdCBiaF90YXNrX3ZlY1tdOwoKCmV4dGVybiBzcGlubG9ja190IGdsb2JhbF9iaF9s b2NrOwoKc3RhdGljIGlubGluZSB2b2lkIG1hcmtfYmgoaW50IG5yKQp7CiAgICAgICAgdGFza2xl dF9oaV9zY2hlZHVsZShiaF90YXNrX3ZlYytucik7Cn0KCmV4dGVybiB2b2lkIGluaXRfYmgoaW50 IG5yLCB2b2lkICgqcm91dGluZSkodm9pZCkpOwpleHRlcm4gdm9pZCByZW1vdmVfYmgoaW50IG5y KTsKIyAyNjMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2ludGVy cnVwdC5oIgpleHRlcm4gdW5zaWduZWQgbG9uZyBwcm9iZV9pcnFfb24odm9pZCk7CmV4dGVybiBp bnQgcHJvYmVfaXJxX29mZih1bnNpZ25lZCBsb25nKTsKZXh0ZXJuIHVuc2lnbmVkIGludCBwcm9i ZV9pcnFfbWFzayh1bnNpZ25lZCBsb25nKTsKIyA0MjUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9s aW51eC9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40 LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvbm90aWZpZXIuaCIgMQojIDEyICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9ub3RpZmllci5oIgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2Vycm5vLmgiIDEKIyAxMyAiL3Vzci9zcmMv bGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvbm90aWZpZXIuaCIgMgoKc3RydWN0IG5v dGlmaWVyX2Jsb2NrCnsKICAgICAgICBpbnQgKCpub3RpZmllcl9jYWxsKShzdHJ1Y3Qgbm90aWZp ZXJfYmxvY2sgKnNlbGYsIHVuc2lnbmVkIGxvbmcsIHZvaWQgKik7CiAgICAgICAgc3RydWN0IG5v dGlmaWVyX2Jsb2NrICpuZXh0OwogICAgICAgIGludCBwcmlvcml0eTsKfTsKCgoKCmV4dGVybiBp bnQgbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICoqbGlzdCwg c3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuKTsKZXh0ZXJuIGludCBub3RpZmllcl9jaGFpbl91bnJl Z2lzdGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqKm5sLCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sg Km4pOwpleHRlcm4gaW50IG5vdGlmaWVyX2NhbGxfY2hhaW4oc3RydWN0IG5vdGlmaWVyX2Jsb2Nr ICoqbiwgdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKnYpOwojIDQyNiAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgiIDIKCmV4dGVybiBzdHJ1Y3Qg bmV0X2RldmljZSBsb29wYmFja19kZXY7CmV4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2Jh c2U7CmV4dGVybiByd2xvY2tfdCBkZXZfYmFzZV9sb2NrOwoKZXh0ZXJuIGludCBuZXRkZXZfYm9v dF9zZXR1cF9hZGQoY2hhciAqbmFtZSwgc3RydWN0IGlmbWFwICptYXApOwpleHRlcm4gaW50IG5l dGRldl9ib290X3NldHVwX2NoZWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpleHRlcm4gc3Ry dWN0IG5ldF9kZXZpY2UgKmRldl9nZXRieWh3YWRkcih1bnNpZ25lZCBzaG9ydCB0eXBlLCBjaGFy ICpod2FkZHIpOwpleHRlcm4gdm9pZCBkZXZfYWRkX3BhY2soc3RydWN0IHBhY2tldF90eXBlICpw dCk7CmV4dGVybiB2b2lkIGRldl9yZW1vdmVfcGFjayhzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0KTsK ZXh0ZXJuIGludCBkZXZfZ2V0KGNvbnN0IGNoYXIgKm5hbWUpOwpleHRlcm4gc3RydWN0IG5ldF9k ZXZpY2UgKmRldl9nZXRfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lKTsKZXh0ZXJuIHN0cnVjdCBu ZXRfZGV2aWNlICpfX2Rldl9nZXRfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lKTsKZXh0ZXJuIHN0 cnVjdCBuZXRfZGV2aWNlICpkZXZfYWxsb2MoY29uc3QgY2hhciAqbmFtZSwgaW50ICplcnIpOwpl eHRlcm4gaW50IGRldl9hbGxvY19uYW1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IGNo YXIgKm5hbWUpOwpleHRlcm4gaW50IGRldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpl eHRlcm4gaW50IGRldl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKZXh0ZXJuIGludCBk ZXZfcXVldWVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKZXh0ZXJuIGludCByZWdpc3Rlcl9u ZXRkZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CmV4dGVybiBpbnQgdW5yZWdpc3Rlcl9u ZXRkZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CmV4dGVybiBpbnQgcmVnaXN0ZXJfbmV0 ZGV2aWNlX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOwpleHRlcm4gaW50IHVu cmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOwpl eHRlcm4gaW50IGRldl9uZXdfaW5kZXgodm9pZCk7CmV4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAq ZGV2X2dldF9ieV9pbmRleChpbnQgaWZpbmRleCk7CmV4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAq X19kZXZfZ2V0X2J5X2luZGV4KGludCBpZmluZGV4KTsKZXh0ZXJuIGludCBkZXZfcmVzdGFydChz dHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKCnR5cGVkZWYgaW50IGdpZmNvbmZfZnVuY190KHN0cnVj dCBuZXRfZGV2aWNlICogZGV2LCBjaGFyICogYnVmcHRyLCBpbnQgbGVuKTsKZXh0ZXJuIGludCBy ZWdpc3Rlcl9naWZjb25mKHVuc2lnbmVkIGludCBmYW1pbHksIGdpZmNvbmZfZnVuY190ICogZ2lm Y29uZik7CnN0YXRpYyBpbmxpbmUgaW50IHVucmVnaXN0ZXJfZ2lmY29uZih1bnNpZ25lZCBpbnQg ZmFtaWx5KQp7CiAgICAgICAgcmV0dXJuIHJlZ2lzdGVyX2dpZmNvbmYoZmFtaWx5LCAwKTsKfQoK CgoKCgpzdHJ1Y3Qgc29mdG5ldF9kYXRhCnsKICAgICAgICBpbnQgdGhyb3R0bGU7CiAgICAgICAg aW50IGNuZ19sZXZlbDsKICAgICAgICBpbnQgYXZnX2Jsb2c7CiAgICAgICAgc3RydWN0IHNrX2J1 ZmZfaGVhZCBpbnB1dF9wa3RfcXVldWU7CiAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm91dHB1 dF9xdWV1ZTsKICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqY29tcGxldGlvbl9xdWV1ZTsKfSBfX2F0 dHJpYnV0ZV9fKChfX2FsaWduZWRfXygoMSA8PCAoKDUpKSkpKSk7CgoKZXh0ZXJuIHN0cnVjdCBz b2Z0bmV0X2RhdGEgc29mdG5ldF9kYXRhWzMyXTsKCgoKc3RhdGljIGlubGluZSB2b2lkIF9fbmV0 aWZfc2NoZWR1bGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKewogICAgICAgIGlmICghdGVzdF9h bmRfc2V0X2JpdChfX0xJTktfU1RBVEVfU0NIRUQsICZkZXYtPnN0YXRlKSkgewogICAgICAgICAg ICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKICAgICAgICAgICAgICAgIGludCBjcHUgPSAoZ2V0 X2N1cnJlbnQoKS0+cHJvY2Vzc29yKTsKCiAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRp bGVfXygicHVzaGZsIDsgcG9wbCAlMCA7IGNsaSI6Ij1nIiAoZmxhZ3MpOiA6Im1lbW9yeSIpOwog ICAgICAgICAgICAgICAgZGV2LT5uZXh0X3NjaGVkID0gc29mdG5ldF9kYXRhW2NwdV0ub3V0cHV0 X3F1ZXVlOwogICAgICAgICAgICAgICAgc29mdG5ldF9kYXRhW2NwdV0ub3V0cHV0X3F1ZXVlID0g ZGV2OwogICAgICAgICAgICAgICAgY3B1X3JhaXNlX3NvZnRpcnEoY3B1LCBORVRfVFhfU09GVElS USk7CiAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGwgJTAgOyBwb3Bm bCI6IDoiZyIgKGZsYWdzKToibWVtb3J5IiwgImNjIik7CiAgICAgICAgfQp9CgpzdGF0aWMgaW5s aW5lIHZvaWQgbmV0aWZfc2NoZWR1bGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKewogICAgICAg IGlmICghKF9fYnVpbHRpbl9jb25zdGFudF9wKF9fTElOS19TVEFURV9YT0ZGKSA/IGNvbnN0YW50 X3Rlc3RfYml0KChfX0xJTktfU1RBVEVfWE9GRiksKCZkZXYtPnN0YXRlKSkgOiB2YXJpYWJsZV90 ZXN0X2JpdCgoX19MSU5LX1NUQVRFX1hPRkYpLCgmZGV2LT5zdGF0ZSkpKSkKICAgICAgICAgICAg ICAgIF9fbmV0aWZfc2NoZWR1bGUoZGV2KTsKfQoKc3RhdGljIGlubGluZSB2b2lkIG5ldGlmX3N0 YXJ0X3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCnsKICAgICAgICBjbGVhcl9iaXQoX19M SU5LX1NUQVRFX1hPRkYsICZkZXYtPnN0YXRlKTsKfQoKc3RhdGljIGlubGluZSB2b2lkIG5ldGlm X3dha2VfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKewogICAgICAgIGlmICh0ZXN0X2Fu ZF9jbGVhcl9iaXQoX19MSU5LX1NUQVRFX1hPRkYsICZkZXYtPnN0YXRlKSkKICAgICAgICAgICAg ICAgIF9fbmV0aWZfc2NoZWR1bGUoZGV2KTsKfQoKc3RhdGljIGlubGluZSB2b2lkIG5ldGlmX3N0 b3BfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKewogICAgICAgIHNldF9iaXQoX19MSU5L X1NUQVRFX1hPRkYsICZkZXYtPnN0YXRlKTsKfQoKc3RhdGljIGlubGluZSBpbnQgbmV0aWZfcXVl dWVfc3RvcHBlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQp7CiAgICAgICAgcmV0dXJuIChfX2J1 aWx0aW5fY29uc3RhbnRfcChfX0xJTktfU1RBVEVfWE9GRikgPyBjb25zdGFudF90ZXN0X2JpdCgo X19MSU5LX1NUQVRFX1hPRkYpLCgmZGV2LT5zdGF0ZSkpIDogdmFyaWFibGVfdGVzdF9iaXQoKF9f TElOS19TVEFURV9YT0ZGKSwoJmRldi0+c3RhdGUpKSk7Cn0KCnN0YXRpYyBpbmxpbmUgaW50IG5l dGlmX3J1bm5pbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKewogICAgICAgIHJldHVybiAoX19i dWlsdGluX2NvbnN0YW50X3AoX19MSU5LX1NUQVRFX1NUQVJUKSA/IGNvbnN0YW50X3Rlc3RfYml0 KChfX0xJTktfU1RBVEVfU1RBUlQpLCgmZGV2LT5zdGF0ZSkpIDogdmFyaWFibGVfdGVzdF9iaXQo KF9fTElOS19TVEFURV9TVEFSVCksKCZkZXYtPnN0YXRlKSkpOwp9CgoKCgpzdGF0aWMgaW5saW5l IHZvaWQgZGV2X2tmcmVlX3NrYl9pcnEoc3RydWN0IHNrX2J1ZmYgKnNrYikKewogICAgICAgIGlm IChhdG9taWNfZGVjX2FuZF90ZXN0KCZza2ItPnVzZXJzKSkgewogICAgICAgICAgICAgICAgaW50 IGNwdSA9KGdldF9jdXJyZW50KCktPnByb2Nlc3Nvcik7CiAgICAgICAgICAgICAgICB1bnNpZ25l ZCBsb25nIGZsYWdzOwoKICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNo ZmwgOyBwb3BsICUwIDsgY2xpIjoiPWciIChmbGFncyk6IDoibWVtb3J5Iik7CiAgICAgICAgICAg ICAgICBza2ItPm5leHQgPSBzb2Z0bmV0X2RhdGFbY3B1XS5jb21wbGV0aW9uX3F1ZXVlOwogICAg ICAgICAgICAgICAgc29mdG5ldF9kYXRhW2NwdV0uY29tcGxldGlvbl9xdWV1ZSA9IHNrYjsKICAg ICAgICAgICAgICAgIGNwdV9yYWlzZV9zb2Z0aXJxKGNwdSwgTkVUX1RYX1NPRlRJUlEpOwogICAg ICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInB1c2hsICUwIDsgcG9wZmwiOiA6Imci IChmbGFncyk6Im1lbW9yeSIsICJjYyIpOwogICAgICAgIH0KfQoKCgoKc3RhdGljIGlubGluZSB2 b2lkIGRldl9rZnJlZV9za2JfYW55KHN0cnVjdCBza19idWZmICpza2IpCnsKICAgICAgICBpZiAo KChpcnFfc3RhdFsoKGdldF9jdXJyZW50KCktPnByb2Nlc3NvcikpXS5fX2xvY2FsX2lycV9jb3Vu dCkgIT0gMCkpCiAgICAgICAgICAgICAgICBkZXZfa2ZyZWVfc2tiX2lycShza2IpOwogICAgICAg IGVsc2UKICAgICAgICAgICAgICAgIGtmcmVlX3NrYihza2IpOwp9CgpleHRlcm4gdm9pZCBuZXRf Y2FsbF9yeF9hdG9taWModm9pZCAoKmZuKSh2b2lkKSk7CgpleHRlcm4gaW50IG5ldGlmX3J4KHN0 cnVjdCBza19idWZmICpza2IpOwpleHRlcm4gaW50IGRldl9pb2N0bCh1bnNpZ25lZCBpbnQgY21k LCB2b2lkICopOwpleHRlcm4gaW50IGRldl9jaGFuZ2VfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2Ug KiwgdW5zaWduZWQpOwpleHRlcm4gdm9pZCBkZXZfcXVldWVfeG1pdF9uaXQoc3RydWN0IHNrX2J1 ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CgpleHRlcm4gdm9pZCBkZXZfaW5pdCh2 b2lkKTsKCmV4dGVybiBpbnQgbmV0ZGV2X25pdDsKCgoKCnN0YXRpYyBpbmxpbmUgaW50IG5ldGlm X3J4X25pKHN0cnVjdCBza19idWZmICpza2IpCnsKICAgICAgIGludCBlcnIgPSBuZXRpZl9yeChz a2IpOwogICAgICAgaWYgKChpcnFfc3RhdFsoKGdldF9jdXJyZW50KCktPnByb2Nlc3NvcikpXS5f X3NvZnRpcnFfcGVuZGluZykpCiAgICAgICAgICAgICAgIGRvX3NvZnRpcnEoKTsKICAgICAgIHJl dHVybiBlcnI7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBkZXZfaW5pdF9idWZmZXJzKHN0cnVjdCBu ZXRfZGV2aWNlICpkZXYpCnsKCn0KCmV4dGVybiBpbnQgbmV0ZGV2X2ZpbmlzaF91bnJlZ2lzdGVy KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwoKc3RhdGljIGlubGluZSB2b2lkIGRldl9wdXQoc3Ry dWN0IG5ldF9kZXZpY2UgKmRldikKewogICAgICAgIGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZk ZXYtPnJlZmNudCkpCiAgICAgICAgICAgICAgICBuZXRkZXZfZmluaXNoX3VucmVnaXN0ZXIoZGV2 KTsKfQojIDU5NyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvbmV0 ZGV2aWNlLmgiCnN0YXRpYyBpbmxpbmUgaW50IG5ldGlmX2NhcnJpZXJfb2soc3RydWN0IG5ldF9k ZXZpY2UgKmRldikKewogICAgICAgIHJldHVybiAhKF9fYnVpbHRpbl9jb25zdGFudF9wKF9fTElO S19TVEFURV9OT0NBUlJJRVIpID8gY29uc3RhbnRfdGVzdF9iaXQoKF9fTElOS19TVEFURV9OT0NB UlJJRVIpLCgmZGV2LT5zdGF0ZSkpIDogdmFyaWFibGVfdGVzdF9iaXQoKF9fTElOS19TVEFURV9O T0NBUlJJRVIpLCgmZGV2LT5zdGF0ZSkpKTsKfQoKZXh0ZXJuIHZvaWQgX19uZXRkZXZfd2F0Y2hk b2dfdXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CgpzdGF0aWMgaW5saW5lIHZvaWQgbmV0aWZf Y2Fycmllcl9vbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQp7CiAgICAgICAgY2xlYXJfYml0KF9f TElOS19TVEFURV9OT0NBUlJJRVIsICZkZXYtPnN0YXRlKTsKICAgICAgICBpZiAobmV0aWZfcnVu bmluZyhkZXYpKQogICAgICAgICAgICAgICAgX19uZXRkZXZfd2F0Y2hkb2dfdXAoZGV2KTsKfQoK c3RhdGljIGlubGluZSB2b2lkIG5ldGlmX2NhcnJpZXJfb2ZmKHN0cnVjdCBuZXRfZGV2aWNlICpk ZXYpCnsKICAgICAgICBzZXRfYml0KF9fTElOS19TVEFURV9OT0NBUlJJRVIsICZkZXYtPnN0YXRl KTsKfQoKCnN0YXRpYyBpbmxpbmUgaW50IG5ldGlmX2RldmljZV9wcmVzZW50KHN0cnVjdCBuZXRf ZGV2aWNlICpkZXYpCnsKICAgICAgICByZXR1cm4gKF9fYnVpbHRpbl9jb25zdGFudF9wKF9fTElO S19TVEFURV9QUkVTRU5UKSA/IGNvbnN0YW50X3Rlc3RfYml0KChfX0xJTktfU1RBVEVfUFJFU0VO VCksKCZkZXYtPnN0YXRlKSkgOiB2YXJpYWJsZV90ZXN0X2JpdCgoX19MSU5LX1NUQVRFX1BSRVNF TlQpLCgmZGV2LT5zdGF0ZSkpKTsKfQoKc3RhdGljIGlubGluZSB2b2lkIG5ldGlmX2RldmljZV9k ZXRhY2goc3RydWN0IG5ldF9kZXZpY2UgKmRldikKewogICAgICAgIGlmICh0ZXN0X2FuZF9jbGVh cl9iaXQoX19MSU5LX1NUQVRFX1BSRVNFTlQsICZkZXYtPnN0YXRlKSAmJgogICAgICAgICAgICBu ZXRpZl9ydW5uaW5nKGRldikpIHsKICAgICAgICAgICAgICAgIG5ldGlmX3N0b3BfcXVldWUoZGV2 KTsKICAgICAgICB9Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBuZXRpZl9kZXZpY2VfYXR0YWNoKHN0 cnVjdCBuZXRfZGV2aWNlICpkZXYpCnsKICAgICAgICBpZiAoIXRlc3RfYW5kX3NldF9iaXQoX19M SU5LX1NUQVRFX1BSRVNFTlQsICZkZXYtPnN0YXRlKSAmJgogICAgICAgICAgICBuZXRpZl9ydW5u aW5nKGRldikpIHsKICAgICAgICAgICAgICAgIG5ldGlmX3dha2VfcXVldWUoZGV2KTsKICAgICAg ICAgICAgICAgIF9fbmV0ZGV2X3dhdGNoZG9nX3VwKGRldik7CiAgICAgICAgfQp9CgoKCgoKCmVu dW0gewogICAgICAgIE5FVElGX01TR19EUlYgPSAweDAwMDEsCiAgICAgICAgTkVUSUZfTVNHX1BS T0JFID0gMHgwMDAyLAogICAgICAgIE5FVElGX01TR19MSU5LID0gMHgwMDA0LAogICAgICAgIE5F VElGX01TR19USU1FUiA9IDB4MDAwOCwKICAgICAgICBORVRJRl9NU0dfSUZET1dOID0gMHgwMDEw LAogICAgICAgIE5FVElGX01TR19JRlVQID0gMHgwMDIwLAogICAgICAgIE5FVElGX01TR19SWF9F UlIgPSAweDAwNDAsCiAgICAgICAgTkVUSUZfTVNHX1RYX0VSUiA9IDB4MDA4MCwKICAgICAgICBO RVRJRl9NU0dfVFhfUVVFVUVEID0gMHgwMTAwLAogICAgICAgIE5FVElGX01TR19JTlRSID0gMHgw MjAwLAogICAgICAgIE5FVElGX01TR19UWF9ET05FID0gMHgwNDAwLAogICAgICAgIE5FVElGX01T R19SWF9TVEFUVVMgPSAweDA4MDAsCiAgICAgICAgTkVUSUZfTVNHX1BLVERBVEEgPSAweDEwMDAs Cn07CiMgNjc2ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9uZXRk ZXZpY2UuaCIKZXh0ZXJuIHZvaWQgZXRoZXJfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7 CmV4dGVybiB2b2lkIGZkZGlfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CmV4dGVybiB2 b2lkIHRyX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpleHRlcm4gdm9pZCBmY19zZXR1 cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKZXh0ZXJuIHZvaWQgZmNfZnJlZWRldihzdHJ1Y3Qg bmV0X2RldmljZSAqZGV2KTsKCmV4dGVybiBpbnQgcmVnaXN0ZXJfbmV0ZGV2KHN0cnVjdCBuZXRf ZGV2aWNlICpkZXYpOwpleHRlcm4gdm9pZCB1bnJlZ2lzdGVyX25ldGRldihzdHJ1Y3QgbmV0X2Rl dmljZSAqZGV2KTsKCmV4dGVybiB2b2lkIGRldl9tY191cGxvYWQoc3RydWN0IG5ldF9kZXZpY2Ug KmRldik7CmV4dGVybiBpbnQgZGV2X21jX2RlbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2 b2lkICphZGRyLCBpbnQgYWxlbiwgaW50IGFsbCk7CmV4dGVybiBpbnQgZGV2X21jX2FkZChzdHJ1 Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphZGRyLCBpbnQgYWxlbiwgaW50IG5ld29ubHkpOwpl eHRlcm4gdm9pZCBkZXZfbWNfZGlzY2FyZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKZXh0ZXJu IHZvaWQgZGV2X3NldF9wcm9taXNjdWl0eShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW5j KTsKZXh0ZXJuIHZvaWQgZGV2X3NldF9hbGxtdWx0aShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBp bnQgaW5jKTsKZXh0ZXJuIHZvaWQgbmV0ZGV2X3N0YXRlX2NoYW5nZShzdHJ1Y3QgbmV0X2Rldmlj ZSAqZGV2KTsKCmV4dGVybiB2b2lkIGRldl9sb2FkKGNvbnN0IGNoYXIgKm5hbWUpOwpleHRlcm4g dm9pZCBkZXZfbWNhc3RfaW5pdCh2b2lkKTsKZXh0ZXJuIGludCBuZXRkZXZfcmVnaXN0ZXJfZmMo c3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAoKnN0aW11bCkoc3RydWN0IG5ldF9kZXZpY2Ug KmRldikpOwpleHRlcm4gdm9pZCBuZXRkZXZfdW5yZWdpc3Rlcl9mYyhpbnQgYml0KTsKZXh0ZXJu IGludCBuZXRkZXZfbWF4X2JhY2tsb2c7CmV4dGVybiB1bnNpZ25lZCBsb25nIG5ldGRldl9mY194 b2ZmOwpleHRlcm4gYXRvbWljX3QgbmV0ZGV2X2Ryb3BwaW5nOwpleHRlcm4gaW50IG5ldGRldl9z ZXRfbWFzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICptYXN0 ZXIpOwpleHRlcm4gc3RydWN0IHNrX2J1ZmYgKiBza2JfY2hlY2tzdW1faGVscChzdHJ1Y3Qgc2tf YnVmZiAqc2tiKTsKIyAxNTIgIjgxMzl0b28uYyIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4x My9saW51eC9pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgiIDEKIyAyNyAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaCIKIyAxICIvdXNyL3Ny Yy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9pZl9ldGhlci5oIiAxCiMgMjggIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgiIDIK CgpleHRlcm4gaW50IGV0aF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9k ZXZpY2UgKmRldiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBz aG9ydCB0eXBlLCB2b2lkICpkYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB2b2lkICpzYWRkciwgdW5zaWduZWQgbGVuKTsKZXh0ZXJuIGludCBldGhfcmVidWlsZF9oZWFk ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYik7CmV4dGVybiB1bnNpZ25lZCBzaG9ydCBldGhfdHlwZV90 cmFucyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKZXh0ZXJu IHZvaWQgZXRoX2hlYWRlcl9jYWNoZV91cGRhdGUoc3RydWN0IGhoX2NhY2hlICpoaCwgc3RydWN0 IG5ldF9kZXZpY2UgKmRldiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgY2hhciAqIGhhZGRyKTsKZXh0ZXJuIGludCBldGhfaGVhZGVyX2Nh Y2hlKHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBoaF9jYWNoZSAqaGgpOwpleHRlcm4gaW50IGV0aF9oZWFkZXJf cGFyc2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpoYWRkcik7CmV4dGVybiBzdHJ1Y3QgbmV0X2Rldmlj ZSAqaW5pdF9ldGhlcmRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc2l6ZW9mX3ByaXYp OwpleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX2V0aGVyZGV2KGludCBzaXplb2ZfcHJp dik7CgpzdGF0aWMgaW5saW5lIHZvaWQgZXRoX2NvcHlfYW5kX3N1bSAoc3RydWN0IHNrX2J1ZmYg KmRlc3QsIHVuc2lnbmVkIGNoYXIgKnNyYywgaW50IGxlbiwgaW50IGJhc2UpCnsKICAgICAgICAo X19idWlsdGluX2NvbnN0YW50X3AobGVuKSA/IF9fY29uc3RhbnRfbWVtY3B5KChkZXN0LT5kYXRh KSwoc3JjKSwobGVuKSkgOiBfX21lbWNweSgoZGVzdC0+ZGF0YSksKHNyYyksKGxlbikpKTsKfQoj IDU5ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9ldGhlcmRldmlj ZS5oIgpzdGF0aWMgaW5saW5lIGludCBpc192YWxpZF9ldGhlcl9hZGRyKCB1OCAqYWRkciApCnsK ICAgICAgICBjb25zdCBjaGFyIHphZGRyWzZdID0gezAsfTsKCiAgICAgICAgcmV0dXJuICEoYWRk clswXSYxKSAmJiBfX2J1aWx0aW5fbWVtY21wKCBhZGRyLCB6YWRkciwgNik7Cn0KIyAxNTMgIjgx Mzl0b28uYyIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4 L3J0bmV0bGluay5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1 ZGUvbGludXgvbmV0bGluay5oIiAxCiMgMTYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9p bmNsdWRlL2xpbnV4L25ldGxpbmsuaCIKc3RydWN0IHNvY2thZGRyX25sCnsKICAgICAgICBzYV9m YW1pbHlfdCBubF9mYW1pbHk7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgbmxfcGFkOwogICAgICAg IF9fdTMyIG5sX3BpZDsKICAgICAgICBfX3UzMiBubF9ncm91cHM7Cn07CgpzdHJ1Y3Qgbmxtc2do ZHIKewogICAgICAgIF9fdTMyIG5sbXNnX2xlbjsKICAgICAgICBfX3UxNiBubG1zZ190eXBlOwog ICAgICAgIF9fdTE2IG5sbXNnX2ZsYWdzOwogICAgICAgIF9fdTMyIG5sbXNnX3NlcTsKICAgICAg ICBfX3UzMiBubG1zZ19waWQ7Cn07CiMgNzcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9p bmNsdWRlL2xpbnV4L25ldGxpbmsuaCIKc3RydWN0IG5sbXNnZXJyCnsKICAgICAgICBpbnQgZXJy b3I7CiAgICAgICAgc3RydWN0IG5sbXNnaGRyIG1zZzsKfTsKCgoKCgpzdHJ1Y3QgbmV0bGlua19z a2JfcGFybXMKewogICAgICAgIHN0cnVjdCB1Y3JlZCBjcmVkczsKICAgICAgICBfX3UzMiBwaWQ7 CiAgICAgICAgX191MzIgZ3JvdXBzOwogICAgICAgIF9fdTMyIGRzdF9waWQ7CiAgICAgICAgX191 MzIgZHN0X2dyb3VwczsKICAgICAgICBrZXJuZWxfY2FwX3QgZWZmX2NhcDsKfTsKCgoKCgpleHRl cm4gaW50IG5ldGxpbmtfYXR0YWNoKGludCB1bml0LCBpbnQgKCpmdW5jdGlvbikoaW50LHN0cnVj dCBza19idWZmICpza2IpKTsKZXh0ZXJuIHZvaWQgbmV0bGlua19kZXRhY2goaW50IHVuaXQpOwpl eHRlcm4gaW50IG5ldGxpbmtfcG9zdChpbnQgdW5pdCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CmV4 dGVybiBpbnQgaW5pdF9uZXRsaW5rKHZvaWQpOwpleHRlcm4gc3RydWN0IHNvY2sgKm5ldGxpbmtf a2VybmVsX2NyZWF0ZShpbnQgdW5pdCwgdm9pZCAoKmlucHV0KShzdHJ1Y3Qgc29jayAqc2ssIGlu dCBsZW4pKTsKZXh0ZXJuIHZvaWQgbmV0bGlua19hY2soc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwg c3RydWN0IG5sbXNnaGRyICpubGgsIGludCBlcnIpOwpleHRlcm4gaW50IG5ldGxpbmtfdW5pY2Fz dChzdHJ1Y3Qgc29jayAqc3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX3UzMiBwaWQsIGludCBu b25ibG9jayk7CmV4dGVybiB2b2lkIG5ldGxpbmtfYnJvYWRjYXN0KHN0cnVjdCBzb2NrICpzc2ss IHN0cnVjdCBza19idWZmICpza2IsIF9fdTMyIHBpZCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX191MzIgZ3JvdXAsIGludCBhbGxvY2F0aW9uKTsKZXh0ZXJuIHZvaWQgbmV0bGlua19z ZXRfZXJyKHN0cnVjdCBzb2NrICpzc2ssIF9fdTMyIHBpZCwgX191MzIgZ3JvdXAsIGludCBjb2Rl KTsKIyAxMjAgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L25ldGxp bmsuaCIKc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sKewogICAgICAgIHN0cnVjdCBza19idWZmICpz a2I7CiAgICAgICAgc3RydWN0IG5sbXNnaGRyICpubGg7CiAgICAgICAgaW50ICgqZHVtcCkoc3Ry dWN0IHNrX2J1ZmYgKiBza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7CiAgICAgICAg aW50ICgqZG9uZSkoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTsKICAgICAgICBpbnQgZmFt aWx5OwogICAgICAgIGxvbmcgYXJnc1s0XTsKfTsKCnN0YXRpYyBfX2lubGluZV9fIHN0cnVjdCBu bG1zZ2hkciAqCl9fbmxtc2dfcHV0KHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBz ZXEsIGludCB0eXBlLCBpbnQgbGVuKQp7CiAgICAgICAgc3RydWN0IG5sbXNnaGRyICpubGg7CiAg ICAgICAgaW50IHNpemUgPSAoKGxlbikrKCAoKHNpemVvZihzdHJ1Y3Qgbmxtc2doZHIpKSs0IC0x KSAmIH4oNCAtMSkgKSk7CgogICAgICAgIG5saCA9IChzdHJ1Y3Qgbmxtc2doZHIqKXNrYl9wdXQo c2tiLCAoICgoc2l6ZSkrNCAtMSkgJiB+KDQgLTEpICkpOwogICAgICAgIG5saC0+bmxtc2dfdHlw ZSA9IHR5cGU7CiAgICAgICAgbmxoLT5ubG1zZ19sZW4gPSBzaXplOwogICAgICAgIG5saC0+bmxt c2dfZmxhZ3MgPSAwOwogICAgICAgIG5saC0+bmxtc2dfcGlkID0gcGlkOwogICAgICAgIG5saC0+ bmxtc2dfc2VxID0gc2VxOwogICAgICAgIHJldHVybiBubGg7Cn0KCgoKCgpleHRlcm4gaW50IG5l dGxpbmtfZHVtcF9zdGFydChzdHJ1Y3Qgc29jayAqc3NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZHVtcCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwg c3RydWN0IG5ldGxpbmtfY2FsbGJhY2sqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50ICgqZG9uZSkoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sqKSk7CiMgNSAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgiIDIKIyA1NyAiL3Vzci9z cmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgiCnN0cnVjdCBy dGF0dHIKewogICAgICAgIHVuc2lnbmVkIHNob3J0IHJ0YV9sZW47CiAgICAgICAgdW5zaWduZWQg c2hvcnQgcnRhX3R5cGU7Cn07CiMgODMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNs dWRlL2xpbnV4L3J0bmV0bGluay5oIgpzdHJ1Y3QgcnRtc2cKewogICAgICAgIHVuc2lnbmVkIGNo YXIgcnRtX2ZhbWlseTsKICAgICAgICB1bnNpZ25lZCBjaGFyIHJ0bV9kc3RfbGVuOwogICAgICAg IHVuc2lnbmVkIGNoYXIgcnRtX3NyY19sZW47CiAgICAgICAgdW5zaWduZWQgY2hhciBydG1fdG9z OwoKICAgICAgICB1bnNpZ25lZCBjaGFyIHJ0bV90YWJsZTsKICAgICAgICB1bnNpZ25lZCBjaGFy IHJ0bV9wcm90b2NvbDsKICAgICAgICB1bnNpZ25lZCBjaGFyIHJ0bV9zY29wZTsKICAgICAgICB1 bnNpZ25lZCBjaGFyIHJ0bV90eXBlOwoKICAgICAgICB1bnNpZ25lZCBydG1fZmxhZ3M7Cn07CgoK CmVudW0KewogICAgICAgIFJUTl9VTlNQRUMsCiAgICAgICAgUlROX1VOSUNBU1QsCiAgICAgICAg UlROX0xPQ0FMLAogICAgICAgIFJUTl9CUk9BRENBU1QsCgogICAgICAgIFJUTl9BTllDQVNULAoK ICAgICAgICBSVE5fTVVMVElDQVNULAogICAgICAgIFJUTl9CTEFDS0hPTEUsCiAgICAgICAgUlRO X1VOUkVBQ0hBQkxFLAogICAgICAgIFJUTl9QUk9ISUJJVCwKICAgICAgICBSVE5fVEhST1csCiAg ICAgICAgUlROX05BVCwKICAgICAgICBSVE5fWFJFU09MVkUsCn07CiMgMTU1ICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaCIKZW51bSBydF9zY29w ZV90CnsKICAgICAgICBSVF9TQ09QRV9VTklWRVJTRT0wLAoKICAgICAgICBSVF9TQ09QRV9TSVRF PTIwMCwKICAgICAgICBSVF9TQ09QRV9MSU5LPTI1MywKICAgICAgICBSVF9TQ09QRV9IT1NUPTI1 NCwKICAgICAgICBSVF9TQ09QRV9OT1dIRVJFPTI1NQp9OwojIDE3MyAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgiCmVudW0gcnRfY2xhc3NfdAp7 CiAgICAgICAgUlRfVEFCTEVfVU5TUEVDPTAsCgogICAgICAgIFJUX1RBQkxFX0RFRkFVTFQ9MjUz LAogICAgICAgIFJUX1RBQkxFX01BSU49MjU0LAogICAgICAgIFJUX1RBQkxFX0xPQ0FMPTI1NQp9 OwoKCgoKCgplbnVtIHJ0YXR0cl90eXBlX3QKewogICAgICAgIFJUQV9VTlNQRUMsCiAgICAgICAg UlRBX0RTVCwKICAgICAgICBSVEFfU1JDLAogICAgICAgIFJUQV9JSUYsCiAgICAgICAgUlRBX09J RiwKICAgICAgICBSVEFfR0FURVdBWSwKICAgICAgICBSVEFfUFJJT1JJVFksCiAgICAgICAgUlRB X1BSRUZTUkMsCiAgICAgICAgUlRBX01FVFJJQ1MsCiAgICAgICAgUlRBX01VTFRJUEFUSCwKICAg ICAgICBSVEFfUFJPVE9JTkZPLAogICAgICAgIFJUQV9GTE9XLAogICAgICAgIFJUQV9DQUNIRUlO Rk8KfTsKIyAyMTggIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3J0 bmV0bGluay5oIgpzdHJ1Y3QgcnRuZXh0aG9wCnsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBydG5o X2xlbjsKICAgICAgICB1bnNpZ25lZCBjaGFyIHJ0bmhfZmxhZ3M7CiAgICAgICAgdW5zaWduZWQg Y2hhciBydG5oX2hvcHM7CiAgICAgICAgaW50IHJ0bmhfaWZpbmRleDsKfTsKIyAyNDUgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oIgpzdHJ1Y3Qg cnRhX2NhY2hlaW5mbwp7CiAgICAgICAgX191MzIgcnRhX2NsbnRyZWY7CiAgICAgICAgX191MzIg cnRhX2xhc3R1c2U7CiAgICAgICAgX19zMzIgcnRhX2V4cGlyZXM7CiAgICAgICAgX191MzIgcnRh X2Vycm9yOwogICAgICAgIF9fdTMyIHJ0YV91c2VkOwoKCiAgICAgICAgX191MzIgcnRhX2lkOwog ICAgICAgIF9fdTMyIHJ0YV90czsKICAgICAgICBfX3UzMiBydGFfdHNhZ2U7Cn07CgoKCmVudW0K ewogICAgICAgIFJUQVhfVU5TUEVDLAoKICAgICAgICBSVEFYX0xPQ0ssCgogICAgICAgIFJUQVhf TVRVLAoKICAgICAgICBSVEFYX1dJTkRPVywKCiAgICAgICAgUlRBWF9SVFQsCgogICAgICAgIFJU QVhfUlRUVkFSLAoKICAgICAgICBSVEFYX1NTVEhSRVNILAoKICAgICAgICBSVEFYX0NXTkQsCgog ICAgICAgIFJUQVhfQURWTVNTLAoKICAgICAgICBSVEFYX1JFT1JERVJJTkcsCgp9OwojIDI5MyAi L3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgiCnN0 cnVjdCBpZmFkZHJtc2cKewogICAgICAgIHVuc2lnbmVkIGNoYXIgaWZhX2ZhbWlseTsKICAgICAg ICB1bnNpZ25lZCBjaGFyIGlmYV9wcmVmaXhsZW47CiAgICAgICAgdW5zaWduZWQgY2hhciBpZmFf ZmxhZ3M7CiAgICAgICAgdW5zaWduZWQgY2hhciBpZmFfc2NvcGU7CiAgICAgICAgaW50IGlmYV9p bmRleDsKfTsKCmVudW0KewogICAgICAgIElGQV9VTlNQRUMsCiAgICAgICAgSUZBX0FERFJFU1Ms CiAgICAgICAgSUZBX0xPQ0FMLAogICAgICAgIElGQV9MQUJFTCwKICAgICAgICBJRkFfQlJPQURD QVNULAogICAgICAgIElGQV9BTllDQVNULAogICAgICAgIElGQV9DQUNIRUlORk8KfTsKIyAzMjMg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oIgpz dHJ1Y3QgaWZhX2NhY2hlaW5mbwp7CiAgICAgICAgX19zMzIgaWZhX3ByZWZlcmVkOwogICAgICAg IF9fczMyIGlmYV92YWxpZDsKfTsKIyAzNDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9p bmNsdWRlL2xpbnV4L3J0bmV0bGluay5oIgpzdHJ1Y3QgbmRtc2cKewogICAgICAgIHVuc2lnbmVk IGNoYXIgbmRtX2ZhbWlseTsKICAgICAgICB1bnNpZ25lZCBjaGFyIG5kbV9wYWQxOwogICAgICAg IHVuc2lnbmVkIHNob3J0IG5kbV9wYWQyOwogICAgICAgIGludCBuZG1faWZpbmRleDsKICAgICAg ICBfX3UxNiBuZG1fc3RhdGU7CiAgICAgICAgX191OCBuZG1fZmxhZ3M7CiAgICAgICAgX191OCBu ZG1fdHlwZTsKfTsKCmVudW0KewogICAgICAgIE5EQV9VTlNQRUMsCiAgICAgICAgTkRBX0RTVCwK ICAgICAgICBOREFfTExBRERSLAogICAgICAgIE5EQV9DQUNIRUlORk8KfTsKIyAzOTMgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oIgpzdHJ1Y3Qg bmRhX2NhY2hlaW5mbwp7CiAgICAgICAgX191MzIgbmRtX2NvbmZpcm1lZDsKICAgICAgICBfX3Uz MiBuZG1fdXNlZDsKICAgICAgICBfX3UzMiBuZG1fdXBkYXRlZDsKICAgICAgICBfX3UzMiBuZG1f cmVmY250Owp9OwoKCgoKCnN0cnVjdCBydGdlbm1zZwp7CiAgICAgICAgdW5zaWduZWQgY2hhciBy dGdlbl9mYW1pbHk7Cn07CiMgNDE5ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVk ZS9saW51eC9ydG5ldGxpbmsuaCIKc3RydWN0IGlmaW5mb21zZwp7CiAgICAgICAgdW5zaWduZWQg Y2hhciBpZmlfZmFtaWx5OwogICAgICAgIHVuc2lnbmVkIGNoYXIgX19pZmlfcGFkOwogICAgICAg IHVuc2lnbmVkIHNob3J0IGlmaV90eXBlOwogICAgICAgIGludCBpZmlfaW5kZXg7CiAgICAgICAg dW5zaWduZWQgaWZpX2ZsYWdzOwogICAgICAgIHVuc2lnbmVkIGlmaV9jaGFuZ2U7Cn07CgplbnVt CnsKICAgICAgICBJRkxBX1VOU1BFQywKICAgICAgICBJRkxBX0FERFJFU1MsCiAgICAgICAgSUZM QV9CUk9BRENBU1QsCiAgICAgICAgSUZMQV9JRk5BTUUsCiAgICAgICAgSUZMQV9NVFUsCiAgICAg ICAgSUZMQV9MSU5LLAogICAgICAgIElGTEFfUURJU0MsCiAgICAgICAgSUZMQV9TVEFUUywKICAg ICAgICBJRkxBX0NPU1QsCgogICAgICAgIElGTEFfUFJJT1JJVFksCgogICAgICAgIElGTEFfTUFT VEVSCgp9OwojIDQ4NiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgv cnRuZXRsaW5rLmgiCnN0cnVjdCB0Y21zZwp7CiAgICAgICAgdW5zaWduZWQgY2hhciB0Y21fZmFt aWx5OwogICAgICAgIHVuc2lnbmVkIGNoYXIgdGNtX19wYWQxOwogICAgICAgIHVuc2lnbmVkIHNo b3J0IHRjbV9fcGFkMjsKICAgICAgICBpbnQgdGNtX2lmaW5kZXg7CiAgICAgICAgX191MzIgdGNt X2hhbmRsZTsKICAgICAgICBfX3UzMiB0Y21fcGFyZW50OwogICAgICAgIF9fdTMyIHRjbV9pbmZv Owp9OwoKZW51bQp7CiAgICAgICAgVENBX1VOU1BFQywKICAgICAgICBUQ0FfS0lORCwKICAgICAg ICBUQ0FfT1BUSU9OUywKICAgICAgICBUQ0FfU1RBVFMsCiAgICAgICAgVENBX1hTVEFUUywKICAg ICAgICBUQ0FfUkFURSwKfTsKIyA1MzkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNs dWRlL2xpbnV4L3J0bmV0bGluay5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9p bmNsdWRlL2xpbnV4L2NvbmZpZy5oIiAxCiMgNTQwICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGlu dXgvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaCIgMgoKc3RhdGljIF9faW5saW5lX18gaW50IHJ0 YXR0cl9zdHJjbXAoc3RydWN0IHJ0YXR0ciAqcnRhLCBjaGFyICpzdHIpCnsKICAgICAgICBpbnQg bGVuID0gc3RybGVuKHN0cikgKyAxOwogICAgICAgIHJldHVybiBsZW4gPiBydGEtPnJ0YV9sZW4g fHwgX19idWlsdGluX21lbWNtcCgoKHZvaWQqKSgoKGNoYXIqKShydGEpKSArICgoICgoc2l6ZW9m KHN0cnVjdCBydGF0dHIpKSs0IC0xKSAmIH4oNCAtMSkgKSArICgwKSkpKSwgc3RyLCBsZW4pOwp9 CgpleHRlcm4gaW50IHJ0YXR0cl9wYXJzZShzdHJ1Y3QgcnRhdHRyICp0YltdLCBpbnQgbWF4YXR0 ciwgc3RydWN0IHJ0YXR0ciAqcnRhLCBpbnQgbGVuKTsKIyA1NzcgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oIgpleHRlcm4gc3RydWN0IHNlbWFw aG9yZSBydG5sX3NlbTsKIyA1OTUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRl L2xpbnV4L3J0bmV0bGluay5oIgpleHRlcm4gdm9pZCBydG5sX2xvY2sodm9pZCk7CmV4dGVybiB2 b2lkIHJ0bmxfdW5sb2NrKHZvaWQpOwpleHRlcm4gdm9pZCBydG5ldGxpbmtfaW5pdCh2b2lkKTsK IyAxNTQgIjgxMzl0b28uYyIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNs dWRlL2xpbnV4L2RlbGF5LmgiIDEKIyAxMCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2lu Y2x1ZGUvbGludXgvZGVsYXkuaCIKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9vcHNfcGVyX2ppZmZ5 OwoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vZGVsYXkuaCIg MQojIDEwICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vZGVsYXkuaCIK ZXh0ZXJuIHZvaWQgX19iYWRfdWRlbGF5KHZvaWQpOwoKZXh0ZXJuIHZvaWQgX191ZGVsYXkodW5z aWduZWQgbG9uZyB1c2Vjcyk7CmV4dGVybiB2b2lkIF9fY29uc3RfdWRlbGF5KHVuc2lnbmVkIGxv bmcgdXNlY3MpOwpleHRlcm4gdm9pZCBfX2RlbGF5KHVuc2lnbmVkIGxvbmcgbG9vcHMpOwojIDEz ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9kZWxheS5oIiAyCiMg MTU1ICI4MTM5dG9vLmMiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVk ZS9saW51eC9ldGh0b29sLmgiIDEKIyAxMyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2lu Y2x1ZGUvbGludXgvZXRodG9vbC5oIgpzdHJ1Y3QgZXRodG9vbF9jbWQgewogICAgICAgIHUzMiBj bWQ7CiAgICAgICAgdTMyIHN1cHBvcnRlZDsKICAgICAgICB1MzIgYWR2ZXJ0aXNpbmc7CiAgICAg ICAgdTE2IHNwZWVkOwogICAgICAgIHU4IGR1cGxleDsKICAgICAgICB1OCBwb3J0OwogICAgICAg IHU4IHBoeV9hZGRyZXNzOwogICAgICAgIHU4IHRyYW5zY2VpdmVyOwogICAgICAgIHU4IGF1dG9u ZWc7CiAgICAgICAgdTMyIG1heHR4cGt0OwogICAgICAgIHUzMiBtYXhyeHBrdDsKICAgICAgICB1 MzIgcmVzZXJ2ZWRbNF07Cn07CgoKc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyB7CiAgICAgICAgdTMy IGNtZDsKICAgICAgICBjaGFyIGRyaXZlclszMl07CiAgICAgICAgY2hhciB2ZXJzaW9uWzMyXTsK ICAgICAgICBjaGFyIGZ3X3ZlcnNpb25bMzJdOwogICAgICAgIGNoYXIgYnVzX2luZm9bMzJdOwoK ICAgICAgICBjaGFyIHJlc2VydmVkMVszMl07CiAgICAgICAgY2hhciByZXNlcnZlZDJbMjhdOwog ICAgICAgIHUzMiByZWdkdW1wX2xlbjsKfTsKCgoKc3RydWN0IGV0aHRvb2xfd29saW5mbyB7CiAg ICAgICAgdTMyIGNtZDsKICAgICAgICB1MzIgc3VwcG9ydGVkOwogICAgICAgIHUzMiB3b2xvcHRz OwogICAgICAgIHU4IHNvcGFzc1s2XTsKfTsKIyAxNTYgIjgxMzl0b28uYyIgMgojIDEgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L21paS5oIiAxCiMgMTEgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L21paS5oIgojIDEgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L3R5cGVzLmgiIDEKIyAxMiAiL3Vzci9z cmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvbGludXgvbWlpLmgiIDIKIyAxMDUgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L21paS5oIgpzdHJ1Y3QgbWlpX2lv Y3RsX2RhdGEgewogICAgICAgIHUxNiBwaHlfaWQ7CiAgICAgICAgdTE2IHJlZ19udW07CiAgICAg ICAgdTE2IHZhbF9pbjsKICAgICAgICB1MTYgdmFsX291dDsKfTsKIyAxMjcgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2xpbnV4L21paS5oIgpzdGF0aWMgaW5saW5lIHVuc2ln bmVkIGludCBtaWlfbndheV9yZXN1bHQgKHVuc2lnbmVkIGludCBuZWdvdGlhdGVkKQp7CiAgICAg ICAgdW5zaWduZWQgaW50IHJldDsKCiAgICAgICAgaWYgKG5lZ290aWF0ZWQgJiAweDAxMDApCiAg ICAgICAgICAgICAgICByZXQgPSAweDAxMDA7CiAgICAgICAgZWxzZSBpZiAobmVnb3RpYXRlZCAm IDB4MDIwMCkKICAgICAgICAgICAgICAgIHJldCA9IDB4MDIwMDsKICAgICAgICBlbHNlIGlmIChu ZWdvdGlhdGVkICYgMHgwMDgwKQogICAgICAgICAgICAgICAgcmV0ID0gMHgwMDgwOwogICAgICAg IGVsc2UgaWYgKG5lZ290aWF0ZWQgJiAweDAwNDApCiAgICAgICAgICAgICAgICByZXQgPSAweDAw NDA7CiAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgcmV0ID0gMHgwMDIwOwoKICAgICAgICBy ZXR1cm4gcmV0Owp9CiMgMTU0ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9s aW51eC9taWkuaCIKc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWlpX2R1cGxleCAodW5zaWdu ZWQgaW50IGR1cGxleF9sb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1bnNpZ25lZCBpbnQgbmVnb3RpYXRlZCkKewogICAgICAgIGlmIChkdXBsZXhfbG9jaykKICAg ICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIGlmIChtaWlfbndheV9yZXN1bHQobmVnb3Rp YXRlZCkgJiAoMHgwMDQwIHwgMHgwMTAwKSkKICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAg ICAgIHJldHVybiAwOwp9CiMgMTU3ICI4MTM5dG9vLmMiIDIKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMTMvbGludXgvaW5jbHVkZS9saW51eC9jb21wbGV0aW9uLmgiIDEKIyAxNTggIjgxMzl0b28u YyIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS9pby5oIiAx CiMgMTU5ICI4MTM5dG9vLmMiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5j bHVkZS9hc20vdWFjY2Vzcy5oIiAxCgoKCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xp bnV4L2luY2x1ZGUvbGludXgvY29uZmlnLmgiIDEKIyA4ICIvdXNyL3NyYy9saW51eC0yLjQuMTMv bGludXgvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEz L2xpbnV4L2luY2x1ZGUvbGludXgvc2NoZWQuaCIgMQojIDkgIi91c3Ivc3JjL2xpbnV4LTIuNC4x My9saW51eC9pbmNsdWRlL2FzbS91YWNjZXNzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQu MTMvbGludXgvaW5jbHVkZS9saW51eC9wcmVmZXRjaC5oIiAxCiMgMTAgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS91YWNjZXNzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vcGFnZS5oIiAxCiMgMTEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9saW51eC9pbmNsdWRlL2FzbS91YWNjZXNzLmgiIDIKIyAzNSAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCIKZXh0ZXJuIGludCBfX3Zlcmlm eV93cml0ZShjb25zdCB2b2lkICosIHVuc2lnbmVkIGxvbmcpOwojIDYyICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIgpzdGF0aWMgaW5saW5lIGludCB2 ZXJpZnlfYXJlYShpbnQgdHlwZSwgY29uc3Qgdm9pZCAqIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6 ZSkKewogICAgICAgIHJldHVybiAoKHsgdW5zaWduZWQgbG9uZyBmbGFnLHN1bTsgYXNtKCJhZGRs ICUzLCUxIDsgc2JibCAlMCwlMDsgY21wbCAlMSwlNDsgc2JibCAkMCwlMCIgOiI9JnIiIChmbGFn KSwgIj1yIiAoc3VtKSA6IjEiIChhZGRyKSwiZyIgKChpbnQpKHNpemUpKSwiZyIgKGdldF9jdXJy ZW50KCktPmFkZHJfbGltaXQuc2VnKSk7IGZsYWc7IH0pID09IDApID8gMCA6IC0xNDsKfQojIDgx ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIgpzdHJ1 Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5CnsKICAgICAgICB1bnNpZ25lZCBsb25nIGluc24sIGZp eHVwOwp9OwoKCmV4dGVybiB1bnNpZ25lZCBsb25nIHNlYXJjaF9leGNlcHRpb25fdGFibGUodW5z aWduZWQgbG9uZyk7CiMgMTA1ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9h c20vdWFjY2Vzcy5oIgpleHRlcm4gdm9pZCBfX2dldF91c2VyXzEodm9pZCk7CmV4dGVybiB2b2lk IF9fZ2V0X3VzZXJfMih2b2lkKTsKZXh0ZXJuIHZvaWQgX19nZXRfdXNlcl80KHZvaWQpOwojIDEy NyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCIKZXh0 ZXJuIHZvaWQgX19wdXRfdXNlcl8xKHZvaWQpOwpleHRlcm4gdm9pZCBfX3B1dF91c2VyXzIodm9p ZCk7CmV4dGVybiB2b2lkIF9fcHV0X3VzZXJfNCh2b2lkKTsKZXh0ZXJuIHZvaWQgX19wdXRfdXNl cl84KHZvaWQpOwoKZXh0ZXJuIHZvaWQgX19wdXRfdXNlcl9iYWQodm9pZCk7CiMgMTg4ICIvdXNy L3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIgpzdHJ1Y3QgX19s YXJnZV9zdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIGJ1ZlsxMDBdOyB9OwojIDIyMCAiL3Vzci9zcmMv bGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCIKZXh0ZXJuIGxvbmcgX19n ZXRfdXNlcl9iYWQodm9pZCk7CiMgMzA4ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvbGludXgvaW5j bHVkZS9hc20vdWFjY2Vzcy5oIgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKX19nZW5lcmlj X2NvcHlfZnJvbV91c2VyX25vY2hlY2sodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2ln bmVkIGxvbmcgbikKewogICAgICAgIGRvIHsgaW50IF9fZDAsIF9fZDE7IF9fYXNtX18gX192b2xh dGlsZV9fKCAiMDoJcmVwOyBtb3ZzbFxuIiAiCW1vdmwgJTMsJTBcbiIgIjE6CXJlcDsgbW92c2Jc biIgIjI6XG4iICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iICIzOglsZWEgMCglMywlMCw0KSwl MFxuIiAiNDoJcHVzaGwgJTBcbiIgIglwdXNobCAlJWVheFxuIiAiCXhvcmwgJSVlYXgsJSVlYXhc biIgIglyZXA7IHN0b3NiXG4iICIJcG9wbCAlJWVheFxuIiAiCXBvcGwgJTBcbiIgIglqbXAgMmJc biIgIi5wcmV2aW91c1xuIiAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIiAiCS5hbGlnbiA0 XG4iICIJLmxvbmcgMGIsM2JcbiIgIgkubG9uZyAxYiw0YlxuIiAiLnByZXZpb3VzIiA6ICI9JmMi KG4pLCAiPSZEIiAoX19kMCksICI9JlMiIChfX2QxKSA6ICJyIihuICYgMyksICIwIihuIC8gNCks ICIxIih0byksICIyIihmcm9tKSA6ICJtZW1vcnkiKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgcmV0 dXJuIG47Cn0KCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwpfX2dlbmVyaWNfY29weV90b191 c2VyX25vY2hlY2sodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikK ewogICAgICAgIGRvIHsgaW50IF9fZDAsIF9fZDE7IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMDoJ cmVwOyBtb3ZzbFxuIiAiCW1vdmwgJTMsJTBcbiIgIjE6CXJlcDsgbW92c2JcbiIgIjI6XG4iICIu c2VjdGlvbiAuZml4dXAsXCJheFwiXG4iICIzOglsZWEgMCglMywlMCw0KSwlMFxuIiAiCWptcCAy YlxuIiAiLnByZXZpb3VzXG4iICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iICIJLmFsaWdu IDRcbiIgIgkubG9uZyAwYiwzYlxuIiAiCS5sb25nIDFiLDJiXG4iICIucHJldmlvdXMiIDogIj0m YyIobiksICI9JkQiIChfX2QwKSwgIj0mUyIgKF9fZDEpIDogInIiKG4gJiAzKSwgIjAiKG4gLyA0 KSwgIjEiKHRvKSwgIjIiKGZyb20pIDogIm1lbW9yeSIpOyB9IHdoaWxlICgwKTsKICAgICAgICBy ZXR1cm4gbjsKfQojIDU0MyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2xpbnV4L2luY2x1ZGUvYXNt L3VhY2Nlc3MuaCIKdW5zaWduZWQgbG9uZyBfX2dlbmVyaWNfY29weV90b191c2VyKHZvaWQgKiwg Y29uc3Qgdm9pZCAqLCB1bnNpZ25lZCBsb25nKTsKdW5zaWduZWQgbG9uZyBfX2dlbmVyaWNfY29w eV9mcm9tX3VzZXIodm9pZCAqLCBjb25zdCB2b2lkICosIHVuc2lnbmVkIGxvbmcpOwoKc3RhdGlj IGlubGluZSB1bnNpZ25lZCBsb25nCl9fY29uc3RhbnRfY29weV90b191c2VyKHZvaWQgKnRvLCBj b25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pCnsKICAgICAgICBwcmVmZXRjaChmcm9t KTsKICAgICAgICBpZiAoKCh7IHVuc2lnbmVkIGxvbmcgZmxhZyxzdW07IGFzbSgiYWRkbCAlMywl MSA7IHNiYmwgJTAsJTA7IGNtcGwgJTEsJTQ7IHNiYmwgJDAsJTAiIDoiPSZyIiAoZmxhZyksICI9 ciIgKHN1bSkgOiIxIiAodG8pLCJnIiAoKGludCkobikpLCJnIiAoZ2V0X2N1cnJlbnQoKS0+YWRk cl9saW1pdC5zZWcpKTsgZmxhZzsgfSkgPT0gMCkpCiAgICAgICAgICAgICAgICBkbyB7IGludCBf X2QwLCBfX2QxOyBzd2l0Y2ggKG4gJiAzKSB7IGRlZmF1bHQ6IF9fYXNtX18gX192b2xhdGlsZV9f KCAiMDoJcmVwOyBtb3ZzbFxuIiAiMTpcbiIgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIgIjI6 CXNobCAkMiwlMFxuIiAiCWptcCAxYlxuIiAiLnByZXZpb3VzXG4iICIuc2VjdGlvbiBfX2V4X3Rh YmxlLFwiYVwiXG4iICIJLmFsaWduIDRcbiIgIgkubG9uZyAwYiwyYlxuIiAiLnByZXZpb3VzIiA6 ICI9YyIobiksICI9JlMiIChfX2QwKSwgIj0mRCIgKF9fZDEpIDogIjEiKGZyb20pLCAiMiIodG8p LCAiMCIobi80KSA6ICJtZW1vcnkiKTsgYnJlYWs7IGNhc2UgMTogX19hc21fXyBfX3ZvbGF0aWxl X18oICIwOglyZXA7IG1vdnNsXG4iICIxOgltb3ZzYlxuIiAiMjpcbiIgIi5zZWN0aW9uIC5maXh1 cCxcImF4XCJcbiIgIjM6CXNobCAkMiwlMFxuIiAiNDoJaW5jbCAlMFxuIiAiCWptcCAyYlxuIiAi LnByZXZpb3VzXG4iICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iICIJLmFsaWduIDRcbiIg IgkubG9uZyAwYiwzYlxuIiAiCS5sb25nIDFiLDRiXG4iICIucHJldmlvdXMiIDogIj1jIihuKSwg Ij0mUyIgKF9fZDApLCAiPSZEIiAoX19kMSkgOiAiMSIoZnJvbSksICIyIih0byksICIwIihuLzQp IDogIm1lbW9yeSIpOyBicmVhazsgY2FzZSAyOiBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjA6CXJl cDsgbW92c2xcbiIgIjE6CW1vdnN3XG4iICIyOlxuIiAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxu IiAiMzoJc2hsICQyLCUwXG4iICI0OglhZGRsICQyLCUwXG4iICIJam1wIDJiXG4iICIucHJldmlv dXNcbiIgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIgIgkuYWxpZ24gNFxuIiAiCS5sb25n IDBiLDNiXG4iICIJLmxvbmcgMWIsNGJcbiIgIi5wcmV2aW91cyIgOiAiPWMiKG4pLCAiPSZTIiAo X19kMCksICI9JkQiIChfX2QxKSA6ICIxIihmcm9tKSwgIjIiKHRvKSwgIjAiKG4vNCkgOiAibWVt b3J5Iik7IGJyZWFrOyBjYXNlIDM6IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMDoJcmVwOyBtb3Zz bFxuIiAiMToJbW92c3dcbiIgIjI6CW1vdnNiXG4iICIzOlxuIiAiLnNlY3Rpb24gLmZpeHVwLFwi YXhcIlxuIiAiNDoJc2hsICQyLCUwXG4iICI1OglhZGRsICQyLCUwXG4iICI2OglpbmNsICUwXG4i ICIJam1wIDNiXG4iICIucHJldmlvdXNcbiIgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIg IgkuYWxpZ24gNFxuIiAiCS5sb25nIDBiLDRiXG4iICIJLmxvbmcgMWIsNWJcbiIgIgkubG9uZyAy Yiw2YlxuIiAiLnByZXZpb3VzIiA6ICI9YyIobiksICI9JlMiIChfX2QwKSwgIj0mRCIgKF9fZDEp IDogIjEiKGZyb20pLCAiMiIodG8pLCAiMCIobi80KSA6ICJtZW1vcnkiKTsgYnJlYWs7IH0gfSB3 aGlsZSAoMCk7CiAgICAgICAgcmV0dXJuIG47Cn0KCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9u ZwpfX2NvbnN0YW50X2NvcHlfZnJvbV91c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1 bnNpZ25lZCBsb25nIG4pCnsKICAgICAgICBpZiAoKCh7IHVuc2lnbmVkIGxvbmcgZmxhZyxzdW07 IGFzbSgiYWRkbCAlMywlMSA7IHNiYmwgJTAsJTA7IGNtcGwgJTEsJTQ7IHNiYmwgJDAsJTAiIDoi PSZyIiAoZmxhZyksICI9ciIgKHN1bSkgOiIxIiAoZnJvbSksImciICgoaW50KShuKSksImciIChn ZXRfY3VycmVudCgpLT5hZGRyX2xpbWl0LnNlZykpOyBmbGFnOyB9KSA9PSAwKSkKICAgICAgICAg ICAgICAgIGRvIHsgaW50IF9fZDAsIF9fZDE7IHN3aXRjaCAobiAmIDMpIHsgZGVmYXVsdDogX19h c21fXyBfX3ZvbGF0aWxlX18oICIwOglyZXA7IG1vdnNsXG4iICIxOlxuIiAiLnNlY3Rpb24gLmZp eHVwLFwiYXhcIlxuIiAiMjoJcHVzaGwgJTBcbiIgIglwdXNobCAlJWVheFxuIiAiCXhvcmwgJSVl YXgsJSVlYXhcbiIgIglyZXA7IHN0b3NsXG4iICIJcG9wbCAlJWVheFxuIiAiCXBvcGwgJTBcbiIg IglzaGwgJDIsJTBcbiIgIglqbXAgMWJcbiIgIi5wcmV2aW91c1xuIiAiLnNlY3Rpb24gX19leF90 YWJsZSxcImFcIlxuIiAiCS5hbGlnbiA0XG4iICIJLmxvbmcgMGIsMmJcbiIgIi5wcmV2aW91cyIg OiAiPWMiKG4pLCAiPSZTIiAoX19kMCksICI9JkQiIChfX2QxKSA6ICIxIihmcm9tKSwgIjIiKHRv KSwgIjAiKG4vNCkgOiAibWVtb3J5Iik7IGJyZWFrOyBjYXNlIDE6IF9fYXNtX18gX192b2xhdGls ZV9fKCAiMDoJcmVwOyBtb3ZzbFxuIiAiMToJbW92c2JcbiIgIjI6XG4iICIuc2VjdGlvbiAuZml4 dXAsXCJheFwiXG4iICIzOglwdXNobCAlMFxuIiAiCXB1c2hsICUlZWF4XG4iICIJeG9ybCAlJWVh eCwlJWVheFxuIiAiCXJlcDsgc3Rvc2xcbiIgIglzdG9zYlxuIiAiCXBvcGwgJSVlYXhcbiIgIglw b3BsICUwXG4iICIJc2hsICQyLCUwXG4iICIJaW5jbCAlMFxuIiAiCWptcCAyYlxuIiAiNDoJcHVz aGwgJSVlYXhcbiIgIgl4b3JsICUlZWF4LCUlZWF4XG4iICIJc3Rvc2JcbiIgIglwb3BsICUlZWF4 XG4iICIJaW5jbCAlMFxuIiAiCWptcCAyYlxuIiAiLnByZXZpb3VzXG4iICIuc2VjdGlvbiBfX2V4 X3RhYmxlLFwiYVwiXG4iICIJLmFsaWduIDRcbiIgIgkubG9uZyAwYiwzYlxuIiAiCS5sb25nIDFi LDRiXG4iICIucHJldmlvdXMiIDogIj1jIihuKSwgIj0mUyIgKF9fZDApLCAiPSZEIiAoX19kMSkg OiAiMSIoZnJvbSksICIyIih0byksICIwIihuLzQpIDogIm1lbW9yeSIpOyBicmVhazsgY2FzZSAy OiBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjA6CXJlcDsgbW92c2xcbiIgIjE6CW1vdnN3XG4iICIy OlxuIiAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIiAiMzoJcHVzaGwgJTBcbiIgIglwdXNobCAl JWVheFxuIiAiCXhvcmwgJSVlYXgsJSVlYXhcbiIgIglyZXA7IHN0b3NsXG4iICIJc3Rvc3dcbiIg Iglwb3BsICUlZWF4XG4iICIJcG9wbCAlMFxuIiAiCXNobCAkMiwlMFxuIiAiCWFkZGwgJDIsJTBc biIgIglqbXAgMmJcbiIgIjQ6CXB1c2hsICUlZWF4XG4iICIJeG9ybCAlJWVheCwlJWVheFxuIiAi CXN0b3N3XG4iICIJcG9wbCAlJWVheFxuIiAiCWFkZGwgJDIsJTBcbiIgIglqbXAgMmJcbiIgIi5w cmV2aW91c1xuIiAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIiAiCS5hbGlnbiA0XG4iICIJ LmxvbmcgMGIsM2JcbiIgIgkubG9uZyAxYiw0YlxuIiAiLnByZXZpb3VzIiA6ICI9YyIobiksICI9 JlMiIChfX2QwKSwgIj0mRCIgKF9fZDEpIDogIjEiKGZyb20pLCAiMiIodG8pLCAiMCIobi80KSA6 ICJtZW1vcnkiKTsgYnJlYWs7IGNhc2UgMzogX19hc21fXyBfX3ZvbGF0aWxlX18oICIwOglyZXA7 IG1vdnNsXG4iICIxOgltb3Zzd1xuIiAiMjoJbW92c2JcbiIgIjM6XG4iICIuc2VjdGlvbiAuZml4 dXAsXCJheFwiXG4iICI0OglwdXNobCAlMFxuIiAiCXB1c2hsICUlZWF4XG4iICIJeG9ybCAlJWVh eCwlJWVheFxuIiAiCXJlcDsgc3Rvc2xcbiIgIglzdG9zd1xuIiAiCXN0b3NiXG4iICIJcG9wbCAl JWVheFxuIiAiCXBvcGwgJTBcbiIgIglzaGwgJDIsJTBcbiIgIglhZGRsICQzLCUwXG4iICIJam1w IDJiXG4iICI1OglwdXNobCAlJWVheFxuIiAiCXhvcmwgJSVlYXgsJSVlYXhcbiIgIglzdG9zd1xu IiAiCXN0b3NiXG4iICIJcG9wbCAlJWVheFxuIiAiCWFkZGwgJDMsJTBcbiIgIglqbXAgMmJcbiIg IjY6CXB1c2hsICUlZWF4XG4iICIJeG9ybCAlJWVheCwlJWVheFxuIiAiCXN0b3NiXG4iICIJcG9w bCAlJWVheFxuIiAiCWluY2wgJTBcbiIgIglqbXAgM2JcbiIgIi5wcmV2aW91c1xuIiAiLnNlY3Rp b24gX19leF90YWJsZSxcImFcIlxuIiAiCS5hbGlnbiA0XG4iICIJLmxvbmcgMGIsNGJcbiIgIgku bG9uZyAxYiw1YlxuIiAiCS5sb25nIDJiLDZiXG4iICIucHJldmlvdXMiIDogIj1jIihuKSwgIj0m UyIgKF9fZDApLCAiPSZEIiAoX19kMSkgOiAiMSIoZnJvbSksICIyIih0byksICIwIihuLzQpIDog Im1lbW9yeSIpOyBicmVhazsgfSB9IHdoaWxlICgwKTsKICAgICAgICBlbHNlCiAgICAgICAgICAg ICAgICAoX19idWlsdGluX2NvbnN0YW50X3AoMCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AoKG4p KSA/IF9fY29uc3RhbnRfY19hbmRfY291bnRfbWVtc2V0KCgodG8pKSwoKDB4MDEwMTAxMDFVTCoo dW5zaWduZWQgY2hhcikoMCkpKSwoKG4pKSkgOiBfX2NvbnN0YW50X2NfbWVtc2V0KCgodG8pKSwo KDB4MDEwMTAxMDFVTCoodW5zaWduZWQgY2hhcikoMCkpKSwoKG4pKSkpIDogKF9fYnVpbHRpbl9j b25zdGFudF9wKChuKSkgPyBfX21lbXNldF9nZW5lcmljKCgoKHRvKSkpLCgoKDApKSksKCgobikp KSkgOiBfX21lbXNldF9nZW5lcmljKCgodG8pKSwoKDApKSwoKG4pKSkpKTsKICAgICAgICByZXR1 cm4gbjsKfQoKc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCl9fY29uc3RhbnRfY29weV90b191 c2VyX25vY2hlY2sodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikK ewogICAgICAgIGRvIHsgaW50IF9fZDAsIF9fZDE7IHN3aXRjaCAobiAmIDMpIHsgZGVmYXVsdDog X19hc21fXyBfX3ZvbGF0aWxlX18oICIwOglyZXA7IG1vdnNsXG4iICIxOlxuIiAiLnNlY3Rpb24g LmZpeHVwLFwiYXhcIlxuIiAiMjoJc2hsICQyLCUwXG4iICIJam1wIDFiXG4iICIucHJldmlvdXNc biIgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIgIgkuYWxpZ24gNFxuIiAiCS5sb25nIDBi LDJiXG4iICIucHJldmlvdXMiIDogIj1jIihuKSwgIj0mUyIgKF9fZDApLCAiPSZEIiAoX19kMSkg OiAiMSIoZnJvbSksICIyIih0byksICIwIihuLzQpIDogIm1lbW9yeSIpOyBicmVhazsgY2FzZSAx OiBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjA6CXJlcDsgbW92c2xcbiIgIjE6CW1vdnNiXG4iICIy OlxuIiAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIiAiMzoJc2hsICQyLCUwXG4iICI0OglpbmNs ICUwXG4iICIJam1wIDJiXG4iICIucHJldmlvdXNcbiIgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJh XCJcbiIgIgkuYWxpZ24gNFxuIiAiCS5sb25nIDBiLDNiXG4iICIJLmxvbmcgMWIsNGJcbiIgIi5w cmV2aW91cyIgOiAiPWMiKG4pLCAiPSZTIiAoX19kMCksICI9JkQiIChfX2QxKSA6ICIxIihmcm9t KSwgIjIiKHRvKSwgIjAiKG4vNCkgOiAibWVtb3J5Iik7IGJyZWFrOyBjYXNlIDI6IF9fYXNtX18g X192b2xhdGlsZV9fKCAiMDoJcmVwOyBtb3ZzbFxuIiAiMToJbW92c3dcbiIgIjI6XG4iICIuc2Vj dGlvbiAuZml4dXAsXCJheFwiXG4iICIzOglzaGwgJDIsJTBcbiIgIjQ6CWFkZGwgJDIsJTBcbiIg IglqbXAgMmJcbiIgIi5wcmV2aW91c1xuIiAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIiAi CS5hbGlnbiA0XG4iICIJLmxvbmcgMGIsM2JcbiIgIgkubG9uZyAxYiw0YlxuIiAiLnByZXZpb3Vz IiA6ICI9YyIobiksICI9JlMiIChfX2QwKSwgIj0mRCIgKF9fZDEpIDogIjEiKGZyb20pLCAiMiIo dG8pLCAiMCIobi80KSA6ICJtZW1vcnkiKTsgYnJlYWs7IGNhc2UgMzogX19hc21fXyBfX3ZvbGF0 aWxlX18oICIwOglyZXA7IG1vdnNsXG4iICIxOgltb3Zzd1xuIiAiMjoJbW92c2JcbiIgIjM6XG4i ICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iICI0OglzaGwgJDIsJTBcbiIgIjU6CWFkZGwgJDIs JTBcbiIgIjY6CWluY2wgJTBcbiIgIglqbXAgM2JcbiIgIi5wcmV2aW91c1xuIiAiLnNlY3Rpb24g X19leF90YWJsZSxcImFcIlxuIiAiCS5hbGlnbiA0XG4iICIJLmxvbmcgMGIsNGJcbiIgIgkubG9u ZyAxYiw1YlxuIiAiCS5sb25nIDJiLDZiXG4iICIucHJldmlvdXMiIDogIj1jIihuKSwgIj0mUyIg KF9fZDApLCAiPSZEIiAoX19kMSkgOiAiMSIoZnJvbSksICIyIih0byksICIwIihuLzQpIDogIm1l bW9yeSIpOyBicmVhazsgfSB9IHdoaWxlICgwKTsKICAgICAgICByZXR1cm4gbjsKfQoKc3RhdGlj IGlubGluZSB1bnNpZ25lZCBsb25nCl9fY29uc3RhbnRfY29weV9mcm9tX3VzZXJfbm9jaGVjayh2 b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQp7CiAgICAgICAgZG8g eyBpbnQgX19kMCwgX19kMTsgc3dpdGNoIChuICYgMykgeyBkZWZhdWx0OiBfX2FzbV9fIF9fdm9s YXRpbGVfXyggIjA6CXJlcDsgbW92c2xcbiIgIjE6XG4iICIuc2VjdGlvbiAuZml4dXAsXCJheFwi XG4iICIyOglwdXNobCAlMFxuIiAiCXB1c2hsICUlZWF4XG4iICIJeG9ybCAlJWVheCwlJWVheFxu IiAiCXJlcDsgc3Rvc2xcbiIgIglwb3BsICUlZWF4XG4iICIJcG9wbCAlMFxuIiAiCXNobCAkMiwl MFxuIiAiCWptcCAxYlxuIiAiLnByZXZpb3VzXG4iICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwi XG4iICIJLmFsaWduIDRcbiIgIgkubG9uZyAwYiwyYlxuIiAiLnByZXZpb3VzIiA6ICI9YyIobiks ICI9JlMiIChfX2QwKSwgIj0mRCIgKF9fZDEpIDogIjEiKGZyb20pLCAiMiIodG8pLCAiMCIobi80 KSA6ICJtZW1vcnkiKTsgYnJlYWs7IGNhc2UgMTogX19hc21fXyBfX3ZvbGF0aWxlX18oICIwOgly ZXA7IG1vdnNsXG4iICIxOgltb3ZzYlxuIiAiMjpcbiIgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJc biIgIjM6CXB1c2hsICUwXG4iICIJcHVzaGwgJSVlYXhcbiIgIgl4b3JsICUlZWF4LCUlZWF4XG4i ICIJcmVwOyBzdG9zbFxuIiAiCXN0b3NiXG4iICIJcG9wbCAlJWVheFxuIiAiCXBvcGwgJTBcbiIg IglzaGwgJDIsJTBcbiIgIglpbmNsICUwXG4iICIJam1wIDJiXG4iICI0OglwdXNobCAlJWVheFxu IiAiCXhvcmwgJSVlYXgsJSVlYXhcbiIgIglzdG9zYlxuIiAiCXBvcGwgJSVlYXhcbiIgIglpbmNs ICUwXG4iICIJam1wIDJiXG4iICIucHJldmlvdXNcbiIgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJh XCJcbiIgIgkuYWxpZ24gNFxuIiAiCS5sb25nIDBiLDNiXG4iICIJLmxvbmcgMWIsNGJcbiIgIi5w cmV2aW91cyIgOiAiPWMiKG4pLCAiPSZTIiAoX19kMCksICI9JkQiIChfX2QxKSA6ICIxIihmcm9t KSwgIjIiKHRvKSwgIjAiKG4vNCkgOiAibWVtb3J5Iik7IGJyZWFrOyBjYXNlIDI6IF9fYXNtX18g X192b2xhdGlsZV9fKCAiMDoJcmVwOyBtb3ZzbFxuIiAiMToJbW92c3dcbiIgIjI6XG4iICIuc2Vj dGlvbiAuZml4dXAsXCJheFwiXG4iICIzOglwdXNobCAlMFxuIiAiCXB1c2hsICUlZWF4XG4iICIJ eG9ybCAlJWVheCwlJWVheFxuIiAiCXJlcDsgc3Rvc2xcbiIgIglzdG9zd1xuIiAiCXBvcGwgJSVl YXhcbiIgIglwb3BsICUwXG4iICIJc2hsICQyLCUwXG4iICIJYWRkbCAkMiwlMFxuIiAiCWptcCAy YlxuIiAiNDoJcHVzaGwgJSVlYXhcbiIgIgl4b3JsICUlZWF4LCUlZWF4XG4iICIJc3Rvc3dcbiIg Iglwb3BsICUlZWF4XG4iICIJYWRkbCAkMiwlMFxuIiAiCWptcCAyYlxuIiAiLnByZXZpb3VzXG4i ICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iICIJLmFsaWduIDRcbiIgIgkubG9uZyAwYiwz YlxuIiAiCS5sb25nIDFiLDRiXG4iICIucHJldmlvdXMiIDogIj1jIihuKSwgIj0mUyIgKF9fZDAp LCAiPSZEIiAoX19kMSkgOiAiMSIoZnJvbSksICIyIih0byksICIwIihuLzQpIDogIm1lbW9yeSIp OyBicmVhazsgY2FzZSAzOiBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjA6CXJlcDsgbW92c2xcbiIg IjE6CW1vdnN3XG4iICIyOgltb3ZzYlxuIiAiMzpcbiIgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJc biIgIjQ6CXB1c2hsICUwXG4iICIJcHVzaGwgJSVlYXhcbiIgIgl4b3JsICUlZWF4LCUlZWF4XG4i ICIJcmVwOyBzdG9zbFxuIiAiCXN0b3N3XG4iICIJc3Rvc2JcbiIgIglwb3BsICUlZWF4XG4iICIJ cG9wbCAlMFxuIiAiCXNobCAkMiwlMFxuIiAiCWFkZGwgJDMsJTBcbiIgIglqbXAgMmJcbiIgIjU6 CXB1c2hsICUlZWF4XG4iICIJeG9ybCAlJWVheCwlJWVheFxuIiAiCXN0b3N3XG4iICIJc3Rvc2Jc biIgIglwb3BsICUlZWF4XG4iICIJYWRkbCAkMywlMFxuIiAiCWptcCAyYlxuIiAiNjoJcHVzaGwg JSVlYXhcbiIgIgl4b3JsICUlZWF4LCUlZWF4XG4iICIJc3Rvc2JcbiIgIglwb3BsICUlZWF4XG4i ICIJaW5jbCAlMFxuIiAiCWptcCAzYlxuIiAiLnByZXZpb3VzXG4iICIuc2VjdGlvbiBfX2V4X3Rh YmxlLFwiYVwiXG4iICIJLmFsaWduIDRcbiIgIgkubG9uZyAwYiw0YlxuIiAiCS5sb25nIDFiLDVi XG4iICIJLmxvbmcgMmIsNmJcbiIgIi5wcmV2aW91cyIgOiAiPWMiKG4pLCAiPSZTIiAoX19kMCks ICI9JkQiIChfX2QxKSA6ICIxIihmcm9tKSwgIjIiKHRvKSwgIjAiKG4vNCkgOiAibWVtb3J5Iik7 IGJyZWFrOyB9IH0gd2hpbGUgKDApOwogICAgICAgIHJldHVybiBuOwp9CiMgNTk5ICIvdXNyL3Ny Yy9saW51eC0yLjQuMTMvbGludXgvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIgpsb25nIHN0cm5jcHlf ZnJvbV91c2VyKGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBsb25nIGNvdW50KTsKbG9uZyBf X3N0cm5jcHlfZnJvbV91c2VyKGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBsb25nIGNvdW50 KTsKCmxvbmcgc3Rybmxlbl91c2VyKGNvbnN0IGNoYXIgKnN0ciwgbG9uZyBuKTsKdW5zaWduZWQg bG9uZyBjbGVhcl91c2VyKHZvaWQgKm1lbSwgdW5zaWduZWQgbG9uZyBsZW4pOwp1bnNpZ25lZCBs b25nIF9fY2xlYXJfdXNlcih2b2lkICptZW0sIHVuc2lnbmVkIGxvbmcgbGVuKTsKIyAxNjAgIjgx Mzl0b28uYyIgMgojIDE5OCAiODEzOXRvby5jIgpzdGF0aWMgaW50IG1lZGlhWzhdID0gey0xLCAt MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMX07CnN0YXRpYyBpbnQgZnVsbF9kdXBsZXhbOF0gPSB7 LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xfTsKCgpzdGF0aWMgaW50IG1heF9pbnRlcnJ1 cHRfd29yayA9IDIwOwoKCgpzdGF0aWMgaW50IG11bHRpY2FzdF9maWx0ZXJfbGltaXQgPSAzMjsK IyAyNDEgIjgxMzl0b28uYyIKZW51bSB7CiAgICAgICAgSEFTX01JSV9YQ1ZSID0gMHgwMTAwMDAs CiAgICAgICAgSEFTX0NISVBfWENWUiA9IDB4MDIwMDAwLAogICAgICAgIEhBU19MTktfQ0hORyA9 IDB4MDQwMDAwLAp9OwoKCgoKCgoKdHlwZWRlZiBlbnVtIHsKICAgICAgICBSVEw4MTM5ID0gMCwK ICAgICAgICBSVEw4MTM5X0NCLAogICAgICAgIFNNQzEyMTFUWCwKCiAgICAgICAgREVMVEE4MTM5 LAogICAgICAgIEFERFRST044MTM5LAogICAgICAgIERGRTUzOFRYLAogICAgICAgIERGRTY5MFRY RCwKICAgICAgICBSVEw4MTI5LAp9IGJvYXJkX3Q7CgoKCnN0YXRpYyBzdHJ1Y3QgewogICAgICAg IGNvbnN0IGNoYXIgKm5hbWU7CiAgICAgICAgdTMyIGh3X2ZsYWdzOwp9IGJvYXJkX2luZm9bXSBf X2F0dHJpYnV0ZV9fICgoX19zZWN0aW9uX18gKCIuZGF0YS5pbml0IikpKSA9IHsKICAgICAgICB7 ICJSZWFsVGVrIFJUTDgxMzkgRmFzdCBFdGhlcm5ldCIsIEhBU19DSElQX1hDVlJ8SEFTX0xOS19D SE5HIH0sCiAgICAgICAgeyAiUmVhbFRlayBSVEw4MTM5QiBQQ0kvQ2FyZEJ1cyIsIEhBU19DSElQ X1hDVlJ8SEFTX0xOS19DSE5HIH0sCiAgICAgICAgeyAiU01DMTIxMVRYIEVaQ2FyZCAxMC8xMDAg KFJlYWxUZWsgUlRMODEzOSkiLCBIQVNfQ0hJUF9YQ1ZSfEhBU19MTktfQ0hORyB9LAoKICAgICAg ICB7ICJEZWx0YSBFbGVjdHJvbmljcyA4MTM5IDEwLzEwMEJhc2VUWCIsIEhBU19DSElQX1hDVlJ8 SEFTX0xOS19DSE5HIH0sCiAgICAgICAgeyAiQWRkdHJvbiBUZWNobm9sZ3kgODEzOSAxMC8xMDBC YXNlVFgiLCBIQVNfQ0hJUF9YQ1ZSfEhBU19MTktfQ0hORyB9LAogICAgICAgIHsgIkQtTGluayBE RkUtNTM4VFggKFJlYWxUZWsgUlRMODEzOSkiLCBIQVNfQ0hJUF9YQ1ZSfEhBU19MTktfQ0hORyB9 LAogICAgICAgIHsgIkQtTGluayBERkUtNjkwVFhEIChSZWFsVGVrIFJUTDgxMzkpIiwgSEFTX0NI SVBfWENWUnxIQVNfTE5LX0NITkcgfSwKICAgICAgICB7ICJSZWFsVGVrIFJUTDgxMjkiLCBIQVNf TUlJX1hDVlIgfSwKfTsKCgpzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcnRsODEzOV9wY2lf dGJsW10gX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9fICgiLmRhdGEuaW5pdCIpKSkgPSB7CiAg ICAgICAgezB4MTBlYywgMHg4MTM5LCAofjApLCAofjApLCAwLCAwLCBSVEw4MTM5IH0sCiAgICAg ICAgezB4MTBlYywgMHg4MTM4LCAofjApLCAofjApLCAwLCAwLCBSVEw4MTM5X0NCIH0sCiAgICAg ICAgezB4MTExMywgMHgxMjExLCAofjApLCAofjApLCAwLCAwLCBTTUMxMjExVFggfSwKCiAgICAg ICAgezB4MTUwMCwgMHgxMzYwLCAofjApLCAofjApLCAwLCAwLCBERUxUQTgxMzkgfSwKICAgICAg ICB7MHg0MDMzLCAweDEzNjAsICh+MCksICh+MCksIDAsIDAsIEFERFRST044MTM5IH0sCiAgICAg ICAgezB4MTE4NiwgMHgxMzAwLCAofjApLCAofjApLCAwLCAwLCBERkU1MzhUWCB9LAogICAgICAg IHsweDExODYsIDB4MTM0MCwgKH4wKSwgKH4wKSwgMCwgMCwgREZFNjkwVFhEIH0sCiMgMzAxICI4 MTM5dG9vLmMiCiAgICAgICAgeyh+MCksIDB4ODEzOSwgMHgxMGVjLCAweDgxMzksIDAsIDAsIFJU TDgxMzkgfSwKICAgICAgICB7KH4wKSwgMHg4MTM5LCAweDExODYsIDB4MTMwMCwgMCwgMCwgREZF NTM4VFggfSwKCiAgICAgICAgezAsfQp9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CgoKCgoKZW51bSBSVEw4MTM5X3JlZ2lzdGVycyB7CiAgICAgICAgTUFDMCA9 IDAsCiAgICAgICAgTUFSMCA9IDgsCiAgICAgICAgVHhTdGF0dXMwID0gMHgxMCwKICAgICAgICBU eEFkZHIwID0gMHgyMCwKICAgICAgICBSeEJ1ZiA9IDB4MzAsCiAgICAgICAgUnhFYXJseUNudCA9 IDB4MzQsCiAgICAgICAgUnhFYXJseVN0YXR1cyA9IDB4MzYsCiAgICAgICAgQ2hpcENtZCA9IDB4 MzcsCiAgICAgICAgUnhCdWZQdHIgPSAweDM4LAogICAgICAgIFJ4QnVmQWRkciA9IDB4M0EsCiAg ICAgICAgSW50ck1hc2sgPSAweDNDLAogICAgICAgIEludHJTdGF0dXMgPSAweDNFLAogICAgICAg IFR4Q29uZmlnID0gMHg0MCwKICAgICAgICBDaGlwVmVyc2lvbiA9IDB4NDMsCiAgICAgICAgUnhD b25maWcgPSAweDQ0LAogICAgICAgIFRpbWVyID0gMHg0OCwKICAgICAgICBSeE1pc3NlZCA9IDB4 NEMsCiAgICAgICAgQ2ZnOTM0NiA9IDB4NTAsCiAgICAgICAgQ29uZmlnMCA9IDB4NTEsCiAgICAg ICAgQ29uZmlnMSA9IDB4NTIsCiAgICAgICAgRmxhc2hSZWcgPSAweDU0LAogICAgICAgIE1lZGlh U3RhdHVzID0gMHg1OCwKICAgICAgICBDb25maWczID0gMHg1OSwKICAgICAgICBDb25maWc0ID0g MHg1QSwKICAgICAgICBIbHRDbGsgPSAweDVCLAogICAgICAgIE11bHRpSW50ciA9IDB4NUMsCiAg ICAgICAgVHhTdW1tYXJ5ID0gMHg2MCwKICAgICAgICBCYXNpY01vZGVDdHJsID0gMHg2MiwKICAg ICAgICBCYXNpY01vZGVTdGF0dXMgPSAweDY0LAogICAgICAgIE5XYXlBZHZlcnQgPSAweDY2LAog ICAgICAgIE5XYXlMUEFSID0gMHg2OCwKICAgICAgICBOV2F5RXhwYW5zaW9uID0gMHg2QSwKCiAg ICAgICAgRklGT1RNUyA9IDB4NzAsCiAgICAgICAgQ1NDUiA9IDB4NzQsCiAgICAgICAgUEFSQTc4 ID0gMHg3OCwKICAgICAgICBQQVJBN2MgPSAweDdjLAogICAgICAgIENvbmZpZzUgPSAweEQ4LAp9 OwoKZW51bSBDbGVhckJpdE1hc2tzIHsKICAgICAgICBNdWx0aUludHJDbGVhciA9IDB4RjAwMCwK ICAgICAgICBDaGlwQ21kQ2xlYXIgPSAweEUyLAogICAgICAgIENvbmZpZzFDbGVhciA9ICgxPDw3 KXwoMTw8Nil8KDE8PDMpfCgxPDwyKXwoMTw8MSksCn07CgplbnVtIENoaXBDbWRCaXRzIHsKICAg ICAgICBDbWRSZXNldCA9IDB4MTAsCiAgICAgICAgQ21kUnhFbmIgPSAweDA4LAogICAgICAgIENt ZFR4RW5iID0gMHgwNCwKICAgICAgICBSeEJ1ZkVtcHR5ID0gMHgwMSwKfTsKCgplbnVtIEludHJT dGF0dXNCaXRzIHsKICAgICAgICBQQ0lFcnIgPSAweDgwMDAsCiAgICAgICAgUENTVGltZW91dCA9 IDB4NDAwMCwKICAgICAgICBSeEZJRk9PdmVyID0gMHg0MCwKICAgICAgICBSeFVuZGVycnVuID0g MHgyMCwKICAgICAgICBSeE92ZXJmbG93ID0gMHgxMCwKICAgICAgICBUeEVyciA9IDB4MDgsCiAg ICAgICAgVHhPSyA9IDB4MDQsCiAgICAgICAgUnhFcnIgPSAweDAyLAogICAgICAgIFJ4T0sgPSAw eDAxLAoKICAgICAgICBSeEFja0JpdHMgPSBSeEZJRk9PdmVyIHwgUnhPdmVyZmxvdyB8IFJ4T0ss Cn07CgplbnVtIFR4U3RhdHVzQml0cyB7CiAgICAgICAgVHhIb3N0T3ducyA9IDB4MjAwMCwKICAg ICAgICBUeFVuZGVycnVuID0gMHg0MDAwLAogICAgICAgIFR4U3RhdE9LID0gMHg4MDAwLAogICAg ICAgIFR4T3V0T2ZXaW5kb3cgPSAweDIwMDAwMDAwLAogICAgICAgIFR4QWJvcnRlZCA9IDB4NDAw MDAwMDAsCiAgICAgICAgVHhDYXJyaWVyTG9zdCA9IDB4ODAwMDAwMDAsCn07CmVudW0gUnhTdGF0 dXNCaXRzIHsKICAgICAgICBSeE11bHRpY2FzdCA9IDB4ODAwMCwKICAgICAgICBSeFBoeXNpY2Fs ID0gMHg0MDAwLAogICAgICAgIFJ4QnJvYWRjYXN0ID0gMHgyMDAwLAogICAgICAgIFJ4QmFkU3lt Ym9sID0gMHgwMDIwLAogICAgICAgIFJ4UnVudCA9IDB4MDAxMCwKICAgICAgICBSeFRvb0xvbmcg PSAweDAwMDgsCiAgICAgICAgUnhDUkNFcnIgPSAweDAwMDQsCiAgICAgICAgUnhCYWRBbGlnbiA9 IDB4MDAwMiwKICAgICAgICBSeFN0YXR1c09LID0gMHgwMDAxLAp9OwoKCmVudW0gcnhfbW9kZV9i aXRzIHsKICAgICAgICBBY2NlcHRFcnIgPSAweDIwLAogICAgICAgIEFjY2VwdFJ1bnQgPSAweDEw LAogICAgICAgIEFjY2VwdEJyb2FkY2FzdCA9IDB4MDgsCiAgICAgICAgQWNjZXB0TXVsdGljYXN0 ID0gMHgwNCwKICAgICAgICBBY2NlcHRNeVBoeXMgPSAweDAyLAogICAgICAgIEFjY2VwdEFsbFBo eXMgPSAweDAxLAp9OwoKCmVudW0gdHhfY29uZmlnX2JpdHMgewogICAgICAgIFR4SUZHMSA9ICgx IDw8IDI1KSwKICAgICAgICBUeElGRzAgPSAoMSA8PCAyNCksCiAgICAgICAgVHhMb29wQmFjayA9 ICgxIDw8IDE4KSB8ICgxIDw8IDE3KSwKICAgICAgICBUeENSQyA9ICgxIDw8IDE2KSwKICAgICAg ICBUeENsZWFyQWJ0ID0gKDEgPDwgMCksCiAgICAgICAgVHhETUFTaGlmdCA9IDgsCgogICAgICAg IFR4VmVyc2lvbk1hc2sgPSAweDdDODAwMDAwLAp9OwoKCmVudW0gQ29uZmlnMUJpdHMgewogICAg ICAgIENmZzFfUE1fRW5hYmxlID0gMHgwMSwKICAgICAgICBDZmcxX1ZQRF9FbmFibGUgPSAweDAy LAogICAgICAgIENmZzFfUElPID0gMHgwNCwKICAgICAgICBDZmcxX01NSU8gPSAweDA4LAogICAg ICAgIExXQUtFID0gMHgxMCwKICAgICAgICBDZmcxX0RyaXZlcl9Mb2FkID0gMHgyMCwKICAgICAg ICBDZmcxX0xFRDAgPSAweDQwLAogICAgICAgIENmZzFfTEVEMSA9IDB4ODAsCiAgICAgICAgU0xF RVAgPSAoMSA8PCAxKSwKICAgICAgICBQV1JETiA9ICgxIDw8IDApLAp9OwoKCmVudW0gQ29uZmln M0JpdHMgewogICAgICAgIENmZzNfRkJ0QkVuID0gKDEgPDwgMCksCiAgICAgICAgQ2ZnM19GdW5j UmVnRW4gPSAoMSA8PCAxKSwKICAgICAgICBDZmczX0NMS1JVTl9FbiA9ICgxIDw8IDIpLAogICAg ICAgIENmZzNfQ2FyZEJfRW4gPSAoMSA8PCAzKSwKICAgICAgICBDZmczX0xpbmtVcCA9ICgxIDw8 IDQpLAogICAgICAgIENmZzNfTWFnaWMgPSAoMSA8PCA1KSwKICAgICAgICBDZmczX1BBUk1fRW4g PSAoMSA8PCA2KSwKICAgICAgICBDZmczX0dOVFNlbCA9ICgxIDw8IDcpLAp9OwoKCmVudW0gQ29u ZmlnNEJpdHMgewogICAgICAgIExXUFROID0gKDEgPDwgMiksCn07CgoKZW51bSBDb25maWc1Qml0 cyB7CiAgICAgICAgQ2ZnNV9QTUVfU1RTID0gKDEgPDwgMCksCiAgICAgICAgQ2ZnNV9MQU5XYWtl ID0gKDEgPDwgMSksCiAgICAgICAgQ2ZnNV9MRFBTID0gKDEgPDwgMiksCiAgICAgICAgQ2ZnNV9G SUZPQWRkclB0ciA9ICgxIDw8IDMpLAogICAgICAgIENmZzVfVVdGID0gKDEgPDwgNCksCiAgICAg ICAgQ2ZnNV9NV0YgPSAoMSA8PCA1KSwKICAgICAgICBDZmc1X0JXRiA9ICgxIDw8IDYpLAp9OwoK ZW51bSBSeENvbmZpZ0JpdHMgewoKICAgICAgICBSeENmZ0Vhcmx5UnhOb25lID0gMCwKICAgICAg ICBSeENmZ0Vhcmx5UnhTaGlmdCA9IDI0LAoKCiAgICAgICAgUnhDZmdGSUZPU2hpZnQgPSAxMywK ICAgICAgICBSeENmZ0ZJRk9Ob25lID0gKDcgPDwgUnhDZmdGSUZPU2hpZnQpLAoKCiAgICAgICAg UnhDZmdETUFTaGlmdCA9IDgsCiAgICAgICAgUnhDZmdETUFVbmxpbWl0ZWQgPSAoNyA8PCBSeENm Z0RNQVNoaWZ0KSwKCgogICAgICAgIFJ4Q2ZnUmN2OEsgPSAwLAogICAgICAgIFJ4Q2ZnUmN2MTZL ID0gKDEgPDwgMTEpLAogICAgICAgIFJ4Q2ZnUmN2MzJLID0gKDEgPDwgMTIpLAogICAgICAgIFJ4 Q2ZnUmN2NjRLID0gKDEgPDwgMTEpIHwgKDEgPDwgMTIpLAoKCiAgICAgICAgUnhOb1dyYXAgPSAo MSA8PCA3KSwKfTsKCgoKCmVudW0gQ1NDUkJpdHMgewogICAgICAgIENTQ1JfTGlua09LQml0ID0g MHgwNDAwLAogICAgICAgIENTQ1JfTGlua0NoYW5nZUJpdCA9IDB4MDgwMCwKICAgICAgICBDU0NS X0xpbmtTdGF0dXNCaXRzID0gMHgwZjAwMCwKICAgICAgICBDU0NSX0xpbmtEb3duT2ZmQ21kID0g MHgwMDNjMCwKICAgICAgICBDU0NSX0xpbmtEb3duQ21kID0gMHgwZjNjMCwKfTsKCgplbnVtIENm ZzkzNDZCaXRzIHsKICAgICAgICBDZmc5MzQ2X0xvY2sgPSAweDAwLAogICAgICAgIENmZzkzNDZf VW5sb2NrID0gMHhDMCwKfTsKCgoKCgpzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBwYXJhbVs0 XVs0XSA9IHsKICAgICAgICB7MHhjYjM5ZGU0MywgMHhjYjM5Y2U0MywgMHhmYjM4ZGUwMywgMHhj YjM4ZGU0M30sCiAgICAgICAgezB4Y2IzOWRlNDMsIDB4Y2IzOWNlNDMsIDB4Y2IzOWNlODMsIDB4 Y2IzOWNlODN9LAogICAgICAgIHsweGNiMzlkZTQzLCAweGNiMzljZTQzLCAweGNiMzljZTgzLCAw eGNiMzljZTgzfSwKICAgICAgICB7MHhiYjM5ZGU0MywgMHhiYjM5Y2U0MywgMHhiYjM5Y2U4Mywg MHhiYjM5Y2U4M30KfTsKCnN0cnVjdCByaW5nX2luZm8gewogICAgICAgIHN0cnVjdCBza19idWZm ICpza2I7CiAgICAgICAgZG1hX2FkZHJfdCBtYXBwaW5nOwp9OwoKCnR5cGVkZWYgZW51bSB7CiAg ICAgICAgQ0hfODEzOSA9IDAsCiAgICAgICAgQ0hfODEzOV9LLAogICAgICAgIENIXzgxMzlBLAog ICAgICAgIENIXzgxMzlCLAogICAgICAgIENIXzgxMzAsCiAgICAgICAgQ0hfODEzOUMsCn0gY2hp cF90OwoKZW51bSBjaGlwX2ZsYWdzIHsKICAgICAgICBIYXNIbHRDbGsgPSAoMSA8PCAwKSwKICAg ICAgICBIYXNMV2FrZSA9ICgxIDw8IDEpLAp9OwoKCgpjb25zdCBzdGF0aWMgc3RydWN0IHsKICAg ICAgICBjb25zdCBjaGFyICpuYW1lOwogICAgICAgIHU4IHZlcnNpb247CiAgICAgICAgdTMyIFJ4 Q29uZmlnTWFzazsKICAgICAgICB1MzIgZmxhZ3M7Cn0gcnRsX2NoaXBfaW5mb1tdID0gewogICAg ICAgIHsgIlJUTC04MTM5IiwKICAgICAgICAgIDB4NDAsCiAgICAgICAgICAweGYwZmUwMDQwLAog ICAgICAgICAgSGFzSGx0Q2xrLAogICAgICAgIH0sCgogICAgICAgIHsgIlJUTC04MTM5IHJldiBL IiwKICAgICAgICAgIDB4NjAsCiAgICAgICAgICAweGYwZmUwMDQwLAogICAgICAgICAgSGFzSGx0 Q2xrLAogICAgICAgIH0sCgogICAgICAgIHsgIlJUTC04MTM5QSIsCiAgICAgICAgICAweDcwLAog ICAgICAgICAgMHhmMGZlMDA0MCwKICAgICAgICAgIEhhc0hsdENsaywKICAgICAgICB9LAoKICAg ICAgICB7ICJSVEwtODEzOUIiLAogICAgICAgICAgMHg3OCwKICAgICAgICAgIDB4ZjBmYzAwNDAs CiAgICAgICAgICBIYXNMV2FrZSwKICAgICAgICB9LAoKICAgICAgICB7ICJSVEwtODEzMCIsCiAg ICAgICAgICAweDdDLAogICAgICAgICAgMHhmMGZlMDA0MCwKICAgICAgICAgIEhhc0xXYWtlLAog ICAgICAgIH0sCgogICAgICAgIHsgIlJUTC04MTM5QyIsCiAgICAgICAgICAweDc0LAogICAgICAg ICAgMHhmMGZjMDA0MCwKICAgICAgICAgIEhhc0xXYWtlLAogICAgICAgIH0sCgp9OwoKc3RydWN0 IHJ0bF9leHRyYV9zdGF0cyB7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlYXJseV9yeDsKICAgICAg ICB1bnNpZ25lZCBsb25nIHR4X2J1Zl9tYXBwZWQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyB0eF90 aW1lb3V0czsKfTsKCnN0cnVjdCBydGw4MTM5X3ByaXZhdGUgewogICAgICAgIHZvaWQgKm1taW9f YWRkcjsKICAgICAgICBpbnQgZHJ2X2ZsYWdzOwogICAgICAgIHN0cnVjdCBwY2lfZGV2ICpwY2lf ZGV2OwogICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogICAgICAgIHVuc2ln bmVkIGNoYXIgKnJ4X3Jpbmc7CiAgICAgICAgdW5zaWduZWQgaW50IGN1cl9yeDsKICAgICAgICB1 bnNpZ25lZCBpbnQgdHhfZmxhZzsKICAgICAgICB1bnNpZ25lZCBsb25nIGN1cl90eDsKICAgICAg ICB1bnNpZ25lZCBsb25nIGRpcnR5X3R4OwoKICAgICAgICBzdHJ1Y3QgcmluZ19pbmZvIHR4X2lu Zm9bNF07CiAgICAgICAgdW5zaWduZWQgY2hhciAqdHhfYnVmWzRdOwogICAgICAgIHVuc2lnbmVk IGNoYXIgKnR4X2J1ZnM7CiAgICAgICAgZG1hX2FkZHJfdCByeF9yaW5nX2RtYTsKICAgICAgICBk bWFfYWRkcl90IHR4X2J1ZnNfZG1hOwogICAgICAgIHNpZ25lZCBjaGFyIHBoeXNbNF07CiAgICAg ICAgY2hhciB0d2lzdGllLCB0d2lzdF9yb3csIHR3aXN0X2NvbDsKICAgICAgICB1bnNpZ25lZCBp bnQgZnVsbF9kdXBsZXg6MTsKICAgICAgICB1bnNpZ25lZCBpbnQgZHVwbGV4X2xvY2s6MTsKICAg ICAgICB1bnNpZ25lZCBpbnQgZGVmYXVsdF9wb3J0OjQ7CiAgICAgICAgdW5zaWduZWQgaW50IG1l ZGlhMjo0OwogICAgICAgIHVuc2lnbmVkIGludCBtZWRpYWxvY2s6MTsKICAgICAgICB1bnNpZ25l ZCBpbnQgbWVkaWFzZW5zZToxOwogICAgICAgIHNwaW5sb2NrX3QgbG9jazsKICAgICAgICBjaGlw X3QgY2hpcHNldDsKICAgICAgICBwaWRfdCB0aHJfcGlkOwogICAgICAgIHdhaXRfcXVldWVfaGVh ZF90IHRocl93YWl0OwogICAgICAgIHN0cnVjdCBjb21wbGV0aW9uIHRocl9leGl0ZWQ7CiAgICAg ICAgdTMyIHJ4X2NvbmZpZzsKICAgICAgICBzdHJ1Y3QgcnRsX2V4dHJhX3N0YXRzIHhzdGF0czsK fTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwoKc3RhdGljIGludCByZWFkX2VlcHJvbSAodm9pZCAqaW9hZGRyLCBp bnQgbG9jYXRpb24sIGludCBhZGRyX2xlbik7CnN0YXRpYyBpbnQgcnRsODEzOV9vcGVuIChzdHJ1 Y3QgbmV0X2RldmljZSAqZGV2KTsKc3RhdGljIGludCBtZGlvX3JlYWQgKHN0cnVjdCBuZXRfZGV2 aWNlICpkZXYsIGludCBwaHlfaWQsIGludCBsb2NhdGlvbik7CnN0YXRpYyB2b2lkIG1kaW9fd3Jp dGUgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCBsb2NhdGlvbiwKICAg ICAgICAgICAgICAgICAgICAgICAgaW50IHZhbCk7CnN0YXRpYyBpbnQgcnRsODEzOV90aHJlYWQg KHZvaWQgKmRhdGEpOwpzdGF0aWMgdm9pZCBydGw4MTM5X3R4X3RpbWVvdXQgKHN0cnVjdCBuZXRf ZGV2aWNlICpkZXYpOwpzdGF0aWMgdm9pZCBydGw4MTM5X2luaXRfcmluZyAoc3RydWN0IG5ldF9k ZXZpY2UgKmRldik7CnN0YXRpYyBpbnQgcnRsODEzOV9zdGFydF94bWl0IChzdHJ1Y3Qgc2tfYnVm ZiAqc2tiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldF9kZXZpY2Ug KmRldik7CnN0YXRpYyB2b2lkIHJ0bDgxMzlfaW50ZXJydXB0IChpbnQgaXJxLCB2b2lkICpkZXZf aW5zdGFuY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcHRfcmVncyAq cmVncyk7CnN0YXRpYyBpbnQgcnRsODEzOV9jbG9zZSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7 CnN0YXRpYyBpbnQgbmV0ZGV2X2lvY3RsIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qg aWZyZXEgKnJxLCBpbnQgY21kKTsKc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpydGw4 MTM5X2dldF9zdGF0cyAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CnN0YXRpYyBpbmxpbmUgdTMy IGV0aGVyX2NyYyAoaW50IGxlbmd0aCwgdW5zaWduZWQgY2hhciAqZGF0YSk7CnN0YXRpYyB2b2lk IHJ0bDgxMzlfc2V0X3J4X21vZGUgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpzdGF0aWMgdm9p ZCBfX3NldF9yeF9tb2RlIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKc3RhdGljIHZvaWQgcnRs ODEzOV9od19zdGFydCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiMgNzEyICI4MTM5dG9vLmMi CnN0YXRpYyBjb25zdCB1MTYgcnRsODEzOV9pbnRyX21hc2sgPQogICAgICAgIFBDSUVyciB8IFBD U1RpbWVvdXQgfCBSeFVuZGVycnVuIHwgUnhPdmVyZmxvdyB8IFJ4RklGT092ZXIgfAogICAgICAg IFR4RXJyIHwgVHhPSyB8IFJ4RXJyIHwgUnhPSzsKCnN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQg cnRsODEzOV9yeF9jb25maWcgPQogICAgICAgICAgKDE0IDw8IFJ4Q2ZnRWFybHlSeFNoaWZ0KSB8 IFJ4Q2ZnUmN2MzJLIHwgUnhOb1dyYXAgfAogICAgICAgICAgKDcgPDwgUnhDZmdGSUZPU2hpZnQp IHwKICAgICAgICAgICg3IDw8IFJ4Q2ZnRE1BU2hpZnQpOwoKCnN0YXRpYyB2b2lkIF9fcnRsODEz OV9jbGVhbnVwX2RldiAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKewogICAgICAgIHN0cnVjdCBy dGw4MTM5X3ByaXZhdGUgKnRwOwogICAgICAgIHN0cnVjdCBwY2lfZGV2ICpwZGV2OwoKICAgICAg ICBpZighKGRldiAhPSAoKHZvaWQgKikwKSkpIHsgcHJpbnRrKCAiQXNzZXJ0aW9uIGZhaWxlZCEg JXMsJXMsJXMsbGluZT0lZFxuIiwgImRldiAhPSBOVUxMIiwiODEzOXRvby5jIixfX0ZVTkNUSU9O X18sNzI3KTsgfTsKICAgICAgICBpZighKGRldi0+cHJpdiAhPSAoKHZvaWQgKikwKSkpIHsgcHJp bnRrKCAiQXNzZXJ0aW9uIGZhaWxlZCEgJXMsJXMsJXMsbGluZT0lZFxuIiwgImRldi0+cHJpdiAh PSBOVUxMIiwiODEzOXRvby5jIixfX0ZVTkNUSU9OX18sNzI4KTsgfTsKCiAgICAgICAgdHAgPSBk ZXYtPnByaXY7CiAgICAgICAgaWYoISh0cC0+cGNpX2RldiAhPSAoKHZvaWQgKikwKSkpIHsgcHJp bnRrKCAiQXNzZXJ0aW9uIGZhaWxlZCEgJXMsJXMsJXMsbGluZT0lZFxuIiwgInRwLT5wY2lfZGV2 ICE9IE5VTEwiLCI4MTM5dG9vLmMiLF9fRlVOQ1RJT05fXyw3MzEpOyB9OwogICAgICAgIHBkZXYg PSB0cC0+cGNpX2RldjsKCgogICAgICAgIGlmICh0cC0+bW1pb19hZGRyKQogICAgICAgICAgICAg ICAgaW91bm1hcCAodHAtPm1taW9fYWRkcik7CgoKCiAgICAgICAgcGNpX3JlbGVhc2VfcmVnaW9u cyAocGRldik7CgoKCiAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKDB4QkMpID8gKF9fYnVp bHRpbl9jb25zdGFudF9wKChzaXplb2YgKHN0cnVjdCBuZXRfZGV2aWNlKSArIHNpemVvZiAoc3Ry dWN0IHJ0bDgxMzlfcHJpdmF0ZSkpKSA/IF9fY29uc3RhbnRfY19hbmRfY291bnRfbWVtc2V0KCgo ZGV2KSksKCgweDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIpKDB4QkMpKSksKChzaXplb2YgKHN0 cnVjdCBuZXRfZGV2aWNlKSArIHNpemVvZiAoc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSkpKSkgOiBf X2NvbnN0YW50X2NfbWVtc2V0KCgoZGV2KSksKCgweDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIp KDB4QkMpKSksKChzaXplb2YgKHN0cnVjdCBuZXRfZGV2aWNlKSArIHNpemVvZiAoc3RydWN0IHJ0 bDgxMzlfcHJpdmF0ZSkpKSkpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wKChzaXplb2YgKHN0cnVj dCBuZXRfZGV2aWNlKSArIHNpemVvZiAoc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSkpKSA/IF9fbWVt c2V0X2dlbmVyaWMoKCgoZGV2KSkpLCgoKDB4QkMpKSksKCgoc2l6ZW9mIChzdHJ1Y3QgbmV0X2Rl dmljZSkgKyBzaXplb2YgKHN0cnVjdCBydGw4MTM5X3ByaXZhdGUpKSkpKSA6IF9fbWVtc2V0X2dl bmVyaWMoKChkZXYpKSwoKDB4QkMpKSwoKHNpemVvZiAoc3RydWN0IG5ldF9kZXZpY2UpICsgc2l6 ZW9mIChzdHJ1Y3QgcnRsODEzOV9wcml2YXRlKSkpKSkpOwoKCgoKICAgICAgICBrZnJlZSAoZGV2 KTsKCiAgICAgICAgcGNpX3NldF9kcnZkYXRhIChwZGV2LCAoKHZvaWQgKikwKSk7Cn0KCgpzdGF0 aWMgdm9pZCBydGw4MTM5X2NoaXBfcmVzZXQgKHZvaWQgKmlvYWRkcikKewogICAgICAgIGludCBp OwoKCiAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoKHZvaWQgKikoaW9hZGRy ICsgKENoaXBDbWQpKSkgPSAoKENtZFJlc2V0KSkpOwoKCiAgICAgICAgZm9yIChpID0gMTAwMDsg aSA+IDA7IGktLSkgewogICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6IDog OiJtZW1vcnkiKTsKICAgICAgICAgICAgICAgIGlmICgoKCoodm9sYXRpbGUgdW5zaWduZWQgY2hh ciAqKSAoKHZvaWQgKikoaW9hZGRyICsgKENoaXBDbWQpKSkpICYgQ21kUmVzZXQpID09IDApCiAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgKF9fYnVpbHRpbl9j b25zdGFudF9wKDEwKSA/ICgoMTApID4gMjAwMDAgPyBfX2JhZF91ZGVsYXkoKSA6IF9fY29uc3Rf dWRlbGF5KCgxMCkgKiAweDEwYzZ1bCkpIDogX191ZGVsYXkoMTApKTsKICAgICAgICB9Cn0KCgpz dGF0aWMgaW50IF9fYXR0cmlidXRlX18gKChfX3NlY3Rpb25fXyAoIi50ZXh0LmluaXQiKSkpIHJ0 bDgxMzlfaW5pdF9ib2FyZCAoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKipkZXZfb3V0KQp7CiAg ICAgICAgdm9pZCAqaW9hZGRyOwogICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAgICAg ICAgc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHA7CiAgICAgICAgdTggdG1wODsKICAgICAgICBp bnQgcmM7CiAgICAgICAgdW5zaWduZWQgaW50IGk7CiAgICAgICAgdTMyIHBpb19zdGFydCwgcGlv X2VuZCwgcGlvX2ZsYWdzLCBwaW9fbGVuOwogICAgICAgIHVuc2lnbmVkIGxvbmcgbW1pb19zdGFy dCwgbW1pb19lbmQsIG1taW9fZmxhZ3MsIG1taW9fbGVuOwogICAgICAgIHUzMiB0bXA7CgogICAg ICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgIGlmKCEocGRldiAhPSAoKHZvaWQgKikw KSkpIHsgcHJpbnRrKCAiQXNzZXJ0aW9uIGZhaWxlZCEgJXMsJXMsJXMsbGluZT0lZFxuIiwgInBk ZXYgIT0gTlVMTCIsIjgxMzl0b28uYyIsX19GVU5DVElPTl9fLDc4Nyk7IH07CgogICAgICAgICpk ZXZfb3V0ID0gKCh2b2lkICopMCk7CgoKICAgICAgICBkZXYgPSBhbGxvY19ldGhlcmRldiAoc2l6 ZW9mICgqdHApKTsKICAgICAgICBpZiAoZGV2ID09ICgodm9pZCAqKTApKSB7CiAgICAgICAgICAg ICAgICBwcmludGsgKCI8Mz4iICI4MTM5dG9vIiAiOiAiICIlczogVW5hYmxlIHRvIGFsbG9jIG5l dyBuZXQgZGV2aWNlXG4iLCBwZGV2LT5zbG90X25hbWUpOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgIHJldHVybiAt MTI7CiAgICAgICAgfQogICAgICAgIGRvIHsgKGRldiktPm93bmVyID0gKCh2b2lkICopMCk7IH0g d2hpbGUgKDApOwogICAgICAgIHRwID0gZGV2LT5wcml2OwogICAgICAgIHRwLT5wY2lfZGV2ID0g cGRldjsKCgogICAgICAgIHJjID0gcGNpX2VuYWJsZV9kZXZpY2UgKHBkZXYpOwogICAgICAgIGlm IChyYykKICAgICAgICAgICAgICAgIGdvdG8gZXJyX291dDsKCiAgICAgICAgcGlvX3N0YXJ0ID0g KChwZGV2KS0+cmVzb3VyY2VbKDApXS5zdGFydCk7CiAgICAgICAgcGlvX2VuZCA9ICgocGRldikt PnJlc291cmNlWygwKV0uZW5kKTsKICAgICAgICBwaW9fZmxhZ3MgPSAoKHBkZXYpLT5yZXNvdXJj ZVsoMCldLmZsYWdzKTsKICAgICAgICBwaW9fbGVuID0gKCgoKChwZGV2KSktPnJlc291cmNlWygo MCkpXS5zdGFydCkgPT0gMCAmJiAoKChwZGV2KSktPnJlc291cmNlWygoMCkpXS5lbmQpID09ICgo KHBkZXYpKS0+cmVzb3VyY2VbKCgwKSldLnN0YXJ0KSkgPyAwIDogKCgoKHBkZXYpKS0+cmVzb3Vy Y2VbKCgwKSldLmVuZCkgLSAoKChwZGV2KSktPnJlc291cmNlWygoMCkpXS5zdGFydCkgKyAxKSk7 CgogICAgICAgIG1taW9fc3RhcnQgPSAoKHBkZXYpLT5yZXNvdXJjZVsoMSldLnN0YXJ0KTsKICAg ICAgICBtbWlvX2VuZCA9ICgocGRldiktPnJlc291cmNlWygxKV0uZW5kKTsKICAgICAgICBtbWlv X2ZsYWdzID0gKChwZGV2KS0+cmVzb3VyY2VbKDEpXS5mbGFncyk7CiAgICAgICAgbW1pb19sZW4g PSAoKCgoKHBkZXYpKS0+cmVzb3VyY2VbKCgxKSldLnN0YXJ0KSA9PSAwICYmICgoKHBkZXYpKS0+ cmVzb3VyY2VbKCgxKSldLmVuZCkgPT0gKCgocGRldikpLT5yZXNvdXJjZVsoKDEpKV0uc3RhcnQp KSA/IDAgOiAoKCgocGRldikpLT5yZXNvdXJjZVsoKDEpKV0uZW5kKSAtICgoKHBkZXYpKS0+cmVz b3VyY2VbKCgxKSldLnN0YXJ0KSArIDEpKTsKCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyA4MzcgIjgxMzl0b28uYyIKICAgICAg ICBpZiAoIShtbWlvX2ZsYWdzICYgMHgwMDAwMDIwMCkpIHsKICAgICAgICAgICAgICAgIHByaW50 ayAoIjwzPiIgIjgxMzl0b28iICI6ICIgIiVzOiByZWdpb24gIzEgbm90IGFuIE1NSU8gcmVzb3Vy Y2UsIGFib3J0aW5nXG4iLCBwZGV2LT5zbG90X25hbWUpOwogICAgICAgICAgICAgICAgcmMgPSAt MTk7CiAgICAgICAgICAgICAgICBnb3RvIGVycl9vdXQ7CiAgICAgICAgfQogICAgICAgIGlmICht bWlvX2xlbiA8IDB4ODApIHsKICAgICAgICAgICAgICAgIHByaW50ayAoIjwzPiIgIjgxMzl0b28i ICI6ICIgIiVzOiBJbnZhbGlkIFBDSSBtZW0gcmVnaW9uIHNpemUocyksIGFib3J0aW5nXG4iLCBw ZGV2LT5zbG90X25hbWUpOwogICAgICAgICAgICAgICAgcmMgPSAtMTk7CiAgICAgICAgICAgICAg ICBnb3RvIGVycl9vdXQ7CiAgICAgICAgfQoKCiAgICAgICAgcmMgPSBwY2lfcmVxdWVzdF9yZWdp b25zIChwZGV2LCAiODEzOXRvbyIpOwogICAgICAgIGlmIChyYykKICAgICAgICAgICAgICAgIGdv dG8gZXJyX291dDsKCgogICAgICAgIHBjaV9zZXRfbWFzdGVyIChwZGV2KTsKCgoKCgoKCiAgICAg ICAgaW9hZGRyID0gaW9yZW1hcCAobW1pb19zdGFydCwgbW1pb19sZW4pOwogICAgICAgIGlmIChp b2FkZHIgPT0gKCh2b2lkICopMCkpIHsKICAgICAgICAgICAgICAgIHByaW50ayAoIjwzPiIgIjgx Mzl0b28iICI6ICIgIiVzOiBjYW5ub3QgcmVtYXAgTU1JTywgYWJvcnRpbmdcbiIsIHBkZXYtPnNs b3RfbmFtZSk7CiAgICAgICAgICAgICAgICByYyA9IC01OwogICAgICAgICAgICAgICAgZ290byBl cnJfb3V0OwogICAgICAgIH0KICAgICAgICBkZXYtPmJhc2VfYWRkciA9IChsb25nKSBpb2FkZHI7 CiAgICAgICAgdHAtPm1taW9fYWRkciA9IGlvYWRkcjsKCgoKICAgICAgICAoKih2b2xhdGlsZSB1 bnNpZ25lZCBjaGFyICopICgodm9pZCAqKShpb2FkZHIgKyAoSGx0Q2xrKSkpID0gKCgnUicpKSk7 CgoKICAgICAgICBpZiAoKCh1bnNpZ25lZCBsb25nKSAoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQg KikgKCh2b2lkICopKGlvYWRkciArIChUeENvbmZpZykpKSkpID09IDB4RkZGRkZGRkYpIHsKICAg ICAgICAgICAgICAgIHByaW50ayAoIjwzPiIgIjgxMzl0b28iICI6ICIgIiVzOiBDaGlwIG5vdCBy ZXNwb25kaW5nLCBpZ25vcmluZyBib2FyZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgcGRl di0+c2xvdF9uYW1lKTsKICAgICAgICAgICAgICAgIHJjID0gLTU7CiAgICAgICAgICAgICAgICBn b3RvIGVycl9vdXQ7CiAgICAgICAgfQoKCiAgICAgICAgdG1wID0gKCoodm9sYXRpbGUgdW5zaWdu ZWQgY2hhciAqKSAoKHZvaWQgKikoaW9hZGRyICsgKENoaXBWZXJzaW9uKSkpKTsKICAgICAgICBm b3IgKGkgPSAwOyBpIDwgKHNpemVvZihydGxfY2hpcF9pbmZvKSAvIHNpemVvZigocnRsX2NoaXBf aW5mbylbMF0pKTsgaSsrKQogICAgICAgICAgICAgICAgaWYgKHRtcCA9PSBydGxfY2hpcF9pbmZv W2ldLnZlcnNpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgdHAtPmNoaXBzZXQgPSBpOwog ICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG1hdGNoOwogICAgICAgICAgICAgICAgfQoKCiAg ICAgICAgcHJpbnRrICgiPDc+IiAiODEzOXRvbyIgIjogIiAiJXM6IHVua25vd24gY2hpcCB2ZXJz aW9uLCBhc3N1bWluZyBSVEwtODEzOVxuIiwKICAgICAgICAgICAgICAgIHBkZXYtPnNsb3RfbmFt ZSk7CiAgICAgICAgcHJpbnRrICgiPDc+IiAiODEzOXRvbyIgIjogIiAiJXM6IFR4Q29uZmlnID0g MHglbHhcbiIsIHBkZXYtPnNsb3RfbmFtZSwgKCh1bnNpZ25lZCBsb25nKSAoKih2b2xhdGlsZSB1 bnNpZ25lZCBpbnQgKikgKCh2b2lkICopKGlvYWRkciArIChUeENvbmZpZykpKSkpKTsKICAgICAg ICB0cC0+Y2hpcHNldCA9IDA7CgptYXRjaDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwoKCgoKICAgICAgICBpZiAodHAtPmNoaXBzZXQgPj0gQ0hfODEz OUIpIHsKICAgICAgICAgICAgICAgIHU4IG5ld190bXA4ID0gdG1wOCA9ICgqKHZvbGF0aWxlIHVu c2lnbmVkIGNoYXIgKikgKCh2b2lkICopKGlvYWRkciArIChDb25maWcxKSkpKTsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgaWYgKChy dGxfY2hpcF9pbmZvW3RwLT5jaGlwc2V0XS5mbGFncyAmIEhhc0xXYWtlKSAmJgogICAgICAgICAg ICAgICAgICAgICh0bXA4ICYgTFdBS0UpKQogICAgICAgICAgICAgICAgICAgICAgICBuZXdfdG1w OCAmPSB+TFdBS0U7CiAgICAgICAgICAgICAgICBuZXdfdG1wOCB8PSBDZmcxX1BNX0VuYWJsZTsK ICAgICAgICAgICAgICAgIGlmIChuZXdfdG1wOCAhPSB0bXA4KSB7CiAgICAgICAgICAgICAgICAg ICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKCh2b2lkICopKGlvYWRkciArIChD Zmc5MzQ2KSkpID0gKChDZmc5MzQ2X1VubG9jaykpKTsKICAgICAgICAgICAgICAgICAgICAgICAg KCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoKHZvaWQgKikoaW9hZGRyICsgKENvbmZpZzEp KSkgPSAoKHRtcDgpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2ln bmVkIGNoYXIgKikgKCh2b2lkICopKGlvYWRkciArIChDZmc5MzQ2KSkpID0gKChDZmc5MzQ2X0xv Y2spKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAocnRsX2NoaXBfaW5m b1t0cC0+Y2hpcHNldF0uZmxhZ3MgJiBIYXNMV2FrZSkgewogICAgICAgICAgICAgICAgICAgICAg ICB0bXA4ID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoKHZvaWQgKikoaW9hZGRyICsg KENvbmZpZzQpKSkpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wOCAmIExXUFROKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIg KikgKCh2b2lkICopKGlvYWRkciArIChDb25maWc0KSkpID0gKCh0bXA4ICYgfkxXUFROKSkpOwog ICAgICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgdG1wOCA9ICgqKHZvbGF0aWxl IHVuc2lnbmVkIGNoYXIgKikgKCh2b2lkICopKGlvYWRkciArIChDb25maWcxKSkpKTsKICAgICAg ICAgICAgICAgIHRtcDggJj0gfihTTEVFUCB8IFBXUkROKTsKICAgICAgICAgICAgICAgICgqKHZv bGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKCh2b2lkICopKGlvYWRkciArIChDb25maWcxKSkpID0g KCh0bXA4KSkpOwogICAgICAgIH0KCiAgICAgICAgcnRsODEzOV9jaGlwX3Jlc2V0IChpb2FkZHIp OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICpkZXZf b3V0ID0gZGV2OwogICAgICAgIHJldHVybiAwOwoKZXJyX291dDoKICAgICAgICBfX3J0bDgxMzlf Y2xlYW51cF9kZXYgKGRldik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwogICAgICAgIHJldHVybiByYzsKfQoKCnN0YXRpYyBpbnQgX19hdHRyaWJ1dGVfXyAo KF9fc2VjdGlvbl9fICgiLnRleHQuaW5pdCIpKSkgcnRsODEzOV9pbml0X29uZSAoc3RydWN0IHBj aV9kZXYgKnBkZXYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCnsKICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAq ZGV2ID0gKCh2b2lkICopMCk7CiAgICAgICAgc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHA7CiAg ICAgICAgaW50IGksIGFkZHJfbGVuLCBvcHRpb247CiAgICAgICAgdm9pZCAqaW9hZGRyOwogICAg ICAgIHN0YXRpYyBpbnQgYm9hcmRfaWR4ID0gLTE7CiAgICAgICAgdTggcGNpX3JldjsKCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgaWYoIShwZGV2ICE9ICgodm9pZCAqKTAp KSkgeyBwcmludGsoICJBc3NlcnRpb24gZmFpbGVkISAlcywlcywlcyxsaW5lPSVkXG4iLCAicGRl diAhPSBOVUxMIiwiODEzOXRvby5jIixfX0ZVTkNUSU9OX18sOTUyKTsgfTsKICAgICAgICBpZigh KGVudCAhPSAoKHZvaWQgKikwKSkpIHsgcHJpbnRrKCAiQXNzZXJ0aW9uIGZhaWxlZCEgJXMsJXMs JXMsbGluZT0lZFxuIiwgImVudCAhPSBOVUxMIiwiODEzOXRvby5jIixfX0ZVTkNUSU9OX18sOTUz KTsgfTsKCiAgICAgICAgYm9hcmRfaWR4Kys7CgoKCgoKICAgICAgICB7CiAgICAgICAgICAgICAg ICBzdGF0aWMgaW50IHByaW50ZWRfdmVyc2lvbjsKICAgICAgICAgICAgICAgIGlmICghcHJpbnRl ZF92ZXJzaW9uKyspCiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayAoIjw2PiIgIjgxMzl0 b28iICIgRmFzdCBFdGhlcm5ldCBkcml2ZXIgIiAiMC45LjIwIiAiXG4iKTsKICAgICAgICB9CgoK ICAgICAgICBwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCAweDA4LCAmcGNpX3Jldik7CgogICAg ICAgIGlmIChwZGV2LT52ZW5kb3IgPT0gMHgxMGVjICYmCiAgICAgICAgICAgIHBkZXYtPmRldmlj ZSA9PSAweDgxMzkgJiYgcGNpX3JldiA+PSAweDIwKSB7CiAgICAgICAgICAgICAgICBwcmludGso Ijw2PiIgIjgxMzl0b28iICI6ICIgInBjaSBkZXYgJXMgKGlkICUwNHg6JTA0eCByZXYgJTAyeCkg aXMgYW4gZW5oYW5jZWQgODEzOUMrIGNoaXBcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgcGRl di0+c2xvdF9uYW1lLCBwZGV2LT52ZW5kb3IsIHBkZXYtPmRldmljZSwgcGNpX3Jldik7CiAgICAg ICAgICAgICAgICBwcmludGsoIjw2PiIgIjgxMzl0b28iICI6ICIgIlVzZSB0aGUgXCI4MTM5Y3Bc IiBkcml2ZXIgZm9yIGltcHJvdmVkIHBlcmZvcm1hbmNlIGFuZCBzdGFiaWxpdHkuXG4iKTsKICAg ICAgICB9CgogICAgICAgIGkgPSBydGw4MTM5X2luaXRfYm9hcmQgKHBkZXYsICZkZXYpOwogICAg ICAgIGlmIChpIDwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CiAgICAgICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICB9CgogICAgICAg IHRwID0gZGV2LT5wcml2OwogICAgICAgIGlvYWRkciA9IHRwLT5tbWlvX2FkZHI7CgogICAgICAg IGlmKCEoaW9hZGRyICE9ICgodm9pZCAqKTApKSkgeyBwcmludGsoICJBc3NlcnRpb24gZmFpbGVk ISAlcywlcywlcyxsaW5lPSVkXG4iLCAiaW9hZGRyICE9IE5VTEwiLCI4MTM5dG9vLmMiLF9fRlVO Q1RJT05fXyw5ODYpOyB9OwogICAgICAgIGlmKCEoZGV2ICE9ICgodm9pZCAqKTApKSkgeyBwcmlu dGsoICJBc3NlcnRpb24gZmFpbGVkISAlcywlcywlcyxsaW5lPSVkXG4iLCAiZGV2ICE9IE5VTEwi LCI4MTM5dG9vLmMiLF9fRlVOQ1RJT05fXyw5ODcpOyB9OwogICAgICAgIGlmKCEodHAgIT0gKCh2 b2lkICopMCkpKSB7IHByaW50ayggIkFzc2VydGlvbiBmYWlsZWQhICVzLCVzLCVzLGxpbmU9JWRc biIsICJ0cCAhPSBOVUxMIiwiODEzOXRvby5jIixfX0ZVTkNUSU9OX18sOTg4KTsgfTsKCiAgICAg ICAgYWRkcl9sZW4gPSByZWFkX2VlcHJvbSAoaW9hZGRyLCAwLCA4KSA9PSAweDgxMjkgPyA4IDog NjsKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQogICAgICAgICAgICAgICAgKCh1MTYg KikgKGRldi0+ZGV2X2FkZHIpKVtpXSA9CiAgICAgICAgICAgICAgICAgICAgKChfX3UxNikocmVh ZF9lZXByb20gKGlvYWRkciwgaSArIDcsIGFkZHJfbGVuKSkpOwoKCiAgICAgICAgZGV2LT5vcGVu ID0gcnRsODEzOV9vcGVuOwogICAgICAgIGRldi0+aGFyZF9zdGFydF94bWl0ID0gcnRsODEzOV9z dGFydF94bWl0OwogICAgICAgIGRldi0+c3RvcCA9IHJ0bDgxMzlfY2xvc2U7CiAgICAgICAgZGV2 LT5nZXRfc3RhdHMgPSBydGw4MTM5X2dldF9zdGF0czsKICAgICAgICBkZXYtPnNldF9tdWx0aWNh c3RfbGlzdCA9IHJ0bDgxMzlfc2V0X3J4X21vZGU7CiAgICAgICAgZGV2LT5kb19pb2N0bCA9IG5l dGRldl9pb2N0bDsKICAgICAgICBkZXYtPnR4X3RpbWVvdXQgPSBydGw4MTM5X3R4X3RpbWVvdXQ7 CiAgICAgICAgZGV2LT53YXRjaGRvZ190aW1lbyA9ICg2KjEwMCk7CiAgICAgICAgZGV2LT5mZWF0 dXJlcyB8PSAxfDg7CgogICAgICAgIGRldi0+aXJxID0gcGRldi0+aXJxOwoKCiAgICAgICAgdHAg PSBkZXYtPnByaXY7CgoKICAgICAgICB0cC0+ZHJ2X2ZsYWdzID0gYm9hcmRfaW5mb1tlbnQtPmRy aXZlcl9kYXRhXS5od19mbGFnczsKICAgICAgICB0cC0+bW1pb19hZGRyID0gaW9hZGRyOwogICAg ICAgIGRvIHsgKigmdHAtPmxvY2spID0gKHNwaW5sb2NrX3QpIHsgMSB9OyB9IHdoaWxlKDApOwog ICAgICAgIGluaXRfd2FpdHF1ZXVlX2hlYWQgKCZ0cC0+dGhyX3dhaXQpOwogICAgICAgIGluaXRf Y29tcGxldGlvbiAoJnRwLT50aHJfZXhpdGVkKTsKCgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg ICAgICAgaSA9IHJlZ2lzdGVyX25ldGRldiAoZGV2KTsKICAgICAgICBpZiAoaSkgZ290byBlcnJf b3V0OwoKICAgICAgICBwY2lfc2V0X2RydmRhdGEgKHBkZXYsIGRldik7CgogICAgICAgIHByaW50 ayAoIjw2PiIgIiVzOiAlcyBhdCAweCVseCwgIgogICAgICAgICAgICAgICAgIiUyLjJ4OiUyLjJ4 OiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4LCAiCiAgICAgICAgICAgICAgICAiSVJRICVkXG4iLAog ICAgICAgICAgICAgICAgZGV2LT5uYW1lLAogICAgICAgICAgICAgICAgYm9hcmRfaW5mb1tlbnQt PmRyaXZlcl9kYXRhXS5uYW1lLAogICAgICAgICAgICAgICAgZGV2LT5iYXNlX2FkZHIsCiAgICAg ICAgICAgICAgICBkZXYtPmRldl9hZGRyWzBdLCBkZXYtPmRldl9hZGRyWzFdLAogICAgICAgICAg ICAgICAgZGV2LT5kZXZfYWRkclsyXSwgZGV2LT5kZXZfYWRkclszXSwKICAgICAgICAgICAgICAg IGRldi0+ZGV2X2FkZHJbNF0sIGRldi0+ZGV2X2FkZHJbNV0sCiAgICAgICAgICAgICAgICBkZXYt PmlycSk7CgogICAgICAgIHByaW50ayAoIjw3PiIgIiVzOiAgSWRlbnRpZmllZCA4MTM5IGNoaXAg dHlwZSAnJXMnXG4iLAogICAgICAgICAgICAgICAgZGV2LT5uYW1lLCBydGxfY2hpcF9pbmZvW3Rw LT5jaGlwc2V0XS5uYW1lKTsKIyAxMDYzICI4MTM5dG9vLmMiCiAgICAgICAgICAgICAgICB0cC0+ cGh5c1swXSA9IDMyOwoKCiAgICAgICAgb3B0aW9uID0gKGJvYXJkX2lkeCA+PSA4KSA/IDAgOiBt ZWRpYVtib2FyZF9pZHhdOwogICAgICAgIGlmIChvcHRpb24gPiAwKSB7CiAgICAgICAgICAgICAg ICB0cC0+ZnVsbF9kdXBsZXggPSAob3B0aW9uICYgMHgyMTApID8gMSA6IDA7CiAgICAgICAgICAg ICAgICB0cC0+ZGVmYXVsdF9wb3J0ID0gb3B0aW9uICYgMHhGRjsKICAgICAgICAgICAgICAgIGlm ICh0cC0+ZGVmYXVsdF9wb3J0KQogICAgICAgICAgICAgICAgICAgICAgICB0cC0+bWVkaWFsb2Nr ID0gMTsKICAgICAgICB9CiAgICAgICAgaWYgKGJvYXJkX2lkeCA8IDggJiYgZnVsbF9kdXBsZXhb Ym9hcmRfaWR4XSA+IDApCiAgICAgICAgICAgICAgICB0cC0+ZnVsbF9kdXBsZXggPSBmdWxsX2R1 cGxleFtib2FyZF9pZHhdOwogICAgICAgIGlmICh0cC0+ZnVsbF9kdXBsZXgpIHsKICAgICAgICAg ICAgICAgIHByaW50aygiPDY+IiAiJXM6IE1lZGlhIHR5cGUgZm9yY2VkIHRvIEZ1bGwgRHVwbGV4 LlxuIiwgZGV2LT5uYW1lKTsKCgogICAgICAgICAgICAgICAgdHAtPmR1cGxleF9sb2NrID0gMTsK ICAgICAgICB9CiAgICAgICAgaWYgKHRwLT5kZWZhdWx0X3BvcnQpIHsKICAgICAgICAgICAgICAg IHByaW50aygiPDY+IiAiICBGb3JjaW5nICVkTWJwcyAlcy1kdXBsZXggb3BlcmF0aW9uLlxuIiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9wdGlvbiAmIDB4MjAgPyAxMDAgOiAxMCksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIChvcHRpb24gJiAweDEwID8gImZ1bGwiIDogImhhbGYi KSk7CiAgICAgICAgICAgICAgICBtZGlvX3dyaXRlKGRldiwgdHAtPnBoeXNbMF0sIDAsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChvcHRpb24gJiAweDIwKSA/IDB4MjAwMCA6 IDApIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKG9wdGlvbiAmIDB4MTAp ID8gMHgwMTAwIDogMCkpOwogICAgICAgIH0KCgogICAgICAgIGlmIChydGxfY2hpcF9pbmZvW3Rw LT5jaGlwc2V0XS5mbGFncyAmIEhhc0hsdENsaykKICAgICAgICAgICAgICAgICgqKHZvbGF0aWxl IHVuc2lnbmVkIGNoYXIgKikgKCh2b2lkICopKGlvYWRkciArIChIbHRDbGspKSkgPSAoKCdIJykp KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgcmV0 dXJuIDA7CgplcnJfb3V0OgogICAgICAgIF9fcnRsODEzOV9jbGVhbnVwX2RldiAoZGV2KTsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgcmV0dXJu IGk7Cn0KCgpzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fICgodW51c2VkLCBfX3NlY3Rpb25fXygi LnRleHQuZXhpdCIpKSkgcnRsODEzOV9yZW1vdmVfb25lIChzdHJ1Y3QgcGNpX2RldiAqcGRldikK ewogICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEgKHBkZXYp OwogICAgICAgIHN0cnVjdCBydGw4MTM5X3ByaXZhdGUgKm5wOwoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwoKICAgICAgICBpZighKGRldiAhPSAoKHZvaWQgKikwKSkpIHsgcHJpbnRrKCAi QXNzZXJ0aW9uIGZhaWxlZCEgJXMsJXMsJXMsbGluZT0lZFxuIiwgImRldiAhPSBOVUxMIiwiODEz OXRvby5jIixfX0ZVTkNUSU9OX18sMTExMSk7IH07CiAgICAgICAgbnAgPSBkZXYtPnByaXY7CiAg ICAgICAgaWYoIShucCAhPSAoKHZvaWQgKikwKSkpIHsgcHJpbnRrKCAiQXNzZXJ0aW9uIGZhaWxl ZCEgJXMsJXMsJXMsbGluZT0lZFxuIiwgIm5wICE9IE5VTEwiLCI4MTM5dG9vLmMiLF9fRlVOQ1RJ T05fXywxMTEzKTsgfTsKCiAgICAgICAgdW5yZWdpc3Rlcl9uZXRkZXYgKGRldik7CgogICAgICAg IF9fcnRsODEzOV9jbGVhbnVwX2RldiAoZGV2KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg Owp9CiMgMTE0NSAiODEzOXRvby5jIgpzdGF0aWMgaW50IF9fYXR0cmlidXRlX18gKChfX3NlY3Rp b25fXyAoIi50ZXh0LmluaXQiKSkpIHJlYWRfZWVwcm9tICh2b2lkICppb2FkZHIsIGludCBsb2Nh dGlvbiwgaW50IGFkZHJfbGVuKQp7CiAgICAgICAgaW50IGk7CiAgICAgICAgdW5zaWduZWQgcmV0 dmFsID0gMDsKICAgICAgICB2b2lkICplZV9hZGRyID0gaW9hZGRyICsgQ2ZnOTM0NjsKICAgICAg ICBpbnQgcmVhZF9jbWQgPSBsb2NhdGlvbiB8ICgoNikgPDwgYWRkcl9sZW4pOwoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICop ICgodm9pZCAqKShlZV9hZGRyKSkgPSAoKDB4ODAgfCAweDA4KSAmIH4weDA4KSk7CiAgICAgICAg KCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoKHZvaWQgKikoZWVfYWRkcikpID0gKCgweDgw IHwgMHgwOCkpKTsKICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh2b2lkICop KGVlX2FkZHIpKSk7CgoKICAgICAgICBmb3IgKGkgPSA0ICsgYWRkcl9sZW47IGkgPj0gMDsgaS0t KSB7CiAgICAgICAgICAgICAgICBpbnQgZGF0YXZhbCA9IChyZWFkX2NtZCAmICgxIDw8IGkpKSA/ IDB4MDIgOiAwOwogICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAo KHZvaWQgKikoZWVfYWRkcikpID0gKCgweDgwIHwgMHgwOCkgfCBkYXRhdmFsKSk7CiAgICAgICAg ICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh2b2lkICopKGVlX2FkZHIpKSk7 CiAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopICgodm9pZCAqKShl ZV9hZGRyKSkgPSAoKDB4ODAgfCAweDA4KSB8IGRhdGF2YWwgfCAweDA0KSk7CiAgICAgICAgICAg ICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh2b2lkICopKGVlX2FkZHIpKSk7CiAg ICAgICAgfQogICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKCh2b2lkICopKGVl X2FkZHIpKSA9ICgoMHg4MCB8IDB4MDgpKSk7CiAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQg aW50ICopICgodm9pZCAqKShlZV9hZGRyKSkpOwoKICAgICAgICBmb3IgKGkgPSAxNjsgaSA+IDA7 IGktLSkgewogICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoKHZv aWQgKikoZWVfYWRkcikpID0gKCgweDgwIHwgMHgwOCkgfCAweDA0KSk7CiAgICAgICAgICAgICAg ICAoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh2b2lkICopKGVlX2FkZHIpKSk7CiAgICAg ICAgICAgICAgICByZXR2YWwgPQogICAgICAgICAgICAgICAgICAgIChyZXR2YWwgPDwgMSkgfCAo KCgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKCh2b2lkICopKGVlX2FkZHIpKSkgJiAweDAx KSA/IDEgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CiAgICAgICAg ICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopICgodm9pZCAqKShlZV9hZGRyKSkg PSAoKDB4ODAgfCAweDA4KSkpOwogICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQg aW50ICopICgodm9pZCAqKShlZV9hZGRyKSkpOwogICAgICAgIH0KCgogICAgICAgICgqKHZvbGF0 aWxlIHVuc2lnbmVkIGNoYXIgKikgKCh2b2lkICopKGVlX2FkZHIpKSA9ICh+MHgwOCkpOwogICAg ICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoKHZvaWQgKikoZWVfYWRkcikpKTsKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAg cmV0dXJuIHJldHZhbDsKfQojIDEyMDMgIjgxMzl0b28uYyIKc3RhdGljIGNoYXIgbWlpXzJfODEz OV9tYXBbOF0gPSB7CiAgICAgICAgQmFzaWNNb2RlQ3RybCwKICAgICAgICBCYXNpY01vZGVTdGF0 dXMsCiAgICAgICAgMCwKICAgICAgICAwLAogICAgICAgIE5XYXlBZHZlcnQsCiAgICAgICAgTldh eUxQQVIsCiAgICAgICAgTldheUV4cGFuc2lvbiwKICAgICAgICAwCn07CiMgMTIzNCAiODEzOXRv by5jIgpzdGF0aWMgaW50IG1kaW9fcmVhZCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBo eV9pZCwgaW50IGxvY2F0aW9uKQp7CiAgICAgICAgc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHAg PSBkZXYtPnByaXY7CiAgICAgICAgaW50IHJldHZhbCA9IDA7CgoKCgoKCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKCiAgICAgICAgaWYgKHBoeV9pZCA+IDMxKSB7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwogICAgICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uIDwgOCAmJiBtaWlfMl84MTM5X21h cFtsb2NhdGlvbl0gPwogICAgICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNo b3J0ICopICgodm9pZCAqKSh0cC0+bW1pb19hZGRyICsgbWlpXzJfODEzOV9tYXBbbG9jYXRpb25d KSkpIDogMDsKICAgICAgICB9CiMgMTI3NCAiODEzOXRvby5jIgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgIHJl dHVybiAocmV0dmFsID4+IDEpICYgMHhmZmZmOwp9CgoKc3RhdGljIHZvaWQgbWRpb193cml0ZSAo c3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwgaW50IGxvY2F0aW9uLAogICAgICAg ICAgICAgICAgICAgICAgICBpbnQgdmFsdWUpCnsKICAgICAgICBzdHJ1Y3QgcnRsODEzOV9wcml2 YXRlICp0cCA9IGRldi0+cHJpdjsKCgoKCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK ICAgICAgICBpZiAocGh5X2lkID4gMzEpIHsKICAgICAgICAgICAgICAgIHZvaWQgKmlvYWRkciA9 IHRwLT5tbWlvX2FkZHI7CiAgICAgICAgICAgICAgICBpZiAobG9jYXRpb24gPT0gMCkgewogICAg ICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopICgodm9pZCAq KShpb2FkZHIgKyAoQ2ZnOTM0NikpKSA9ICgoQ2ZnOTM0Nl9VbmxvY2spKSk7CiAgICAgICAgICAg ICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopICgodm9pZCAqKShpb2Fk ZHIgKyAoQmFzaWNNb2RlQ3RybCkpKSA9ICgodmFsdWUpKSk7CiAgICAgICAgICAgICAgICAgICAg ICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKCh2b2lkICopKGlvYWRkciArIChDZmc5 MzQ2KSkpID0gKChDZmc5MzQ2X0xvY2spKSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxv Y2F0aW9uIDwgOCAmJiBtaWlfMl84MTM5X21hcFtsb2NhdGlvbl0pCiAgICAgICAgICAgICAgICAg ICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopICgodm9pZCAqKShpb2FkZHIgKyAo bWlpXzJfODEzOV9tYXBbbG9jYXRpb25dKSkpID0gKCh2YWx1ZSkpKTsKICAgICAgICAgICAgICAg IHJldHVybjsKICAgICAgICB9CiMgMTMyMiAiODEzOXRvby5jIgp9CgoKc3RhdGljIGludCBydGw4 MTM5X29wZW4gKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCnsKICAgICAgICBzdHJ1Y3QgcnRsODEz OV9wcml2YXRlICp0cCA9IGRldi0+cHJpdjsKICAgICAgICBpbnQgcmV0dmFsOwoKCgoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICByZXR2YWwgPSByZXF1ZXN0X2lycSAoZGV2 LT5pcnEsIHJ0bDgxMzlfaW50ZXJydXB0LCAweDA0MDAwMDAwLCBkZXYtPm5hbWUsIGRldik7CiAg ICAgICAgaWYgKHJldHZhbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CiAgICAg ICAgfQoKICAgICAgICB0cC0+dHhfYnVmcyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHRwLT5wY2lf ZGV2LCAoMTUzNiAqIDQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJnRwLT50eF9idWZzX2RtYSk7CiAgICAgICAgdHAtPnJ4X3JpbmcgPSBwY2lfYWxsb2NfY29u c2lzdGVudCh0cC0+cGNpX2RldiwgKCg4MTkyIDw8IDIpICsgMTYgKyAyMDQ4KSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0cC0+cnhfcmluZ19kbWEpOwogICAg ICAgIGlmICh0cC0+dHhfYnVmcyA9PSAoKHZvaWQgKikwKSB8fCB0cC0+cnhfcmluZyA9PSAoKHZv aWQgKikwKSkgewogICAgICAgICAgICAgICAgZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CgogICAg ICAgICAgICAgICAgaWYgKHRwLT50eF9idWZzKQogICAgICAgICAgICAgICAgICAgICAgICBwY2lf ZnJlZV9jb25zaXN0ZW50KHRwLT5wY2lfZGV2LCAoMTUzNiAqIDQpLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwLT50eF9idWZzLCB0cC0+dHhfYnVmc19kbWEp OwogICAgICAgICAgICAgICAgaWYgKHRwLT5yeF9yaW5nKQogICAgICAgICAgICAgICAgICAgICAg ICBwY2lfZnJlZV9jb25zaXN0ZW50KHRwLT5wY2lfZGV2LCAoKDgxOTIgPDwgMikgKyAxNiArIDIw NDgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5yeF9y aW5nLCB0cC0+cnhfcmluZ19kbWEpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICByZXR1cm4gLTEyOwoKICAgICAg ICB9CgogICAgICAgIHRwLT5mdWxsX2R1cGxleCA9IHRwLT5kdXBsZXhfbG9jazsKICAgICAgICB0 cC0+dHhfZmxhZyA9ICgyNTYgPDwgMTEpICYgMHgwMDNmMDAwMDsKICAgICAgICB0cC0+dHdpc3Rp ZSA9IDE7CgogICAgICAgIHJ0bDgxMzlfaW5pdF9yaW5nIChkZXYpOwogICAgICAgIHJ0bDgxMzlf aHdfc3RhcnQgKGRldik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwoKCgoKCiAgICAgICAgdHAtPnRocl9waWQgPSBrZXJuZWxfdGhy ZWFkIChydGw4MTM5X3RocmVhZCwgZGV2LCAweDAwMDAwMjAwIHwgMHgwMDAwMDQwMCk7CiAgICAg ICAgaWYgKHRwLT50aHJfcGlkIDwgMCkKICAgICAgICAgICAgICAgIHByaW50ayAoIjw0PiIgIiVz OiB1bmFibGUgdG8gc3RhcnQga2VybmVsIHRocmVhZFxuIiwKICAgICAgICAgICAgICAgICAgICAg ICAgZGV2LT5uYW1lKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK ICAgICAgICByZXR1cm4gMDsKfQoKCnN0YXRpYyB2b2lkIHJ0bF9jaGVja19tZWRpYSAoc3RydWN0 IG5ldF9kZXZpY2UgKmRldikKewogICAgICAgIHN0cnVjdCBydGw4MTM5X3ByaXZhdGUgKnRwID0g ZGV2LT5wcml2OwoKICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgIGlmICh0cC0+ cGh5c1swXSA+PSAwKSB7CiAgICAgICAgICAgICAgICB1MTYgbWlpX3JlZzUgPSBtZGlvX3JlYWQo ZGV2LCB0cC0+cGh5c1swXSwgNSk7CiAgICAgICAgICAgICAgICBpZiAobWlpX3JlZzUgPT0gMHhm ZmZmKQogICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICBlbHNlIGlmICgo bWlpX3JlZzUgJiAweDAxMDApID09IDB4MDEwMAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8fCAobWlpX3JlZzUgJiAweDAwQzApID09IDB4MDA0MCkKICAgICAgICAgICAgICAgICAg ICAgICAgdHAtPmZ1bGxfZHVwbGV4ID0gMTsKCiAgICAgICAgICAgICAgICBwcmludGsgKCI8Nj4i IiVzOiBTZXR0aW5nICVzJXMtZHVwbGV4IGJhc2VkIG9uIgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICIgYXV0by1uZWdvdGlhdGVkIHBhcnRuZXIgYWJpbGl0eSAlNC40eC5cbiIsCiAg ICAgICAgICAgICAgICAgICAgICAgIGRldi0+bmFtZSwgbWlpX3JlZzUgPT0gMCA/ICIiIDoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWlpX3JlZzUgJiAweDAxODApID8gIjEwMG1i cHMgIiA6ICIxMG1icHMgIiwKICAgICAgICAgICAgICAgICAgICAgICAgdHAtPmZ1bGxfZHVwbGV4 ID8gImZ1bGwiIDogImhhbGYiLCBtaWlfcmVnNSk7CiAgICAgICAgfQp9CgoKc3RhdGljIHZvaWQg cnRsODEzOV9od19zdGFydCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKewogICAgICAgIHN0cnVj dCBydGw4MTM5X3ByaXZhdGUgKnRwID0gZGV2LT5wcml2OwogICAgICAgIHZvaWQgKmlvYWRkciA9 IHRwLT5tbWlvX2FkZHI7CiAgICAgICAgdTMyIGk7CiAgICAgICAgdTggdG1wOwoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgaWYgKHJ0bF9jaGlwX2luZm9bdHAtPmNoaXBz ZXRdLmZsYWdzICYgSGFzSGx0Q2xrKQogICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWdu ZWQgY2hhciAqKSAoKHZvaWQgKikoaW9hZGRyICsgKEhsdENsaykpKSA9ICgoJ1InKSkpOwoKICAg ICAgICBydGw4MTM5X2NoaXBfcmVzZXQgKGlvYWRkcik7CgoKICAgICAgICBkbyB7ICgqKHZvbGF0 aWxlIHVuc2lnbmVkIGNoYXIgKikgKCh2b2lkICopKGlvYWRkciArIChDZmc5MzQ2KSkpID0gKChD Zmc5MzQ2X1VubG9jaykpKTsgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoKHZvaWQgKiko aW9hZGRyICsgKENmZzkzNDYpKSkpOyB9IHdoaWxlICgwKTsKCiAgICAgICAgZG8geyAoKih2b2xh dGlsZSB1bnNpZ25lZCBpbnQgKikgKCh2b2lkICopKGlvYWRkciArIChNQUMwICsgMCkpKSA9ICgo KChfX3UzMikoKih1MzIgKikgKGRldi0+ZGV2X2FkZHIgKyAwKSkpKSkpOyAoKih2b2xhdGlsZSB1 bnNpZ25lZCBpbnQgKikgKCh2b2lkICopKGlvYWRkciArIChNQUMwICsgMCkpKSk7IH0gd2hpbGUg KDApOwogICAgICAgIGRvIHsgKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodm9pZCAqKShp b2FkZHIgKyAoTUFDMCArIDQpKSkgPSAoKCgoX191MzIpKCoodTMyICopIChkZXYtPmRldl9hZGRy ICsgNCkpKSkpKTsgKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodm9pZCAqKShpb2FkZHIg KyAoTUFDMCArIDQpKSkpOyB9IHdoaWxlICgwKTsKCgogICAgICAgICgqKHZvbGF0aWxlIHVuc2ln bmVkIGNoYXIgKikgKCh2b2lkICopKGlvYWRkciArIChDaGlwQ21kKSkpID0gKChDbWRSeEVuYiB8 IENtZFR4RW5iKSkpOwoKICAgICAgICB0cC0+cnhfY29uZmlnID0gcnRsODEzOV9yeF9jb25maWcg fCBBY2NlcHRCcm9hZGNhc3QgfCBBY2NlcHRNeVBoeXM7CiAgICAgICAgKCoodm9sYXRpbGUgdW5z aWduZWQgaW50ICopICgodm9pZCAqKShpb2FkZHIgKyAoUnhDb25maWcpKSkgPSAoKHRwLT5yeF9j b25maWcpKSk7CgoKICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh2b2lkICop KGlvYWRkciArIChUeENvbmZpZykpKSA9ICgoKDYgPDwgVHhETUFTaGlmdCkpKSk7CgogICAgICAg IHRwLT5jdXJfcnggPSAwOwoKICAgICAgICBydGxfY2hlY2tfbWVkaWEgKGRldik7CgogICAgICAg IGlmICh0cC0+Y2hpcHNldCA+PSBDSF84MTM5QikgewoKCgogICAgICAgICAgICAgICAgKCoodm9s YXRpbGUgdW5zaWduZWQgY2hhciAqKSAoKHZvaWQgKikoaW9hZGRyICsgKENvbmZpZzMpKSkgPSAo KCgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKCh2b2lkICopKGlvYWRkciArIChDb25maWcz KSkpKSAmIH5DZmczX01hZ2ljKSkpOwogICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIg KikgKCh2b2lkICopKGlvYWRkciArIChDZmc5MzQ2KSkpID0gKChDZmc5MzQ2X0xvY2spKSk7CgoK ICAgICAgICBkbyB7ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoKHZvaWQgKikoaW9hZGRy ICsgKFJ4QnVmKSkpID0gKCh0cC0+cnhfcmluZ19kbWEpKSk7ICgqKHZvbGF0aWxlIHVuc2lnbmVk IGludCAqKSAoKHZvaWQgKikoaW9hZGRyICsgKFJ4QnVmKSkpKTsgfSB3aGlsZSAoMCk7CgoKICAg ICAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQogICAgICAgICAgICAgICAgZG8geyAoKih2b2xh dGlsZSB1bnNpZ25lZCBpbnQgKikgKCh2b2lkICopKGlvYWRkciArIChUeEFkZHIwICsgKGkgKiA0 KSkpKSA9ICgodHAtPnR4X2J1ZnNfZG1hICsgKHRwLT50eF9idWZbaV0gLSB0cC0+dHhfYnVmcykp KSk7ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoKHZvaWQgKikoaW9hZGRyICsgKFR4QWRk cjAgKyAoaSAqIDQpKSkpKTsgfSB3aGlsZSAoMCk7CgogICAgICAgICgqKHZvbGF0aWxlIHVuc2ln bmVkIGludCAqKSAoKHZvaWQgKikoaW9hZGRyICsgKFJ4TWlzc2VkKSkpID0gKCgwKSkpOwoKICAg ICAgICBydGw4MTM5X3NldF9yeF9tb2RlIChkZXYpOwoKCiAgICAgICAgKCoodm9sYXRpbGUgdW5z aWduZWQgc2hvcnQgKikgKCh2b2lkICopKGlvYWRkciArIChNdWx0aUludHIpKSkgPSAoKCgqKHZv bGF0aWxlIHVuc2lnbmVkIHNob3J0ICopICgodm9pZCAqKShpb2FkZHIgKyAoTXVsdGlJbnRyKSkp KSAmIE11bHRpSW50ckNsZWFyKSkpOwoKCiAgICAgICAgdG1wID0gKCoodm9sYXRpbGUgdW5zaWdu ZWQgY2hhciAqKSAoKHZvaWQgKikoaW9hZGRyICsgKENoaXBDbWQpKSkpOwogICAgICAgIGlmICgo ISh0bXAgJiBDbWRSeEVuYikpIHx8ICghKHRtcCAmIENtZFR4RW5iKSkpCiAgICAgICAgICAgICAg ICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopICgodm9pZCAqKShpb2FkZHIgKyAoQ2hpcENt ZCkpKSA9ICgoQ21kUnhFbmIgfCBDbWRUeEVuYikpKTsKCgogICAgICAgICgqKHZvbGF0aWxlIHVu c2lnbmVkIHNob3J0ICopICgodm9pZCAqKShpb2FkZHIgKyAoSW50ck1hc2spKSkgPSAoKHJ0bDgx MzlfaW50cl9tYXNrKSkpOwoKICAgICAgICBuZXRpZl9zdGFydF9xdWV1ZSAoZGV2KTsKCiAgICAg ICAgICAgICAgICAgICAgICAgICAgOwp9CgoKCnN0YXRpYyB2b2lkIHJ0bDgxMzlfaW5pdF9yaW5n IChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQp7CiAgICAgICAgc3RydWN0IHJ0bDgxMzlfcHJpdmF0 ZSAqdHAgPSBkZXYtPnByaXY7CiAgICAgICAgaW50IGk7CgogICAgICAgICAgICAgICAgICAgICAg ICAgICA7CgogICAgICAgIHRwLT5jdXJfcnggPSAwOwogICAgICAgIHRwLT5jdXJfdHggPSAwOwog ICAgICAgIHRwLT5kaXJ0eV90eCA9IDA7CgogICAgICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKysp IHsKICAgICAgICAgICAgICAgIHRwLT50eF9pbmZvW2ldLnNrYiA9ICgodm9pZCAqKTApOwogICAg ICAgICAgICAgICAgdHAtPnR4X2luZm9baV0ubWFwcGluZyA9IDA7CiAgICAgICAgICAgICAgICB0 cC0+dHhfYnVmW2ldID0gJnRwLT50eF9idWZzW2kgKiAxNTM2XTsKICAgICAgICB9CgogICAgICAg ICAgICAgICAgICAgICAgICAgIDsKfQoKCgpzdGF0aWMgaW50IG5leHRfdGljayA9IDMgKiAxMDA7 CgoKc3RhdGljIGlubGluZSB2b2lkIHJ0bDgxMzlfdHVuZV90d2lzdGVyIChzdHJ1Y3QgbmV0X2Rl dmljZSAqZGV2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJ0bDgx MzlfcHJpdmF0ZSAqdHApIHt9CiMgMTYwMCAiODEzOXRvby5jIgpzdGF0aWMgaW5saW5lIHZvaWQg cnRsODEzOV90aHJlYWRfaXRlciAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHAsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmlvYWRkcikKewogICAgICAgIGludCBtaWlf cmVnNTsKCiAgICAgICAgbWlpX3JlZzUgPSBtZGlvX3JlYWQgKGRldiwgdHAtPnBoeXNbMF0sIDUp OwoKICAgICAgICBpZiAoIXRwLT5kdXBsZXhfbG9jayAmJiBtaWlfcmVnNSAhPSAweGZmZmYpIHsK ICAgICAgICAgICAgICAgIGludCBkdXBsZXggPSAobWlpX3JlZzUgJiAweDAxMDApCiAgICAgICAg ICAgICAgICAgICAgfHwgKG1paV9yZWc1ICYgMHgwMUMwKSA9PSAweDAwNDA7CiAgICAgICAgICAg ICAgICBpZiAodHAtPmZ1bGxfZHVwbGV4ICE9IGR1cGxleCkgewogICAgICAgICAgICAgICAgICAg ICAgICB0cC0+ZnVsbF9kdXBsZXggPSBkdXBsZXg7CgogICAgICAgICAgICAgICAgICAgICAgICBp ZiAobWlpX3JlZzUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsgKCI8 Nj4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXM6IFNldHRpbmcg JXMtZHVwbGV4IGJhc2VkIG9uIE1JSSAjJWQgbGluayIKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICIgcGFydG5lciBhYmlsaXR5IG9mICU0LjR4LlxuIiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+bmFtZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5mdWxsX2R1cGxleCA/ICJmdWxsIiA6ICJoYWxm IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5waHlzWzBdLCBt aWlfcmVnNSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcHJpbnRrKCI8Nj4iIiVzOiBtZWRpYSBpcyB1bmNvbm5lY3RlZCwg bGluayBkb3duLCBvciBpbmNvbXBhdGlibGUgY29ubmVjdGlvblxuIiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lKTsKICAgICAgICAgICAgICAgICAgICAg ICAgfQoKCgoKCiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBuZXh0X3RpY2sg PSAxMDAgKiA2MDsKCiAgICAgICAgcnRsODEzOV90dW5lX3R3aXN0ZXIgKGRldiwgdHApOwoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CgoKfQoKCnN0YXRpYyBpbnQgcnRsODEzOV90aHJlYWQgKHZvaWQgKmRh dGEpCnsKICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGF0YTsKICAgICAgICBzdHJ1 Y3QgcnRsODEzOV9wcml2YXRlICp0cCA9IGRldi0+cHJpdjsKICAgICAgICB1bnNpZ25lZCBsb25n IHRpbWVvdXQ7CgogICAgICAgIGRhZW1vbml6ZSAoKTsKICAgICAgICByZXBhcmVudF90b19pbml0 KCk7CiAgICAgICAgZG8geyBfX2FzbV9fIF9fdm9sYXRpbGVfXygiY2xpIjogOiA6Im1lbW9yeSIp OyBzcGluX2xvY2soJmdldF9jdXJyZW50KCktPnNpZ21hc2tfbG9jayk7IH0gd2hpbGUgKDApOwog ICAgICAgIHNpZ2VtcHR5c2V0KCZnZXRfY3VycmVudCgpLT5ibG9ja2VkKTsKICAgICAgICByZWNh bGNfc2lncGVuZGluZyhnZXRfY3VycmVudCgpKTsKICAgICAgICBkbyB7IHNwaW5fdW5sb2NrKCZn ZXRfY3VycmVudCgpLT5zaWdtYXNrX2xvY2spOyBfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RpIjog OiA6Im1lbW9yeSIpOyB9IHdoaWxlICgwKTsKCiAgICAgICAgc3RybmNweSAoZ2V0X2N1cnJlbnQo KS0+Y29tbSwgZGV2LT5uYW1lLCBzaXplb2YoZ2V0X2N1cnJlbnQoKS0+Y29tbSkgLSAxKTsKICAg ICAgICBnZXRfY3VycmVudCgpLT5jb21tW3NpemVvZihnZXRfY3VycmVudCgpLT5jb21tKSAtIDFd ID0gJ1wwJzsKCiAgICAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBu ZXh0X3RpY2s7CiAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRp bWVvdXQgPSBpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQgKCZ0cC0+dGhyX3dhaXQsIHRp bWVvdXQpOwogICAgICAgICAgICAgICAgfSB3aGlsZSAoIXNpZ25hbF9wZW5kaW5nIChnZXRfY3Vy cmVudCgpKSAmJiAodGltZW91dCA+IDApKTsKCiAgICAgICAgICAgICAgICBpZiAoc2lnbmFsX3Bl bmRpbmcgKGdldF9jdXJyZW50KCkpKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAg ICAgICAgICAgICAgICBydG5sX2xvY2sgKCk7CiAgICAgICAgICAgICAgICBydGw4MTM5X3RocmVh ZF9pdGVyIChkZXYsIHRwLCB0cC0+bW1pb19hZGRyKTsKICAgICAgICAgICAgICAgIHJ0bmxfdW5s b2NrICgpOwogICAgICAgIH0KCiAgICAgICAgY29tcGxldGVfYW5kX2V4aXQgKCZ0cC0+dGhyX2V4 aXRlZCwgMCk7Cn0KCgpzdGF0aWMgdm9pZCBydGw4MTM5X3R4X2NsZWFyIChzdHJ1Y3QgcnRsODEz OV9wcml2YXRlICp0cCkKewogICAgICAgIGludCBpOwoKICAgICAgICB0cC0+Y3VyX3R4ID0gMDsK ICAgICAgICB0cC0+ZGlydHlfdHggPSAwOwoKCiAgICAgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkr KykgewogICAgICAgICAgICAgICAgc3RydWN0IHJpbmdfaW5mbyAqcnAgPSAmdHAtPnR4X2luZm9b aV07CiAgICAgICAgICAgICAgICBpZiAocnAtPm1hcHBpbmcgIT0gMCkgewogICAgICAgICAgICAg ICAgICAgICAgICBwY2lfdW5tYXBfc2luZ2xlICh0cC0+cGNpX2RldiwgcnAtPm1hcHBpbmcsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJwLT5za2ItPmxlbiwgMSk7 CiAgICAgICAgICAgICAgICAgICAgICAgIHJwLT5tYXBwaW5nID0gMDsKICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICAgIGlmIChycC0+c2tiKSB7CiAgICAgICAgICAgICAgICAgICAgICAg IGtmcmVlX3NrYihycC0+c2tiKTsKICAgICAgICAgICAgICAgICAgICAgICAgcnAtPnNrYiA9ICgo dm9pZCAqKTApOwogICAgICAgICAgICAgICAgICAgICAgICB0cC0+c3RhdHMudHhfZHJvcHBlZCsr OwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KfQoKCnN0YXRpYyB2b2lkIHJ0bDgxMzlfdHhf dGltZW91dCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKewogICAgICAgIHN0cnVjdCBydGw4MTM5 X3ByaXZhdGUgKnRwID0gZGV2LT5wcml2OwogICAgICAgIHZvaWQgKmlvYWRkciA9IHRwLT5tbWlv X2FkZHI7CiAgICAgICAgaW50IGk7CiAgICAgICAgdTggdG1wODsKICAgICAgICB1bnNpZ25lZCBs b25nIGZsYWdzOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgoK ICAgICAgICB0cC0+eHN0YXRzLnR4X3RpbWVvdXRzKys7CgoKICAgICAgICB0bXA4ID0gKCoodm9s YXRpbGUgdW5zaWduZWQgY2hhciAqKSAoKHZvaWQgKikoaW9hZGRyICsgKENoaXBDbWQpKSkpOwog ICAgICAgIGlmICh0bXA4ICYgQ21kVHhFbmIpCiAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1 bnNpZ25lZCBjaGFyICopICgodm9pZCAqKShpb2FkZHIgKyAoQ2hpcENtZCkpKSA9ICgoQ21kUnhF bmIpKSk7CgoKICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSAoKHZvaWQgKiko aW9hZGRyICsgKEludHJNYXNrKSkpID0gKCgweDAwMDApKSk7CgoKICAgICAgICBwcmludGsgKCI8 Nz4iICIlczogVHggcXVldWUgc3RhcnQgZW50cnkgJWxkICBkaXJ0eSBlbnRyeSAlbGQuXG4iLAog ICAgICAgICAgICAgICAgZGV2LT5uYW1lLCB0cC0+Y3VyX3R4LCB0cC0+ZGlydHlfdHgpOwogICAg ICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspCiAgICAgICAgICAgICAgICBwcmludGsgKCI8Nz4i ICIlczogIFR4IGRlc2NyaXB0b3IgJWQgaXMgJTguOGx4LiVzXG4iLAogICAgICAgICAgICAgICAg ICAgICAgICBkZXYtPm5hbWUsIGksICgodW5zaWduZWQgbG9uZykgKCoodm9sYXRpbGUgdW5zaWdu ZWQgaW50ICopICgodm9pZCAqKShpb2FkZHIgKyAoVHhTdGF0dXMwICsgKGkgKiA0KSkpKSkpLAog ICAgICAgICAgICAgICAgICAgICAgICBpID09IHRwLT5kaXJ0eV90eCAlIDQgPwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICIgKHF1ZXVlIGhlYWQpIiA6ICIiKTsKCgogICAgICAgIGRv IHsgX19hc21fXyBfX3ZvbGF0aWxlX18oInB1c2hmbCA7IHBvcGwgJTAgOyBjbGkiOiI9ZyIgKGZs YWdzKTogOiJtZW1vcnkiKTsgc3Bpbl9sb2NrKCZ0cC0+bG9jayk7IH0gd2hpbGUgKDApOwogICAg ICAgIHJ0bDgxMzlfdHhfY2xlYXIgKHRwKTsKICAgICAgICBkbyB7IHNwaW5fdW5sb2NrKCZ0cC0+ bG9jayk7IF9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNobCAlMCA7IHBvcGZsIjogOiJnIiAoZmxh Z3MpOiJtZW1vcnkiLCAiY2MiKTsgfSB3aGlsZSAoMCk7CgoKICAgICAgICBydGw4MTM5X2h3X3N0 YXJ0IChkZXYpOwoKICAgICAgICBuZXRpZl93YWtlX3F1ZXVlIChkZXYpOwp9CgoKc3RhdGljIGlu dCBydGw4MTM5X3N0YXJ0X3htaXQgKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2 aWNlICpkZXYpCnsKICAgICAgICBzdHJ1Y3QgcnRsODEzOV9wcml2YXRlICp0cCA9IGRldi0+cHJp djsKICAgICAgICB2b2lkICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOwogICAgICAgIHVuc2lnbmVk IGludCBlbnRyeTsKICAgICAgICB1MzIgZG1hX2FkZHI7CgogICAgICAgIF9fYXNtX18gX192b2xh dGlsZV9fICgibG9jazsgYWRkbCAkMCwwKCUlZXNwKSI6IDogOiJtZW1vcnkiKTsKCgogICAgICAg IGVudHJ5ID0gdHAtPmN1cl90eCAlIDQ7CgogICAgICAgIGlmKCEodHAtPnR4X2luZm9bZW50cnld LnNrYiA9PSAoKHZvaWQgKikwKSkpIHsgcHJpbnRrKCAiQXNzZXJ0aW9uIGZhaWxlZCEgJXMsJXMs JXMsbGluZT0lZFxuIiwgInRwLT50eF9pbmZvW2VudHJ5XS5za2IgPT0gTlVMTCIsIjgxMzl0b28u YyIsX19GVU5DVElPTl9fLDE3NjUpOyB9OwogICAgICAgIGlmKCEodHAtPnR4X2luZm9bZW50cnld Lm1hcHBpbmcgPT0gMCkpIHsgcHJpbnRrKCAiQXNzZXJ0aW9uIGZhaWxlZCEgJXMsJXMsJXMsbGlu ZT0lZFxuIiwgInRwLT50eF9pbmZvW2VudHJ5XS5tYXBwaW5nID09IDAiLCI4MTM5dG9vLmMiLF9f RlVOQ1RJT05fXywxNzY2KTsgfTsKCiAgICAgICAgdHAtPnR4X2luZm9bZW50cnldLnNrYiA9IHNr YjsKICAgICAgICBpZiAoICEoKHVuc2lnbmVkIGxvbmcpc2tiLT5kYXRhICYgMykgJiYgKChzdHJ1 Y3Qgc2tiX3NoYXJlZF9pbmZvICopKChza2IpLT5lbmQpKS0+bnJfZnJhZ3MgPT0gMCAmJgogICAg ICAgICAgICAgICAgICAgICAgICBza2ItPmlwX3N1bW1lZCAhPSAxKSB7CiAgICAgICAgICAgICAg ICB0cC0+eHN0YXRzLnR4X2J1Zl9tYXBwZWQrKzsKICAgICAgICAgICAgICAgIHRwLT50eF9pbmZv W2VudHJ5XS5tYXBwaW5nID0KICAgICAgICAgICAgICAgICAgICBwY2lfbWFwX3NpbmdsZSAodHAt PnBjaV9kZXYsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDEpOwogICAgICAgICAgICAgICAgZG1hX2FkZHIgPSB0cC0+dHhfaW5mb1tlbnRy eV0ubWFwcGluZzsKICAgICAgICB9IGVsc2UgaWYgKHNrYi0+bGVuIDwgMTUzNikgewogICAgICAg ICAgICAgICAgc2tiX2NvcHlfYW5kX2NzdW1fZGV2KHNrYiwgdHAtPnR4X2J1ZltlbnRyeV0pOwog ICAgICAgICAgICAgICAgZG1hX2FkZHIgPSB0cC0+dHhfYnVmc19kbWEgKyAodHAtPnR4X2J1Zltl bnRyeV0gLSB0cC0+dHhfYnVmcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGtm cmVlX3NrYihza2IpOwogICAgICAgICAgICAgICAgdHAtPnR4X2luZm9bZW50cnldLnNrYiA9ICgo dm9pZCAqKTApOwogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQoKICAgICAgICBk byB7IF9fYXNtX18gX192b2xhdGlsZV9fKCJjbGkiOiA6IDoibWVtb3J5Iik7IHNwaW5fbG9jaygm dHAtPmxvY2spOyB9IHdoaWxlICgwKTsKICAgICAgICBkbyB7ICgqKHZvbGF0aWxlIHVuc2lnbmVk IGludCAqKSAoKHZvaWQgKikoaW9hZGRyICsgKFR4QWRkcjAgKyAoZW50cnkgKiA0KSkpKSA9ICgo ZG1hX2FkZHIpKSk7ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoKHZvaWQgKikoaW9hZGRy ICsgKFR4QWRkcjAgKyAoZW50cnkgKiA0KSkpKSk7IH0gd2hpbGUgKDApOwogICAgICAgIGRvIHsg KCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodm9pZCAqKShpb2FkZHIgKyAoVHhTdGF0dXMw ICsgKGVudHJ5ICogc2l6ZW9mICh1MzIpKSkpKSA9ICgodHAtPnR4X2ZsYWcgfCAoc2tiLT5sZW4g Pj0gNjAgPyBza2ItPmxlbiA6IDYwKSkpKTsgKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgo dm9pZCAqKShpb2FkZHIgKyAoVHhTdGF0dXMwICsgKGVudHJ5ICogc2l6ZW9mICh1MzIpKSkpKSk7 IH0gd2hpbGUgKDApOwoKCiAgICAgICAgZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CgogICAg ICAgIHRwLT5jdXJfdHgrKzsKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxvY2s7IGFk ZGwgJDAsMCglJWVzcCkiOiA6IDoibWVtb3J5Iik7CiAgICAgICAgaWYgKCh0cC0+Y3VyX3R4IC0g NCkgPT0gdHAtPmRpcnR5X3R4KQogICAgICAgICAgICAgICAgbmV0aWZfc3RvcF9xdWV1ZSAoZGV2 KTsKICAgICAgICBkbyB7IHNwaW5fdW5sb2NrKCZ0cC0+bG9jayk7IF9fYXNtX18gX192b2xhdGls ZV9fKCJzdGkiOiA6IDoibWVtb3J5Iik7IH0gd2hpbGUgKDApOwoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgIHJldHVybiAw Owp9CgoKc3RhdGljIHZvaWQgcnRsODEzOV90eF9pbnRlcnJ1cHQgKHN0cnVjdCBuZXRfZGV2aWNl ICpkZXYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcnRsODEzOV9w cml2YXRlICp0cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmlvYWRk cikKewogICAgICAgIHVuc2lnbmVkIGxvbmcgZGlydHlfdHgsIHR4X2xlZnQ7CgogICAgICAgIGlm KCEoZGV2ICE9ICgodm9pZCAqKTApKSkgeyBwcmludGsoICJBc3NlcnRpb24gZmFpbGVkISAlcywl cywlcyxsaW5lPSVkXG4iLCAiZGV2ICE9IE5VTEwiLCI4MTM5dG9vLmMiLF9fRlVOQ1RJT05fXywx ODExKTsgfTsKICAgICAgICBpZighKHRwICE9ICgodm9pZCAqKTApKSkgeyBwcmludGsoICJBc3Nl cnRpb24gZmFpbGVkISAlcywlcywlcyxsaW5lPSVkXG4iLCAidHAgIT0gTlVMTCIsIjgxMzl0b28u YyIsX19GVU5DVElPTl9fLDE4MTIpOyB9OwogICAgICAgIGlmKCEoaW9hZGRyICE9ICgodm9pZCAq KTApKSkgeyBwcmludGsoICJBc3NlcnRpb24gZmFpbGVkISAlcywlcywlcyxsaW5lPSVkXG4iLCAi aW9hZGRyICE9IE5VTEwiLCI4MTM5dG9vLmMiLF9fRlVOQ1RJT05fXywxODEzKTsgfTsKCiAgICAg ICAgZGlydHlfdHggPSB0cC0+ZGlydHlfdHg7CiAgICAgICAgdHhfbGVmdCA9IHRwLT5jdXJfdHgg LSBkaXJ0eV90eDsKICAgICAgICB3aGlsZSAodHhfbGVmdCA+IDApIHsKICAgICAgICAgICAgICAg IGludCBlbnRyeSA9IGRpcnR5X3R4ICUgNDsKICAgICAgICAgICAgICAgIGludCB0eHN0YXR1czsK CiAgICAgICAgICAgICAgICB0eHN0YXR1cyA9ICgodW5zaWduZWQgbG9uZykgKCoodm9sYXRpbGUg dW5zaWduZWQgaW50ICopICgodm9pZCAqKShpb2FkZHIgKyAoVHhTdGF0dXMwICsgKGVudHJ5ICog c2l6ZW9mICh1MzIpKSkpKSkpOwoKICAgICAgICAgICAgICAgIGlmICghKHR4c3RhdHVzICYgKFR4 U3RhdE9LIHwgVHhVbmRlcnJ1biB8IFR4QWJvcnRlZCkpKQogICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKCgogICAgICAgICAgICAgICAgaWYgKHR4c3RhdHVzICYgKFR4T3V0T2ZXaW5kb3cg fCBUeEFib3J0ZWQpKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5zdGF0cy50eF9lcnJv cnMrKzsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR4c3RhdHVzICYgVHhBYm9ydGVkKSB7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHAtPnN0YXRzLnR4X2Fib3J0ZWRfZXJy b3JzKys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8geyAoKih2b2xhdGlsZSB1 bnNpZ25lZCBpbnQgKikgKCh2b2lkICopKGlvYWRkciArIChUeENvbmZpZykpKSA9ICgoVHhDbGVh ckFidCB8ICg2IDw8IFR4RE1BU2hpZnQpKSkpOyAoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikg KCh2b2lkICopKGlvYWRkciArIChUeENvbmZpZykpKSk7IH0gd2hpbGUgKDApOwogICAgICAgICAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eHN0YXR1cyAmIFR4 Q2Fycmllckxvc3QpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHAtPnN0YXRzLnR4 X2NhcnJpZXJfZXJyb3JzKys7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eHN0YXR1cyAm IFR4T3V0T2ZXaW5kb3cpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHAtPnN0YXRz LnR4X3dpbmRvd19lcnJvcnMrKzsKCgoKCiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg ICAgICAgICAgICAgICAgICBpZiAodHhzdGF0dXMgJiBUeFVuZGVycnVuKSB7CgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlmICh0cC0+dHhfZmxhZyA8IDB4MDAzMDAwMDApCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cC0+dHhfZmxhZyArPSAweDAwMDIw MDAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5zdGF0cy50eF9maWZvX2Vy cm9ycysrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg IHRwLT5zdGF0cy5jb2xsaXNpb25zICs9ICh0eHN0YXR1cyA+PiAyNCkgJiAxNTsKICAgICAgICAg ICAgICAgICAgICAgICAgdHAtPnN0YXRzLnR4X2J5dGVzICs9IHR4c3RhdHVzICYgMHg3ZmY7CiAg ICAgICAgICAgICAgICAgICAgICAgIHRwLT5zdGF0cy50eF9wYWNrZXRzKys7CiAgICAgICAgICAg ICAgICB9CgoKICAgICAgICAgICAgICAgIGlmICh0cC0+dHhfaW5mb1tlbnRyeV0ubWFwcGluZyAh PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBjaV91bm1hcF9zaW5nbGUodHAtPnBjaV9k ZXYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHAtPnR4X2luZm9b ZW50cnldLm1hcHBpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dHAtPnR4X2luZm9bZW50cnldLnNrYi0+bGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDEpOwogICAgICAgICAgICAgICAgICAgICAgICB0cC0+dHhfaW5mb1tlbnRy eV0ubWFwcGluZyA9IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkZXZfa2Zy ZWVfc2tiX2lycSAodHAtPnR4X2luZm9bZW50cnldLnNrYik7CiAgICAgICAgICAgICAgICB0cC0+ dHhfaW5mb1tlbnRyeV0uc2tiID0gKCh2b2lkICopMCk7CgogICAgICAgICAgICAgICAgZGlydHlf dHgrKzsKICAgICAgICAgICAgICAgIHR4X2xlZnQtLTsKICAgICAgICB9CgoKICAgICAgICBpZiAo dHAtPmN1cl90eCAtIGRpcnR5X3R4ID4gNCkgewogICAgICAgICAgICAgICAgcHJpbnRrICgiPDM+ IiAiJXM6IE91dC1vZi1zeW5jIGRpcnR5IHBvaW50ZXIsICVsZCB2cy4gJWxkLlxuIiwKICAgICAg ICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lLCBkaXJ0eV90eCwgdHAtPmN1cl90eCk7CiAgICAg ICAgICAgICAgICBkaXJ0eV90eCArPSA0OwogICAgICAgIH0KCgoKICAgICAgICBpZiAodHAtPmRp cnR5X3R4ICE9IGRpcnR5X3R4KSB7CiAgICAgICAgICAgICAgICB0cC0+ZGlydHlfdHggPSBkaXJ0 eV90eDsKICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgibG9jazsgYWRkbCAk MCwwKCUlZXNwKSI6IDogOiJtZW1vcnkiKTsKICAgICAgICAgICAgICAgIGlmIChuZXRpZl9xdWV1 ZV9zdG9wcGVkIChkZXYpKQogICAgICAgICAgICAgICAgICAgICAgICBuZXRpZl93YWtlX3F1ZXVl IChkZXYpOwogICAgICAgIH0KfQoKCgpzdGF0aWMgdm9pZCBydGw4MTM5X3J4X2VyciAodTMyIHJ4 X3N0YXR1cywgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBydGw4MTM5X3ByaXZhdGUgKnRwLCB2b2lkICppb2FkZHIpCnsKICAgICAgICB1 OCB0bXA4OwogICAgICAgIGludCB0bXBfd29yazsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOwoKICAgICAgICBpZiAocnhfc3RhdHVzICYgUnhUb29Mb25nKSB7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICB9CiAg ICAgICAgdHAtPnN0YXRzLnJ4X2Vycm9ycysrOwogICAgICAgIGlmIChyeF9zdGF0dXMgJiAoUnhC YWRTeW1ib2wgfCBSeEJhZEFsaWduKSkKICAgICAgICAgICAgICAgIHRwLT5zdGF0cy5yeF9mcmFt ZV9lcnJvcnMrKzsKICAgICAgICBpZiAocnhfc3RhdHVzICYgKFJ4UnVudCB8IFJ4VG9vTG9uZykp CiAgICAgICAgICAgICAgICB0cC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogICAgICAgIGlm IChyeF9zdGF0dXMgJiBSeENSQ0VycikKICAgICAgICAgICAgICAgIHRwLT5zdGF0cy5yeF9jcmNf ZXJyb3JzKys7CgoKCgogICAgICAgIGRvIHsgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAo KHZvaWQgKikoaW9hZGRyICsgKENoaXBDbWQpKSkgPSAoKENtZFR4RW5iKSkpOyAoKih2b2xhdGls ZSB1bnNpZ25lZCBjaGFyICopICgodm9pZCAqKShpb2FkZHIgKyAoQ2hpcENtZCkpKSk7IH0gd2hp bGUgKDApOwogICAgICAgIHRtcF93b3JrID0gMjAwOwogICAgICAgIHdoaWxlICgtLXRtcF93b3Jr ID4gMCkgewogICAgICAgICAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKDEpID8gKCgxKSA+ IDIwMDAwID8gX19iYWRfdWRlbGF5KCkgOiBfX2NvbnN0X3VkZWxheSgoMSkgKiAweDEwYzZ1bCkp IDogX191ZGVsYXkoMSkpOwogICAgICAgICAgICAgICAgdG1wOCA9ICgqKHZvbGF0aWxlIHVuc2ln bmVkIGNoYXIgKikgKCh2b2lkICopKGlvYWRkciArIChDaGlwQ21kKSkpKTsKICAgICAgICAgICAg ICAgIGlmICghKHRtcDggJiBDbWRSeEVuYikpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OwogICAgICAgIH0KICAgICAgICBpZiAodG1wX3dvcmsgPD0gMCkKICAgICAgICAgICAgICAgIHBy aW50ayAoIjw0PiIgIjgxMzl0b28iICI6ICIgInJ4IHN0b3Agd2FpdCB0b28gbG9uZ1xuIik7Cgog ICAgICAgIHRtcF93b3JrID0gMjAwOwogICAgICAgIHdoaWxlICgtLXRtcF93b3JrID4gMCkgewog ICAgICAgICAgICAgICAgZG8geyAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopICgodm9pZCAq KShpb2FkZHIgKyAoQ2hpcENtZCkpKSA9ICgoQ21kUnhFbmIgfCBDbWRUeEVuYikpKTsgKCoodm9s YXRpbGUgdW5zaWduZWQgY2hhciAqKSAoKHZvaWQgKikoaW9hZGRyICsgKENoaXBDbWQpKSkpOyB9 IHdoaWxlICgwKTsKICAgICAgICAgICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCgxKSA/ICgo MSkgPiAyMDAwMCA/IF9fYmFkX3VkZWxheSgpIDogX19jb25zdF91ZGVsYXkoKDEpICogMHgxMGM2 dWwpKSA6IF9fdWRlbGF5KDEpKTsKICAgICAgICAgICAgICAgIHRtcDggPSAoKih2b2xhdGlsZSB1 bnNpZ25lZCBjaGFyICopICgodm9pZCAqKShpb2FkZHIgKyAoQ2hpcENtZCkpKSk7CiAgICAgICAg ICAgICAgICBpZiAoKHRtcDggJiBDbWRSeEVuYikgJiYgKHRtcDggJiBDbWRUeEVuYikpCiAgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBpZiAodG1wX3dvcmsg PD0gMCkKICAgICAgICAgICAgICAgIHByaW50ayAoIjw0PiIgIjgxMzl0b28iICI6ICIgInR4L3J4 IGVuYWJsZSB3YWl0IHRvbyBsb25nXG4iKTsKCgogICAgICAgIGRvIHsgKCoodm9sYXRpbGUgdW5z aWduZWQgY2hhciAqKSAoKHZvaWQgKikoaW9hZGRyICsgKENmZzkzNDYpKSkgPSAoKENmZzkzNDZf VW5sb2NrKSkpOyAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopICgodm9pZCAqKShpb2FkZHIg KyAoQ2ZnOTM0NikpKSk7IH0gd2hpbGUgKDApOwoKICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25l ZCBjaGFyICopICgodm9pZCAqKShpb2FkZHIgKyAoQ2hpcENtZCkpKSA9ICgoQ21kUnhFbmIgfCBD bWRUeEVuYikpKTsKCiAgICAgICAgdHAtPnJ4X2NvbmZpZyA9IHJ0bDgxMzlfcnhfY29uZmlnIHwg QWNjZXB0QnJvYWRjYXN0IHwgQWNjZXB0TXlQaHlzOwogICAgICAgICgqKHZvbGF0aWxlIHVuc2ln bmVkIGludCAqKSAoKHZvaWQgKikoaW9hZGRyICsgKFJ4Q29uZmlnKSkpID0gKCh0cC0+cnhfY29u ZmlnKSkpOwogICAgICAgIHRwLT5jdXJfcnggPSAwOwoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAq KSAoKHZvaWQgKikoaW9hZGRyICsgKENmZzkzNDYpKSkgPSAoKENmZzkzNDZfTG9jaykpKTsKCgog ICAgICAgIGRvIHsgKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodm9pZCAqKShpb2FkZHIg KyAoUnhCdWYpKSkgPSAoKHRwLT5yeF9yaW5nX2RtYSkpKTsgKCoodm9sYXRpbGUgdW5zaWduZWQg aW50ICopICgodm9pZCAqKShpb2FkZHIgKyAoUnhCdWYpKSkpOyB9IHdoaWxlICgwKTsKCgogICAg ICAgIF9fc2V0X3J4X21vZGUgKGRldik7Cn0KCnN0YXRpYyB2b2lkIHJ0bDgxMzlfcnhfaW50ZXJy dXB0IChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHAsIHZvaWQgKmlvYWRkcikKewogICAgICAg IHVuc2lnbmVkIGNoYXIgKnJ4X3Jpbmc7CiAgICAgICAgdTE2IGN1cl9yeDsKCiAgICAgICAgaWYo IShkZXYgIT0gKCh2b2lkICopMCkpKSB7IHByaW50ayggIkFzc2VydGlvbiBmYWlsZWQhICVzLCVz LCVzLGxpbmU9JWRcbiIsICJkZXYgIT0gTlVMTCIsIjgxMzl0b28uYyIsX19GVU5DVElPTl9fLDE5 NjMpOyB9OwogICAgICAgIGlmKCEodHAgIT0gKCh2b2lkICopMCkpKSB7IHByaW50ayggIkFzc2Vy dGlvbiBmYWlsZWQhICVzLCVzLCVzLGxpbmU9JWRcbiIsICJ0cCAhPSBOVUxMIiwiODEzOXRvby5j IixfX0ZVTkNUSU9OX18sMTk2NCk7IH07CiAgICAgICAgaWYoIShpb2FkZHIgIT0gKCh2b2lkICop MCkpKSB7IHByaW50ayggIkFzc2VydGlvbiBmYWlsZWQhICVzLCVzLCVzLGxpbmU9JWRcbiIsICJp b2FkZHIgIT0gTlVMTCIsIjgxMzl0b28uYyIsX19GVU5DVElPTl9fLDE5NjUpOyB9OwoKICAgICAg ICByeF9yaW5nID0gdHAtPnJ4X3Jpbmc7CiAgICAgICAgY3VyX3J4ID0gdHAtPmN1cl9yeDsKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoK CiAgICAgICAgd2hpbGUgKCgoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopICgodm9pZCAqKShp b2FkZHIgKyAoQ2hpcENtZCkpKSkgJiBSeEJ1ZkVtcHR5KSA9PSAwKSB7CiAgICAgICAgICAgICAg ICBpbnQgcmluZ19vZmZzZXQgPSBjdXJfcnggJSAoODE5MiA8PCAyKTsKICAgICAgICAgICAgICAg IHUzMiByeF9zdGF0dXM7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcnhfc2l6ZTsKICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwa3Rfc2l6ZTsKICAgICAgICAgICAgICAgIHN0cnVj dCBza19idWZmICpza2I7CgogICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJs b2NrOyBhZGRsICQwLDAoJSVlc3ApIjogOiA6Im1lbW9yeSIpOwoKCiAgICAgICAgICAgICAgICBy eF9zdGF0dXMgPSAoKF9fdTMyKSgqKHUzMiAqKSAocnhfcmluZyArIHJpbmdfb2Zmc2V0KSkpOwog ICAgICAgICAgICAgICAgcnhfc2l6ZSA9IHJ4X3N0YXR1cyA+PiAxNjsKICAgICAgICAgICAgICAg IHBrdF9zaXplID0gcnhfc2l6ZSAtIDQ7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKIyAyMDAzICI4MTM5dG9vLmMiCiAgICAgICAgICAgICAgICBpZiAocnhfc2l6 ZSA9PSAweGZmZjApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdHAtPnhzdGF0cy5lYXJseV9y eCsrOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KCgoK CgoKICAgICAgICAgICAgICAgIGlmICgocnhfc2l6ZSA+ICgxNTM2ICs0KSkgfHwKICAgICAgICAg ICAgICAgICAgICAocnhfc2l6ZSA8IDgpIHx8CiAgICAgICAgICAgICAgICAgICAgKCEocnhfc3Rh dHVzICYgUnhTdGF0dXNPSykpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJ0bDgxMzlfcnhf ZXJyIChyeF9zdGF0dXMsIGRldiwgdHAsIGlvYWRkcik7CiAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybjsKICAgICAgICAgICAgICAgIH0KIyAyMDI5ICI4MTM5dG9vLmMiCiAgICAgICAgICAg ICAgICBza2IgPSBkZXZfYWxsb2Nfc2tiIChwa3Rfc2l6ZSArIDIpOwogICAgICAgICAgICAgICAg aWYgKHNrYikgewogICAgICAgICAgICAgICAgICAgICAgICBza2ItPmRldiA9IGRldjsKICAgICAg ICAgICAgICAgICAgICAgICAgc2tiX3Jlc2VydmUgKHNrYiwgMik7CgogICAgICAgICAgICAgICAg ICAgICAgICBldGhfY29weV9hbmRfc3VtIChza2IsICZyeF9yaW5nW3Jpbmdfb2Zmc2V0ICsgNF0s IHBrdF9zaXplLCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgc2tiX3B1dCAoc2tiLCBwa3Rf c2l6ZSk7CgogICAgICAgICAgICAgICAgICAgICAgICBza2ItPnByb3RvY29sID0gZXRoX3R5cGVf dHJhbnMgKHNrYiwgZGV2KTsKICAgICAgICAgICAgICAgICAgICAgICAgbmV0aWZfcnggKHNrYik7 CiAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiAgICAgICAg ICAgICAgICAgICAgICAgIHRwLT5zdGF0cy5yeF9ieXRlcyArPSBwa3Rfc2l6ZTsKICAgICAgICAg ICAgICAgICAgICAgICAgdHAtPnN0YXRzLnJ4X3BhY2tldHMrKzsKICAgICAgICAgICAgICAgIH0g ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayAoIjw0PiIKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiJXM6IE1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXQu XG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+bmFtZSk7CiAgICAgICAg ICAgICAgICAgICAgICAgIHRwLT5zdGF0cy5yeF9kcm9wcGVkKys7CiAgICAgICAgICAgICAgICB9 CgogICAgICAgICAgICAgICAgY3VyX3J4ID0gKGN1cl9yeCArIHJ4X3NpemUgKyA0ICsgMykgJiB+ MzsKICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopICgodm9pZCAq KShpb2FkZHIgKyAoUnhCdWZQdHIpKSkgPSAoKGN1cl9yeCAtIDE2KSkpOwoKICAgICAgICAgICAg ICAgIGlmICgoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSAoKHZvaWQgKikoaW9hZGRyICsg KEludHJTdGF0dXMpKSkpICYgUnhBY2tCaXRzKQogICAgICAgICAgICAgICAgICAgICAgICBkbyB7 ICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopICgodm9pZCAqKShpb2FkZHIgKyAoSW50clN0 YXR1cykpKSA9ICgoUnhBY2tCaXRzKSkpOyAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSAo KHZvaWQgKikoaW9hZGRyICsgKEludHJTdGF0dXMpKSkpOyB9IHdoaWxlICgwKTsKICAgICAgICB9 CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CgoKCgogICAgICAgIHRwLT5jdXJfcnggPSBjdXJfcng7CgogICAgICAgIGlmICgoKCoodm9sYXRp bGUgdW5zaWduZWQgY2hhciAqKSAoKHZvaWQgKikoaW9hZGRyICsgKENoaXBDbWQpKSkpICYgUnhC dWZFbXB0eSkgJiYKICAgICAgICAgICAgKCgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopICgo dm9pZCAqKShpb2FkZHIgKyAoSW50clN0YXR1cykpKSkgJiBSeEFja0JpdHMpKQogICAgICAgICAg ICAgICAgZG8geyAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSAoKHZvaWQgKikoaW9hZGRy ICsgKEludHJTdGF0dXMpKSkgPSAoKFJ4QWNrQml0cykpKTsgKCoodm9sYXRpbGUgdW5zaWduZWQg c2hvcnQgKikgKCh2b2lkICopKGlvYWRkciArIChJbnRyU3RhdHVzKSkpKTsgfSB3aGlsZSAoMCk7 Cn0KCgpzdGF0aWMgdm9pZCBydGw4MTM5X3dlaXJkX2ludGVycnVwdCAoc3RydWN0IG5ldF9kZXZp Y2UgKmRldiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBydGw4 MTM5X3ByaXZhdGUgKnRwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p ZCAqaW9hZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXR1 cywgaW50IGxpbmtfY2hhbmdlZCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKCgogICAgICAgIGlmKCEoZGV2ICE9ICgodm9pZCAqKTApKSkgeyBwcmludGsoICJBc3NlcnRp b24gZmFpbGVkISAlcywlcywlcyxsaW5lPSVkXG4iLCAiZGV2ICE9IE5VTEwiLCI4MTM5dG9vLmMi LF9fRlVOQ1RJT05fXywyMDc3KTsgfTsKICAgICAgICBpZighKHRwICE9ICgodm9pZCAqKTApKSkg eyBwcmludGsoICJBc3NlcnRpb24gZmFpbGVkISAlcywlcywlcyxsaW5lPSVkXG4iLCAidHAgIT0g TlVMTCIsIjgxMzl0b28uYyIsX19GVU5DVElPTl9fLDIwNzgpOyB9OwogICAgICAgIGlmKCEoaW9h ZGRyICE9ICgodm9pZCAqKTApKSkgeyBwcmludGsoICJBc3NlcnRpb24gZmFpbGVkISAlcywlcywl cyxsaW5lPSVkXG4iLCAiaW9hZGRyICE9IE5VTEwiLCI4MTM5dG9vLmMiLF9fRlVOQ1RJT05fXywy MDc5KTsgfTsKCgogICAgICAgIHRwLT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzICs9ICgodW5zaWdu ZWQgbG9uZykgKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodm9pZCAqKShpb2FkZHIgKyAo UnhNaXNzZWQpKSkpKTsKICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh2b2lk ICopKGlvYWRkciArIChSeE1pc3NlZCkpKSA9ICgoMCkpKTsKCiAgICAgICAgaWYgKChzdGF0dXMg JiBSeFVuZGVycnVuKSAmJiBsaW5rX2NoYW5nZWQgJiYKICAgICAgICAgICAgKHRwLT5kcnZfZmxh Z3MgJiBIQVNfTE5LX0NITkcpKSB7CgogICAgICAgICAgICAgICAgaW50IGxwYXIgPSAoKih2b2xh dGlsZSB1bnNpZ25lZCBzaG9ydCAqKSAoKHZvaWQgKikoaW9hZGRyICsgKE5XYXlMUEFSKSkpKTsK ICAgICAgICAgICAgICAgIGludCBkdXBsZXggPSAobHBhciAmIDB4MDEwMCkgfHwgKGxwYXIgJiAw eDAxQzApID09IDB4MDA0MAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHRwLT5k dXBsZXhfbG9jazsKICAgICAgICAgICAgICAgIGlmICh0cC0+ZnVsbF9kdXBsZXggIT0gZHVwbGV4 KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5mdWxsX2R1cGxleCA9IGR1cGxleDsKCgoK CgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdHVzICY9IH5SeFVuZGVycnVu OwogICAgICAgIH0KCgogICAgICAgIGlmIChzdGF0dXMgJgogICAgICAgICAgICAoUnhVbmRlcnJ1 biB8IFJ4T3ZlcmZsb3cgfCBSeEVyciB8IFJ4RklGT092ZXIpKQogICAgICAgICAgICAgICAgdHAt PnN0YXRzLnJ4X2Vycm9ycysrOwoKICAgICAgICBpZiAoc3RhdHVzICYgKFBDU1RpbWVvdXQpKQog ICAgICAgICAgICAgICAgdHAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKICAgICAgICBpZiAo c3RhdHVzICYgKFJ4VW5kZXJydW4gfCBSeEZJRk9PdmVyKSkKICAgICAgICAgICAgICAgIHRwLT5z dGF0cy5yeF9maWZvX2Vycm9ycysrOwogICAgICAgIGlmIChzdGF0dXMgJiBQQ0lFcnIpIHsKICAg ICAgICAgICAgICAgIHUxNiBwY2lfY21kX3N0YXR1czsKICAgICAgICAgICAgICAgIHBjaV9yZWFk X2NvbmZpZ193b3JkICh0cC0+cGNpX2RldiwgMHgwNiwgJnBjaV9jbWRfc3RhdHVzKTsKCiAgICAg ICAgICAgICAgICBwcmludGsgKCI8Mz4iICIlczogUENJIEJ1cyBlcnJvciAlNC40eC5cbiIsCiAg ICAgICAgICAgICAgICAgICAgICAgIGRldi0+bmFtZSwgcGNpX2NtZF9zdGF0dXMpOwogICAgICAg IH0KfQoKCgoKc3RhdGljIHZvaWQgcnRsODEzOV9pbnRlcnJ1cHQgKGludCBpcnEsIHZvaWQgKmRl dl9pbnN0YW5jZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwdF9yZWdz ICpyZWdzKQp7CiAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2Rl dmljZSAqKSBkZXZfaW5zdGFuY2U7CiAgICAgICAgc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHAg PSBkZXYtPnByaXY7CiAgICAgICAgaW50IGJvZ3VzY250ID0gbWF4X2ludGVycnVwdF93b3JrOwog ICAgICAgIHZvaWQgKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7CiAgICAgICAgaW50IGFja3N0YXQs IHN0YXR1czsKICAgICAgICBpbnQgbGlua19jaGFuZ2VkID0gMDsKCiAgICAgICAgc3Bpbl9sb2Nr ICgmdHAtPmxvY2spOwoKICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICBzdGF0dXMgPSAoKih2 b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSAoKHZvaWQgKikoaW9hZGRyICsgKEludHJTdGF0dXMp KSkpOwoKCiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09IDB4RkZGRikKICAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CgoKCiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICYgUnhVbmRl cnJ1bikKICAgICAgICAgICAgICAgICAgICAgICAgbGlua19jaGFuZ2VkID0gKCoodm9sYXRpbGUg dW5zaWduZWQgc2hvcnQgKikgKCh2b2lkICopKGlvYWRkciArIChDU0NSKSkpKSAmIENTQ1JfTGlu a0NoYW5nZUJpdDsKCgoKCiAgICAgICAgICAgICAgICBhY2tzdGF0ID0gc3RhdHVzICYgflJ4QWNr Qml0czsKICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopICgodm9p ZCAqKShpb2FkZHIgKyAoSW50clN0YXR1cykpKSA9ICgoYWNrc3RhdCkpKTsKCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwoKCiAgICAgICAgICAgICAgICBpZiAoKHN0YXR1cyAmCiAgICAgICAgICAgICAgICAg ICAgIChQQ0lFcnIgfCBQQ1NUaW1lb3V0IHwgUnhVbmRlcnJ1biB8IFJ4T3ZlcmZsb3cgfAogICAg ICAgICAgICAgICAgICAgICAgUnhGSUZPT3ZlciB8IFR4RXJyIHwgVHhPSyB8IFJ4RXJyIHwgUnhP SykpID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAg IGlmIChuZXRpZl9ydW5uaW5nIChkZXYpICYmIChzdGF0dXMgJiBSeEFja0JpdHMpKQogICAgICAg ICAgICAgICAgICAgICAgICBydGw4MTM5X3J4X2ludGVycnVwdCAoZGV2LCB0cCwgaW9hZGRyKTsK CgogICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAmIChQQ0lFcnIgfCBQQ1NUaW1lb3V0IHwgUnhV bmRlcnJ1biB8IFJ4T3ZlcmZsb3cgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSeEZJ Rk9PdmVyIHwgVHhFcnIgfCBSeEVycikpCiAgICAgICAgICAgICAgICAgICAgICAgIHJ0bDgxMzlf d2VpcmRfaW50ZXJydXB0IChkZXYsIHRwLCBpb2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMsIGxpbmtfY2hhbmdlZCk7CgogICAgICAg ICAgICAgICAgaWYgKG5ldGlmX3J1bm5pbmcgKGRldikgJiYgKHN0YXR1cyAmIChUeE9LIHwgVHhF cnIpKSkKICAgICAgICAgICAgICAgICAgICAgICAgcnRsODEzOV90eF9pbnRlcnJ1cHQgKGRldiwg dHAsIGlvYWRkcik7CgogICAgICAgICAgICAgICAgYm9ndXNjbnQtLTsKICAgICAgICB9IHdoaWxl IChib2d1c2NudCA+IDApOwoKICAgICAgICBpZiAoYm9ndXNjbnQgPD0gMCkgewogICAgICAgICAg ICAgICAgcHJpbnRrICgiPDQ+IiAiJXM6IFRvbyBtdWNoIHdvcmsgYXQgaW50ZXJydXB0LCAiCiAg ICAgICAgICAgICAgICAgICAgICAgICJJbnRyU3RhdHVzPTB4JTQuNHguXG4iLCBkZXYtPm5hbWUs IHN0YXR1cyk7CgoKICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICop ICgodm9pZCAqKShpb2FkZHIgKyAoSW50clN0YXR1cykpKSA9ICgoMHhmZmZmKSkpOwogICAgICAg IH0KCiAgICAgICAgc3Bpbl91bmxvY2sgKCZ0cC0+bG9jayk7CgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKfQoKCnN0YXRpYyBpbnQgcnRsODEzOV9j bG9zZSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKewogICAgICAgIHN0cnVjdCBydGw4MTM5X3By aXZhdGUgKnRwID0gZGV2LT5wcml2OwogICAgICAgIHZvaWQgKmlvYWRkciA9IHRwLT5tbWlvX2Fk ZHI7CiAgICAgICAgaW50IHJldCA9IDA7CiAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgbmV0aWZfc3RvcF9xdWV1ZSAoZGV2 KTsKCiAgICAgICAgaWYgKHRwLT50aHJfcGlkID49IDApIHsKICAgICAgICAgICAgICAgIHJldCA9 IGtpbGxfcHJvYyAodHAtPnRocl9waWQsIDE1LCAxKTsKICAgICAgICAgICAgICAgIGlmIChyZXQp IHsKICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrICgiPDM+IiAiJXM6IHVuYWJsZSB0byBz aWduYWwgdGhyZWFkXG4iLCBkZXYtPm5hbWUpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4gcmV0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgd2FpdF9mb3JfY29tcGxl dGlvbiAoJnRwLT50aHJfZXhpdGVkKTsKICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgIGRvIHsgX19hc21f XyBfX3ZvbGF0aWxlX18oInB1c2hmbCA7IHBvcGwgJTAgOyBjbGkiOiI9ZyIgKGZsYWdzKTogOiJt ZW1vcnkiKTsgc3Bpbl9sb2NrKCZ0cC0+bG9jayk7IH0gd2hpbGUgKDApOwoKCiAgICAgICAgKCoo dm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoKHZvaWQgKikoaW9hZGRyICsgKENoaXBDbWQpKSkg PSAoKDApKSk7CgoKICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSAoKHZvaWQg KikoaW9hZGRyICsgKEludHJNYXNrKSkpID0gKCgwKSkpOwoKCiAgICAgICAgdHAtPnN0YXRzLnJ4 X21pc3NlZF9lcnJvcnMgKz0gKCh1bnNpZ25lZCBsb25nKSAoKih2b2xhdGlsZSB1bnNpZ25lZCBp bnQgKikgKCh2b2lkICopKGlvYWRkciArIChSeE1pc3NlZCkpKSkpOwogICAgICAgICgqKHZvbGF0 aWxlIHVuc2lnbmVkIGludCAqKSAoKHZvaWQgKikoaW9hZGRyICsgKFJ4TWlzc2VkKSkpID0gKCgw KSkpOwoKICAgICAgICBkbyB7IHNwaW5fdW5sb2NrKCZ0cC0+bG9jayk7IF9fYXNtX18gX192b2xh dGlsZV9fKCJwdXNobCAlMCA7IHBvcGZsIjogOiJnIiAoZmxhZ3MpOiJtZW1vcnkiLCAiY2MiKTsg fSB3aGlsZSAoMCk7CgogICAgICAgIHN5bmNocm9uaXplX2lycSAoKTsKICAgICAgICBmcmVlX2ly cSAoZGV2LT5pcnEsIGRldik7CgogICAgICAgIHJ0bDgxMzlfdHhfY2xlYXIgKHRwKTsKCiAgICAg ICAgcGNpX2ZyZWVfY29uc2lzdGVudCh0cC0+cGNpX2RldiwgKCg4MTkyIDw8IDIpICsgMTYgKyAy MDQ4KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5yeF9yaW5nLCB0cC0+cnhfcmlu Z19kbWEpOwogICAgICAgIHBjaV9mcmVlX2NvbnNpc3RlbnQodHAtPnBjaV9kZXYsICgxNTM2ICog NCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cC0+dHhfYnVmcywgdHAtPnR4X2J1ZnNf ZG1hKTsKICAgICAgICB0cC0+cnhfcmluZyA9ICgodm9pZCAqKTApOwogICAgICAgIHRwLT50eF9i dWZzID0gKCh2b2lkICopMCk7CgoKICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICop ICgodm9pZCAqKShpb2FkZHIgKyAoQ2ZnOTM0NikpKSA9ICgoQ2ZnOTM0Nl9VbmxvY2spKSk7Cgog ICAgICAgIGlmIChydGxfY2hpcF9pbmZvW3RwLT5jaGlwc2V0XS5mbGFncyAmIEhhc0hsdENsaykK ICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKCh2b2lkICopKGlv YWRkciArIChIbHRDbGspKSkgPSAoKCdIJykpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg OwogICAgICAgIHJldHVybiAwOwp9CgoKCgoKc3RhdGljIHZvaWQgbmV0ZGV2X2dldF9lc2V0IChz dHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmVzZXQpCnsKICAgICAg ICBzdHJ1Y3QgcnRsODEzOV9wcml2YXRlICpucCA9IGRldi0+cHJpdjsKICAgICAgICB2b2lkICpp b2FkZHIgPSBucC0+bW1pb19hZGRyOwogICAgICAgIHUxNiBhZHZlcnQ7CgogICAgICAgIGVzZXQt PnN1cHBvcnRlZCA9ICgxIDw8IDApCiAgICAgICAgICAgICAgICAgICAgICAgIHwgKDEgPDwgMSkK ICAgICAgICAgICAgICAgICAgICAgICAgfCAoMSA8PCAyKQogICAgICAgICAgICAgICAgICAgICAg ICB8ICgxIDw8IDMpCiAgICAgICAgICAgICAgICAgICAgICAgIHwgKDEgPDwgNikKICAgICAgICAg ICAgICAgICAgICAgICAgfCAoMSA8PCA3KTsKCiAgICAgICAgZXNldC0+YWR2ZXJ0aXNpbmcgPSAo MSA8PCA3KSB8ICgxIDw8IDYpOwogICAgICAgIGFkdmVydCA9IG1kaW9fcmVhZCAoZGV2LCBucC0+ cGh5c1swXSwgNCk7CiAgICAgICAgaWYgKGFkdmVydCAmIDB4MDAyMCkKICAgICAgICAgICAgICAg IGVzZXQtPmFkdmVydGlzaW5nIHw9ICgxIDw8IDApOwogICAgICAgIGlmIChhZHZlcnQgJiAweDAw NDApCiAgICAgICAgICAgICAgICBlc2V0LT5hZHZlcnRpc2luZyB8PSAoMSA8PCAxKTsKICAgICAg ICBpZiAoYWR2ZXJ0ICYgMHgwMDgwKQogICAgICAgICAgICAgICAgZXNldC0+YWR2ZXJ0aXNpbmcg fD0gKDEgPDwgMik7CiAgICAgICAgaWYgKGFkdmVydCAmIDB4MDEwMCkKICAgICAgICAgICAgICAg IGVzZXQtPmFkdmVydGlzaW5nIHw9ICgxIDw8IDMpOwoKICAgICAgICBlc2V0LT5zcGVlZCA9ICgo Kih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopICgodm9pZCAqKShpb2FkZHIgKyAoTWVkaWFTdGF0 dXMpKSkpICYgMHgwOCkgPyAxMCA6IDEwMDsKCgoKICAgICAgICBlc2V0LT5kdXBsZXggPSBucC0+ ZnVsbF9kdXBsZXggPyAweDAxIDogMHgwMDsKICAgICAgICBlc2V0LT5wb3J0ID0gMHgwMDsKCiAg ICAgICAgZXNldC0+cGh5X2FkZHJlc3MgPSBucC0+cGh5c1swXTsKICAgICAgICBlc2V0LT50cmFu c2NlaXZlciA9IDB4MDA7CiAgICAgICAgZXNldC0+YXV0b25lZyA9IChtZGlvX3JlYWQgKGRldiwg bnAtPnBoeXNbMF0sIDApICYgMHgxMDAwKSAhPSAwOwogICAgICAgIGVzZXQtPm1heHR4cGt0ID0g MTsKICAgICAgICBlc2V0LT5tYXhyeHBrdCA9IDE7Cn0KCgoKCgpzdGF0aWMgdm9pZCBuZXRkZXZf Z2V0X3dvbCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAq d29sKQp7CiAgICAgICAgc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqbnAgPSBkZXYtPnByaXY7CiAg ICAgICAgdm9pZCAqaW9hZGRyID0gbnAtPm1taW9fYWRkcjsKCiAgICAgICAgaWYgKHJ0bF9jaGlw X2luZm9bbnAtPmNoaXBzZXRdLmZsYWdzICYgSGFzTFdha2UpIHsKICAgICAgICAgICAgICAgIHU4 IGNmZzMgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopICgodm9pZCAqKShpb2FkZHIgKyAo Q29uZmlnMykpKSk7CiAgICAgICAgICAgICAgICB1OCBjZmc1ID0gKCoodm9sYXRpbGUgdW5zaWdu ZWQgY2hhciAqKSAoKHZvaWQgKikoaW9hZGRyICsgKENvbmZpZzUpKSkpOwoKICAgICAgICAgICAg ICAgIHdvbC0+c3VwcG9ydGVkID0gKDEgPDwgMCkgfCAoMSA8PCA1KQogICAgICAgICAgICAgICAg ICAgICAgICB8ICgxIDw8IDEpIHwgKDEgPDwgMikgfCAoMSA8PCAzKTsKCiAgICAgICAgICAgICAg ICB3b2wtPndvbG9wdHMgPSAwOwogICAgICAgICAgICAgICAgaWYgKGNmZzMgJiBDZmczX0xpbmtV cCkKICAgICAgICAgICAgICAgICAgICAgICAgd29sLT53b2xvcHRzIHw9ICgxIDw8IDApOwogICAg ICAgICAgICAgICAgaWYgKGNmZzMgJiBDZmczX01hZ2ljKQogICAgICAgICAgICAgICAgICAgICAg ICB3b2wtPndvbG9wdHMgfD0gKDEgPDwgNSk7CgoKICAgICAgICAgICAgICAgIGlmIChjZmc1ICYg Q2ZnNV9VV0YpCiAgICAgICAgICAgICAgICAgICAgICAgIHdvbC0+d29sb3B0cyB8PSAoMSA8PCAx KTsKICAgICAgICAgICAgICAgIGlmIChjZmc1ICYgQ2ZnNV9NV0YpCiAgICAgICAgICAgICAgICAg ICAgICAgIHdvbC0+d29sb3B0cyB8PSAoMSA8PCAyKTsKICAgICAgICAgICAgICAgIGlmIChjZmc1 ICYgQ2ZnNV9CV0YpCiAgICAgICAgICAgICAgICAgICAgICAgIHdvbC0+d29sb3B0cyB8PSAoMSA8 PCAzKTsKICAgICAgICB9Cn0KCgoKCgpzdGF0aWMgaW50IG5ldGRldl9zZXRfd29sIChzdHJ1Y3Qg bmV0X2RldmljZSAqZGV2LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qg ZXRodG9vbF93b2xpbmZvICp3b2wpCnsKICAgICAgICBzdHJ1Y3QgcnRsODEzOV9wcml2YXRlICpu cCA9IGRldi0+cHJpdjsKICAgICAgICB2b2lkICppb2FkZHIgPSBucC0+bW1pb19hZGRyOwogICAg ICAgIHUzMiBzdXBwb3J0OwogICAgICAgIHU4IGNmZzMsIGNmZzU7CgogICAgICAgIHN1cHBvcnQg PSAoKHJ0bF9jaGlwX2luZm9bbnAtPmNoaXBzZXRdLmZsYWdzICYgSGFzTFdha2UpCiAgICAgICAg ICAgICAgICAgICA/ICgoMSA8PCAwKSB8ICgxIDw8IDUpCiAgICAgICAgICAgICAgICAgICAgICB8 ICgxIDw8IDEpIHwgKDEgPDwgMikgfCAoMSA8PCAzKSkKICAgICAgICAgICAgICAgICAgIDogMCk7 CiAgICAgICAgaWYgKHdvbC0+d29sb3B0cyAmIH5zdXBwb3J0KQogICAgICAgICAgICAgICAgcmV0 dXJuIC0yMjsKCiAgICAgICAgY2ZnMyA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKCh2 b2lkICopKGlvYWRkciArIChDb25maWczKSkpKSAmIH4oQ2ZnM19MaW5rVXAgfCBDZmczX01hZ2lj KTsKICAgICAgICBpZiAod29sLT53b2xvcHRzICYgKDEgPDwgMCkpCiAgICAgICAgICAgICAgICBj ZmczIHw9IENmZzNfTGlua1VwOwogICAgICAgIGlmICh3b2wtPndvbG9wdHMgJiAoMSA8PCA1KSkK ICAgICAgICAgICAgICAgIGNmZzMgfD0gQ2ZnM19NYWdpYzsKICAgICAgICAoKih2b2xhdGlsZSB1 bnNpZ25lZCBjaGFyICopICgodm9pZCAqKShpb2FkZHIgKyAoQ2ZnOTM0NikpKSA9ICgoQ2ZnOTM0 Nl9VbmxvY2spKSk7CiAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoKHZvaWQg KikoaW9hZGRyICsgKENvbmZpZzMpKSkgPSAoKGNmZzMpKSk7CiAgICAgICAgKCoodm9sYXRpbGUg dW5zaWduZWQgY2hhciAqKSAoKHZvaWQgKikoaW9hZGRyICsgKENmZzkzNDYpKSkgPSAoKENmZzkz NDZfTG9jaykpKTsKCiAgICAgICAgY2ZnNSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikg KCh2b2lkICopKGlvYWRkciArIChDb25maWc1KSkpKSAmIH4oQ2ZnNV9VV0YgfCBDZmc1X01XRiB8 IENmZzVfQldGKTsKCgoKICAgICAgICBpZiAod29sLT53b2xvcHRzICYgKDEgPDwgMSkpCiAgICAg ICAgICAgICAgICBjZmc1IHw9IENmZzVfVVdGOwogICAgICAgIGlmICh3b2wtPndvbG9wdHMgJiAo MSA8PCAyKSkKICAgICAgICAgICAgICAgIGNmZzUgfD0gQ2ZnNV9NV0Y7CiAgICAgICAgaWYgKHdv bC0+d29sb3B0cyAmICgxIDw8IDMpKQogICAgICAgICAgICAgICAgY2ZnNSB8PSBDZmc1X0JXRjsK ICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopICgodm9pZCAqKShpb2FkZHIgKyAo Q29uZmlnNSkpKSA9ICgoY2ZnNSkpKTsKCiAgICAgICAgcmV0dXJuIDA7Cn0KCgpzdGF0aWMgaW50 IG5ldGRldl9ldGh0b29sX2lvY3RsIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp1c2Vy YWRkcikKewogICAgICAgIHN0cnVjdCBydGw4MTM5X3ByaXZhdGUgKm5wID0gZGV2LT5wcml2Owog ICAgICAgIHUzMiBldGhjbWQ7CgoKCgogICAgICAgIGlmICgoX19idWlsdGluX2NvbnN0YW50X3Ao c2l6ZW9mIChldGhjbWQpKSA/IF9fY29uc3RhbnRfY29weV9mcm9tX3VzZXIoKCZldGhjbWQpLCh1 c2VyYWRkciksKHNpemVvZiAoZXRoY21kKSkpIDogX19nZW5lcmljX2NvcHlfZnJvbV91c2VyKCgm ZXRoY21kKSwodXNlcmFkZHIpLChzaXplb2YgKGV0aGNtZCkpKSkpCiAgICAgICAgICAgICAgICBy ZXR1cm4gLTE0OwoKICAgICAgICBzd2l0Y2ggKGV0aGNtZCkgewogICAgICAgIGNhc2UgMHgwMDAw MDAwMToKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGV0 aHRvb2xfY21kIGVzZXQgPSB7IDB4MDAwMDAwMDEgfTsKICAgICAgICAgICAgICAgICAgICAgICAg ZG8geyBfX2FzbV9fIF9fdm9sYXRpbGVfXygiY2xpIjogOiA6Im1lbW9yeSIpOyBzcGluX2xvY2so Jm5wLT5sb2NrKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIG5ldGRldl9n ZXRfZXNldCAoZGV2LCAmZXNldCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsgc3Bpbl91 bmxvY2soJm5wLT5sb2NrKTsgX19hc21fXyBfX3ZvbGF0aWxlX18oInN0aSI6IDogOiJtZW1vcnki KTsgfSB3aGlsZSAoMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoX19idWlsdGluX2Nv bnN0YW50X3Aoc2l6ZW9mIChlc2V0KSkgPyBfX2NvbnN0YW50X2NvcHlfdG9fdXNlcigodXNlcmFk ZHIpLCgmZXNldCksKHNpemVvZiAoZXNldCkpKSA6IF9fZ2VuZXJpY19jb3B5X3RvX3VzZXIoKHVz ZXJhZGRyKSwoJmVzZXQpLChzaXplb2YgKGVzZXQpKSkpKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJldHVybiAtMTQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwog ICAgICAgICAgICAgICAgfQoKCgogICAgICAgIGNhc2UgMHgwMDAwMDAwMzoKICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyBpbmZv ID0geyAweDAwMDAwMDAzIH07CiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSAoaW5mby5k cml2ZXIsICI4MTM5dG9vIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSAoaW5mby52 ZXJzaW9uLCAiMC45LjIwIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSAoaW5mby5i dXNfaW5mbywgbnAtPnBjaV9kZXYtPnNsb3RfbmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAg IGlmICgoX19idWlsdGluX2NvbnN0YW50X3Aoc2l6ZW9mIChpbmZvKSkgPyBfX2NvbnN0YW50X2Nv cHlfdG9fdXNlcigodXNlcmFkZHIpLCgmaW5mbyksKHNpemVvZiAoaW5mbykpKSA6IF9fZ2VuZXJp Y19jb3B5X3RvX3VzZXIoKHVzZXJhZGRyKSwoJmluZm8pLChzaXplb2YgKGluZm8pKSkpKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTQ7CiAgICAgICAgICAgICAgICAg ICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgfQoKICAgICAgICBjYXNlIDB4MDAwMDAw MDU6CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBldGh0 b29sX3dvbGluZm8gd29sID0geyAweDAwMDAwMDA1IH07CiAgICAgICAgICAgICAgICAgICAgICAg IGRvIHsgX19hc21fXyBfX3ZvbGF0aWxlX18oImNsaSI6IDogOiJtZW1vcnkiKTsgc3Bpbl9sb2Nr KCZucC0+bG9jayk7IH0gd2hpbGUgKDApOwogICAgICAgICAgICAgICAgICAgICAgICBuZXRkZXZf Z2V0X3dvbCAoZGV2LCAmd29sKTsKICAgICAgICAgICAgICAgICAgICAgICAgZG8geyBzcGluX3Vu bG9jaygmbnAtPmxvY2spOyBfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RpIjogOiA6Im1lbW9yeSIp OyB9IHdoaWxlICgwKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChfX2J1aWx0aW5fY29u c3RhbnRfcChzaXplb2YgKHdvbCkpID8gX19jb25zdGFudF9jb3B5X3RvX3VzZXIoKHVzZXJhZGRy KSwoJndvbCksKHNpemVvZiAod29sKSkpIDogX19nZW5lcmljX2NvcHlfdG9fdXNlcigodXNlcmFk ZHIpLCgmd29sKSwoc2l6ZW9mICh3b2wpKSkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybiAtMTQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAg ICAgICAgICAgfQoKICAgICAgICBjYXNlIDB4MDAwMDAwMDY6CiAgICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBldGh0b29sX3dvbGluZm8gd29sOwogICAgICAg ICAgICAgICAgICAgICAgICBpbnQgcmM7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoX19i dWlsdGluX2NvbnN0YW50X3Aoc2l6ZW9mICh3b2wpKSA/IF9fY29uc3RhbnRfY29weV9mcm9tX3Vz ZXIoKCZ3b2wpLCh1c2VyYWRkciksKHNpemVvZiAod29sKSkpIDogX19nZW5lcmljX2NvcHlfZnJv bV91c2VyKCgmd29sKSwodXNlcmFkZHIpLChzaXplb2YgKHdvbCkpKSkpCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xNDsKICAgICAgICAgICAgICAgICAgICAgICAgZG8g eyBfX2FzbV9fIF9fdm9sYXRpbGVfXygiY2xpIjogOiA6Im1lbW9yeSIpOyBzcGluX2xvY2soJm5w LT5sb2NrKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gbmV0ZGV2 X3NldF93b2wgKGRldiwgJndvbCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsgc3Bpbl91 bmxvY2soJm5wLT5sb2NrKTsgX19hc21fXyBfX3ZvbGF0aWxlX18oInN0aSI6IDogOiJtZW1vcnki KTsgfSB3aGlsZSAoMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByYzsKICAgICAg ICAgICAgICAgIH0KCiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIGJyZWFrOwogICAg ICAgIH0KCiAgICAgICAgcmV0dXJuIC05NTsKfQoKCnN0YXRpYyBpbnQgbmV0ZGV2X2lvY3RsIChz dHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQp7CiAgICAg ICAgc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHAgPSBkZXYtPnByaXY7CiAgICAgICAgc3RydWN0 IG1paV9pb2N0bF9kYXRhICpkYXRhID0gKHN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqKSZycS0+aWZy X2lmcnUuaWZydV9kYXRhOwogICAgICAgIGludCByYyA9IDA7CiAgICAgICAgaW50IHBoeSA9IHRw LT5waHlzWzBdICYgMHgzZjsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAg aWYgKGNtZCAhPSAweDg5NDYpIHsKCiAgICAgICAgICAgICAgICBkYXRhLT5waHlfaWQgJj0gMHgx ZjsKICAgICAgICAgICAgICAgIGRhdGEtPnJlZ19udW0gJj0gMHgxZjsKICAgICAgICB9CgogICAg ICAgIHN3aXRjaCAoY21kKSB7CiAgICAgICAgY2FzZSAweDg5NDY6CiAgICAgICAgICAgICAgICBy ZXR1cm4gbmV0ZGV2X2V0aHRvb2xfaW9jdGwoZGV2LCAodm9pZCAqKSBycS0+aWZyX2lmcnUuaWZy dV9kYXRhKTsKCiAgICAgICAgY2FzZSAweDg5NDc6CiAgICAgICAgY2FzZSAweDg5RjA6CiAgICAg ICAgICAgICAgICBkYXRhLT5waHlfaWQgPSBwaHk7CgoKICAgICAgICBjYXNlIDB4ODk0ODoKICAg ICAgICBjYXNlIDB4ODlGMCArMToKICAgICAgICAgICAgICAgIGRhdGEtPnZhbF9vdXQgPSBtZGlv X3JlYWQgKGRldiwgZGF0YS0+cGh5X2lkLCBkYXRhLT5yZWdfbnVtKTsKICAgICAgICAgICAgICAg IGJyZWFrOwoKICAgICAgICBjYXNlIDB4ODk0OToKICAgICAgICBjYXNlIDB4ODlGMCArMjoKICAg ICAgICAgICAgICAgIGlmICghY2FwYWJsZSAoMTIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAg IHJjID0gLTE7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg fQoKICAgICAgICAgICAgICAgIGlmIChkYXRhLT5waHlfaWQgPT0gcGh5KSB7CiAgICAgICAgICAg ICAgICAgICAgICAgIHUxNiB2YWx1ZSA9IGRhdGEtPnZhbF9pbjsKICAgICAgICAgICAgICAgICAg ICAgICAgc3dpdGNoIChkYXRhLT5yZWdfbnVtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNh c2UgMDoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHAtPm1lZGlhbG9jayA9ICh2 YWx1ZSAmIDB4OTAwMCkgPyAwIDogMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp ZiAodHAtPm1lZGlhbG9jaykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRwLT5mdWxsX2R1cGxleCA9ICh2YWx1ZSAmIDB4MDEwMCkgPyAxIDogMDsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0 OiBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgbWRpb193cml0ZShkZXYsIGRhdGEtPnBoeV9pZCwgZGF0YS0+cmVnX251bSwg ZGF0YS0+dmFsX2luKTsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBkZWZhdWx0Ogog ICAgICAgICAgICAgICAgcmMgPSAtOTU7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9 CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICBy ZXR1cm4gcmM7Cn0KCgpzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnJ0bDgxMzlfZ2V0 X3N0YXRzIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQp7CiAgICAgICAgc3RydWN0IHJ0bDgxMzlf cHJpdmF0ZSAqdHAgPSBkZXYtPnByaXY7CiAgICAgICAgdm9pZCAqaW9hZGRyID0gdHAtPm1taW9f YWRkcjsKICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwoKICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwoKICAgICAgICBpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CiAgICAgICAgICAgICAg ICBkbyB7IF9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNoZmwgOyBwb3BsICUwIDsgY2xpIjoiPWci IChmbGFncyk6IDoibWVtb3J5Iik7IHNwaW5fbG9jaygmdHAtPmxvY2spOyB9IHdoaWxlICgwKTsK ICAgICAgICAgICAgICAgIHRwLT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzICs9ICgodW5zaWduZWQg bG9uZykgKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodm9pZCAqKShpb2FkZHIgKyAoUnhN aXNzZWQpKSkpKTsKICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAo KHZvaWQgKikoaW9hZGRyICsgKFJ4TWlzc2VkKSkpID0gKCgwKSkpOwogICAgICAgICAgICAgICAg ZG8geyBzcGluX3VubG9jaygmdHAtPmxvY2spOyBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGwg JTAgOyBwb3BmbCI6IDoiZyIgKGZsYWdzKToibWVtb3J5IiwgImNjIik7IH0gd2hpbGUgKDApOwog ICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgIHJldHVybiAmdHAt PnN0YXRzOwp9CgoKCgpzdGF0aWMgdW5zaWduZWQgY29uc3QgZXRoZXJuZXRfcG9seW5vbWlhbCA9 IDB4MDRjMTFkYjdVOwpzdGF0aWMgaW5saW5lIHUzMiBldGhlcl9jcmMgKGludCBsZW5ndGgsIHVu c2lnbmVkIGNoYXIgKmRhdGEpCnsKICAgICAgICBpbnQgY3JjID0gLTE7CgogICAgICAgICAgICAg ICAgICAgICAgICAgICA7CgogICAgICAgIHdoaWxlICgtLWxlbmd0aCA+PSAwKSB7CiAgICAgICAg ICAgICAgICB1bnNpZ25lZCBjaGFyIGN1cnJlbnRfb2N0ZXQgPSAqZGF0YSsrOwogICAgICAgICAg ICAgICAgaW50IGJpdDsKICAgICAgICAgICAgICAgIGZvciAoYml0ID0gMDsgYml0IDwgODsgYml0 KyssIGN1cnJlbnRfb2N0ZXQgPj49IDEpCiAgICAgICAgICAgICAgICAgICAgICAgIGNyYyA9IChj cmMgPDwgMSkgXiAoKGNyYyA8IDApIF4gKGN1cnJlbnRfb2N0ZXQgJiAxKSA/CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZXRoZXJuZXRfcG9seW5vbWlhbCA6IDApOwogICAgICAgIH0KCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICByZXR1 cm4gY3JjOwp9CgoKc3RhdGljIHZvaWQgX19zZXRfcnhfbW9kZSAoc3RydWN0IG5ldF9kZXZpY2Ug KmRldikKewogICAgICAgIHN0cnVjdCBydGw4MTM5X3ByaXZhdGUgKnRwID0gZGV2LT5wcml2Owog ICAgICAgIHZvaWQgKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7CiAgICAgICAgdTMyIG1jX2ZpbHRl clsyXTsKICAgICAgICBpbnQgaSwgcnhfbW9kZTsKICAgICAgICB1MzIgdG1wOwoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogICAgICAgIGlmIChkZXYtPmZsYWdz ICYgMHgxMDApIHsKCiAgICAgICAgICAgICAgICBwcmludGsgKCI8NT4iICIlczogUHJvbWlzY3Vv dXMgbW9kZSBlbmFibGVkLlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lKTsK ICAgICAgICAgICAgICAgIHJ4X21vZGUgPQogICAgICAgICAgICAgICAgICAgIEFjY2VwdEJyb2Fk Y2FzdCB8IEFjY2VwdE11bHRpY2FzdCB8IEFjY2VwdE15UGh5cyB8CiAgICAgICAgICAgICAgICAg ICAgQWNjZXB0QWxsUGh5czsKICAgICAgICAgICAgICAgIG1jX2ZpbHRlclsxXSA9IG1jX2ZpbHRl clswXSA9IDB4ZmZmZmZmZmY7CiAgICAgICAgfSBlbHNlIGlmICgoZGV2LT5tY19jb3VudCA+IG11 bHRpY2FzdF9maWx0ZXJfbGltaXQpCiAgICAgICAgICAgICAgICAgICB8fCAoZGV2LT5mbGFncyAm IDB4MjAwKSkgewoKICAgICAgICAgICAgICAgIHJ4X21vZGUgPSBBY2NlcHRCcm9hZGNhc3QgfCBB Y2NlcHRNdWx0aWNhc3QgfCBBY2NlcHRNeVBoeXM7CiAgICAgICAgICAgICAgICBtY19maWx0ZXJb MV0gPSBtY19maWx0ZXJbMF0gPSAweGZmZmZmZmZmOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAg ICAgICAgICBzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdDsKICAgICAgICAgICAgICAgIHJ4X21v ZGUgPSBBY2NlcHRCcm9hZGNhc3QgfCBBY2NlcHRNeVBoeXM7CiAgICAgICAgICAgICAgICBtY19m aWx0ZXJbMV0gPSBtY19maWx0ZXJbMF0gPSAwOwogICAgICAgICAgICAgICAgZm9yIChpID0gMCwg bWNsaXN0ID0gZGV2LT5tY19saXN0OyBtY2xpc3QgJiYgaSA8IGRldi0+bWNfY291bnQ7CiAgICAg ICAgICAgICAgICAgICAgIGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7CiAgICAgICAgICAg ICAgICAgICAgICAgIGludCBiaXRfbnIgPSBldGhlcl9jcmMoNiwgbWNsaXN0LT5kbWlfYWRkcikg Pj4gMjY7CgogICAgICAgICAgICAgICAgICAgICAgICBtY19maWx0ZXJbYml0X25yID4+IDVdIHw9 ICgoX191MzIpKDEgPDwgKGJpdF9uciAmIDMxKSkpOwogICAgICAgICAgICAgICAgICAgICAgICBy eF9tb2RlIHw9IEFjY2VwdE11bHRpY2FzdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgoK ICAgICAgICB0bXAgPSBydGw4MTM5X3J4X2NvbmZpZyB8IHJ4X21vZGU7CiAgICAgICAgaWYgKHRw LT5yeF9jb25maWcgIT0gdG1wKSB7CiAgICAgICAgICAgICAgICBkbyB7ICgqKHZvbGF0aWxlIHVu c2lnbmVkIGludCAqKSAoKHZvaWQgKikoaW9hZGRyICsgKFJ4Q29uZmlnKSkpID0gKCh0bXApKSk7 ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoKHZvaWQgKikoaW9hZGRyICsgKFJ4Q29uZmln KSkpKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgICAgICAgICB0cC0+cnhfY29uZmlnID0gdG1wOwog ICAgICAgIH0KICAgICAgICBkbyB7ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoKHZvaWQg KikoaW9hZGRyICsgKE1BUjAgKyAwKSkpID0gKChtY19maWx0ZXJbMF0pKSk7ICgqKHZvbGF0aWxl IHVuc2lnbmVkIGludCAqKSAoKHZvaWQgKikoaW9hZGRyICsgKE1BUjAgKyAwKSkpKTsgfSB3aGls ZSAoMCk7CiAgICAgICAgZG8geyAoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh2b2lkICop KGlvYWRkciArIChNQVIwICsgNCkpKSA9ICgobWNfZmlsdGVyWzFdKSkpOyAoKih2b2xhdGlsZSB1 bnNpZ25lZCBpbnQgKikgKCh2b2lkICopKGlvYWRkciArIChNQVIwICsgNCkpKSk7IH0gd2hpbGUg KDApOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgOwp9CgpzdGF0aWMgdm9pZCBydGw4MTM5 X3NldF9yeF9tb2RlIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQp7CiAgICAgICAgdW5zaWduZWQg bG9uZyBmbGFnczsKICAgICAgICBzdHJ1Y3QgcnRsODEzOV9wcml2YXRlICp0cCA9IGRldi0+cHJp djsKCiAgICAgICAgZG8geyBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGZsIDsgcG9wbCAlMCA7 IGNsaSI6Ij1nIiAoZmxhZ3MpOiA6Im1lbW9yeSIpOyBzcGluX2xvY2soJnRwLT5sb2NrKTsgfSB3 aGlsZSAoMCk7CiAgICAgICAgX19zZXRfcnhfbW9kZShkZXYpOwogICAgICAgIGRvIHsgc3Bpbl91 bmxvY2soJnRwLT5sb2NrKTsgX19hc21fXyBfX3ZvbGF0aWxlX18oInB1c2hsICUwIDsgcG9wZmwi OiA6ImciIChmbGFncyk6Im1lbW9yeSIsICJjYyIpOyB9IHdoaWxlICgwKTsKfQoKCgpzdGF0aWMg aW50IHJ0bDgxMzlfc3VzcGVuZCAoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHUzMiBzdGF0ZSkKewog ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEgKHBkZXYpOwog ICAgICAgIHN0cnVjdCBydGw4MTM5X3ByaXZhdGUgKnRwID0gZGV2LT5wcml2OwogICAgICAgIHZv aWQgKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7CiAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsK CiAgICAgICAgaWYgKCFuZXRpZl9ydW5uaW5nIChkZXYpKQogICAgICAgICAgICAgICAgcmV0dXJu IDA7CgogICAgICAgIG5ldGlmX2RldmljZV9kZXRhY2ggKGRldik7CgogICAgICAgIGRvIHsgX19h c21fXyBfX3ZvbGF0aWxlX18oInB1c2hmbCA7IHBvcGwgJTAgOyBjbGkiOiI9ZyIgKGZsYWdzKTog OiJtZW1vcnkiKTsgc3Bpbl9sb2NrKCZ0cC0+bG9jayk7IH0gd2hpbGUgKDApOwoKCiAgICAgICAg KCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgKCh2b2lkICopKGlvYWRkciArIChJbnRyTWFz aykpKSA9ICgoMCkpKTsKICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopICgodm9p ZCAqKShpb2FkZHIgKyAoQ2hpcENtZCkpKSA9ICgoMCkpKTsKCgogICAgICAgIHRwLT5zdGF0cy5y eF9taXNzZWRfZXJyb3JzICs9ICgodW5zaWduZWQgbG9uZykgKCoodm9sYXRpbGUgdW5zaWduZWQg aW50ICopICgodm9pZCAqKShpb2FkZHIgKyAoUnhNaXNzZWQpKSkpKTsKICAgICAgICAoKih2b2xh dGlsZSB1bnNpZ25lZCBpbnQgKikgKCh2b2lkICopKGlvYWRkciArIChSeE1pc3NlZCkpKSA9ICgo MCkpKTsKCiAgICAgICAgZG8geyBzcGluX3VubG9jaygmdHAtPmxvY2spOyBfX2FzbV9fIF9fdm9s YXRpbGVfXygicHVzaGwgJTAgOyBwb3BmbCI6IDoiZyIgKGZsYWdzKToibWVtb3J5IiwgImNjIik7 IH0gd2hpbGUgKDApOwogICAgICAgIHJldHVybiAwOwp9CgoKc3RhdGljIGludCBydGw4MTM5X3Jl c3VtZSAoc3RydWN0IHBjaV9kZXYgKnBkZXYpCnsKICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAq ZGV2ID0gcGNpX2dldF9kcnZkYXRhIChwZGV2KTsKCiAgICAgICAgaWYgKCFuZXRpZl9ydW5uaW5n IChkZXYpKQogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgbmV0aWZfZGV2aWNlX2F0 dGFjaCAoZGV2KTsKICAgICAgICBydGw4MTM5X2h3X3N0YXJ0IChkZXYpOwogICAgICAgIHJldHVy biAwOwp9CgoKCgpzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcnRsODEzOV9wY2lfZHJpdmVyID0g ewogICAgICAgIG5hbWU6ICI4MTM5dG9vIiwKICAgICAgICBpZF90YWJsZTogcnRsODEzOV9wY2lf dGJsLAogICAgICAgIHByb2JlOiBydGw4MTM5X2luaXRfb25lLAogICAgICAgIHJlbW92ZTogcnRs ODEzOV9yZW1vdmVfb25lLAoKICAgICAgICBzdXNwZW5kOiBydGw4MTM5X3N1c3BlbmQsCiAgICAg ICAgcmVzdW1lOiBydGw4MTM5X3Jlc3VtZSwKCn07CgoKc3RhdGljIGludCBfX2F0dHJpYnV0ZV9f ICgoX19zZWN0aW9uX18gKCIudGV4dC5pbml0IikpKSBydGw4MTM5X2luaXRfbW9kdWxlICh2b2lk KQp7CgoKCgoKCgogICAgICAgIHJldHVybiBwY2lfbW9kdWxlX2luaXQgKCZydGw4MTM5X3BjaV9k cml2ZXIpOwp9CgoKc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCwgX19zZWN0aW9u X18oIi50ZXh0LmV4aXQiKSkpIHJ0bDgxMzlfY2xlYW51cF9tb2R1bGUgKHZvaWQpCnsKICAgICAg ICBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgKCZydGw4MTM5X3BjaV9kcml2ZXIpOwp9CgoKc3RhdGlj IGluaXRjYWxsX3QgX19pbml0Y2FsbF9ydGw4MTM5X2luaXRfbW9kdWxlIF9fYXR0cmlidXRlX18g KCh1bnVzZWQsX19zZWN0aW9uX18gKCIuaW5pdGNhbGwuaW5pdCIpKSkgPSBydGw4MTM5X2luaXRf bW9kdWxlOzsKc3RhdGljIGV4aXRjYWxsX3QgX19leGl0Y2FsbF9ydGw4MTM5X2NsZWFudXBfbW9k dWxlIF9fYXR0cmlidXRlX18gKCh1bnVzZWQsX19zZWN0aW9uX18gKCIuZXhpdGNhbGwuZXhpdCIp KSkgPSBydGw4MTM5X2NsZWFudXBfbW9kdWxlOzsK