public inbox for gcc-prs@sourceware.org help / color / mirror / Atom feed
From: barto@visionpro.com To: gcc-gnats@gcc.gnu.org Subject: optimization/7391: generation of duplicate labels causes assembler to fail Date: Wed, 24 Jul 2002 08:56:00 -0000 [thread overview] Message-ID: <20020724154955.2010.qmail@sources.redhat.com> (raw) >Number: 7391 >Category: optimization >Synopsis: generation of duplicate labels causes assembler to fail >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Wed Jul 24 08:56:01 PDT 2002 >Closed-Date: >Last-Modified: >Originator: David Barto, barto@visionpro.com >Release: gcc-3.1/Solari s8 >Organization: >Environment: Reading specs from /opt/mvplocal/gcc-31/lib/gcc-lib/sparc-sun-solaris2/3.1/specs Configured with: ./../../src/gcc-3.1/configure --srcdir=./../../src/gcc-3.1 --host=sparc-sun-solaris2 --target=sparc-sun-solaris2 --build=sparc-sun-solaris2 --prefix=/opt/mvplocal/gcc-31 --exec_prefix=/opt/mvplocal/gcc-31 --program-prefix= --with-minimal-bfd --with-gnu-ld --with-ld=/opt/mvplocal/gcc-31/bin/ld --with-gnu-as --with-as=/opt/mvplocal/gcc-31/bin/as --program-suffix=3.1 --with-gdb --enable-shared --enable-static --enable-threads --enable-threads=posix --enable-languages=c,c++,java --disable-nls : (reconfigured) ./../../src/gcc-3.1/configure --srcdir=./../../src/gcc-3.1 --host=sparc-sun-solaris2 --target=sparc-sun-solaris2 --build=sparc-sun-solaris2 --prefix=/opt/mvplocal/gcc-31 --exec_prefix=/opt/mvplocal/gcc-31 --program-prefix= --with-minimal-bfd --with-gnu-ld --with-ld=/opt/mvplocal/gcc-31/bin/ld --with-gnu-as --with-as=/opt/mvplocal/gcc-31/bin/as --program-suffix=3.1 --with-gdb --with-stabs --enable-shared --enable-static --enable-threads --enable-threads=posix --enable-languages=c,c++,java --disable-nls Thread model: posix gcc version 3.1 >Description: Compile file using: /opt/mvplocal/bin/g++ -c -O2 -funroll-loops -mcpu=v8 -mtune=ultrasparc -DSVR4 -D_POSIX_C_SOURCE=199506L -DTHREAD -D_REENTRANT -D__EXTENSIONS__ -I/usr/dt/include -I/usr/openwin/include -DUNIXHOST -D_PTHREADS -pipe -D_G_NO_EXTERN_TEMPLATES -ansi -pedantic -Wimplicit -Wconversion -Wsign-compare -Wno-long-long -Wreorder -Woverloaded-virtual -Wsign-promo -DNEWRESULTS -DIN_IS_LIBRARY -DDPC_DEBUG -I../.././include -I../.././include/libinc -I../.././include/localinc -I. -DXMSTRINGDEFINES save_snap.c -o save_snap.o generates duplicate labels to the assembler: {standard input}: Assembler messages: {standard input}:2679: Error: symbol `.LLEHB4751' is already defined {standard input}:2680: Error: symbol `.LLEHE4751' is already defined {standard input}:2681: Error: symbol `.LLEHB4759' is already defined {standard input}:2682: Error: symbol `.LLEHE4759' is already defined {standard input}:2716: Error: symbol `.LLEHB4751' is already defined {standard input}:2719: Error: symbol `.LLEHE4751' is already defined {standard input}:2720: Error: symbol `.LLEHB4759' is already defined {standard input}:2724: Error: symbol `.LLEHE4759' is already defined >How-To-Repeat: Attempt to compile file as specified. Duplicate labels occur. Doesn't happen if -fPIC is specified. >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="save_snap.i" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="save_snap.i" IyAxICJzYXZlX3NuYXAuYyIKc3RhdGljIGNoYXIgKnNhdmVfc25hcF9pZCA9ICIkSWQ6IHNhdmVf c25hcC5jLHYgMS4yIDIwMDIvMDEvMjUgMjE6MTc6NTYgYmFydG8gRXhwICQgKGMpIE1WUCI7Cgoj IDEgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAxIDMgNAogCiAKCiAKIAogCgogCgoKCgogCgoKCgoK CiNwcmFnbWEgaWRlbnQJIkAoIylzdGRpby5oCTEuNzgJOTkvMTIvMDggU01JIgkKCiMgMSAiL3Vz ci9pbmNsdWRlL2lzby9zdGRpb19pc28uaCIgMSAzIDQKIAogCgogCiAKIAoKIAoKCgoKIAoKCgoK CgoKCgoKCiAKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKXN0ZGlvX2lzby5oCTEuMgk5OS8xMC8y NSBTTUkiCiAKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEgMyA0CiAK CgoKCiAKIAogCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpZmVhdHVyZV90ZXN0cy5oCTEuMTgJOTkv MDcvMjYgU01JIgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDEgMyA0CiAKCgoK CgoKCiNwcmFnbWEgaWRlbnQJIkAoIylpc2FfZGVmcy5oCTEuMjAJOTkvMDUvMDQgU01JIgoKIAoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCgogCgoKCgoKIyAy NjcgIi91c3IvaW5jbHVkZS9zeXMvaXNhX2RlZnMuaCIgMyA0CgoKIAoKCgoKCgogCgoKCgoKCiAK CgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKIAoKCgoKCiAKCgoKCgoKCiAKCgoK CgoKCgogCgoKCiMgMzY2ICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDMgNAoKCiAKCgoK CgoKCgoKCgp9CgoKCiMgMTUgIi91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAyIDMg NAoKCgpleHRlcm4gIkMiIHsKCgogCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoK CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgogCgoKCgoKCn0KCgoKIyAzNSAiL3Vzci9pbmNsdWRlL2lzby9zdGRpb19pc28uaCIg MiAzIDQKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy92YV9saXN0LmgiIDEgMyA0CiAKCgoKCgoKCiNw cmFnbWEgaWRlbnQJIkAoIyl2YV9saXN0LmgJMS4xMgk5OS8wNS8wNCBTTUkiCgogCgoKCgoKCgoK CgpleHRlcm4gIkMiIHsKCgoKdHlwZWRlZiB2b2lkICpfX3ZhX2xpc3Q7CgoKCgoKfQoKCgojIDM2 ICIvdXNyL2luY2x1ZGUvaXNvL3N0ZGlvX2lzby5oIiAyIDMgNAoKIyAxICIvdXNyL2luY2x1ZGUv c3RkaW9fdGFnLmgiIDEgMyA0CiAKCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylzdGRpb190YWcu aAkxLjMJOTgvMDQvMjAgU01JIgoKCmV4dGVybiAiQyIgewoKCgoKCgoKCnR5cGVkZWYgc3RydWN0 IEZJTEUgIF9fRklMRTsKCgoKfQoKCgojIDM3ICIvdXNyL2luY2x1ZGUvaXNvL3N0ZGlvX2lzby5o IiAyIDMgNAoKIyAxICIvdXNyL2luY2x1ZGUvc3RkaW9faW1wbC5oIiAxIDMgNAogCgoKCgoKCgoj cHJhZ21hIGlkZW50CSJAKCMpc3RkaW9faW1wbC5oCTEuOAk5OS8wNi8xMCBTTUkiCgoKCgpleHRl cm4gIkMiIHsKCgoKCgoKCnR5cGVkZWYgaW50CXNzaXplX3Q7CQkgCgoKCiMgMzYgIi91c3IvaW5j bHVkZS9zdGRpb19pbXBsLmgiIDMgNAoKCnN0cnVjdCBGSUxFIAkgCnsKCgoKCglzc2l6ZV90CQlf Y250OwkgCgl1bnNpZ25lZCBjaGFyCSpfcHRyOwkgCgoJdW5zaWduZWQgY2hhcgkqX2Jhc2U7CSAK CXVuc2lnbmVkIGNoYXIJX2ZsYWc7CSAKCXVuc2lnbmVkIGNoYXIJX2ZpbGU7CSAKCXVuc2lnbmVk CV9fb3JpZW50YXRpb246MjsgIAoJdW5zaWduZWQJX19pb25vbG9jazoxOwkgCgl1bnNpZ25lZAlf X2ZpbGxlcjo1Owp9OwoKCgoKfQoKCgojIDM4ICIvdXNyL2luY2x1ZGUvaXNvL3N0ZGlvX2lzby5o IiAyIDMgNAoKCiAKCgoKCgoKCgpleHRlcm4gIkMiIHsKCgoKIAoKCgoKCgoKIAp0eXBlZGVmIHVu aW9uIHsKCWRvdWJsZQlfZDsKCWludAlfbFsyXTsKfSBfX2xvbmdsb25nX3Q7CgoKCgoKCgoKCnR5 cGVkZWYJX19GSUxFIEZJTEU7CgoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGludAlzaXplX3Q7CQkg CgoKCgp0eXBlZGVmIGxvbmcJCWZwb3NfdDsKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gX19GSUxFCV9faW9iWzIwIF07CgoK CgoKCgoKCgoKCgoKCgpleHRlcm4gaW50CXJlbW92ZShjb25zdCBjaGFyICopOwpleHRlcm4gaW50 CXJlbmFtZShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBGSUxFCSp0bXBmaWxl KHZvaWQpOwpleHRlcm4gY2hhcgkqdG1wbmFtKGNoYXIgKik7CmV4dGVybiBpbnQJZmNsb3NlKEZJ TEUgKik7CmV4dGVybiBpbnQJZmZsdXNoKEZJTEUgKik7CmV4dGVybiBGSUxFCSpmb3Blbihjb25z dCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBGSUxFCSpmcmVvcGVuKGNvbnN0IGNoYXIg KiwgY29uc3QgY2hhciAqLCBGSUxFICopOwpleHRlcm4gdm9pZAlzZXRidWYoRklMRSAqLCBjaGFy ICopOwpleHRlcm4gaW50CXNldHZidWYoRklMRSAqLCBjaGFyICosIGludCwgc2l6ZV90KTsKIApl eHRlcm4gaW50CWZwcmludGYoRklMRSAqLCBjb25zdCBjaGFyICosIC4uLik7CiAKZXh0ZXJuIGlu dAlmc2NhbmYoRklMRSAqLCBjb25zdCBjaGFyICosIC4uLik7CiAKZXh0ZXJuIGludAlwcmludGYo Y29uc3QgY2hhciAqLCAuLi4pOwogCmV4dGVybiBpbnQJc2NhbmYoY29uc3QgY2hhciAqLCAuLi4p OwogCmV4dGVybiBpbnQJc3ByaW50ZihjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKIApleHRl cm4gaW50CXNzY2FuZihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKZXh0ZXJuIGlu dAl2ZnByaW50ZihGSUxFICosIGNvbnN0IGNoYXIgKiwgX192YV9saXN0KTsKZXh0ZXJuIGludAl2 cHJpbnRmKGNvbnN0IGNoYXIgKiwgX192YV9saXN0KTsKZXh0ZXJuIGludAl2c3ByaW50ZihjaGFy ICosIGNvbnN0IGNoYXIgKiwgX192YV9saXN0KTsKZXh0ZXJuIGludAlmZ2V0YyhGSUxFICopOwpl eHRlcm4gY2hhcgkqZmdldHMoY2hhciAqLCBpbnQsIEZJTEUgKik7CmV4dGVybiBpbnQJZnB1dGMo aW50LCBGSUxFICopOwpleHRlcm4gaW50CWZwdXRzKGNvbnN0IGNoYXIgKiwgRklMRSAqKTsKCgpl eHRlcm4gaW50CWdldGMoRklMRSAqKTsKZXh0ZXJuIGludAlwdXRjKGludCwgRklMRSAqKTsKCgoK ZXh0ZXJuIGludAlnZXRjaGFyKHZvaWQpOwpleHRlcm4gaW50CXB1dGNoYXIoaW50KTsKCmV4dGVy biBjaGFyCSpnZXRzKGNoYXIgKik7CmV4dGVybiBpbnQJcHV0cyhjb25zdCBjaGFyICopOwpleHRl cm4gaW50CXVuZ2V0YyhpbnQsIEZJTEUgKik7CmV4dGVybiBzaXplX3QJZnJlYWQodm9pZCAqLCBz aXplX3QsIHNpemVfdCwgRklMRSAqKTsKZXh0ZXJuIHNpemVfdAlmd3JpdGUoY29uc3Qgdm9pZCAq LCBzaXplX3QsIHNpemVfdCwgRklMRSAqKTsKZXh0ZXJuIGludAlmZ2V0cG9zKEZJTEUgKiwgZnBv c190ICopOwpleHRlcm4gaW50CWZzZWVrKEZJTEUgKiwgbG9uZywgaW50KTsKZXh0ZXJuIGludAlm c2V0cG9zKEZJTEUgKiwgY29uc3QgZnBvc190ICopOwpleHRlcm4gbG9uZwlmdGVsbChGSUxFICop OwpleHRlcm4gdm9pZAlyZXdpbmQoRklMRSAqKTsKCgpleHRlcm4gdm9pZAljbGVhcmVycihGSUxF ICopOwpleHRlcm4gaW50CWZlb2YoRklMRSAqKTsKZXh0ZXJuIGludAlmZXJyb3IoRklMRSAqKTsK CmV4dGVybiB2b2lkCXBlcnJvcihjb25zdCBjaGFyICopOwoKCmV4dGVybiBpbnQJX19maWxidWYo RklMRSAqKTsKZXh0ZXJuIGludAlfX2Zsc2J1ZihpbnQsIEZJTEUgKik7CgoKIyAyNzUgIi91c3Iv aW5jbHVkZS9pc28vc3RkaW9faXNvLmgiIDMgNAoKCgoKCgoKCiMgMzMxICIvdXNyL2luY2x1ZGUv aXNvL3N0ZGlvX2lzby5oIiAzIDQKCgoKCgp9CgoKCiMgMjIgIi91c3IvaW5jbHVkZS9zdGRpby5o IiAyIDMgNAoKCiAKCgoKCgoKCiAKCgoKIyA4MSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMgNAoK CgpleHRlcm4gIkMiIHsKCgoKCgoKdHlwZWRlZiBsb25nCQlvZmZfdDsKCgoKCgoKCnR5cGVkZWYg X19sb25nbG9uZ190CW9mZjY0X3Q7CgoKCgoKCgoKCnR5cGVkZWYgX19sb25nbG9uZ190CWZwb3M2 NF90OwoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuIHVuc2lnbmVkIGNoYXIJIF9z aWJ1ZltdLCBfc29idWZbXTsKCgogCiMgMTc2ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMyA0CgoK CmV4dGVybiB1bnNpZ25lZCBjaGFyCSpfYnVmZW5kdGFiW107CmV4dGVybiBGSUxFCQkqX2xhc3Ri dWY7CgoKIAojIDIwNiAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMgNAoKCgoKCmV4dGVybiBjaGFy CSp0bXBuYW1fcihjaGFyICopOwoKCgpleHRlcm4gdm9pZCBzZXRidWZmZXIoRklMRSAqLCBjaGFy ICosIHNpemVfdCk7CmV4dGVybiBpbnQgc2V0bGluZWJ1ZihGSUxFICopOwoKCgoKIApleHRlcm4g aW50CXNucHJpbnRmKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIC4uLik7CgoKCgpleHRl cm4gaW50CXZzbnByaW50ZihjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCBfX3ZhX2xpc3Qp OwoKCiAKCgoKCgpleHRlcm4gRklMRQkqZmRvcGVuKGludCwgY29uc3QgY2hhciAqKTsKZXh0ZXJu IGNoYXIJKmN0ZXJtaWQoY2hhciAqKTsKZXh0ZXJuIGludAlmaWxlbm8oRklMRSAqKTsKCgoKIAoK CgoKZXh0ZXJuIHZvaWQJZmxvY2tmaWxlKEZJTEUgKik7CmV4dGVybiBpbnQJZnRyeWxvY2tmaWxl KEZJTEUgKik7CmV4dGVybiB2b2lkCWZ1bmxvY2tmaWxlKEZJTEUgKik7CmV4dGVybiBpbnQJZ2V0 Y191bmxvY2tlZChGSUxFICopOwpleHRlcm4gaW50CWdldGNoYXJfdW5sb2NrZWQodm9pZCk7CmV4 dGVybiBpbnQJcHV0Y191bmxvY2tlZChpbnQsIEZJTEUgKik7CmV4dGVybiBpbnQJcHV0Y2hhcl91 bmxvY2tlZChpbnQpOwoKCgogCgoKCgpleHRlcm4gRklMRQkqcG9wZW4oY29uc3QgY2hhciAqLCBj b25zdCBjaGFyICopOwpleHRlcm4gY2hhcgkqY3VzZXJpZChjaGFyICopOwpleHRlcm4gY2hhcgkq dGVtcG5hbShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQJZ2V0b3B0KGlu dCwgY2hhciAqY29uc3QgKiwgY29uc3QgY2hhciAqKTsKCmV4dGVybiBpbnQJZ2V0c3Vib3B0KGNo YXIgKiosIGNoYXIgKmNvbnN0ICosIGNoYXIgKiopOwoKZXh0ZXJuIGNoYXIJKm9wdGFyZzsKZXh0 ZXJuIGludAlvcHRpbmQsIG9wdGVyciwgb3B0b3B0OwpleHRlcm4gaW50CWdldHcoRklMRSAqKTsK ZXh0ZXJuIGludAlwdXR3KGludCwgRklMRSAqKTsKZXh0ZXJuIGludAlwY2xvc2UoRklMRSAqKTsK CgoKIAoKCgpleHRlcm4gaW50CWZzZWVrbyhGSUxFICosIG9mZl90LCBpbnQpOwpleHRlcm4gb2Zm X3QJZnRlbGxvKEZJTEUgKik7CgoKIAoKCgoKCmV4dGVybiBGSUxFCSpmb3BlbjY0KGNvbnN0IGNo YXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIEZJTEUJKmZyZW9wZW42NChjb25zdCBjaGFyICos IGNvbnN0IGNoYXIgKiwgRklMRSAqKTsKZXh0ZXJuIEZJTEUJKnRtcGZpbGU2NCh2b2lkKTsKZXh0 ZXJuIGludAlmZ2V0cG9zNjQoRklMRSAqLCBmcG9zNjRfdCAqKTsKZXh0ZXJuIGludAlmc2V0cG9z NjQoRklMRSAqLCBjb25zdCBmcG9zNjRfdCAqKTsKZXh0ZXJuIGludAlmc2Vla282NChGSUxFICos IG9mZjY0X3QsIGludCk7CmV4dGVybiBvZmY2NF90CWZ0ZWxsbzY0KEZJTEUgKik7CgoKIyAzNjYg Ii91c3IvaW5jbHVkZS9zdGRpby5oIiAzIDQKCgoKCgoKCgoKCgoKCgoKIyAzODkgIi91c3IvaW5j bHVkZS9zdGRpby5oIiAzIDQKCgoKCgoKCgoKfQoKCgojIDMgInNhdmVfc25hcC5jIiAyCgojIDEg Ii91c3IvaW5jbHVkZS91bmlzdGQuaCIgMSAzIDQKIAogCgogCiAKIAoKIAoKCgoKCgoKI3ByYWdt YSBpZGVudAkiQCgjKXVuaXN0ZC5oCTEuNTgJOTkvMTEvMTEgU01JIgkKCgoKIyAxICIvdXNyL2lu Y2x1ZGUvc3lzL3R5cGVzLmgiIDEgMyA0CiAKIAoKIAogCiAKCiAKCgoKCgoKCiNwcmFnbWEgaWRl bnQJIkAoIyl0eXBlcy5oCTEuNjYJMDAvMDIvMTQgU01JIgoKCgoKIAoKCiMgMSAiL3Vzci9pbmNs dWRlL3N5cy9tYWNodHlwZXMuaCIgMSAzIDQKIAoKCgoKIAogCgogCiAKIAoKCgoKI3ByYWdtYSBp ZGVudAkiQCgjKW1hY2h0eXBlcy5oCTEuMTMJOTkvMDUvMDQgU01JIgoKCgoKZXh0ZXJuICJDIiB7 CgoKIAoKCgoKCgoKCnR5cGVkZWYJc3RydWN0CV9sYWJlbF90IHsgbG9uZyB2YWxbMl07IH0gbGFi ZWxfdDsKCgoKdHlwZWRlZgl1bnNpZ25lZCBjaGFyCWxvY2tfdDsJCSAKCgp9CgoKCiMgMjQgIi91 c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzIDQKCgogCgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNs dWRlL3N5cy9pbnRfdHlwZXMuaCIgMSAzIDQKIAoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKWlu dF90eXBlcy5oCTEuNgk5Ny8wOC8yMCBTTUkiCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCmV4dGVybiAiQyIgewoKCiAKCgoKCgoKCgoKCgoKCnR5cGVkZWYgY2hhcgkJCWludDhf dDsKCgoKCgp0eXBlZGVmIHNob3J0CQkJaW50MTZfdDsKdHlwZWRlZiBpbnQJCQlpbnQzMl90OwoK CgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhcgkJdWludDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBz aG9ydAkJdWludDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50CQl1aW50MzJfdDsKCgoKCgoKCgog CgoKCgoKCgp0eXBlZGVmIGludDMyX3QJCQlpbnRtYXhfdDsKdHlwZWRlZiB1aW50MzJfdAkJdWlu dG1heF90OwoKCiAKCgoKCgoKCgp0eXBlZGVmCWludAkJCWludHB0cl90Owp0eXBlZGVmCXVuc2ln bmVkIGludAkJdWludHB0cl90OwoKCiAKCgoKCnR5cGVkZWYgY2hhcgkJCWludF9sZWFzdDhfdDsK CgoKCgp0eXBlZGVmIHNob3J0CQkJaW50X2xlYXN0MTZfdDsKdHlwZWRlZiBpbnQJCQlpbnRfbGVh c3QzMl90OwoKCgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhcgkJdWludF9sZWFzdDhfdDsKdHlw ZWRlZiB1bnNpZ25lZCBzaG9ydAkJdWludF9sZWFzdDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50 CQl1aW50X2xlYXN0MzJfdDsKCgoKCgoKCgoKfQoKCgojIDM2ICIvdXNyL2luY2x1ZGUvc3lzL3R5 cGVzLmgiIDIgMyA0CgoKCgoKCgoKZXh0ZXJuICJDIiB7CgoKIAoKCgoKCgoKCiAKdHlwZWRlZiB1 bmlvbiB7Cglkb3VibGUJX2Q7CglpbnQzMl90CV9sWzJdOwp9IGxvbmdsb25nX3Q7CnR5cGVkZWYg dW5pb24gewoJZG91YmxlCQlfZDsKCXVpbnQzMl90CV9sWzJdOwp9IHVfbG9uZ2xvbmdfdDsKCgog CgoKCgoKCgoKdHlwZWRlZiBsb25nCQl0X3NjYWxhcl90OwkgCnR5cGVkZWYgdW5zaWduZWQgbG9u Zwl0X3VzY2FsYXJfdDsKCgogCgoKdHlwZWRlZgl1bnNpZ25lZCBjaGFyCXVjaGFyX3Q7CnR5cGVk ZWYJdW5zaWduZWQgc2hvcnQJdXNob3J0X3Q7CnR5cGVkZWYJdW5zaWduZWQgaW50CXVpbnRfdDsK dHlwZWRlZgl1bnNpZ25lZCBsb25nCXVsb25nX3Q7Cgp0eXBlZGVmCWNoYXIJCSpjYWRkcl90Owkg CnR5cGVkZWYJbG9uZwkJZGFkZHJfdDsJIAp0eXBlZGVmCXNob3J0CQljbnRfdDsJCSAKCgp0eXBl ZGVmCXVsb25nX3QJCXBhZGRyX3Q7CSAKCgoKCgoKCgoKdHlwZWRlZglpbnQJcHRyZGlmZl90OwkJ IAoKCgogCgoKdHlwZWRlZgl1bG9uZ190CQlwZm5fdDsJCSAKdHlwZWRlZgl1bG9uZ190CQlwZ2Nu dF90OwkgCnR5cGVkZWYJbG9uZwkJc3BnY250X3Q7CSAKCnR5cGVkZWYJdWNoYXJfdAkJdXNlX3Q7 CQkgCnR5cGVkZWYJc2hvcnQJCXN5c2lkX3Q7CnR5cGVkZWYJc2hvcnQJCWluZGV4X3Q7CnR5cGVk ZWYgdm9pZAkJKnRpbWVvdXRfaWRfdDsJIAp0eXBlZGVmIHZvaWQJCSpidWZjYWxsX2lkX3Q7CSAK CiAKCgoKCgoKCiMgMTQ1ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAoKCgp0eXBlZGVm IHVsb25nX3QJCWlub190OwkJIAp0eXBlZGVmIGxvbmcJCWJsa2NudF90OwkgCnR5cGVkZWYgdWxv bmdfdAkJZnNibGtjbnRfdDsJIAp0eXBlZGVmIHVsb25nX3QJCWZzZmlsY250X3Q7CSAKCgoKCgoK CgoKCgoKCgp0eXBlZGVmIHVfbG9uZ2xvbmdfdAlpbm82NF90OwkgCnR5cGVkZWYgbG9uZ2xvbmdf dAlibGtjbnQ2NF90OwkgCnR5cGVkZWYgdV9sb25nbG9uZ190CWZzYmxrY250NjRfdDsJIAp0eXBl ZGVmIHVfbG9uZ2xvbmdfdAlmc2ZpbGNudDY0X3Q7CSAKCgoKCgoKdHlwZWRlZglsb25nCQlibGtz aXplX3Q7CSAKCgoKdHlwZWRlZiBlbnVtIHsgX0JfRkFMU0UsIF9CX1RSVUUgfSBib29sZWFuX3Q7 CgoKCgogCgoKCgoKCgoKCgp0eXBlZGVmIHVuaW9uIHsKCWRvdWJsZSAgIF9kOwoJaW50MzJfdCAg X2xbMl07Cn0gcGFkNjRfdDsKdHlwZWRlZiB1bmlvbiB7Cglkb3VibGUgICBfZDsKCXVpbnQzMl90 IF9sWzJdOwp9IHVwYWQ2NF90OwoKCnR5cGVkZWYJbG9uZ2xvbmdfdAlvZmZzZXRfdDsKdHlwZWRl Zgl1X2xvbmdsb25nX3QJdV9vZmZzZXRfdDsKdHlwZWRlZiB1X2xvbmdsb25nX3QJbGVuX3Q7CnR5 cGVkZWYJbG9uZ2xvbmdfdAlkaXNrYWRkcl90OwoKIAoKCgoKIyAyMjQgIi91c3IvaW5jbHVkZS9z eXMvdHlwZXMuaCIgMyA0CgoKCnR5cGVkZWYgdW5pb24gewoJb2Zmc2V0X3QJX2Y7CSAKCXN0cnVj dCB7CgkJaW50MzJfdAlfdTsJIAoJCWludDMyX3QJX2w7CSAKCX0gX3A7Cn0gbGxvZmZfdDsKCgoj IDI0NCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKCgoKdHlwZWRlZiB1bmlvbiB7Cglk aXNrYWRkcl90CV9mOwkgCglzdHJ1Y3QgewoJCWludDMyX3QJX3U7CSAKCQlpbnQzMl90CV9sOwkg Cgl9IF9wOwp9IGxsZGFkZHJfdDsKCgp0eXBlZGVmIHVpbnRfdCBrX2ZsdHNldF90OwkgCgogCgoK CgoKCgoKCgoKdHlwZWRlZglsb25nCQlpZF90OwkJIAoKCiAKCgoKdHlwZWRlZiB1aW50X3QJCXVz ZWNvbmRzX3Q7CSAKCgoKdHlwZWRlZiBsb25nCXN1c2Vjb25kc190OwkgCgoKIAoKCgoKCgp0eXBl ZGVmIHVsb25nX3QJbWFqb3JfdDsJIAp0eXBlZGVmIHVsb25nX3QJbWlub3JfdDsJIAoKCiAKCgp0 eXBlZGVmIHNob3J0CXByaV90OwoKIAoKCgoKCgoKCgoKdHlwZWRlZgl1c2hvcnRfdCBvX21vZGVf dDsJCSAKdHlwZWRlZiBzaG9ydAlvX2Rldl90OwkJIAp0eXBlZGVmCXVzaG9ydF90IG9fdWlkX3Q7 CQkgCnR5cGVkZWYJb191aWRfdAlvX2dpZF90OwkJIAp0eXBlZGVmCXNob3J0CW9fbmxpbmtfdDsJ CSAKdHlwZWRlZiBzaG9ydAlvX3BpZF90OwkJIAp0eXBlZGVmIHVzaG9ydF90IG9faW5vX3Q7CQkg CgoKIAoKCnR5cGVkZWYJaW50CWtleV90OwkJCSAKCgoKdHlwZWRlZgl1bG9uZ190CW1vZGVfdDsJ CQkgCgoKCgoKCgp0eXBlZGVmCWxvbmcJdWlkX3Q7CQkJIAoKCgp0eXBlZGVmCXVpZF90CWdpZF90 OwkJCSAKCnR5cGVkZWYgaWRfdCAgICB0YXNraWRfdDsKdHlwZWRlZiBpZF90ICAgIHByb2ppZF90 OwoKIAoKCgoKdHlwZWRlZgl1bnNpZ25lZCBpbnQJcHRocmVhZF90OwkgCnR5cGVkZWYJdW5zaWdu ZWQgaW50CXB0aHJlYWRfa2V5X3Q7CSAKCnR5cGVkZWYJc3RydWN0CV9wdGhyZWFkX211dGV4IHsJ CSAKCXN0cnVjdCB7CgkJdWludDE2X3QJX19wdGhyZWFkX211dGV4X2ZsYWcxOwoJCXVpbnQ4X3QJ CV9fcHRocmVhZF9tdXRleF9mbGFnMjsKCQl1aW50OF90CQlfX3B0aHJlYWRfbXV0ZXhfY2VpbGlu ZzsKCQl1aW50MzJfdCAJX19wdGhyZWFkX211dGV4X3R5cGU7Cgl9IF9fcHRocmVhZF9tdXRleF9m bGFnczsKCXVuaW9uIHsKCQlzdHJ1Y3QgewoJCQl1aW50OF90CV9fcHRocmVhZF9tdXRleF9wYWRb OF07CgkJfSBfX3B0aHJlYWRfbXV0ZXhfbG9jazY0OwoJCXVwYWQ2NF90IF9fcHRocmVhZF9tdXRl eF9vd25lcjY0OwoJfSBfX3B0aHJlYWRfbXV0ZXhfbG9jazsKCXVwYWQ2NF90IF9fcHRocmVhZF9t dXRleF9kYXRhOwp9IHB0aHJlYWRfbXV0ZXhfdDsKCnR5cGVkZWYJc3RydWN0CV9wdGhyZWFkX2Nv bmQgewkJIAoJc3RydWN0IHsKCQl1aW50OF90CQlfX3B0aHJlYWRfY29uZF9mbGFnWzRdOwoJCXVp bnQzMl90IAlfX3B0aHJlYWRfY29uZF90eXBlOwoJfSBfX3B0aHJlYWRfY29uZF9mbGFnczsKCXVw YWQ2NF90IF9fcHRocmVhZF9jb25kX2RhdGE7Cn0gcHRocmVhZF9jb25kX3Q7CgogCgoKdHlwZWRl ZglzdHJ1Y3QgX3B0aHJlYWRfcndsb2NrIHsJIAoJaW50MzJfdAkJX19wdGhyZWFkX3J3bG9ja19y ZWFkZXJzOwoJdWludDE2X3QJX19wdGhyZWFkX3J3bG9ja190eXBlOwoJdWludDE2X3QJX19wdGhy ZWFkX3J3bG9ja19tYWdpYzsKCXVwYWQ2NF90CV9fcHRocmVhZF9yd2xvY2tfcGFkMVszXTsKCXVw YWQ2NF90CV9fcHRocmVhZF9yd2xvY2tfcGFkMlsyXTsKCXVwYWQ2NF90CV9fcHRocmVhZF9yd2xv Y2tfcGFkM1syXTsKfSBwdGhyZWFkX3J3bG9ja190OwoKIAoKCnR5cGVkZWYgc3RydWN0IF9wdGhy ZWFkX2F0dHIgewoJdm9pZAkqX19wdGhyZWFkX2F0dHJwOwp9IHB0aHJlYWRfYXR0cl90OwoKCiAK Cgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9tdXRleGF0dHIgewoJdm9pZAkqX19wdGhyZWFkX211 dGV4YXR0cnA7Cn0gcHRocmVhZF9tdXRleGF0dHJfdDsKCgogCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0 aHJlYWRfY29uZGF0dHIgewoJdm9pZAkqX19wdGhyZWFkX2NvbmRhdHRycDsKfSBwdGhyZWFkX2Nv bmRhdHRyX3Q7CgogCgoKdHlwZWRlZglzdHJ1Y3QJX29uY2UgewoJdXBhZDY0X3QJX19wdGhyZWFk X29uY2VfcGFkWzRdOwp9IHB0aHJlYWRfb25jZV90OwoKIAoKCgp0eXBlZGVmIHN0cnVjdCBfcHRo cmVhZF9yd2xvY2thdHRyIHsKCXZvaWQJKl9fcHRocmVhZF9yd2xvY2thdHRycDsKfSBwdGhyZWFk X3J3bG9ja2F0dHJfdDsKCnR5cGVkZWYgdWxvbmdfdAlkZXZfdDsJCQkgCgoKCgoKdHlwZWRlZgl1 bG9uZ190CW5saW5rX3Q7CQkgCnR5cGVkZWYJbG9uZwlwaWRfdDsJCQkgCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgp0eXBlZGVmCWxvbmcJCXRpbWVfdDsJIAoKCgoKdHlwZWRlZglsb25nCQljbG9ja190 OyAgCgoKCgp0eXBlZGVmCWludAljbG9ja2lkX3Q7CSAKCgoKCnR5cGVkZWYJaW50CXRpbWVyX3Q7 CSAKCgoKCgogCnR5cGVkZWYJdW5zaWduZWQgY2hhcgl1bmNoYXI7CnR5cGVkZWYJdW5zaWduZWQg c2hvcnQJdXNob3J0Owp0eXBlZGVmCXVuc2lnbmVkIGludAl1aW50Owp0eXBlZGVmCXVuc2lnbmVk IGxvbmcJdWxvbmc7CiAKCiMgNTA2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAoKCgoK IAoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCnR5cGVkZWYgdW5zaWduZWQgY2hhcgl1X2NoYXI7CnR5 cGVkZWYgdW5zaWduZWQgc2hvcnQJdV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQJdV9pbnQ7 CnR5cGVkZWYgdW5zaWduZWQgbG9uZwl1X2xvbmc7CnR5cGVkZWYgc3RydWN0IF9xdWFkIHsgaW50 IHZhbFsyXTsgfSBxdWFkX3Q7CSAKdHlwZWRlZiBxdWFkX3QJCXF1YWQ7CQkJIAogCgogCgoKCiMg MSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMSAzIDQKIAogCiAKCiAKIAogCgoKCgojcHJh Z21hIGlkZW50CSJAKCMpc2VsZWN0LmgJMS4xNgk5OC8wNC8yNyBTTUkiCQoKCgoKIyAxICIvdXNy L2luY2x1ZGUvc3lzL3RpbWUuaCIgMSAzIDQKIAogCgogCiAKIAoKIAoKCgoKCiAKCgoKCgoKCiNw cmFnbWEgaWRlbnQJIkAoIyl0aW1lLmgJMi42NQkwMC8wOC8yNCBTTUkiCQoKCgogCgoKCgoKZXh0 ZXJuICJDIiB7CgoKCgoKCgoKCgoKCgoKCgpzdHJ1Y3QgdGltZXZhbCB7Cgl0aW1lX3QJCXR2X3Nl YzsJCSAKCXN1c2Vjb25kc190CXR2X3VzZWM7CSAKfTsKCiMgNzQgIi91c3IvaW5jbHVkZS9zeXMv dGltZS5oIiAzIDQKCgoKCgoKCgpzdHJ1Y3QgdGltZXpvbmUgewoJaW50CXR6X21pbnV0ZXN3ZXN0 OwkgCglpbnQJdHpfZHN0dGltZTsJIAp9OwoKCgoKCn0KCgogCgoKCgoKIyAxICIvdXNyL2luY2x1 ZGUvc3lzL3R5cGVzLmgiIDEgMyA0CiAKIAoKIAogCiAKCiAKCgoKCiMgNTY0ICIvdXNyL2luY2x1 ZGUvc3lzL3R5cGVzLmgiIDMgNAoKIyAxMDAgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAyIDMg NAoKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgog CgoKCgoKCgkJCQkgCgkJCQkgCgoJCQkJIAoJCQkJIAoKCnN0cnVjdAlpdGltZXJ2YWwgewoJc3Ry dWN0CXRpbWV2YWwgaXRfaW50ZXJ2YWw7CSAKCXN0cnVjdAl0aW1ldmFsIGl0X3ZhbHVlOwkgCn07 CgojIDE4MSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMgNAoKCgoKCgoKIAoKCgoKCgoKCgoK CiAKCgp0eXBlZGVmCWxvbmdsb25nX3QJaHJ0aW1lX3Q7CgojIDMxMyAiL3Vzci9pbmNsdWRlL3N5 cy90aW1lLmgiIDMgNAoKCgoKCmludCBhZGp0aW1lKHN0cnVjdCB0aW1ldmFsICosIHN0cnVjdCB0 aW1ldmFsICopOwoKCgoKCgoKCgoKaW50IGdldGl0aW1lcihpbnQsIHN0cnVjdCBpdGltZXJ2YWwg Kik7CmludCB1dGltZXMoY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3QgdGltZXZhbCAqKTsKCgoK aW50IHNldGl0aW1lcihpbnQsIHN0cnVjdCBpdGltZXJ2YWwgKiwgc3RydWN0IGl0aW1lcnZhbCAq KTsKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKaW50IHNldHRpbWVvZmRheShzdHJ1 Y3QgdGltZXZhbCAqLCB2b2lkICopOwoKaHJ0aW1lX3QJZ2V0aHJ0aW1lKHZvaWQpOwpocnRpbWVf dAlnZXRocnZ0aW1lKHZvaWQpOwoKCgoKCgoKCgoKCgoKCgoKaW50IGdldHRpbWVvZmRheShzdHJ1 Y3QgdGltZXZhbCAqLCB2b2lkICopOwoKCgoKCgoKIAoKCgoKCgoKCgoKCgojIDEgIi91c3IvaW5j bHVkZS90aW1lLmgiIDEgMyA0CiAKIAoKIAogCiAKCiAKCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAo Iyl0aW1lLmgJMS4zOQk5OS8wOC8xMCBTTUkiCQoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBl cy5oIiAxIDMgNAogCiAKCiAKIAogCgogCgoKCgojIDU2NCAiL3Vzci9pbmNsdWRlL3N5cy90eXBl cy5oIiAzIDQKCiMgMTkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMyA0CgojIDEgIi91c3IvaW5j bHVkZS9pc28vdGltZV9pc28uaCIgMSAzIDQKIAogCgogCiAKIAoKIAoKCgoKIAoKCgoKCgoKCgoK CgoKCiNwcmFnbWEgaWRlbnQJIkAoIyl0aW1lX2lzby5oCTEuMQk5OS8wOC8wOSBTTUkiIAoKCgoK ZXh0ZXJuICJDIiB7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKc3RydWN0CXRt IHsJIAoJaW50CXRtX3NlYzsKCWludAl0bV9taW47CglpbnQJdG1faG91cjsKCWludAl0bV9tZGF5 OwoJaW50CXRtX21vbjsKCWludAl0bV95ZWFyOwoJaW50CXRtX3dkYXk7CglpbnQJdG1feWRheTsK CWludAl0bV9pc2RzdDsKfTsKCgoKCmV4dGVybiBjaGFyICphc2N0aW1lKGNvbnN0IHN0cnVjdCB0 bSAqKTsKZXh0ZXJuIGNsb2NrX3QgY2xvY2sodm9pZCk7CmV4dGVybiBjaGFyICpjdGltZShjb25z dCB0aW1lX3QgKik7CmV4dGVybiBkb3VibGUgZGlmZnRpbWUodGltZV90LCB0aW1lX3QpOwpleHRl cm4gc3RydWN0IHRtICpnbXRpbWUoY29uc3QgdGltZV90ICopOwpleHRlcm4gc3RydWN0IHRtICps b2NhbHRpbWUoY29uc3QgdGltZV90ICopOwpleHRlcm4gdGltZV90IG1rdGltZShzdHJ1Y3QgdG0g Kik7CmV4dGVybiB0aW1lX3QgdGltZSh0aW1lX3QgKik7CmV4dGVybiBzaXplX3Qgc3RyZnRpbWUo Y2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgY29uc3Qgc3RydWN0IHRtICopOwoKIyAxMDYg Ii91c3IvaW5jbHVkZS9pc28vdGltZV9pc28uaCIgMyA0CgoKCgoKCgp9CgoKCiMgMjAgIi91c3Iv aW5jbHVkZS90aW1lLmgiIDIgMyA0CgoKIAoKCgojIDQwICIvdXNyL2luY2x1ZGUvdGltZS5oIiAz IDQKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gc3RydWN0IHRtICpnbXRp bWVfcihjb25zdCB0aW1lX3QgKiwgc3RydWN0IHRtICopOwpleHRlcm4gc3RydWN0IHRtICpsb2Nh bHRpbWVfcihjb25zdCB0aW1lX3QgKiwgc3RydWN0IHRtICopOwoKCgoKCmV4dGVybiBjaGFyICpz dHJwdGltZShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc3RydWN0IHRtICopOwoKCgoKCgoK CgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdGltZV9pbXBsLmgiIDEgMyA0CiAKCgoKCiAK CgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpdGltZV9pbXBsLmgJMS41CTk5LzEwLzA1IFNNSSIK CgoKCmV4dGVybiAiQyIgewoKCgoKCgoKCgogCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgIHRpbWVzcGVj IHsJCSAKCXRpbWVfdAkJdHZfc2VjOwkJIAoJbG9uZwkJdHZfbnNlYzsJIAp9IHRpbWVzcGVjX3Q7 CgojIDU4ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWVfaW1wbC5oIiAzIDQKCgp0eXBlZGVmIHN0cnVj dCB0aW1lc3BlYyB0aW1lc3RydWNfdDsJIAoKCgogCgoKCgoKCgoKCiAKCgoKCnR5cGVkZWYgc3Ry dWN0IGl0aW1lcnNwZWMgewkJIAoJc3RydWN0IHRpbWVzcGVjCWl0X2ludGVydmFsOwkgCglzdHJ1 Y3QgdGltZXNwZWMJaXRfdmFsdWU7CSAKfSBpdGltZXJzcGVjX3Q7CgojIDEwMCAiL3Vzci9pbmNs dWRlL3N5cy90aW1lX2ltcGwuaCIgMyA0CgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoK CgoKCgp9CgoKCiMgODMgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMyA0CgoKIAoKCgoKCgoKCgoK Cgp1bmlvbiBzaWd2YWwgewoJaW50CXNpdmFsX2ludDsJIAoJdm9pZAkqc2l2YWxfcHRyOwkgCn07 CgoKCgpzdHJ1Y3Qgc2lnZXZlbnQgewoJaW50CQlzaWdldl9ub3RpZnk7CSAKCWludAkJc2lnZXZf c2lnbm87CSAKCXVuaW9uIHNpZ3ZhbAlzaWdldl92YWx1ZTsJIAoJdm9pZAkJKCpzaWdldl9ub3Rp ZnlfZnVuY3Rpb24pKHVuaW9uIHNpZ3ZhbCk7CglwdGhyZWFkX2F0dHJfdAkqc2lnZXZfbm90aWZ5 X2F0dHJpYnV0ZXM7CglpbnQJCV9fc2lnZXZfcGFkMjsKfTsKCgpleHRlcm4gaW50IGNsb2NrX2dl dHJlcyhjbG9ja2lkX3QsIHN0cnVjdCB0aW1lc3BlYyAqKTsKZXh0ZXJuIGludCBjbG9ja19nZXR0 aW1lKGNsb2NraWRfdCwgc3RydWN0IHRpbWVzcGVjICopOwpleHRlcm4gaW50IGNsb2NrX3NldHRp bWUoY2xvY2tpZF90LCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKik7CmV4dGVybiBpbnQgdGltZXJf Y3JlYXRlKGNsb2NraWRfdCwgc3RydWN0IHNpZ2V2ZW50ICosIHRpbWVyX3QgKik7CmV4dGVybiBp bnQgdGltZXJfZGVsZXRlKHRpbWVyX3QpOwpleHRlcm4gaW50IHRpbWVyX2dldG92ZXJydW4odGlt ZXJfdCk7CmV4dGVybiBpbnQgdGltZXJfZ2V0dGltZSh0aW1lcl90LCBzdHJ1Y3QgaXRpbWVyc3Bl YyAqKTsKZXh0ZXJuIGludCB0aW1lcl9zZXR0aW1lKHRpbWVyX3QsIGludCwgY29uc3Qgc3RydWN0 IGl0aW1lcnNwZWMgKiwKCQlzdHJ1Y3QgaXRpbWVyc3BlYyAqKTsKZXh0ZXJuIGludCBuYW5vc2xl ZXAoY29uc3Qgc3RydWN0IHRpbWVzcGVjICosIHN0cnVjdCB0aW1lc3BlYyAqKTsKCgoKCmV4dGVy biB2b2lkIHR6c2V0KHZvaWQpOwoKZXh0ZXJuIGNoYXIgKnR6bmFtZVsyXTsKCgpleHRlcm4gbG9u ZyBfc3lzY29uZihpbnQpOwkgCgoJCQkJIAoKCgoKZXh0ZXJuIGxvbmcgdGltZXpvbmU7CmV4dGVy biBpbnQgZGF5bGlnaHQ7CgoKCgoKCgoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdldGRhdGUoY29u c3QgY2hhciAqKTsKCgoKCmV4dGVybiBpbnQgKl9nZXRkYXRlX2Vycl9hZGRyKHZvaWQpOwoKCgoK CiMgMjA2ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKCgogCgoKCiAKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnN0YXRpYyBjaGFyICoKYXNjdGltZV9yKGNvbnN0 IHN0cnVjdCB0bSAqX190bSwgY2hhciAqX19idWYpCnsKCWV4dGVybiBjaGFyICpfX3Bvc2l4X2Fz Y3RpbWVfcihjb25zdCBzdHJ1Y3QgdG0gKiwgY2hhciAqKTsKCXJldHVybiAoX19wb3NpeF9hc2N0 aW1lX3IoX190bSwgX19idWYpKTsKfQpzdGF0aWMgY2hhciAqCmN0aW1lX3IoY29uc3QgdGltZV90 ICpfX3RpbWUsIGNoYXIgKl9fYnVmKQp7CglleHRlcm4gY2hhciAqX19wb3NpeF9jdGltZV9yKGNv bnN0IHRpbWVfdCAqLCBjaGFyICopOwoJcmV0dXJuIChfX3Bvc2l4X2N0aW1lX3IoX190aW1lLCBf X2J1ZikpOwp9CgoKCgoKCgoKCiMgMzEzICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKCgoKCgp9 CgoKCiMgNDA4ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMiAzIDQKCgoKIAoKCgoKCgoKCgoj IDEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDEgMyA0CiAKIAogCgogCiAKIAoKIyAxMDcg Ii91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMgNAoKIyA0MjEgIi91c3IvaW5jbHVkZS9zeXMv dGltZS5oIiAyIDMgNAoKCgoKCgp9CgoKCiMgMTcgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0Lmgi IDIgMyA0CgoKCgpleHRlcm4gIkMiIHsKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZgls b25nCWZkX21hc2s7Cgp0eXBlZGVmCWxvbmcJZmRzX21hc2s7CgogCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKdHlwZWRlZglzdHJ1Y3QgZmRfc2V0IHsKCgoKCWxvbmcJZmRzX2JpdHNbKCgoIDEwMjQg ICkrKCggIChzaXplb2YgKGZkc19tYXNrKSAqIDggKSAgKS0xKSkvKCAgKHNpemVvZiAoZmRzX21h c2spICogOCApICApKSBdOwp9IGZkX3NldDsKCgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuIGludCBz ZWxlY3QoaW50LCBmZF9zZXQgKiwgZmRfc2V0ICosIGZkX3NldCAqLCBzdHJ1Y3QgdGltZXZhbCAq KTsKCgoKCgoKfQoKCgojIDU0NCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMgNAoKCgoK IAoKCgoKCgoKCiAKCgoKfQoKCgojIDIwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMyA0Cgoj IDEgIi91c3IvaW5jbHVkZS9zeXMvdW5pc3RkLmgiIDEgMyA0CiAKCgoKCgoKCgoKIAoKCgoKIAoK CgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIyl1bmlzdGQuaAkxLjM3CTk4LzEwLzI4IFNNSSIJCgoK CgpleHRlcm4gIkMiIHsKCgogCgoKCiAKCgogCgoKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoK CgogCgogCgoKCgoKCgoKIAoKCgoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgog CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKIAoKCgoKCiAKCgoKCgoKCiAKCgoKCgoKCgoKCgoK CgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgogCgogCgoKCgoKCgoKCiAKCgoK CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKfQoKCgojIDIxICIvdXNy L2luY2x1ZGUvdW5pc3RkLmgiIDIgMyA0CgoKCmV4dGVybiAiQyIgewoKCiAKCgoKCgoKCgoKCgoK CiAKCgoKCgoKCgoKCgoKCgoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoK CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKIAojIDE0NiAiL3Vzci9pbmNsdWRl L3VuaXN0ZC5oIiAzIDQKCgogCiMgMTY3ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMgNAoKCgoK ZXh0ZXJuIGludCBhY2Nlc3MoY29uc3QgY2hhciAqLCBpbnQpOwoKCmV4dGVybiBpbnQgYWNjdChj b25zdCBjaGFyICopOwoKZXh0ZXJuIHVuc2lnbmVkIGFsYXJtKHVuc2lnbmVkKTsKCgpleHRlcm4g aW50IGJyayh2b2lkICopOwoKZXh0ZXJuIGludCBjaGRpcihjb25zdCBjaGFyICopOwpleHRlcm4g aW50IGNob3duKGNvbnN0IGNoYXIgKiwgdWlkX3QsIGdpZF90KTsKCgpleHRlcm4gaW50IGNocm9v dChjb25zdCBjaGFyICopOwoKZXh0ZXJuIGludCBjbG9zZShpbnQpOwoKCmV4dGVybiBzaXplX3Qg Y29uZnN0cihpbnQsIGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJuIGNoYXIgKmNyeXB0KGNvbnN0IGNo YXIgKiwgY29uc3QgY2hhciAqKTsKCgoKZXh0ZXJuIGNoYXIgKmN0ZXJtaWQoY2hhciAqKTsKCgpl eHRlcm4gY2hhciAqY3Rlcm1pZF9yKGNoYXIgKik7CgpleHRlcm4gY2hhciAqY3VzZXJpZChjaGFy ICopOwpleHRlcm4gaW50IGR1cChpbnQpOwpleHRlcm4gaW50IGR1cDIoaW50LCBpbnQpOwoKCmV4 dGVybiB2b2lkIGVuY3J5cHQoY2hhciAqLCBpbnQpOwoKZXh0ZXJuIGludCBleGVjbChjb25zdCBj aGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKZXh0ZXJuIGludCBleGVjbGUoY29uc3QgY2hhciAq LCBjb25zdCBjaGFyICosIC4uLik7CmV4dGVybiBpbnQgZXhlY2xwKGNvbnN0IGNoYXIgKiwgY29u c3QgY2hhciAqLCAuLi4pOwpleHRlcm4gaW50IGV4ZWN2KGNvbnN0IGNoYXIgKiwgY2hhciAqY29u c3QgKik7CmV4dGVybiBpbnQgZXhlY3ZlKGNvbnN0IGNoYXIgKiwgY2hhciAqY29uc3QgKiwgY2hh ciAqY29uc3QgKik7CmV4dGVybiBpbnQgZXhlY3ZwKGNvbnN0IGNoYXIgKiwgY2hhciAqY29uc3Qg Kik7CmV4dGVybiB2b2lkIF9leGl0KGludCk7CiAKCgoKCgoKZXh0ZXJuIGludCBmYXR0YWNoKGlu dCwgY29uc3QgY2hhciAqKTsKCgoKZXh0ZXJuIGludCBmY2hkaXIoaW50KTsKZXh0ZXJuIGludCBm Y2hvd24oaW50LCB1aWRfdCwgZ2lkX3QpOwoKCgpleHRlcm4gaW50IGZjaHJvb3QoaW50KTsKCgoK ZXh0ZXJuIGludCBmZGF0YXN5bmMoaW50KTsKCiAKCgoKCgoKZXh0ZXJuIGludCBmZGV0YWNoKGNv bnN0IGNoYXIgKik7CgpleHRlcm4gcGlkX3QgZm9yayh2b2lkKTsKCgpleHRlcm4gcGlkX3QgZm9y azEodm9pZCk7CgpleHRlcm4gbG9uZyBmcGF0aGNvbmYoaW50LCBpbnQpOwoKCmV4dGVybiBpbnQg ZnN5bmMoaW50KTsKCgoKCmV4dGVybiBpbnQgZnRydW5jYXRlKGludCwgb2ZmX3QpOwoKZXh0ZXJu IGNoYXIgKmdldGN3ZChjaGFyICosIHNpemVfdCk7CgoKZXh0ZXJuIGludCBnZXRkdGFibGVzaXpl KHZvaWQpOwoKZXh0ZXJuIGdpZF90IGdldGVnaWQodm9pZCk7CmV4dGVybiB1aWRfdCBnZXRldWlk KHZvaWQpOwpleHRlcm4gZ2lkX3QgZ2V0Z2lkKHZvaWQpOwpleHRlcm4gaW50IGdldGdyb3Vwcyhp bnQsIGdpZF90ICopOwoKCmV4dGVybiBsb25nIGdldGhvc3RpZCh2b2lkKTsKCgoKCgpleHRlcm4g aW50IGdldGhvc3RuYW1lKGNoYXIgKiwgaW50KTsKCmV4dGVybiBjaGFyICpnZXRsb2dpbih2b2lk KTsKCgpleHRlcm4gaW50ICBnZXRvcHQoaW50LCBjaGFyICpjb25zdCAqLCBjb25zdCBjaGFyICop OwpleHRlcm4gY2hhciAqb3B0YXJnOwpleHRlcm4gaW50ICBvcHRlcnIsIG9wdGluZCwgb3B0b3B0 OwpleHRlcm4gY2hhciAqZ2V0cGFzcyhjb25zdCBjaGFyICopOwoKCgpleHRlcm4gaW50IGdldHBh Z2VzaXplKHZvaWQpOwpleHRlcm4gcGlkX3QgZ2V0cGdpZChwaWRfdCk7CgpleHRlcm4gcGlkX3Qg Z2V0cGlkKHZvaWQpOwpleHRlcm4gcGlkX3QgZ2V0cHBpZCh2b2lkKTsKZXh0ZXJuIHBpZF90IGdl dHBncnAodm9pZCk7CgoKY2hhciAqZ2V0dHh0KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsK CgoKZXh0ZXJuIHBpZF90IGdldHNpZChwaWRfdCk7CgpleHRlcm4gdWlkX3QgZ2V0dWlkKHZvaWQp OwoKCmV4dGVybiBjaGFyICpnZXR3ZChjaGFyICopOwoKIAoKCgoKCgpleHRlcm4gaW50IGlvY3Rs KGludCwgaW50LCAuLi4pOwoKCgpleHRlcm4gaW50IGlzYWV4ZWMoY29uc3QgY2hhciAqLCBjaGFy ICpjb25zdCAqLCBjaGFyICpjb25zdCAqKTsKCmV4dGVybiBpbnQgaXNhdHR5KGludCk7CmV4dGVy biBpbnQgbGluayhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CgoKZXh0ZXJuIGludCBsY2hv d24oY29uc3QgY2hhciAqLCB1aWRfdCwgZ2lkX3QpOwoKCgoKZXh0ZXJuIGludCBsb2NrZihpbnQs IGludCwgb2ZmX3QpOwoKCgpleHRlcm4gaW50IHJlYWRsaW5rKGNvbnN0IGNoYXIgKiwgY2hhciAq LCBzaXplX3QpOwoKZXh0ZXJuIG9mZl90IGxzZWVrKGludCwgb2ZmX3QsIGludCk7CgoKZXh0ZXJu IGludCBuaWNlKGludCk7CgpleHRlcm4gbG9uZyBwYXRoY29uZihjb25zdCBjaGFyICosIGludCk7 CmV4dGVybiBpbnQgcGF1c2Uodm9pZCk7CmV4dGVybiBpbnQgcGlwZShpbnQgKik7CgoKZXh0ZXJu IG9mZnNldF90IGxsc2VlayhpbnQsIG9mZnNldF90LCBpbnQpOwoKCgoKZXh0ZXJuIG9mZl90IHRl bGwoaW50KTsKCgoKZXh0ZXJuIGludCBtaW5jb3JlKGNhZGRyX3QsIHNpemVfdCwgY2hhciAqKTsK CgoKCmV4dGVybiBzc2l6ZV90IHByZWFkKGludCwgdm9pZCAqLCBzaXplX3QsIG9mZl90KTsKCgoK ZXh0ZXJuIHZvaWQgcHJvZmlsKHVuc2lnbmVkIHNob3J0ICosIHNpemVfdCwgdW5zaWduZWQgbG9u ZywgdW5zaWduZWQgaW50KTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0Zm9yayh2b2lkICgqKSAo dm9pZCksIHZvaWQgKCopICh2b2lkKSwgdm9pZCAoKikgKHZvaWQpKTsKCgoKZXh0ZXJuIGxvbmcg cHRyYWNlKGludCwgcGlkX3QsIGxvbmcsIGxvbmcpOwoKCgoKZXh0ZXJuIHNzaXplX3QgcHdyaXRl KGludCwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIG9mZl90KTsKCmV4dGVybiBzc2l6ZV90IHJlYWQo aW50LCB2b2lkICosIHNpemVfdCk7CgoKZXh0ZXJuIGludCByZW5hbWUoY29uc3QgY2hhciAqLCBj b25zdCBjaGFyICopOwoKCgpleHRlcm4gaW50IHJlc29sdmVwYXRoKGNvbnN0IGNoYXIgKiwgY2hh ciAqLCBzaXplX3QpOwoKZXh0ZXJuIGludCBybWRpcihjb25zdCBjaGFyICopOwoKCmV4dGVybiB2 b2lkICpzYnJrKGludHB0cl90KTsKCmV4dGVybiBpbnQgc2V0Z2lkKGdpZF90KTsKCgpleHRlcm4g aW50IHNldGVnaWQoZ2lkX3QpOwoKCgpleHRlcm4gaW50IHNldGdyb3VwcyhpbnQsIGNvbnN0IGdp ZF90ICopOwoKZXh0ZXJuIGludCBzZXRwZ2lkKHBpZF90LCBwaWRfdCk7CgoKZXh0ZXJuIHBpZF90 IHNldHBncnAodm9pZCk7CmV4dGVybiBpbnQgc2V0cmVnaWQoZ2lkX3QsIGdpZF90KTsKZXh0ZXJu IGludCBzZXRyZXVpZCh1aWRfdCwgdWlkX3QpOwoKZXh0ZXJuIHBpZF90IHNldHNpZCh2b2lkKTsK ZXh0ZXJuIGludCBzZXR1aWQodWlkX3QpOwoKCmV4dGVybiBpbnQgc2V0ZXVpZCh1aWRfdCk7Cgpl eHRlcm4gdW5zaWduZWQgc2xlZXAodW5zaWduZWQpOwoKCmV4dGVybiBpbnQgc3RpbWUoY29uc3Qg dGltZV90ICopOwoKCgoKCgoKZXh0ZXJuIGludCBzeW1saW5rKGNvbnN0IGNoYXIgKiwgY29uc3Qg Y2hhciAqKTsKZXh0ZXJuIHZvaWQgc3luYyh2b2lkKTsKCmV4dGVybiBsb25nIHN5c2NvbmYoaW50 KTsKCgoKCgoKCgpleHRlcm4gcGlkX3QgdGNnZXRwZ3JwKGludCk7CmV4dGVybiBpbnQgdGNzZXRw Z3JwKGludCwgcGlkX3QpOwoKCmV4dGVybiBvZmZfdCB0ZWxsKGludCk7CgoKCgpleHRlcm4gaW50 IHRydW5jYXRlKGNvbnN0IGNoYXIgKiwgb2ZmX3QpOwoKZXh0ZXJuIGNoYXIgKnR0eW5hbWUoaW50 KTsKCgpleHRlcm4gdXNlY29uZHNfdCB1YWxhcm0odXNlY29uZHNfdCwgdXNlY29uZHNfdCk7Cgpl eHRlcm4gaW50IHVubGluayhjb25zdCBjaGFyICopOwoKCmV4dGVybiBpbnQgdXNsZWVwKHVzZWNv bmRzX3QpOwoKCgpleHRlcm4gcGlkX3QgdmZvcmsodm9pZCk7CgoKCmV4dGVybiB2b2lkIHZoYW5n dXAodm9pZCk7CgpleHRlcm4gc3NpemVfdCB3cml0ZShpbnQsIGNvbnN0IHZvaWQgKiwgc2l6ZV90 KTsKCgpleHRlcm4gdm9pZCB5aWVsZCh2b2lkKTsKCgogCgoKZXh0ZXJuIGludCBmdHJ1bmNhdGU2 NChpbnQsIG9mZjY0X3QpOwpleHRlcm4gb2ZmNjRfdCBsc2VlazY0KGludCwgb2ZmNjRfdCwgaW50 KTsKZXh0ZXJuIHNzaXplX3QJcHJlYWQ2NChpbnQsIHZvaWQgKiwgc2l6ZV90LCBvZmY2NF90KTsK ZXh0ZXJuIHNzaXplX3QJcHdyaXRlNjQoaW50LCBjb25zdCB2b2lkICosIHNpemVfdCwgb2ZmNjRf dCk7CmV4dGVybiBvZmY2NF90CXRlbGw2NChpbnQpOwpleHRlcm4gaW50CXRydW5jYXRlNjQoY29u c3QgY2hhciAqLCBvZmY2NF90KTsKZXh0ZXJuIGludAlsb2NrZjY0KGludCwgaW50LCBvZmY2NF90 KTsKCgojIDc3MiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzIDQKCgogCgoKCgoKCgojcHJhZ21h IHVua25vd25fY29udHJvbF9mbG93KHZmb3JrKQoKCgogCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnN0YXRpYyBpbnQKZ2V0bG9naW5fcihjaGFyICpfX25h bWUsIGludCBfX2xlbikKewoJZXh0ZXJuIGludCBfX3Bvc2l4X2dldGxvZ2luX3IoY2hhciAqLCBp bnQpOwoJcmV0dXJuIChfX3Bvc2l4X2dldGxvZ2luX3IoX19uYW1lLCBfX2xlbikpOwp9CnN0YXRp YyBpbnQKdHR5bmFtZV9yKGludCBfX2ZpbGRlcywgY2hhciAqX19idWYsIHNpemVfdCBfX3NpemUp CnsKCWV4dGVybiBpbnQgX19wb3NpeF90dHluYW1lX3IoaW50LCBjaGFyICosIHNpemVfdCk7Cgly ZXR1cm4gKF9fcG9zaXhfdHR5bmFtZV9yKF9fZmlsZGVzLCBfX2J1ZiwgX19zaXplKSk7Cn0KCgoK CgoKCgoKIyA4OTIgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CgoKCgoKfQoKCgojIDQgInNh dmVfc25hcC5jIiAyCgojIDEgIi91c3IvaW5jbHVkZS9mY250bC5oIiAxIDMgNAogCgoKCgogCiAK CiAKIAogCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpZmNudGwuaAkxLjE0CTk3LzEyLzA1IFNNSSIJ CgoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAxIDMgNAogCgoKCgogCiAKIAoKIAog CiAKIAoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKXN0YXQuaAkxLjIJOTkvMDUvMTkgU01JIgoKCgoK CmV4dGVybiAiQyIgewoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgojIDE1NiAiL3Vzci9p bmNsdWRlL3N5cy9zdGF0LmgiIDMgNAoKCiAKCgojIDE3OCAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0 LmgiIDMgNAoKCiAKCgoKIyAyMDAgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAzIDQKCgogCgoK CiMgMjMyICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMyA0CgoKc3RydWN0CXN0YXQgewoJZGV2 X3QJCXN0X2RldjsKCWxvbmcJCXN0X3BhZDFbM107CSAKCWlub190CQlzdF9pbm87Cgltb2RlX3QJ CXN0X21vZGU7CglubGlua190CQlzdF9ubGluazsKCXVpZF90CQlzdF91aWQ7CglnaWRfdAkJc3Rf Z2lkOwoJZGV2X3QJCXN0X3JkZXY7Cglsb25nCQlzdF9wYWQyWzJdOwoJb2ZmX3QJCXN0X3NpemU7 CgoJbG9uZwkJc3RfcGFkMzsJIAoKCgoJdGltZXN0cnVjX3QJc3RfYXRpbTsKCXRpbWVzdHJ1Y190 CXN0X210aW07Cgl0aW1lc3RydWNfdAlzdF9jdGltOwoKCgoKCglibGtzaXplX3QJc3RfYmxrc2l6 ZTsKCWJsa2NudF90CXN0X2Jsb2NrczsKCWNoYXIJCXN0X2ZzdHlwZVsxNiBdOwoJbG9uZwkJc3Rf cGFkNFs4XTsJIAp9OwoKCgogCgoKIyAyOTUgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAzIDQK CgpzdHJ1Y3QJc3RhdDY0IHsKCWRldl90CQlzdF9kZXY7Cglsb25nCQlzdF9wYWQxWzNdOwkgCglp bm82NF90CQlzdF9pbm87Cgltb2RlX3QJCXN0X21vZGU7CglubGlua190CQlzdF9ubGluazsKCXVp ZF90CQlzdF91aWQ7CglnaWRfdAkJc3RfZ2lkOwoJZGV2X3QJCXN0X3JkZXY7Cglsb25nCQlzdF9w YWQyWzJdOwoJb2ZmNjRfdAkJc3Rfc2l6ZTsKCgoJdGltZXN0cnVjX3QJc3RfYXRpbTsKCXRpbWVz dHJ1Y190CXN0X210aW07Cgl0aW1lc3RydWNfdAlzdF9jdGltOwoKCgoKCglibGtzaXplX3QJc3Rf Ymxrc2l6ZTsKCWJsa2NudDY0X3QJc3RfYmxvY2tzOwoJY2hhcgkJc3RfZnN0eXBlWzE2IF07Cgls b25nCQlzdF9wYWQ0WzhdOwkgCn07CgoKCgoKCgoKCgoKCgoKCgoKIyAzOTMgIi91c3IvaW5jbHVk ZS9zeXMvc3RhdC5oIiAzIDQKCgogCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCiAKCgoKCiMgNDYxICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMyA0 CgoKCgoKCgoKCmV4dGVybiBpbnQgZmNobW9kKGludCwgbW9kZV90KTsKCgpleHRlcm4gaW50IGNo bW9kKGNvbnN0IGNoYXIgKiwgbW9kZV90KTsKZXh0ZXJuIGludCBta2Rpcihjb25zdCBjaGFyICos IG1vZGVfdCk7CmV4dGVybiBpbnQgbWtmaWZvKGNvbnN0IGNoYXIgKiwgbW9kZV90KTsKZXh0ZXJu IG1vZGVfdCB1bWFzayhtb2RlX3QpOwoKIAoKCmV4dGVybiBpbnQgZnN0YXQ2NChpbnQsIHN0cnVj dCBzdGF0NjQgKik7CmV4dGVybiBpbnQgc3RhdDY0KGNvbnN0IGNoYXIgKiwgc3RydWN0IHN0YXQ2 NCAqKTsKZXh0ZXJuIGludCBsc3RhdDY0KGNvbnN0IGNoYXIgKiwgc3RydWN0IHN0YXQ2NCAqKTsK CgojIDUwNyAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDMgNAoKCiMgMSAiL3Vzci9pbmNsdWRl L3N5cy9zdGF0X2ltcGwuaCIgMSAzIDQKIAoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKXN0YXRf aW1wbC5oCTEuMQk5OS8wNS8wNCBTTUkiCgoKCgoKZXh0ZXJuICJDIiB7CgoKIAoKCgoKCgoKZXh0 ZXJuIGludCBmc3RhdChpbnQsIHN0cnVjdCBzdGF0ICopOwpleHRlcm4gaW50IHN0YXQoY29uc3Qg Y2hhciAqLCBzdHJ1Y3Qgc3RhdCAqKTsKCgoKZXh0ZXJuIGludCBsc3RhdChjb25zdCBjaGFyICos IHN0cnVjdCBzdGF0ICopOwpleHRlcm4gaW50IG1rbm9kKGNvbnN0IGNoYXIgKiwgbW9kZV90LCBk ZXZfdCk7CgoKIyA0NCAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0X2ltcGwuaCIgMyA0CgoKCgoKfQoK CgojIDUwOSAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDIgMyA0CgoKCgoKfQoKCgojIDIxICIv dXNyL2luY2x1ZGUvZmNudGwuaCIgMiAzIDQKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2ZjbnRs LmgiIDEgMyA0CiAKIAoKIAogCiAKCiAKCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylmY250bC5o CTEuNDUJOTgvMDcvMTcgU01JIgkKCgoKCgoKZXh0ZXJuICJDIiB7CgoKIAoKCgoKCgoKCgoKCgoK CgoJCQkJIAoKCgoKCgoKCgogCgoKCgoKCgogCgoKCgoKCgoKCgogCgoKCiMgODkgIi91c3IvaW5j bHVkZS9zeXMvZmNudGwuaCIgMyA0CgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgkJCQkgCgogCgoK CgoKCiAKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCiAKdHlwZWRl ZiBzdHJ1Y3QgZmxvY2sgewoJc2hvcnQJbF90eXBlOwoJc2hvcnQJbF93aGVuY2U7CglvZmZfdAls X3N0YXJ0OwoJb2ZmX3QJbF9sZW47CQkgCglpbnQJbF9zeXNpZDsKCXBpZF90CWxfcGlkOwoJbG9u ZwlsX3BhZFs0XTsJCSAKfSBmbG9ja190OwoKIyAxODggIi91c3IvaW5jbHVkZS9zeXMvZmNudGwu aCIgMyA0CgoKIAoKCgp0eXBlZGVmIHN0cnVjdCBmbG9jazY0IHsKCXNob3J0CWxfdHlwZTsKCXNo b3J0CWxfd2hlbmNlOwoJb2ZmNjRfdAlsX3N0YXJ0OwoJb2ZmNjRfdAlsX2xlbjsJCSAKCWludAls X3N5c2lkOwoJcGlkX3QJbF9waWQ7Cglsb25nCWxfcGFkWzRdOwkJIAp9IGZsb2NrNjRfdDsKCiMg MjMwICIvdXNyL2luY2x1ZGUvc3lzL2ZjbnRsLmgiIDMgNAoKCgoKIyAyNDQgIi91c3IvaW5jbHVk ZS9zeXMvZmNudGwuaCIgMyA0CgoKIAoKCgoKCgoKIAoKCgoKCgogCgoKCgoKCgogCgoKdHlwZWRl ZiBzdHJ1Y3QgZnNoYXJlIHsKCXNob3J0CWZfYWNjZXNzOwoJc2hvcnQJZl9kZW55OwoJaW50CWZf aWQ7Cn0gZnNoYXJlX3Q7CgogCgoKCgoKCiAKCgoKCgoKCgoKCn0KCgoKIyAyNCAiL3Vzci9pbmNs dWRlL2ZjbnRsLmgiIDIgMyA0CgoKCmV4dGVybiAiQyIgewoKCgoKCiAKCgoKCgoKCgoKCgoKCgoK IAojIDU4ICIvdXNyL2luY2x1ZGUvZmNudGwuaCIgMyA0CgoKIyA2OCAiL3Vzci9pbmNsdWRlL2Zj bnRsLmgiIDMgNAoKCgoKZXh0ZXJuIGludCBmY250bChpbnQsIGludCwgLi4uKTsKZXh0ZXJuIGlu dCBvcGVuKGNvbnN0IGNoYXIgKiwgaW50LCAuLi4pOwpleHRlcm4gaW50IGNyZWF0KGNvbnN0IGNo YXIgKiwgbW9kZV90KTsKCgpleHRlcm4gaW50IGRpcmVjdGlvKGludCwgaW50KTsKCgogCgoKZXh0 ZXJuIGludCBvcGVuNjQoY29uc3QgY2hhciAqLCBpbnQsIC4uLik7CmV4dGVybiBpbnQgY3JlYXQ2 NChjb25zdCBjaGFyICosIG1vZGVfdCk7CgoKIyAxMDQgIi91c3IvaW5jbHVkZS9mY250bC5oIiAz IDQKCgoKfQoKCgojIDUgInNhdmVfc25hcC5jIiAyCgojIDEgIi91c3IvaW5jbHVkZS9zdGRsaWIu aCIgMSAzIDQKIAoKCgoKIAogCgogCiAKIAoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKXN0ZGxpYi5o CTEuNDcJOTkvMTEvMDMgU01JIgkKCiMgMSAiL3Vzci9pbmNsdWRlL2lzby9zdGRsaWJfaXNvLmgi IDEgMyA0CiAKCgoKCiAKIAoKIAogCiAKCiAKCgoKCgoKCgoKCgoKCgojcHJhZ21hIGlkZW50CSJA KCMpc3RkbGliX2lzby5oCTEuMgk5OS8xMi8yMSBTTUkiIAoKCgoKZXh0ZXJuICJDIiB7CgoKCmV4 dGVybiB1bnNpZ25lZCBjaGFyCV9fY3R5cGVbXTsKCgoKCgoKCgoKCnR5cGVkZWYJc3RydWN0IHsK CWludAlxdW90OwoJaW50CXJlbTsKfSBkaXZfdDsKCnR5cGVkZWYgc3RydWN0IHsKCWxvbmcJcXVv dDsKCWxvbmcJcmVtOwp9IGxkaXZfdDsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRl ZiBsb25nCXdjaGFyX3Q7CgoKCgoKZXh0ZXJuIHZvaWQgYWJvcnQodm9pZCk7CmV4dGVybiBpbnQg YWJzKGludCk7CmV4dGVybiBpbnQgYXRleGl0KHZvaWQgKCopKHZvaWQpKTsKZXh0ZXJuIGRvdWJs ZSBhdG9mKGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgYXRvaShjb25zdCBjaGFyICopOwpleHRl cm4gbG9uZyBpbnQgYXRvbChjb25zdCBjaGFyICopOwpleHRlcm4gdm9pZCAqYnNlYXJjaChjb25z dCB2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsCglpbnQgKCopKGNvbnN0IHZv aWQgKiwgY29uc3Qgdm9pZCAqKSk7CmV4dGVybiB2b2lkICpjYWxsb2Moc2l6ZV90LCBzaXplX3Qp OwpleHRlcm4gZGl2X3QgZGl2KGludCwgaW50KTsKZXh0ZXJuIHZvaWQgZXhpdChpbnQpOwpleHRl cm4gdm9pZCBmcmVlKHZvaWQgKik7CmV4dGVybiBjaGFyICpnZXRlbnYoY29uc3QgY2hhciAqKTsK ZXh0ZXJuIGxvbmcgaW50IGxhYnMobG9uZyk7CmV4dGVybiBsZGl2X3QgbGRpdihsb25nLCBsb25n KTsKZXh0ZXJuIHZvaWQgKm1hbGxvYyhzaXplX3QpOwpleHRlcm4gaW50IG1ibGVuKGNvbnN0IGNo YXIgKiwgc2l6ZV90KTsKZXh0ZXJuIHNpemVfdCBtYnN0b3djcyh3Y2hhcl90ICosIGNvbnN0IGNo YXIgKiwgc2l6ZV90KTsKZXh0ZXJuIGludCBtYnRvd2Mod2NoYXJfdCAqLCBjb25zdCBjaGFyICos IHNpemVfdCk7CmV4dGVybiB2b2lkIHFzb3J0KHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsCglpbnQg KCopKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7CmV4dGVybiBpbnQgcmFuZCh2b2lkKTsK ZXh0ZXJuIHZvaWQgKnJlYWxsb2Modm9pZCAqLCBzaXplX3QpOwpleHRlcm4gdm9pZCBzcmFuZCh1 bnNpZ25lZCBpbnQpOwpleHRlcm4gZG91YmxlIHN0cnRvZChjb25zdCBjaGFyICosIGNoYXIgKiop OwpleHRlcm4gbG9uZyBpbnQgc3RydG9sKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKZXh0 ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQp OwpleHRlcm4gaW50IHN5c3RlbShjb25zdCBjaGFyICopOwpleHRlcm4gaW50IHdjdG9tYihjaGFy ICosIHdjaGFyX3QpOwpleHRlcm4gc2l6ZV90IHdjc3RvbWJzKGNoYXIgKiwgY29uc3Qgd2NoYXJf dCAqLCBzaXplX3QpOwoKIyAxNTIgIi91c3IvaW5jbHVkZS9pc28vc3RkbGliX2lzby5oIiAzIDQK CgoKCgoKCn0KCgoKIyAxOCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMgNAoKCgoKIyAxICIv dXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMSAzIDQKIAogCgogCiAKIAoKIAoKCgoKCgoKI3ByYWdt YSBpZGVudAkiQCgjKXdhaXQuaAkxLjIxCTk3LzA0LzA4IFNNSSIJCgoKCgoKCgojIDEgIi91c3Iv aW5jbHVkZS9zeXMvcmVzb3VyY2UuaCIgMSAzIDQKIAogCgogCiAKIAoKIAoKCgoKCgoKI3ByYWdt YSBpZGVudAkiQCgjKXJlc291cmNlLmgJMS4yNQk5OC8wNi8zMCBTTUkiCQoKCgoKCgoKZXh0ZXJu ICJDIiB7CgoKIAoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgojIDU5ICIvdXNyL2luY2x1ZGUvc3lz L3Jlc291cmNlLmgiIDMgNAoKCiAKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcJcmxpbV90OwoK CgoKCiMgODEgIi91c3IvaW5jbHVkZS9zeXMvcmVzb3VyY2UuaCIgMyA0CgoKCgojIDEwMCAiL3Vz ci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIiAzIDQKCgpzdHJ1Y3QgcmxpbWl0IHsKCXJsaW1fdAly bGltX2N1cjsJCSAKCXJsaW1fdAlybGltX21heDsJCSAKfTsKCiAKCgp0eXBlZGVmIHVfbG9uZ2xv bmdfdAlybGltNjRfdDsKCgoKCgpzdHJ1Y3QgcmxpbWl0NjQgewoJcmxpbTY0X3QJcmxpbV9jdXI7 CSAKCXJsaW02NF90CXJsaW1fbWF4OwkgCn07CgoKCiMgMTM4ICIvdXNyL2luY2x1ZGUvc3lzL3Jl c291cmNlLmgiIDMgNAoKCgoKCnN0cnVjdAlydXNhZ2UgewoJc3RydWN0IHRpbWV2YWwgcnVfdXRp bWU7CSAKCXN0cnVjdCB0aW1ldmFsIHJ1X3N0aW1lOwkgCglsb25nCXJ1X21heHJzczsJCSAKCWxv bmcJcnVfaXhyc3M7CQkgCglsb25nCXJ1X2lkcnNzOwkJIAoJbG9uZwlydV9pc3JzczsJCSAKCWxv bmcJcnVfbWluZmx0OwkJIAoJbG9uZwlydV9tYWpmbHQ7CQkgCglsb25nCXJ1X25zd2FwOwkJIAoJ bG9uZwlydV9pbmJsb2NrOwkJIAoJbG9uZwlydV9vdWJsb2NrOwkJIAoJbG9uZwlydV9tc2dzbmQ7 CQkgCglsb25nCXJ1X21zZ3JjdjsJCSAKCWxvbmcJcnVfbnNpZ25hbHM7CQkgCglsb25nCXJ1X252 Y3N3OwkJIAoJbG9uZwlydV9uaXZjc3c7CQkgCn07CgojIDE3NCAiL3Vzci9pbmNsdWRlL3N5cy9y ZXNvdXJjZS5oIiAzIDQKCgojIDE4OSAiL3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIiAzIDQK CgoKCmV4dGVybiBpbnQgc2V0cmxpbWl0KGludCwgY29uc3Qgc3RydWN0IHJsaW1pdCAqKTsKZXh0 ZXJuIGludCBnZXRybGltaXQoaW50LCBzdHJ1Y3QgcmxpbWl0ICopOwoKIAoKCmV4dGVybiBpbnQg c2V0cmxpbWl0NjQoaW50LCBjb25zdCBzdHJ1Y3QgcmxpbWl0NjQgKik7CmV4dGVybiBpbnQgZ2V0 cmxpbWl0NjQoaW50LCBzdHJ1Y3QgcmxpbWl0NjQgKik7CgoKZXh0ZXJuIGludCBnZXRwcmlvcml0 eShpbnQsIGlkX3QpOwpleHRlcm4gaW50IHNldHByaW9yaXR5KGludCwgaWRfdCwgaW50KTsKZXh0 ZXJuIGludCBnZXRydXNhZ2UoaW50LCBzdHJ1Y3QgcnVzYWdlICopOwoKIyAyMjMgIi91c3IvaW5j bHVkZS9zeXMvcmVzb3VyY2UuaCIgMyA0CgoKCgoKfQoKCgojIDI0ICIvdXNyL2luY2x1ZGUvc3lz L3dhaXQuaCIgMiAzIDQKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zaWdpbmZvLmgiIDEgMyA0CiAK IAoKIAoKCgoKIAogCiAKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylzaWdpbmZvLmgJMS41NAk5OC8w My8yNyBTTUkiCQoKCgoKCmV4dGVybiAiQyIgewoKCgoKCiAKCgoKCgoKCgoKCgojIDQ5ICIvdXNy L2luY2x1ZGUvc3lzL3NpZ2luZm8uaCIgMyA0CgoKCgoKCgoKCgoKCgoKIAoKCgojIDc3ICIvdXNy L2luY2x1ZGUvc3lzL3NpZ2luZm8uaCIgMyA0CgoKIAoKCgoKIyA5NyAiL3Vzci9pbmNsdWRlL3N5 cy9zaWdpbmZvLmgiIDMgNAoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKIyAxICIvdXNy L2luY2x1ZGUvc3lzL21hY2hzaWcuaCIgMSAzIDQKIAogCgogCiAKIAoKIAoKCgoKCgoKI3ByYWdt YSBpZGVudAkiQCgjKW1hY2hzaWcuaAkxLjE1CTk5LzA4LzE1IFNNSSIKCgoKCmV4dGVybiAiQyIg ewoKCiAKCgoKIAoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCiAKCgoKCgoK CgoKCgoKCgoKIAoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCn0KCgoKIyAxMjYgIi91c3IvaW5j bHVkZS9zeXMvc2lnaW5mby5oIiAyIDMgNAoKCiAKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoK CiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoK CgogCgoKCgoKCgoKCnR5cGVkZWYgc3RydWN0IHNpZ2luZm8geyAJCSAKCgoKCWludAlzaV9zaWdu bzsJCQkgCglpbnQgCXNpX2NvZGU7CQkJIAoJaW50CXNpX2Vycm5vOwkJCSAKCgoKCXVuaW9uIHsK CgkJaW50CV9fcGFkWygoMTI4ICAvIHNpemVvZiAoaW50KSkgLSAzKSBdOwkJIAoKCQlzdHJ1Y3Qg ewkJCSAKCQkJcGlkX3QJX19waWQ7CQkgCgkJCXVuaW9uIHsKCQkJCXN0cnVjdCB7CgkJCQkJdWlk X3QJX191aWQ7CgoKCQkJCQl1bmlvbiBzaWd2YWwJX192YWx1ZTsKCgoKCQkJCX0gX19raWxsOwoJ CQkJc3RydWN0IHsKCQkJCQljbG9ja190IF9fdXRpbWU7CgkJCQkJaW50CV9fc3RhdHVzOwoJCQkJ CWNsb2NrX3QgX19zdGltZTsKCQkJCX0gX19jbGQ7CgkJCX0gX19wZGF0YTsKCQl9IF9fcHJvYzsK CgkJc3RydWN0IHsJIAoJCQl2b2lkIAkqX19hZGRyOwkgCgkJCWludAlfX3RyYXBubzsJIAoJCQlj YWRkcl90CV9fcGM7CQkgCgkJfSBfX2ZhdWx0OwoKCQlzdHJ1Y3QgewkJCSAKCQkgCgkJCWludAlf X2ZkOwkJIAoJCQlsb25nCV9fYmFuZDsKCQl9IF9fZmlsZTsKCgkJc3RydWN0IHsJCQkgCgkJCWNh ZGRyX3QJX19mYWRkcjsJIAoKCgkJCXRpbWVzdHJ1Y190IF9fdHN0YW1wOwkgCgoKCgkJCXNob3J0 CV9fc3lzY2FsbDsJIAoJCQljaGFyCV9fbnN5c2FyZzsJIAoJCQljaGFyCV9fZmF1bHQ7CSAKCQkJ bG9uZwlfX3N5c2FyZ1s4XTsJIAoJCQlpbnQJX19tc3RhdGVbMTBdOwkgCgkJfSBfX3Byb2Y7CgoJ fSBfX2RhdGE7Cgp9IHNpZ2luZm9fdDsKCiMgMzQ0ICIvdXNyL2luY2x1ZGUvc3lzL3NpZ2luZm8u aCIgMyA0CgoKIAoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3Qga19zaWdpbmZvIHsKCWludAlzaV9zaWdu bzsJCQkgCglpbnQgCXNpX2NvZGU7CQkJIAoJaW50CXNpX2Vycm5vOwkJCSAKCgoKCXVuaW9uIHsK CQlzdHJ1Y3QgewkJCSAKCQkJcGlkX3QJX19waWQ7CQkgCgkJCXVuaW9uIHsKCQkJCXN0cnVjdCB7 CgkJCQkJdWlkX3QJX191aWQ7CgkJCQkJdW5pb24gc2lndmFsCV9fdmFsdWU7CgkJCQl9IF9fa2ls bDsKCQkJCXN0cnVjdCB7CgkJCQkJY2xvY2tfdCBfX3V0aW1lOwoJCQkJCWludAlfX3N0YXR1czsK CQkJCQljbG9ja190IF9fc3RpbWU7CgkJCQl9IF9fY2xkOwoJCQl9IF9fcGRhdGE7CgkJfSBfX3By b2M7CgoJCXN0cnVjdCB7CSAKCQkJdm9pZCAJKl9fYWRkcjsJIAoJCQlpbnQJX190cmFwbm87CSAK CQkJY2FkZHJfdAlfX3BjOwkJIAoJCX0gX19mYXVsdDsKCgkJc3RydWN0IHsJCQkgCgkJIAoJCQlp bnQJX19mZDsJCSAKCQkJbG9uZwlfX2JhbmQ7CgkJfSBfX2ZpbGU7CgoJCXN0cnVjdCB7CQkJIAoJ CQljYWRkcl90CV9fZmFkZHI7CSAKCgoKCQkJdGltZXN0cnVjX3QgX190c3RhbXA7CSAKCgoKCQkJ c2hvcnQJX19zeXNjYWxsOwkgCgkJCWNoYXIJX19uc3lzYXJnOwkgCgkJCWNoYXIJX19mYXVsdDsJ IAoJCQkgCgkJCSAKCQkJIAoJCX0gX19wcm9mOwoKCX0gX19kYXRhOwoKfSBrX3NpZ2luZm9fdDsK CnR5cGVkZWYgc3RydWN0IHNpZ3F1ZXVlIHsKCXN0cnVjdCBzaWdxdWV1ZQkqc3FfbmV4dDsKCWtf c2lnaW5mb190CXNxX2luZm87Cgl2b2lkCQkoKnNxX2Z1bmMpKHN0cnVjdCBzaWdxdWV1ZSAqKTsg IAoJdm9pZAkJKnNxX2JhY2twdHI7CSAKCQkJCQkgCn0gc2lncXVldWVfdDsKCiAKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp9CgoKCiMgMjUgIi91c3IvaW5jbHVkZS9zeXMvd2Fp dC5oIiAyIDMgNAoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3Byb2NzZXQuaCIgMSAzIDQKIAoKCgoK IAogCgogCiAKIAoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKXByb2NzZXQuaAkxLjIwCTAwLzAyLzE0 IFNNSSIJCgoKZXh0ZXJuICJDIiB7CgoKCgoKIAoKCgoKCgoKCgoKIAoKCgoKdHlwZWRlZiBlbnVt CgoJaWR0eXBlCQkgCgoJCXsKCVBfUElELAkJIAoJUF9QUElELAkJIAoJUF9QR0lELAkJIAoJCQkg CglQX1NJRCwJCSAKCVBfQ0lELAkJIAoJUF9VSUQsCQkgCglQX0dJRCwJCSAKCVBfQUxMLAkJIAoJ UF9MV1BJRCwJIAoJUF9UQVNLSUQsCSAKCVBfUFJPSklECSAKfSBpZHR5cGVfdDsKCgogCgoKCgoK dHlwZWRlZiBlbnVtIGlkb3AgewoJUE9QX0RJRkYsCSAKCQkJIAoJCQkgCglQT1BfQU5ELAkgCgkJ CSAKCQkJIAoJUE9QX09SLAkJIAoJCQkgCgkJCSAKCVBPUF9YT1IJCSAKCQkJIAoJCQkgCn0gaWRv cF90OwoKCiAKCgoKCnR5cGVkZWYgc3RydWN0IHByb2NzZXQgewoJaWRvcF90CQlwX29wOwkgCgkJ CQkgCgkJCQkgCgkJCQkgCgoJaWR0eXBlX3QJcF9saWR0eXBlOwoJCQkJIAoJCQkJIAoJaWRfdAkJ cF9saWQ7CSAKCglpZHR5cGVfdAlwX3JpZHR5cGU7CgkJCQkgCgkJCQkgCglpZF90CQlwX3JpZDsJ IAp9IHByb2NzZXRfdDsKCiAKCgoKCgoKCgoKCgoKIyAxMjkgIi91c3IvaW5jbHVkZS9zeXMvcHJv Y3NldC5oIiAzIDQKCgoKfQoKCgojIDI2ICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMiAzIDQK CgoKCmV4dGVybiAiQyIgewoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gcGlkX3Qgd2FpdChpbnQgKik7CmV4dGVybiBwaWRfdCB3 YWl0cGlkKHBpZF90LCBpbnQgKiwgaW50KTsKCgpleHRlcm4gaW50IHdhaXRpZChpZHR5cGVfdCwg aWRfdCwgc2lnaW5mb190ICosIGludCk7CmV4dGVybiBwaWRfdCB3YWl0MyhpbnQgKiwgaW50LCBz dHJ1Y3QgcnVzYWdlICopOwoKCgoKZXh0ZXJuIHBpZF90IHdhaXQ0KHBpZF90LCBpbnQgKiwgaW50 LCBzdHJ1Y3QgcnVzYWdlICopOwoKCiMgMTE0ICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMyA0 CgoKCgp9CgoKCiMgMjIgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzIDQKCgoKIAoKCgojIDYx ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNAoKCgpleHRlcm4gIkMiIHsKCgoKCgoKCgoKCgoK CgoKCgoKCgogCiMgOTQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CgoKIAojIDEwNSAiL3Vz ci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKCgoKCmV4dGVybiBpbnQgcmFuZF9yKHVuc2lnbmVkIGlu dCAqKTsKCgpleHRlcm4gdm9pZCBfZXhpdGhhbmRsZSh2b2lkKTsKCgoKCmV4dGVybiBkb3VibGUg ZHJhbmQ0OCh2b2lkKTsKZXh0ZXJuIGRvdWJsZSBlcmFuZDQ4KHVuc2lnbmVkIHNob3J0ICopOwpl eHRlcm4gbG9uZyBqcmFuZDQ4KHVuc2lnbmVkIHNob3J0ICopOwpleHRlcm4gdm9pZCBsY29uZzQ4 KHVuc2lnbmVkIHNob3J0ICopOwpleHRlcm4gbG9uZyBscmFuZDQ4KHZvaWQpOwpleHRlcm4gbG9u ZyBtcmFuZDQ4KHZvaWQpOwpleHRlcm4gbG9uZyBucmFuZDQ4KHVuc2lnbmVkIHNob3J0ICopOwpl eHRlcm4gdW5zaWduZWQgc2hvcnQgKnNlZWQ0OCh1bnNpZ25lZCBzaG9ydCAqKTsKZXh0ZXJuIHZv aWQgc3JhbmQ0OChsb25nKTsKZXh0ZXJuIGludCBwdXRlbnYoY2hhciAqKTsKZXh0ZXJuIHZvaWQg c2V0a2V5KGNvbnN0IGNoYXIgKik7CgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gdm9pZCBzd2FiKGNv bnN0IGNoYXIgKiwgY2hhciAqLCBzc2l6ZV90KTsKCgoKCgpleHRlcm4gaW50CW1rc3RlbXAoY2hh ciAqKTsKCgoKCmV4dGVybiBpbnQJbWtzdGVtcDY0KGNoYXIgKik7CgoKCgoKZXh0ZXJuIGxvbmcg YTY0bChjb25zdCBjaGFyICopOwpleHRlcm4gY2hhciAqZWN2dChkb3VibGUsIGludCwgaW50ICos IGludCAqKTsKZXh0ZXJuIGNoYXIgKmZjdnQoZG91YmxlLCBpbnQsIGludCAqLCBpbnQgKik7CmV4 dGVybiBjaGFyICpnY3Z0KGRvdWJsZSwgaW50LCBjaGFyICopOwpleHRlcm4gaW50IGdldHN1Ym9w dChjaGFyICoqLCBjaGFyICpjb25zdCAqLCBjaGFyICoqKTsKZXh0ZXJuIGludCAgZ3JhbnRwdChp bnQpOwpleHRlcm4gY2hhciAqaW5pdHN0YXRlKHVuc2lnbmVkLCBjaGFyICosIHNpemVfdCk7CmV4 dGVybiBjaGFyICpsNjRhKGxvbmcpOwpleHRlcm4gY2hhciAqbWt0ZW1wKGNoYXIgKik7CmV4dGVy biBjaGFyICpwdHNuYW1lKGludCk7CmV4dGVybiBsb25nIHJhbmRvbSh2b2lkKTsKZXh0ZXJuIGNo YXIgKnJlYWxwYXRoKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKnNldHN0YXRl KGNvbnN0IGNoYXIgKik7CmV4dGVybiB2b2lkIHNyYW5kb20odW5zaWduZWQpOwpleHRlcm4gaW50 IHR0eXNsb3Qodm9pZCk7CmV4dGVybiBpbnQgIHVubG9ja3B0KGludCk7CmV4dGVybiB2b2lkICp2 YWxsb2Moc2l6ZV90KTsKCgoKCmV4dGVybiBpbnQgZHVwMihpbnQsIGludCk7CmV4dGVybiBjaGFy ICpxZWN2dChsb25nIGRvdWJsZSwgaW50LCBpbnQgKiwgaW50ICopOwpleHRlcm4gY2hhciAqcWZj dnQobG9uZyBkb3VibGUsIGludCwgaW50ICosIGludCAqKTsKZXh0ZXJuIGNoYXIgKnFnY3Z0KGxv bmcgZG91YmxlLCBpbnQsIGNoYXIgKik7CmV4dGVybiBjaGFyICpnZXRjd2QoY2hhciAqLCBzaXpl X3QpOwpleHRlcm4gY29uc3QgY2hhciAqZ2V0ZXhlY25hbWUodm9pZCk7CmV4dGVybiBjaGFyICpn ZXRsb2dpbih2b2lkKTsKZXh0ZXJuIGludCBnZXRvcHQoaW50LCBjaGFyICpjb25zdCAqLCBjb25z dCBjaGFyICopOwpleHRlcm4gY2hhciAqb3B0YXJnOwpleHRlcm4gaW50IG9wdGluZCwgb3B0ZXJy LCBvcHRvcHQ7CmV4dGVybiBjaGFyICpnZXRwYXNzKGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFy ICpnZXRwYXNzcGhyYXNlKGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgZ2V0cHcodWlkX3QsIGNo YXIgKik7CmV4dGVybiBpbnQgaXNhdHR5KGludCk7CmV4dGVybiB2b2lkICptZW1hbGlnbihzaXpl X3QsIHNpemVfdCk7CmV4dGVybiBjaGFyICp0dHluYW1lKGludCk7CgojIDIwNyAiL3Vzci9pbmNs dWRlL3N0ZGxpYi5oIiAzIDQKCgoKCiMgMzA1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNAoK Cgp9CgoKCiMgNiAic2F2ZV9zbmFwLmMiIDIKCiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAx IDMgNAogCiAKCiAKIAogCgogCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpc3RyaW5nLmgJMS4y NAk5OS8wOC8xMCBTTUkiCQoKIyAxICIvdXNyL2luY2x1ZGUvaXNvL3N0cmluZ19pc28uaCIgMSAz IDQKIAogCgogCiAKIAoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylz dHJpbmdfaXNvLmgJMS4yCTk5LzExLzA5IFNNSSIKIAoKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gaW50IG1lbWNtcChjb25zdCB2b2lkICosIGNvbnN0IHZv aWQgKiwgc2l6ZV90KTsKZXh0ZXJuIHZvaWQgKm1lbWNweSh2b2lkICosIGNvbnN0IHZvaWQgKiwg c2l6ZV90KTsKZXh0ZXJuIHZvaWQgKm1lbW1vdmUodm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVf dCk7CmV4dGVybiB2b2lkICptZW1zZXQodm9pZCAqLCBpbnQsIHNpemVfdCk7CmV4dGVybiBjaGFy ICpzdHJjYXQoY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50IHN0cmNtcChjb25zdCBj aGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICpzdHJjcHkoY2hhciAqLCBjb25zdCBj aGFyICopOwpleHRlcm4gaW50IHN0cmNvbGwoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpl eHRlcm4gc2l6ZV90IHN0cmNzcG4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4g Y2hhciAqc3RyZXJyb3IoaW50KTsKZXh0ZXJuIHNpemVfdCBzdHJsZW4oY29uc3QgY2hhciAqKTsK ZXh0ZXJuIGNoYXIgKnN0cm5jYXQoY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CmV4dGVy biBpbnQgc3RybmNtcChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJu IGNoYXIgKnN0cm5jcHkoY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CmV4dGVybiBzaXpl X3Qgc3Ryc3BuKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKnN0cnRv ayhjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBzaXplX3Qgc3RyeGZybShjaGFyICosIGNv bnN0IGNoYXIgKiwgc2l6ZV90KTsKIyAxMTEgIi91c3IvaW5jbHVkZS9pc28vc3RyaW5nX2lzby5o IiAzIDQKCmV4dGVybiB2b2lkICptZW1jaHIoY29uc3Qgdm9pZCAqLCBpbnQsIHNpemVfdCk7CmV4 dGVybiBjaGFyICpzdHJjaHIoY29uc3QgY2hhciAqLCBpbnQpOwpleHRlcm4gY2hhciAqc3RycGJy ayhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICpzdHJyY2hyKGNvbnN0 IGNoYXIgKiwgaW50KTsKZXh0ZXJuIGNoYXIgKnN0cnN0cihjb25zdCBjaGFyICosIGNvbnN0IGNo YXIgKik7CgoKIyAxNDQgIi91c3IvaW5jbHVkZS9pc28vc3RyaW5nX2lzby5oIiAzIDQKCgoKCgoK Cn0KCgoKIyAxOCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMgNAoKCiAKCgoKIyA0OCAiL3Vz ci9pbmNsdWRlL3N0cmluZy5oIiAzIDQKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCmV4dGVybiBjaGFy ICpzdHJ0b2tfcihjaGFyICosIGNvbnN0IGNoYXIgKiwgY2hhciAqKik7CgoKCgpleHRlcm4gdm9p ZCAqbWVtY2NweSh2b2lkICosIGNvbnN0IHZvaWQgKiwgaW50LCBzaXplX3QpOwoKCgoKZXh0ZXJu IGNoYXIgKnN0cnNpZ25hbChpbnQpOwpleHRlcm4gaW50IGZmcyhpbnQpOwpleHRlcm4gaW50IHN0 cmNhc2VjbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50IHN0cm5jYXNl Y21wKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwpleHRlcm4gc2l6ZV90IHN0 cmxjcHkoY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CmV4dGVybiBzaXplX3Qgc3RybGNh dChjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKCgoKCgpleHRlcm4gY2hhciAqc3RyZHVw KGNvbnN0IGNoYXIgKik7CgoKIyAxMTAgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMyA0CgoKCn0K CgoKIyA3ICJzYXZlX3NuYXAuYyIgMgoKIyAxICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMSAzIDQK IAogCgogCiAKIAoKIAoKCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIyllcnJuby5oCTEuMTYJOTkv MDcvMjYgU01JIgkKCiAKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2Vycm5vLmgiIDEgMyA0CiAK IAoKIAogCiAKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIyllcnJuby5oCTEuMjAJMDAvMDIvMTQgU01J IgkKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuICJDIiB7CgoKIAoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCiAKCgoKCgoKCgoKCiAK CgoKIAoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKIAoJIAoKCgoK CgoKCgoKCQkJCSAKCgoJIAoKCgoJCQkJIAoKCgoKCiAKCgoKCgoKCgoKCiAKCgoKCn0KCgoKIyAy MyAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDIgMyA0CgoKCmV4dGVybiAiQyIgewoKCgoKCgoKCgoK CmV4dGVybiBpbnQgKl9fX2Vycm5vKCk7CgoKCgoKCgoKCgp9CgoKCiMgOCAic2F2ZV9zbmFwLmMi IDIKCgoKIyAxICIuLi8uLi9pbmNsdWRlL2xpYmluYy9saWJ1dGlsLmgiIDEKCgogCgoKIyAxICIv dXNyL29wZW53aW4vaW5jbHVkZS9YMTEvSW50cmluc2ljLmgiIDEKIAoKIAoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9vcGVud2lu L2luY2x1ZGUvWDExL1hsaWIuaCIgMQogCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoK I3ByYWdtYSBpZGVudCAiQCgjKVhsaWIuaAkxLjEwCTAwLzEwLzEyIFNNSSIKCgoKCgoKCgoKCgoK CgoKCgoKIyAxICIvdXNyL29wZW53aW4vaW5jbHVkZS9YMTEvWC5oIiAxCiAKCgoKIAoKCgoKIAoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKIAoKCgoK CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBYSUQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBNYXNrOwp0 eXBlZGVmIHVuc2lnbmVkIGxvbmcgQXRvbTsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIFZpc3VhbElE Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgVGltZTsKCgoKCgoKCgoKdHlwZWRlZiBYSUQgV2luZG93 Owp0eXBlZGVmIFhJRCBEcmF3YWJsZTsKdHlwZWRlZiBYSUQgRm9udDsKdHlwZWRlZiBYSUQgUGl4 bWFwOwp0eXBlZGVmIFhJRCBDdXJzb3I7CnR5cGVkZWYgWElEIENvbG9ybWFwOwp0eXBlZGVmIFhJ RCBHQ29udGV4dDsKdHlwZWRlZiBYSUQgS2V5U3ltOwoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIEtl eUNvZGU7CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKIAoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKIAoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKIAoK CgoKCgoKCQkgICAgICAgCiAKCgoKCgoKCgoKCiAKCgoKCgogCgoKCgogCgoKCgoKIAoKCgoKIAoK CgoKIAoKCgoKIAoKCgoKCgoKIAoKCgoKCgoKCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgojIDM0 NSAiL3Vzci9vcGVud2luL2luY2x1ZGUvWDExL1guaCIKCgoKCgoKCgoKCgogCgoKCiAKIAoKCgoK IAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCiAKCgoKIAoKCgoK CiAKCgoKCgogCgoKCgogCgoKCgoKIAoKCgoKCgoKIAoKCgoKIAoKCgoKCiAKCgoKIAoKCgoKCgoK CgoKCgoKCgoKCgogCgoKCgoKIAoKCgoKCgogCgoKCgoKIAoKCgoKCgogCgoKCgogCgoKCgogCgoK CgoKCiAKCgoKCiAKCgoKCgogCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK IAoKCgoKCgogCgoKCiAKCgoKCgogCgoKCiAKCgoKCgogCgoKCgoKIAoKCgogCgoKCgoKIAoKCgoK CgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKIAoKCgoKIAoKCgogCgoK CgogCgoKCgogCgoKCgoKCgoKCgoKIAoKCgoKCiMgNTEgIi91c3Ivb3Blbndpbi9pbmNsdWRlL1gx MS9YbGliLmgiIDIKCgogCiMgMSAiL3Vzci9vcGVud2luL2luY2x1ZGUvWDExL1hmdW5jcHJvdG8u aCIgMQogCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgNTQgIi91c3Ivb3Blbndpbi9pbmNs dWRlL1gxMS9YbGliLmgiIDIKCiMgMSAiL3Vzci9vcGVud2luL2luY2x1ZGUvWDExL1hvc2RlZnMu aCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKICAKCgoKCgoKCiMgODYgIi91c3Ivb3Blbndpbi9pbmNsdWRlL1gx MS9Yb3NkZWZzLmgiCgoKCgoKCgoKIyAxMDUgIi91c3Ivb3Blbndpbi9pbmNsdWRlL1gxMS9Yb3Nk ZWZzLmgiCgoKCgoKCgoKCgoKCgoKIyA1NSAiL3Vzci9vcGVud2luL2luY2x1ZGUvWDExL1hsaWIu aCIgMgoKCgoKCgoKCgojIDEgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNv bGFyaXMyLzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAoKCgoKCgogCgoKCgoKCgogCgog CgoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIvb3B0L212cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJj LXN1bi1zb2xhcmlzMi8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CgoKIAoKCgoKCiAKCgoK CgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCgojIDEyNiAiL29wdC9tdnBsb2NhbC9saWIvZ2Nj LWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAoKCiAK CgoKCiAKCiAKCgoKIyAxODcgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNv bGFyaXMyLzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzIDQKCgoKCgoKIAoKCgoKIAoKCgojIDI2 OCAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zL2lu Y2x1ZGUvc3RkZGVmLmgiIDMgNAoKCgoKCgoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGludCAgd2lu dF90OwoKCgoKIAoKIAoKIyAzMTcgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3Vu LXNvbGFyaXMyLzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzIDQKCgoKCiAKCgoKCgoKCgoKCgoK CiAKCgoKCgoKCiMgNjQgIi91c3Ivb3Blbndpbi9pbmNsdWRlL1gxMS9YbGliLmgiIDIKCgoKCgoK dHlwZWRlZiBjaGFyICpYUG9pbnRlcjsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCnR5cGVkZWYgc3RydWN0IF9Y RXh0RGF0YSB7CglpbnQgbnVtYmVyOwkJIAoJc3RydWN0IF9YRXh0RGF0YSAqbmV4dDsJIAoKCWlu dCAoKmZyZWVfcHJpdmF0ZSkoc3RydWN0IF9YRXh0RGF0YSAqKTsJIAoKCgoJWFBvaW50ZXIgcHJp dmF0ZV9kYXRhOwkgCn0gWEV4dERhdGE7CgogCgoKdHlwZWRlZiBzdHJ1Y3QgewkJIAoJaW50IGV4 dGVuc2lvbjsJCSAKCWludCBtYWpvcl9vcGNvZGU7CSAKCWludCBmaXJzdF9ldmVudDsJIAoJaW50 IGZpcnN0X2Vycm9yOwkgCn0gWEV4dENvZGVzOwoKIAoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBp bnQgZGVwdGg7CiAgICBpbnQgYml0c19wZXJfcGl4ZWw7CiAgICBpbnQgc2NhbmxpbmVfcGFkOwp9 IFhQaXhtYXBGb3JtYXRWYWx1ZXM7CgoKIAoKCnR5cGVkZWYgc3RydWN0IHsKCWludCBmdW5jdGlv bjsJCSAKCXVuc2lnbmVkIGxvbmcgcGxhbmVfbWFzazsgCgl1bnNpZ25lZCBsb25nIGZvcmVncm91 bmQ7IAoJdW5zaWduZWQgbG9uZyBiYWNrZ3JvdW5kOyAKCWludCBsaW5lX3dpZHRoOwkJIAoJaW50 IGxpbmVfc3R5bGU7CSAJIAoJaW50IGNhcF9zdHlsZTsJICAJIAoKCWludCBqb2luX3N0eWxlOwkg CSAKCWludCBmaWxsX3N0eWxlOwkgCSAKCglpbnQgZmlsbF9ydWxlOwkgIAkgCglpbnQgYXJjX21v ZGU7CQkgCglQaXhtYXAgdGlsZTsJCSAKCVBpeG1hcCBzdGlwcGxlOwkJIAoJaW50IHRzX3hfb3Jp Z2luOwkgCglpbnQgdHNfeV9vcmlnaW47CiAgICAgICAgRm9udCBmb250OwkgICAgICAgICAKCWlu dCBzdWJ3aW5kb3dfbW9kZTsgICAgICAKCWludCAgZ3JhcGhpY3NfZXhwb3N1cmVzOyAKCWludCBj bGlwX3hfb3JpZ2luOwkgCglpbnQgY2xpcF95X29yaWdpbjsKCVBpeG1hcCBjbGlwX21hc2s7CSAK CWludCBkYXNoX29mZnNldDsJIAoJY2hhciBkYXNoZXM7Cn0gWEdDVmFsdWVzOwoKIAoKCgoKdHlw ZWRlZiBzdHJ1Y3QgX1hHQwoKCgoKCgoKKkdDOwoKIAoKCnR5cGVkZWYgc3RydWN0IHsKCVhFeHRE YXRhICpleHRfZGF0YTsJIAoJVmlzdWFsSUQgdmlzdWFsaWQ7CSAKCglpbnQgY19jbGFzczsJCSAK CgoKCXVuc2lnbmVkIGxvbmcgcmVkX21hc2ssIGdyZWVuX21hc2ssIGJsdWVfbWFzazsJIAoJaW50 IGJpdHNfcGVyX3JnYjsJIAoJaW50IG1hcF9lbnRyaWVzOwkgCn0gVmlzdWFsOwoKIAoKCQp0eXBl ZGVmIHN0cnVjdCB7CglpbnQgZGVwdGg7CQkgCglpbnQgbnZpc3VhbHM7CQkgCglWaXN1YWwgKnZp c3VhbHM7CSAKfSBEZXB0aDsKCiAKCgoKCgpzdHJ1Y3QgX1hEaXNwbGF5OwkJIAoKdHlwZWRlZiBz dHJ1Y3QgewoJWEV4dERhdGEgKmV4dF9kYXRhOwkgCglzdHJ1Y3QgX1hEaXNwbGF5ICpkaXNwbGF5 OyAKCVdpbmRvdyByb290OwkJIAoJaW50IHdpZHRoLCBoZWlnaHQ7CSAKCWludCBtd2lkdGgsIG1o ZWlnaHQ7CSAKCWludCBuZGVwdGhzOwkJIAoJRGVwdGggKmRlcHRoczsJCSAKCWludCByb290X2Rl cHRoOwkJIAoJVmlzdWFsICpyb290X3Zpc3VhbDsJIAoJR0MgZGVmYXVsdF9nYzsJCSAKCUNvbG9y bWFwIGNtYXA7CQkgCgl1bnNpZ25lZCBsb25nIHdoaXRlX3BpeGVsOwoJdW5zaWduZWQgbG9uZyBi bGFja19waXhlbDsJIAoJaW50IG1heF9tYXBzLCBtaW5fbWFwczsJIAoJaW50IGJhY2tpbmdfc3Rv cmU7CSAKCWludCAgc2F2ZV91bmRlcnM7CQoJbG9uZyByb290X2lucHV0X21hc2s7CSAKfSBTY3Jl ZW47CgogCgoKdHlwZWRlZiBzdHJ1Y3QgewoJWEV4dERhdGEgKmV4dF9kYXRhOwkgCglpbnQgZGVw dGg7CQkgCglpbnQgYml0c19wZXJfcGl4ZWw7CSAKCWludCBzY2FubGluZV9wYWQ7CSAKfSBTY3Jl ZW5Gb3JtYXQ7CgogCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgUGl4bWFwIGJhY2tncm91bmRfcGl4 bWFwOwkgCiAgICB1bnNpZ25lZCBsb25nIGJhY2tncm91bmRfcGl4ZWw7CSAKICAgIFBpeG1hcCBi b3JkZXJfcGl4bWFwOwkgCiAgICB1bnNpZ25lZCBsb25nIGJvcmRlcl9waXhlbDsJIAogICAgaW50 IGJpdF9ncmF2aXR5OwkJIAogICAgaW50IHdpbl9ncmF2aXR5OwkJIAogICAgaW50IGJhY2tpbmdf c3RvcmU7CQkgCiAgICB1bnNpZ25lZCBsb25nIGJhY2tpbmdfcGxhbmVzOyAKICAgIHVuc2lnbmVk IGxvbmcgYmFja2luZ19waXhlbDsgCiAgICBpbnQgIHNhdmVfdW5kZXI7CQkgCiAgICBsb25nIGV2 ZW50X21hc2s7CQkgCiAgICBsb25nIGRvX25vdF9wcm9wYWdhdGVfbWFzazsJIAogICAgaW50ICBv dmVycmlkZV9yZWRpcmVjdDsJIAogICAgQ29sb3JtYXAgY29sb3JtYXA7CQkgCiAgICBDdXJzb3Ig Y3Vyc29yOwkJIAp9IFhTZXRXaW5kb3dBdHRyaWJ1dGVzOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAg aW50IHgsIHk7CQkJIAogICAgaW50IHdpZHRoLCBoZWlnaHQ7CQkgCiAgICBpbnQgYm9yZGVyX3dp ZHRoOwkJIAogICAgaW50IGRlcHRoOyAgICAgICAgICAJIAogICAgVmlzdWFsICp2aXN1YWw7CQkg CiAgICBXaW5kb3cgcm9vdDsgICAgICAgIAkgCgogICAgaW50IGNfY2xhc3M7CQkgCgoKCiAgICBp bnQgYml0X2dyYXZpdHk7CQkgCiAgICBpbnQgd2luX2dyYXZpdHk7CQkgCiAgICBpbnQgYmFja2lu Z19zdG9yZTsJCSAKICAgIHVuc2lnbmVkIGxvbmcgYmFja2luZ19wbGFuZXM7IAogICAgdW5zaWdu ZWQgbG9uZyBiYWNraW5nX3BpeGVsOyAKICAgIGludCAgc2F2ZV91bmRlcjsJCSAKICAgIENvbG9y bWFwIGNvbG9ybWFwOwkJIAogICAgaW50ICBtYXBfaW5zdGFsbGVkOwkJIAogICAgaW50IG1hcF9z dGF0ZTsJCSAKICAgIGxvbmcgYWxsX2V2ZW50X21hc2tzOwkgCiAgICBsb25nIHlvdXJfZXZlbnRf bWFzazsJIAogICAgbG9uZyBkb19ub3RfcHJvcGFnYXRlX21hc2s7ICAKICAgIGludCAgb3ZlcnJp ZGVfcmVkaXJlY3Q7CSAKICAgIFNjcmVlbiAqc2NyZWVuOwkJIAp9IFhXaW5kb3dBdHRyaWJ1dGVz OwoKIAoKCgoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50IGZhbWlseTsJCSAKCWludCBsZW5ndGg7CQkg CgljaGFyICphZGRyZXNzOwkJIAp9IFhIb3N0QWRkcmVzczsKCiAKCgp0eXBlZGVmIHN0cnVjdCBf WEltYWdlIHsKICAgIGludCB3aWR0aCwgaGVpZ2h0OwkJIAogICAgaW50IHhvZmZzZXQ7CQkgCiAg ICBpbnQgZm9ybWF0OwkJCSAKICAgIGNoYXIgKmRhdGE7CQkJIAogICAgaW50IGJ5dGVfb3JkZXI7 CQkgCiAgICBpbnQgYml0bWFwX3VuaXQ7CQkgCiAgICBpbnQgYml0bWFwX2JpdF9vcmRlcjsJIAog ICAgaW50IGJpdG1hcF9wYWQ7CQkgCiAgICBpbnQgZGVwdGg7CQkJIAogICAgaW50IGJ5dGVzX3Bl cl9saW5lOwkJIAogICAgaW50IGJpdHNfcGVyX3BpeGVsOwkJIAogICAgdW5zaWduZWQgbG9uZyBy ZWRfbWFzazsJIAogICAgdW5zaWduZWQgbG9uZyBncmVlbl9tYXNrOwogICAgdW5zaWduZWQgbG9u ZyBibHVlX21hc2s7CiAgICBYUG9pbnRlciBvYmRhdGE7CQkgCiAgICBzdHJ1Y3QgZnVuY3MgewkJ IAoJc3RydWN0IF9YSW1hZ2UgKigqY3JlYXRlX2ltYWdlKSgKCQogICAgCXN0cnVjdCBfWERpc3Bs YXkqICAgICAgICAgLAogICAgCVZpc3VhbCogICAgICAsCiAgICAJdW5zaWduZWQgaW50ICAgICAs CiAgICAJaW50ICAgICAgICAgICwKICAgIAlpbnQgICAgICAgICAgLAogICAgCWNoYXIqICAgICAg ICAsCiAgICAJdW5zaWduZWQgaW50ICAgICAsCiAgICAJdW5zaWduZWQgaW50ICAgICAsCiAgICAJ aW50ICAgICAgICAgICwKICAgIAlpbnQgICAgICAgICAgCgkKCSk7CgoJaW50ICgqZGVzdHJveV9p bWFnZSkgICAgICAgIChzdHJ1Y3QgX1hJbWFnZSAqKTsKCXVuc2lnbmVkIGxvbmcgKCpnZXRfcGl4 ZWwpICAoc3RydWN0IF9YSW1hZ2UgKiwgaW50LCBpbnQpOwoJaW50ICgqcHV0X3BpeGVsKSAgICAg ICAgICAgIChzdHJ1Y3QgX1hJbWFnZSAqLCBpbnQsIGludCwgdW5zaWduZWQgbG9uZyk7CglzdHJ1 Y3QgX1hJbWFnZSAqKCpzdWJfaW1hZ2UpKHN0cnVjdCBfWEltYWdlICosIGludCwgaW50LCB1bnNp Z25lZCBpbnQsIHVuc2lnbmVkIGludCk7CglpbnQgKCphZGRfcGl4ZWwpICAgICAgICAgICAgKHN0 cnVjdCBfWEltYWdlICosIGxvbmcpOwoKCgoKCgoKCX0gZjsKfSBYSW1hZ2U7CgogCgoKdHlwZWRl ZiBzdHJ1Y3QgewogICAgaW50IHgsIHk7CiAgICBpbnQgd2lkdGgsIGhlaWdodDsKICAgIGludCBi b3JkZXJfd2lkdGg7CiAgICBXaW5kb3cgc2libGluZzsKICAgIGludCBzdGFja19tb2RlOwp9IFhX aW5kb3dDaGFuZ2VzOwoKIAoKCnR5cGVkZWYgc3RydWN0IHsKCXVuc2lnbmVkIGxvbmcgcGl4ZWw7 Cgl1bnNpZ25lZCBzaG9ydCByZWQsIGdyZWVuLCBibHVlOwoJY2hhciBmbGFnczsgICAKCWNoYXIg cGFkOwp9IFhDb2xvcjsKCiAKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIHNob3J0IHgxLCB5MSwg eDIsIHkyOwp9IFhTZWdtZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgc2hvcnQgeCwgeTsKfSBY UG9pbnQ7CiAgICAKdHlwZWRlZiBzdHJ1Y3QgewogICAgc2hvcnQgeCwgeTsKICAgIHVuc2lnbmVk IHNob3J0IHdpZHRoLCBoZWlnaHQ7Cn0gWFJlY3RhbmdsZTsKICAgIAp0eXBlZGVmIHN0cnVjdCB7 CiAgICBzaG9ydCB4LCB5OwogICAgdW5zaWduZWQgc2hvcnQgd2lkdGgsIGhlaWdodDsKICAgIHNo b3J0IGFuZ2xlMSwgYW5nbGUyOwp9IFhBcmM7CgoKIAoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAg IGludCBrZXlfY2xpY2tfcGVyY2VudDsKICAgICAgICBpbnQgYmVsbF9wZXJjZW50OwogICAgICAg IGludCBiZWxsX3BpdGNoOwogICAgICAgIGludCBiZWxsX2R1cmF0aW9uOwogICAgICAgIGludCBs ZWQ7CiAgICAgICAgaW50IGxlZF9tb2RlOwogICAgICAgIGludCBrZXk7CiAgICAgICAgaW50IGF1 dG9fcmVwZWF0X21vZGU7ICAgIAp9IFhLZXlib2FyZENvbnRyb2w7CgogCgp0eXBlZGVmIHN0cnVj dCB7CiAgICAgICAgaW50IGtleV9jbGlja19wZXJjZW50OwoJaW50IGJlbGxfcGVyY2VudDsKCXVu c2lnbmVkIGludCBiZWxsX3BpdGNoLCBiZWxsX2R1cmF0aW9uOwoJdW5zaWduZWQgbG9uZyBsZWRf bWFzazsKCWludCBnbG9iYWxfYXV0b19yZXBlYXQ7CgljaGFyIGF1dG9fcmVwZWF0c1szMl07Cn0g WEtleWJvYXJkU3RhdGU7CgogCgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgVGltZSB0aW1lOwoJ c2hvcnQgeCwgeTsKfSBYVGltZUNvb3JkOwoKIAoKdHlwZWRlZiBzdHJ1Y3QgewogCWludCBtYXhf a2V5cGVybW9kOwkgCiAJS2V5Q29kZSAqbW9kaWZpZXJtYXA7CSAKfSBYTW9kaWZpZXJLZXltYXA7 CgoKIAoKCgoKCnR5cGVkZWYgc3RydWN0IF9YRGlzcGxheSBEaXNwbGF5OwoKCnN0cnVjdCBfWFBy aXZhdGU7CQkgCnN0cnVjdCBfWHJtSGFzaEJ1Y2tldFJlYzsKCnR5cGVkZWYgc3RydWN0IAoKCgp7 CglYRXh0RGF0YSAqZXh0X2RhdGE7CSAKCXN0cnVjdCBfWFByaXZhdGUgKnByaXZhdGUxOwoJaW50 IGZkOwkJCSAKCWludCBwcml2YXRlMjsKCWludCBwcm90b19tYWpvcl92ZXJzaW9uOyAKCWludCBw cm90b19taW5vcl92ZXJzaW9uOyAKCWNoYXIgKnZlbmRvcjsJCSAKICAgICAgICBYSUQgcHJpdmF0 ZTM7CglYSUQgcHJpdmF0ZTQ7CglYSUQgcHJpdmF0ZTU7CglpbnQgcHJpdmF0ZTY7CgoJWElEICgq cmVzb3VyY2VfYWxsb2MpKHN0cnVjdCBfWERpc3BsYXkgKik7IAoKCgoJaW50IGJ5dGVfb3JkZXI7 CQkgCglpbnQgYml0bWFwX3VuaXQ7CSAKCWludCBiaXRtYXBfcGFkOwkJIAoJaW50IGJpdG1hcF9i aXRfb3JkZXI7CSAKCWludCBuZm9ybWF0czsJCSAKCVNjcmVlbkZvcm1hdCAqcGl4bWFwX2Zvcm1h dDsJIAoJaW50IHByaXZhdGU4OwoJaW50IHJlbGVhc2U7CQkgCglzdHJ1Y3QgX1hQcml2YXRlICpw cml2YXRlOSwgKnByaXZhdGUxMDsKCWludCBxbGVuOwkJIAoJdW5zaWduZWQgbG9uZyBsYXN0X3Jl cXVlc3RfcmVhZDsgIAoJdW5zaWduZWQgbG9uZyByZXF1ZXN0OwkgCglYUG9pbnRlciBwcml2YXRl MTE7CglYUG9pbnRlciBwcml2YXRlMTI7CglYUG9pbnRlciBwcml2YXRlMTM7CglYUG9pbnRlciBw cml2YXRlMTQ7Cgl1bnNpZ25lZCBtYXhfcmVxdWVzdF9zaXplOyAgCglzdHJ1Y3QgX1hybUhhc2hC dWNrZXRSZWMgKmRiOwoJaW50ICgqcHJpdmF0ZTE1KSgpOwoJY2hhciAqZGlzcGxheV9uYW1lOwkg CglpbnQgZGVmYXVsdF9zY3JlZW47CSAKCWludCBuc2NyZWVuczsJCSAKCVNjcmVlbiAqc2NyZWVu czsJIAoJdW5zaWduZWQgbG9uZyBtb3Rpb25fYnVmZmVyOwkgCgl1bnNpZ25lZCBsb25nIHByaXZh dGUxNjsKCWludCBtaW5fa2V5Y29kZTsJIAoJaW50IG1heF9rZXljb2RlOwkgCglYUG9pbnRlciBw cml2YXRlMTc7CglYUG9pbnRlciBwcml2YXRlMTg7CglpbnQgcHJpdmF0ZTE5OwoJY2hhciAqeGRl ZmF1bHRzOwkgCgkgCn0KCgoKKl9YUHJpdkRpc3BsYXk7CgoKCgoKIAoKCnR5cGVkZWYgc3RydWN0 IHsKCWludCB0eXBlOwkJIAoJdW5zaWduZWQgbG9uZyBzZXJpYWw7CSAKCWludCAgc2VuZF9ldmVu dDsJIAoJRGlzcGxheSAqZGlzcGxheTsJIAoJV2luZG93IHdpbmRvdzsJICAgICAgICAgCglXaW5k b3cgcm9vdDsJICAgICAgICAgCglXaW5kb3cgc3Vid2luZG93OwkgCglUaW1lIHRpbWU7CQkgCglp bnQgeCwgeTsJCSAKCWludCB4X3Jvb3QsIHlfcm9vdDsJIAoJdW5zaWduZWQgaW50IHN0YXRlOwkg Cgl1bnNpZ25lZCBpbnQga2V5Y29kZTsJIAoJaW50ICBzYW1lX3NjcmVlbjsJIAp9IFhLZXlFdmVu dDsKdHlwZWRlZiBYS2V5RXZlbnQgWEtleVByZXNzZWRFdmVudDsKdHlwZWRlZiBYS2V5RXZlbnQg WEtleVJlbGVhc2VkRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CglpbnQgdHlwZTsJCSAKCXVuc2ln bmVkIGxvbmcgc2VyaWFsOwkgCglpbnQgIHNlbmRfZXZlbnQ7CSAKCURpc3BsYXkgKmRpc3BsYXk7 CSAKCVdpbmRvdyB3aW5kb3c7CSAgICAgICAgIAoJV2luZG93IHJvb3Q7CSAgICAgICAgIAoJV2lu ZG93IHN1YndpbmRvdzsJIAoJVGltZSB0aW1lOwkJIAoJaW50IHgsIHk7CQkgCglpbnQgeF9yb290 LCB5X3Jvb3Q7CSAKCXVuc2lnbmVkIGludCBzdGF0ZTsJIAoJdW5zaWduZWQgaW50IGJ1dHRvbjsJ IAoJaW50ICBzYW1lX3NjcmVlbjsJIAp9IFhCdXR0b25FdmVudDsKdHlwZWRlZiBYQnV0dG9uRXZl bnQgWEJ1dHRvblByZXNzZWRFdmVudDsKdHlwZWRlZiBYQnV0dG9uRXZlbnQgWEJ1dHRvblJlbGVh c2VkRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CglpbnQgdHlwZTsJCSAKCXVuc2lnbmVkIGxvbmcg c2VyaWFsOwkgCglpbnQgIHNlbmRfZXZlbnQ7CSAKCURpc3BsYXkgKmRpc3BsYXk7CSAKCVdpbmRv dyB3aW5kb3c7CSAgICAgICAgIAoJV2luZG93IHJvb3Q7CSAgICAgICAgIAoJV2luZG93IHN1Yndp bmRvdzsJIAoJVGltZSB0aW1lOwkJIAoJaW50IHgsIHk7CQkgCglpbnQgeF9yb290LCB5X3Jvb3Q7 CSAKCXVuc2lnbmVkIGludCBzdGF0ZTsJIAoJY2hhciBpc19oaW50OwkJIAoJaW50ICBzYW1lX3Nj cmVlbjsJIAp9IFhNb3Rpb25FdmVudDsKdHlwZWRlZiBYTW90aW9uRXZlbnQgWFBvaW50ZXJNb3Zl ZEV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50IHR5cGU7CQkgCgl1bnNpZ25lZCBsb25nIHNl cmlhbDsJIAoJaW50ICBzZW5kX2V2ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5OwkgCglXaW5kb3cg d2luZG93OwkgICAgICAgICAKCVdpbmRvdyByb290OwkgICAgICAgICAKCVdpbmRvdyBzdWJ3aW5k b3c7CSAKCVRpbWUgdGltZTsJCSAKCWludCB4LCB5OwkJIAoJaW50IHhfcm9vdCwgeV9yb290Owkg CglpbnQgbW9kZTsJCSAKCWludCBkZXRhaWw7CgkgCgoKCglpbnQgIHNhbWVfc2NyZWVuOwkgCglp bnQgIGZvY3VzOwkJIAoJdW5zaWduZWQgaW50IHN0YXRlOwkgCn0gWENyb3NzaW5nRXZlbnQ7CnR5 cGVkZWYgWENyb3NzaW5nRXZlbnQgWEVudGVyV2luZG93RXZlbnQ7CnR5cGVkZWYgWENyb3NzaW5n RXZlbnQgWExlYXZlV2luZG93RXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CglpbnQgdHlwZTsJCSAK CXVuc2lnbmVkIGxvbmcgc2VyaWFsOwkgCglpbnQgIHNlbmRfZXZlbnQ7CSAKCURpc3BsYXkgKmRp c3BsYXk7CSAKCVdpbmRvdyB3aW5kb3c7CQkgCglpbnQgbW9kZTsJCSAKCWludCBkZXRhaWw7Cgkg CgoKCgp9IFhGb2N1c0NoYW5nZUV2ZW50Owp0eXBlZGVmIFhGb2N1c0NoYW5nZUV2ZW50IFhGb2N1 c0luRXZlbnQ7CnR5cGVkZWYgWEZvY3VzQ2hhbmdlRXZlbnQgWEZvY3VzT3V0RXZlbnQ7CgogCnR5 cGVkZWYgc3RydWN0IHsKCWludCB0eXBlOwoJdW5zaWduZWQgbG9uZyBzZXJpYWw7CSAKCWludCAg c2VuZF9ldmVudDsJIAoJRGlzcGxheSAqZGlzcGxheTsJIAoJV2luZG93IHdpbmRvdzsKCWNoYXIg a2V5X3ZlY3RvclszMl07Cn0gWEtleW1hcEV2ZW50OwkKCnR5cGVkZWYgc3RydWN0IHsKCWludCB0 eXBlOwoJdW5zaWduZWQgbG9uZyBzZXJpYWw7CSAKCWludCAgc2VuZF9ldmVudDsJIAoJRGlzcGxh eSAqZGlzcGxheTsJIAoJV2luZG93IHdpbmRvdzsKCWludCB4LCB5OwoJaW50IHdpZHRoLCBoZWln aHQ7CglpbnQgY291bnQ7CQkgCn0gWEV4cG9zZUV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50 IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5kX2V2ZW50OwkgCglEaXNw bGF5ICpkaXNwbGF5OwkgCglEcmF3YWJsZSBkcmF3YWJsZTsKCWludCB4LCB5OwoJaW50IHdpZHRo LCBoZWlnaHQ7CglpbnQgY291bnQ7CQkgCglpbnQgbWFqb3JfY29kZTsJCSAKCWludCBtaW5vcl9j b2RlOwkJIAp9IFhHcmFwaGljc0V4cG9zZUV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50IHR5 cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5kX2V2ZW50OwkgCglEaXNwbGF5 ICpkaXNwbGF5OwkgCglEcmF3YWJsZSBkcmF3YWJsZTsKCWludCBtYWpvcl9jb2RlOwkJIAoJaW50 IG1pbm9yX2NvZGU7CQkgCn0gWE5vRXhwb3NlRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CglpbnQg dHlwZTsKCXVuc2lnbmVkIGxvbmcgc2VyaWFsOwkgCglpbnQgIHNlbmRfZXZlbnQ7CSAKCURpc3Bs YXkgKmRpc3BsYXk7CSAKCVdpbmRvdyB3aW5kb3c7CglpbnQgc3RhdGU7CQkgCn0gWFZpc2liaWxp dHlFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKCWludCB0eXBlOwoJdW5zaWduZWQgbG9uZyBzZXJp YWw7CSAKCWludCAgc2VuZF9ldmVudDsJIAoJRGlzcGxheSAqZGlzcGxheTsJIAoJV2luZG93IHBh cmVudDsJCSAKCVdpbmRvdyB3aW5kb3c7CQkgCglpbnQgeCwgeTsJCSAKCWludCB3aWR0aCwgaGVp Z2h0OwkgCglpbnQgYm9yZGVyX3dpZHRoOwkgCglpbnQgIG92ZXJyaWRlX3JlZGlyZWN0OwkgCn0g WENyZWF0ZVdpbmRvd0V2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50IHR5cGU7Cgl1bnNpZ25l ZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5kX2V2ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5Owkg CglXaW5kb3cgZXZlbnQ7CglXaW5kb3cgd2luZG93Owp9IFhEZXN0cm95V2luZG93RXZlbnQ7Cgp0 eXBlZGVmIHN0cnVjdCB7CglpbnQgdHlwZTsKCXVuc2lnbmVkIGxvbmcgc2VyaWFsOwkgCglpbnQg IHNlbmRfZXZlbnQ7CSAKCURpc3BsYXkgKmRpc3BsYXk7CSAKCVdpbmRvdyBldmVudDsKCVdpbmRv dyB3aW5kb3c7CglpbnQgIGZyb21fY29uZmlndXJlOwp9IFhVbm1hcEV2ZW50OwoKdHlwZWRlZiBz dHJ1Y3QgewoJaW50IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5kX2V2 ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5OwkgCglXaW5kb3cgZXZlbnQ7CglXaW5kb3cgd2luZG93 OwoJaW50ICBvdmVycmlkZV9yZWRpcmVjdDsJIAp9IFhNYXBFdmVudDsKCnR5cGVkZWYgc3RydWN0 IHsKCWludCB0eXBlOwoJdW5zaWduZWQgbG9uZyBzZXJpYWw7CSAKCWludCAgc2VuZF9ldmVudDsJ IAoJRGlzcGxheSAqZGlzcGxheTsJIAoJV2luZG93IHBhcmVudDsKCVdpbmRvdyB3aW5kb3c7Cn0g WE1hcFJlcXVlc3RFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKCWludCB0eXBlOwoJdW5zaWduZWQg bG9uZyBzZXJpYWw7CSAKCWludCAgc2VuZF9ldmVudDsJIAoJRGlzcGxheSAqZGlzcGxheTsJIAoJ V2luZG93IGV2ZW50OwoJV2luZG93IHdpbmRvdzsKCVdpbmRvdyBwYXJlbnQ7CglpbnQgeCwgeTsK CWludCAgb3ZlcnJpZGVfcmVkaXJlY3Q7Cn0gWFJlcGFyZW50RXZlbnQ7Cgp0eXBlZGVmIHN0cnVj dCB7CglpbnQgdHlwZTsKCXVuc2lnbmVkIGxvbmcgc2VyaWFsOwkgCglpbnQgIHNlbmRfZXZlbnQ7 CSAKCURpc3BsYXkgKmRpc3BsYXk7CSAKCVdpbmRvdyBldmVudDsKCVdpbmRvdyB3aW5kb3c7Cglp bnQgeCwgeTsKCWludCB3aWR0aCwgaGVpZ2h0OwoJaW50IGJvcmRlcl93aWR0aDsKCVdpbmRvdyBh Ym92ZTsKCWludCAgb3ZlcnJpZGVfcmVkaXJlY3Q7Cn0gWENvbmZpZ3VyZUV2ZW50OwoKdHlwZWRl ZiBzdHJ1Y3QgewoJaW50IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5k X2V2ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5OwkgCglXaW5kb3cgZXZlbnQ7CglXaW5kb3cgd2lu ZG93OwoJaW50IHgsIHk7Cn0gWEdyYXZpdHlFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKCWludCB0 eXBlOwoJdW5zaWduZWQgbG9uZyBzZXJpYWw7CSAKCWludCAgc2VuZF9ldmVudDsJIAoJRGlzcGxh eSAqZGlzcGxheTsJIAoJV2luZG93IHdpbmRvdzsKCWludCB3aWR0aCwgaGVpZ2h0Owp9IFhSZXNp emVSZXF1ZXN0RXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CglpbnQgdHlwZTsKCXVuc2lnbmVkIGxv bmcgc2VyaWFsOwkgCglpbnQgIHNlbmRfZXZlbnQ7CSAKCURpc3BsYXkgKmRpc3BsYXk7CSAKCVdp bmRvdyBwYXJlbnQ7CglXaW5kb3cgd2luZG93OwoJaW50IHgsIHk7CglpbnQgd2lkdGgsIGhlaWdo dDsKCWludCBib3JkZXJfd2lkdGg7CglXaW5kb3cgYWJvdmU7CglpbnQgZGV0YWlsOwkJIAoJdW5z aWduZWQgbG9uZyB2YWx1ZV9tYXNrOwp9IFhDb25maWd1cmVSZXF1ZXN0RXZlbnQ7Cgp0eXBlZGVm IHN0cnVjdCB7CglpbnQgdHlwZTsKCXVuc2lnbmVkIGxvbmcgc2VyaWFsOwkgCglpbnQgIHNlbmRf ZXZlbnQ7CSAKCURpc3BsYXkgKmRpc3BsYXk7CSAKCVdpbmRvdyBldmVudDsKCVdpbmRvdyB3aW5k b3c7CglpbnQgcGxhY2U7CQkgCn0gWENpcmN1bGF0ZUV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewoJ aW50IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5kX2V2ZW50OwkgCglE aXNwbGF5ICpkaXNwbGF5OwkgCglXaW5kb3cgcGFyZW50OwoJV2luZG93IHdpbmRvdzsKCWludCBw bGFjZTsJCSAKfSBYQ2lyY3VsYXRlUmVxdWVzdEV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50 IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5kX2V2ZW50OwkgCglEaXNw bGF5ICpkaXNwbGF5OwkgCglXaW5kb3cgd2luZG93OwoJQXRvbSBhdG9tOwoJVGltZSB0aW1lOwoJ aW50IHN0YXRlOwkJIAp9IFhQcm9wZXJ0eUV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50IHR5 cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5kX2V2ZW50OwkgCglEaXNwbGF5 ICpkaXNwbGF5OwkgCglXaW5kb3cgd2luZG93OwoJQXRvbSBzZWxlY3Rpb247CglUaW1lIHRpbWU7 Cn0gWFNlbGVjdGlvbkNsZWFyRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CglpbnQgdHlwZTsKCXVu c2lnbmVkIGxvbmcgc2VyaWFsOwkgCglpbnQgIHNlbmRfZXZlbnQ7CSAKCURpc3BsYXkgKmRpc3Bs YXk7CSAKCVdpbmRvdyBvd25lcjsKCVdpbmRvdyByZXF1ZXN0b3I7CglBdG9tIHNlbGVjdGlvbjsK CUF0b20gdGFyZ2V0OwoJQXRvbSBwcm9wZXJ0eTsKCVRpbWUgdGltZTsKfSBYU2VsZWN0aW9uUmVx dWVzdEV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNl cmlhbDsJIAoJaW50ICBzZW5kX2V2ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5OwkgCglXaW5kb3cg cmVxdWVzdG9yOwoJQXRvbSBzZWxlY3Rpb247CglBdG9tIHRhcmdldDsKCUF0b20gcHJvcGVydHk7 CQkgCglUaW1lIHRpbWU7Cn0gWFNlbGVjdGlvbkV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50 IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5kX2V2ZW50OwkgCglEaXNw bGF5ICpkaXNwbGF5OwkgCglXaW5kb3cgd2luZG93OwoJQ29sb3JtYXAgY29sb3JtYXA7CSAKCglp bnQgIGNfbmV3OwkJIAoKCgoJaW50IHN0YXRlOwkJIAp9IFhDb2xvcm1hcEV2ZW50OwoKdHlwZWRl ZiBzdHJ1Y3QgewoJaW50IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5k X2V2ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5OwkgCglXaW5kb3cgd2luZG93OwoJQXRvbSBtZXNz YWdlX3R5cGU7CglpbnQgZm9ybWF0OwoJdW5pb24gewoJCWNoYXIgYlsyMF07CgkJc2hvcnQgc1sx MF07CgkJbG9uZyBsWzVdOwoJCX0gZGF0YTsKfSBYQ2xpZW50TWVzc2FnZUV2ZW50OwoKdHlwZWRl ZiBzdHJ1Y3QgewoJaW50IHR5cGU7Cgl1bnNpZ25lZCBsb25nIHNlcmlhbDsJIAoJaW50ICBzZW5k X2V2ZW50OwkgCglEaXNwbGF5ICpkaXNwbGF5OwkgCglXaW5kb3cgd2luZG93OwkJIAoJaW50IHJl cXVlc3Q7CQkgCgoJaW50IGZpcnN0X2tleWNvZGU7CSAKCWludCBjb3VudDsJCSAKfSBYTWFwcGlu Z0V2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewoJaW50IHR5cGU7CglEaXNwbGF5ICpkaXNwbGF5Owkg CglYSUQgcmVzb3VyY2VpZDsJCSAKCXVuc2lnbmVkIGxvbmcgc2VyaWFsOwkgCgl1bnNpZ25lZCBj aGFyIGVycm9yX2NvZGU7CSAKCXVuc2lnbmVkIGNoYXIgcmVxdWVzdF9jb2RlOwkgCgl1bnNpZ25l ZCBjaGFyIG1pbm9yX2NvZGU7CSAKfSBYRXJyb3JFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKCWlu dCB0eXBlOwoJdW5zaWduZWQgbG9uZyBzZXJpYWw7CSAKCWludCAgc2VuZF9ldmVudDsJIAoJRGlz cGxheSAqZGlzcGxheTsgCglXaW5kb3cgd2luZG93OwkgCn0gWEFueUV2ZW50OwoKIAoKCgp0eXBl ZGVmIHVuaW9uIF9YRXZlbnQgewogICAgICAgIGludCB0eXBlOwkJIAoJWEFueUV2ZW50IHhhbnk7 CglYS2V5RXZlbnQgeGtleTsKCVhCdXR0b25FdmVudCB4YnV0dG9uOwoJWE1vdGlvbkV2ZW50IHht b3Rpb247CglYQ3Jvc3NpbmdFdmVudCB4Y3Jvc3Npbmc7CglYRm9jdXNDaGFuZ2VFdmVudCB4Zm9j dXM7CglYRXhwb3NlRXZlbnQgeGV4cG9zZTsKCVhHcmFwaGljc0V4cG9zZUV2ZW50IHhncmFwaGlj c2V4cG9zZTsKCVhOb0V4cG9zZUV2ZW50IHhub2V4cG9zZTsKCVhWaXNpYmlsaXR5RXZlbnQgeHZp c2liaWxpdHk7CglYQ3JlYXRlV2luZG93RXZlbnQgeGNyZWF0ZXdpbmRvdzsKCVhEZXN0cm95V2lu ZG93RXZlbnQgeGRlc3Ryb3l3aW5kb3c7CglYVW5tYXBFdmVudCB4dW5tYXA7CglYTWFwRXZlbnQg eG1hcDsKCVhNYXBSZXF1ZXN0RXZlbnQgeG1hcHJlcXVlc3Q7CglYUmVwYXJlbnRFdmVudCB4cmVw YXJlbnQ7CglYQ29uZmlndXJlRXZlbnQgeGNvbmZpZ3VyZTsKCVhHcmF2aXR5RXZlbnQgeGdyYXZp dHk7CglYUmVzaXplUmVxdWVzdEV2ZW50IHhyZXNpemVyZXF1ZXN0OwoJWENvbmZpZ3VyZVJlcXVl c3RFdmVudCB4Y29uZmlndXJlcmVxdWVzdDsKCVhDaXJjdWxhdGVFdmVudCB4Y2lyY3VsYXRlOwoJ WENpcmN1bGF0ZVJlcXVlc3RFdmVudCB4Y2lyY3VsYXRlcmVxdWVzdDsKCVhQcm9wZXJ0eUV2ZW50 IHhwcm9wZXJ0eTsKCVhTZWxlY3Rpb25DbGVhckV2ZW50IHhzZWxlY3Rpb25jbGVhcjsKCVhTZWxl Y3Rpb25SZXF1ZXN0RXZlbnQgeHNlbGVjdGlvbnJlcXVlc3Q7CglYU2VsZWN0aW9uRXZlbnQgeHNl bGVjdGlvbjsKCVhDb2xvcm1hcEV2ZW50IHhjb2xvcm1hcDsKCVhDbGllbnRNZXNzYWdlRXZlbnQg eGNsaWVudDsKCVhNYXBwaW5nRXZlbnQgeG1hcHBpbmc7CglYRXJyb3JFdmVudCB4ZXJyb3I7CglY S2V5bWFwRXZlbnQgeGtleW1hcDsKCWxvbmcgcGFkWzI0XTsKfSBYRXZlbnQ7CgoKCgogCgoKdHlw ZWRlZiBzdHJ1Y3QgewogICAgc2hvcnQJbGJlYXJpbmc7CSAKICAgIHNob3J0CXJiZWFyaW5nOwkg CiAgICBzaG9ydAl3aWR0aDsJCSAKICAgIHNob3J0CWFzY2VudDsJCSAKICAgIHNob3J0CWRlc2Nl bnQ7CSAKICAgIHVuc2lnbmVkIHNob3J0IGF0dHJpYnV0ZXM7CSAKfSBYQ2hhclN0cnVjdDsKCiAK CgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgQXRvbSBuYW1lOwogICAgdW5zaWduZWQgbG9uZyBjYXJk MzI7Cn0gWEZvbnRQcm9wOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgWEV4dERhdGEJKmV4dF9kYXRh OwkgCiAgICBGb250ICAgICAgICBmaWQ7ICAgICAgICAgICAgIAogICAgdW5zaWduZWQJZGlyZWN0 aW9uOwkgCiAgICB1bnNpZ25lZAltaW5fY2hhcl9vcl9ieXRlMjsgCiAgICB1bnNpZ25lZAltYXhf Y2hhcl9vcl9ieXRlMjsgCiAgICB1bnNpZ25lZAltaW5fYnl0ZTE7CSAKICAgIHVuc2lnbmVkCW1h eF9ieXRlMTsJIAogICAgaW50IAlhbGxfY2hhcnNfZXhpc3Q7IAogICAgdW5zaWduZWQJZGVmYXVs dF9jaGFyOwkgCiAgICBpbnQgICAgICAgICBuX3Byb3BlcnRpZXM7ICAgIAogICAgWEZvbnRQcm9w CSpwcm9wZXJ0aWVzOwkgCiAgICBYQ2hhclN0cnVjdAltaW5fYm91bmRzOwkgCiAgICBYQ2hhclN0 cnVjdAltYXhfYm91bmRzOwkgCiAgICBYQ2hhclN0cnVjdAkqcGVyX2NoYXI7CSAKICAgIGludAkJ YXNjZW50OwkJIAogICAgaW50CQlkZXNjZW50OwkgCn0gWEZvbnRTdHJ1Y3Q7CgogCgoKdHlwZWRl ZiBzdHJ1Y3QgewogICAgY2hhciAqY2hhcnM7CQkgCiAgICBpbnQgbmNoYXJzOwkJCSAKICAgIGlu dCBkZWx0YTsJCQkgCiAgICBGb250IGZvbnQ7CQkJIAp9IFhUZXh0SXRlbTsKCnR5cGVkZWYgc3Ry dWN0IHsJCSAKICAgIHVuc2lnbmVkIGNoYXIgYnl0ZTE7CiAgICB1bnNpZ25lZCBjaGFyIGJ5dGUy Owp9IFhDaGFyMmI7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBYQ2hhcjJiICpjaGFyczsJCSAKICAg IGludCBuY2hhcnM7CQkJIAogICAgaW50IGRlbHRhOwkJCSAKICAgIEZvbnQgZm9udDsJCQkgCn0g WFRleHRJdGVtMTY7CgoKdHlwZWRlZiB1bmlvbiB7IERpc3BsYXkgKmRpc3BsYXk7CgkJR0MgZ2M7 CgkJVmlzdWFsICp2aXN1YWw7CgkJU2NyZWVuICpzY3JlZW47CgkJU2NyZWVuRm9ybWF0ICpwaXht YXBfZm9ybWF0OwoJCVhGb250U3RydWN0ICpmb250OyB9IFhFRGF0YU9iamVjdDsKCnR5cGVkZWYg c3RydWN0IHsKICAgIFhSZWN0YW5nbGUgICAgICBtYXhfaW5rX2V4dGVudDsKICAgIFhSZWN0YW5n bGUgICAgICBtYXhfbG9naWNhbF9leHRlbnQ7Cn0gWEZvbnRTZXRFeHRlbnRzOwoKdHlwZWRlZiBz dHJ1Y3QgX1hPTSAqWE9NOwp0eXBlZGVmIHN0cnVjdCBfWE9DICpYT0MsICpYRm9udFNldDsKCnR5 cGVkZWYgdm9pZCAoKlhPTVByb2MpKAoKCVhPQywgWFBvaW50ZXIsIFhQb2ludGVyCgopOwoKdHlw ZWRlZiBzdHJ1Y3QgewogICAgY2hhciAgICAgICAgICAgKmNoYXJzOwogICAgaW50ICAgICAgICAg ICAgIG5jaGFyczsKICAgIGludCAgICAgICAgICAgICBkZWx0YTsKICAgIFhGb250U2V0ICAgICAg ICBmb250X3NldDsKfSBYbWJUZXh0SXRlbTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIHdjaGFyX3Qg ICAgICAgICpjaGFyczsKICAgIGludCAgICAgICAgICAgICBuY2hhcnM7CiAgICBpbnQgICAgICAg ICAgICAgZGVsdGE7CiAgICBYRm9udFNldCAgICAgICAgZm9udF9zZXQ7Cn0gWHdjVGV4dEl0ZW07 CgoKCgoKCgoKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIGludCBjaGFyc2V0X2NvdW50OwogICAg Y2hhciAqKmNoYXJzZXRfbGlzdDsKfSBYT01DaGFyU2V0TGlzdDsKCnR5cGVkZWYgZW51bSB7CiAg ICBYT01PcmllbnRhdGlvbl9MVFJfVFRCLAogICAgWE9NT3JpZW50YXRpb25fUlRMX1RUQiwKICAg IFhPTU9yaWVudGF0aW9uX1RUQl9MVFIsCiAgICBYT01PcmllbnRhdGlvbl9UVEJfUlRMLAogICAg WE9NT3JpZW50YXRpb25fQ29udGV4dAp9IFhPcmllbnRhdGlvbjsKCnR5cGVkZWYgc3RydWN0IHsK ICAgIGludCBudW1fb3JpZW50YXRpb247CiAgICBYT3JpZW50YXRpb24gKm9yaWVudGF0aW9uOwkg Cn0gWE9NT3JpZW50YXRpb247Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBpbnQgbnVtX2ZvbnQ7CiAg ICBYRm9udFN0cnVjdCAqKmZvbnRfc3RydWN0X2xpc3Q7CiAgICBjaGFyICoqZm9udF9uYW1lX2xp c3Q7Cn0gWE9NRm9udEluZm87CgoKdHlwZWRlZiBzdHJ1Y3QgX1hJTSAqWElNOwp0eXBlZGVmIHN0 cnVjdCBfWElDICpYSUM7Cgp0eXBlZGVmIHZvaWQgKCpYSU1Qcm9jKSgKCglYSUMsIFhQb2ludGVy LCBYUG9pbnRlcgoKKTsKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBYSU1TdHlsZTsKCnR5cGVkZWYg c3RydWN0IHsKICAgIHVuc2lnbmVkIHNob3J0IGNvdW50X3N0eWxlczsKICAgIFhJTVN0eWxlICpz dXBwb3J0ZWRfc3R5bGVzOwp9IFhJTVN0eWxlczsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIHZvaWQgKlhWYU5lc3Rl ZExpc3Q7CgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBYUG9pbnRlciBjbGllbnRfZGF0YTsKICAg IFhJTVByb2MgY2FsbGJhY2s7Cn0gWElNQ2FsbGJhY2s7Cgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcg WElNRmVlZGJhY2s7CgoKCgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX1hJTVRleHQgewogICAgdW5z aWduZWQgc2hvcnQgbGVuZ3RoOwogICAgWElNRmVlZGJhY2sgKmZlZWRiYWNrOwogICAgaW50ICBl bmNvZGluZ19pc193Y2hhcjsgCiAgICB1bmlvbiB7CgljaGFyICptdWx0aV9ieXRlOwoJd2NoYXJf dCAqd2lkZV9jaGFyOwogICAgfSBzdHJpbmc7IAp9IFhJTVRleHQ7Cgp0eXBlZGVmCXVuc2lnbmVk IGxvbmcJIFhJTVByZWVkaXRTdGF0ZTsKCgoKCgp0eXBlZGVmCXN0cnVjdAlfWElNUHJlZWRpdFN0 YXRlTm90aWZ5Q2FsbGJhY2tTdHJ1Y3QgewogICAgWElNUHJlZWRpdFN0YXRlIHN0YXRlOwp9IFhJ TVByZWVkaXRTdGF0ZU5vdGlmeUNhbGxiYWNrU3RydWN0OwoKdHlwZWRlZgl1bnNpZ25lZCBsb25n CSBYSU1SZXNldFN0YXRlOwoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIFhJTVN0cmluZ0NvbnZl cnNpb25GZWVkYmFjazsKCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBfWElNU3RyaW5nQ29udmVyc2lv blRleHQgewogICAgdW5zaWduZWQgc2hvcnQgbGVuZ3RoOwogICAgWElNU3RyaW5nQ29udmVyc2lv bkZlZWRiYWNrICpmZWVkYmFjazsKICAgIGludCAgZW5jb2RpbmdfaXNfd2NoYXI7IAogICAgdW5p b24gewoJY2hhciAqbWJzOwoJd2NoYXJfdCAqd2NzOwogICAgfSBzdHJpbmc7IAp9IFhJTVN0cmlu Z0NvbnZlcnNpb25UZXh0OwoKdHlwZWRlZgl1bnNpZ25lZCBzaG9ydAlYSU1TdHJpbmdDb252ZXJz aW9uUG9zaXRpb247Cgp0eXBlZGVmCXVuc2lnbmVkIHNob3J0CVhJTVN0cmluZ0NvbnZlcnNpb25U eXBlOwoKCgoKCgp0eXBlZGVmCXVuc2lnbmVkIHNob3J0CVhJTVN0cmluZ0NvbnZlcnNpb25PcGVy YXRpb247CgogCgoKCgoKCgp0eXBlZGVmIGVudW0gewogICAgWElNRm9yd2FyZENoYXIsIFhJTUJh Y2t3YXJkQ2hhciwKICAgIFhJTUZvcndhcmRXb3JkLCBYSU1CYWNrd2FyZFdvcmQsCiAgICBYSU1D YXJldFVwLCBYSU1DYXJldERvd24sCiAgICBYSU1OZXh0TGluZSwgWElNUHJldmlvdXNMaW5lLAog ICAgWElNTGluZVN0YXJ0LCBYSU1MaW5lRW5kLCAKICAgIFhJTUFic29sdXRlUG9zaXRpb24sCiAg ICBYSU1Eb250Q2hhbmdlCn0gWElNQ2FyZXREaXJlY3Rpb247Cgp0eXBlZGVmIHN0cnVjdCBfWElN U3RyaW5nQ29udmVyc2lvbkNhbGxiYWNrU3RydWN0IHsKICAgIFhJTVN0cmluZ0NvbnZlcnNpb25Q b3NpdGlvbiBwb3NpdGlvbjsKICAgIFhJTUNhcmV0RGlyZWN0aW9uIGRpcmVjdGlvbjsKICAgIFhJ TVN0cmluZ0NvbnZlcnNpb25PcGVyYXRpb24gb3BlcmF0aW9uOwogICAgdW5zaWduZWQgc2hvcnQg ZmFjdG9yOwogICAgWElNU3RyaW5nQ29udmVyc2lvblRleHQgKnRleHQ7Cn0gWElNU3RyaW5nQ29u dmVyc2lvbkNhbGxiYWNrU3RydWN0OwoKdHlwZWRlZiBzdHJ1Y3QgX1hJTVByZWVkaXREcmF3Q2Fs bGJhY2tTdHJ1Y3QgewogICAgaW50IGNhcmV0OwkJIAogICAgaW50IGNoZ19maXJzdDsJIAogICAg aW50IGNoZ19sZW5ndGg7CSAKICAgIFhJTVRleHQgKnRleHQ7Cn0gWElNUHJlZWRpdERyYXdDYWxs YmFja1N0cnVjdDsKCnR5cGVkZWYgZW51bSB7CiAgICBYSU1Jc0ludmlzaWJsZSwJICAKICAgIFhJ TUlzUHJpbWFyeSwJIAogICAgWElNSXNTZWNvbmRhcnkJIAp9IFhJTUNhcmV0U3R5bGU7Cgp0eXBl ZGVmIHN0cnVjdCBfWElNUHJlZWRpdENhcmV0Q2FsbGJhY2tTdHJ1Y3QgewogICAgaW50IHBvc2l0 aW9uOwkJICAKICAgIFhJTUNhcmV0RGlyZWN0aW9uIGRpcmVjdGlvbjsgIAogICAgWElNQ2FyZXRT dHlsZSBzdHlsZTsJICAKfSBYSU1QcmVlZGl0Q2FyZXRDYWxsYmFja1N0cnVjdDsKCnR5cGVkZWYg ZW51bSB7CiAgICBYSU1UZXh0VHlwZSwKICAgIFhJTUJpdG1hcFR5cGUKfSBYSU1TdGF0dXNEYXRh VHlwZTsKCQp0eXBlZGVmIHN0cnVjdCBfWElNU3RhdHVzRHJhd0NhbGxiYWNrU3RydWN0IHsKICAg IFhJTVN0YXR1c0RhdGFUeXBlIHR5cGU7CiAgICB1bmlvbiB7CglYSU1UZXh0ICp0ZXh0OwoJUGl4 bWFwICBiaXRtYXA7CiAgICB9IGRhdGE7Cn0gWElNU3RhdHVzRHJhd0NhbGxiYWNrU3RydWN0OwoK dHlwZWRlZiBzdHJ1Y3QgX1hJTUhvdEtleVRyaWdnZXIgewogICAgS2V5U3ltCSBrZXlzeW07CiAg ICBpbnQJCSBtb2RpZmllcjsKICAgIGludAkJIG1vZGlmaWVyX21hc2s7Cn0gWElNSG90S2V5VHJp Z2dlcjsKCnR5cGVkZWYgc3RydWN0IF9YSU1Ib3RLZXlUcmlnZ2VycyB7CiAgICBpbnQJCQkgbnVt X2hvdF9rZXk7CiAgICBYSU1Ib3RLZXlUcmlnZ2VyCSprZXk7Cn0gWElNSG90S2V5VHJpZ2dlcnM7 Cgp0eXBlZGVmCXVuc2lnbmVkIGxvbmcJIFhJTUhvdEtleVN0YXRlOwoKCgoKdHlwZWRlZiBzdHJ1 Y3QgewogICAgdW5zaWduZWQgc2hvcnQgY291bnRfdmFsdWVzOwogICAgY2hhciAqKnN1cHBvcnRl ZF92YWx1ZXM7Cn0gWElNVmFsdWVzTGlzdDsKCmV4dGVybiAiQyIgeyAKCgoKCgpleHRlcm4gaW50 IF9YZGVidWc7CgpleHRlcm4gWEZvbnRTdHJ1Y3QgKlhMb2FkUXVlcnlGb250KAoKICAgIERpc3Bs YXkqCQkgLAogICAgY29uc3QgIGNoYXIqCSAKCik7CgpleHRlcm4gWEZvbnRTdHJ1Y3QgKlhRdWVy eUZvbnQoCgogICAgRGlzcGxheSoJCSAsCiAgICBYSUQJCQkgCgopOwoKCmV4dGVybiBYVGltZUNv b3JkICpYR2V0TW90aW9uRXZlbnRzKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAog ICAgVGltZQkJICwKICAgIFRpbWUJCSAsCiAgICBpbnQqCQkgCgopOwoKZXh0ZXJuIFhNb2RpZmll cktleW1hcCAqWERlbGV0ZU1vZGlmaWVybWFwRW50cnkoCgogICAgWE1vZGlmaWVyS2V5bWFwKgkg LAoKICAgIHVuc2lnbmVkIGludAkgLAoKCgogICAgaW50CQkJIAoKKTsKCmV4dGVybiBYTW9kaWZp ZXJLZXltYXAJKlhHZXRNb2RpZmllck1hcHBpbmcoCgogICAgRGlzcGxheSoJCSAKCik7CgpleHRl cm4gWE1vZGlmaWVyS2V5bWFwCSpYSW5zZXJ0TW9kaWZpZXJtYXBFbnRyeSgKCiAgICBYTW9kaWZp ZXJLZXltYXAqCSAsCgogICAgdW5zaWduZWQgaW50CSAsCgoKCiAgICBpbnQJCQkgICAgIAoKKTsK CmV4dGVybiBYTW9kaWZpZXJLZXltYXAgKlhOZXdNb2RpZmllcm1hcCgKCiAgICBpbnQJCQkgCgop OwoKZXh0ZXJuIFhJbWFnZSAqWENyZWF0ZUltYWdlKAoKICAgIERpc3BsYXkqCQkgLAogICAgVmlz dWFsKgkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAg ICBjaGFyKgkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICBp bnQJCQkgLAogICAgaW50CQkJIAoKKTsKZXh0ZXJuIGludCAgWEluaXRJbWFnZSgKCiAgICBYSW1h Z2UqCQkgCgopOwpleHRlcm4gWEltYWdlICpYR2V0SW1hZ2UoCgogICAgRGlzcGxheSoJCSAsCiAg ICBEcmF3YWJsZQkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgdW5zaWduZWQgaW50 CSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIHVuc2lnbmVkIGxvbmcJICwKICAgIGludAkJCSAK Cik7CmV4dGVybiBYSW1hZ2UgKlhHZXRTdWJJbWFnZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIERy YXdhYmxlCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICB1bnNpZ25lZCBpbnQJICwK ICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgbG9uZwkgLAogICAgaW50CQkJICwKICAg IFhJbWFnZSoJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJIAoKKTsKCiAKCgpleHRlcm4gRGlz cGxheSAqWE9wZW5EaXNwbGF5KAoKICAgIGNvbnN0ICBjaGFyKgkgCgopOwoKZXh0ZXJuIHZvaWQg WHJtSW5pdGlhbGl6ZSgKCiAgICB2b2lkCgopOwoKZXh0ZXJuIGNoYXIgKlhGZXRjaEJ5dGVzKAoK ICAgIERpc3BsYXkqCQkgLAogICAgaW50KgkJIAoKKTsKZXh0ZXJuIGNoYXIgKlhGZXRjaEJ1ZmZl cigKCiAgICBEaXNwbGF5KgkJICwKICAgIGludCoJCSAsCiAgICBpbnQJCQkgCgopOwpleHRlcm4g Y2hhciAqWEdldEF0b21OYW1lKAoKICAgIERpc3BsYXkqCQkgLAogICAgQXRvbQkJIAoKKTsKZXh0 ZXJuIGludCAgWEdldEF0b21OYW1lcygKCiAgICBEaXNwbGF5KgkJICwKICAgIEF0b20qCQkgLAog ICAgaW50CQkJICwKICAgIGNoYXIqKgkJIAoKKTsKZXh0ZXJuIGNoYXIgKlhHZXREZWZhdWx0KAoK ICAgIERpc3BsYXkqCQkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBjb25zdCAgY2hhcioJIAkJ ICAKCik7CmV4dGVybiBjaGFyICpYRGlzcGxheU5hbWUoCgogICAgY29uc3QgIGNoYXIqCSAKCik7 CmV4dGVybiBjaGFyICpYS2V5c3ltVG9TdHJpbmcoCgogICAgS2V5U3ltCQkgCgopOwoKZXh0ZXJu IGludCAoKlhTeW5jaHJvbml6ZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIGludCAJCSAKKSkodm9p ZCk7CgoKCgpleHRlcm4gaW50ICgqWFNldEFmdGVyRnVuY3Rpb24oCgogICAgRGlzcGxheSoJCSAs CiAgICBpbnQgKCopICgKCgkgICAgIERpc3BsYXkqCSAKCiAgICAgICAgICAgICkJCSAKKSkodm9p ZCk7CgoKCgpleHRlcm4gQXRvbSBYSW50ZXJuQXRvbSgKCiAgICBEaXNwbGF5KgkJICwKICAgIGNv bnN0ICBjaGFyKgkgLAogICAgaW50IAkJIAkJIAoKKTsKZXh0ZXJuIGludCAgWEludGVybkF0b21z KAoKICAgIERpc3BsYXkqCQkgLAogICAgY2hhcioqCQkgLAogICAgaW50CQkJICwKICAgIGludCAJ CSAsCiAgICBBdG9tKgkJIAoKKTsKZXh0ZXJuIENvbG9ybWFwIFhDb3B5Q29sb3JtYXBBbmRGcmVl KAoKICAgIERpc3BsYXkqCQkgLAogICAgQ29sb3JtYXAJCSAKCik7CmV4dGVybiBDb2xvcm1hcCBY Q3JlYXRlQ29sb3JtYXAoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBWaXN1 YWwqCQkgLAogICAgaW50CQkJIAkJCSAKCik7CmV4dGVybiBDdXJzb3IgWENyZWF0ZVBpeG1hcEN1 cnNvcigKCiAgICBEaXNwbGF5KgkJICwKICAgIFBpeG1hcAkJICwKICAgIFBpeG1hcAkJICwKICAg IFhDb2xvcioJCSAsCiAgICBYQ29sb3IqCQkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICB1bnNp Z25lZCBpbnQJIAkJCSAgIAoKKTsKZXh0ZXJuIEN1cnNvciBYQ3JlYXRlR2x5cGhDdXJzb3IoCgog ICAgRGlzcGxheSoJCSAsCiAgICBGb250CQkgLAogICAgRm9udAkJICwKICAgIHVuc2lnbmVkIGlu dAkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICBYQ29sb3IqCQkgLAogICAgWENvbG9yKgkJIAoK KTsKZXh0ZXJuIEN1cnNvciBYQ3JlYXRlRm9udEN1cnNvcigKCiAgICBEaXNwbGF5KgkJICwKICAg IHVuc2lnbmVkIGludAkgCgopOwpleHRlcm4gRm9udCBYTG9hZEZvbnQoCgogICAgRGlzcGxheSoJ CSAsCiAgICBjb25zdCAgY2hhcioJIAoKKTsKZXh0ZXJuIEdDIFhDcmVhdGVHQygKCiAgICBEaXNw bGF5KgkJICwKICAgIERyYXdhYmxlCQkgLAogICAgdW5zaWduZWQgbG9uZwkgLAogICAgWEdDVmFs dWVzKgkJIAoKKTsKZXh0ZXJuIEdDb250ZXh0IFhHQ29udGV4dEZyb21HQygKCiAgICBHQwkJCSAK Cik7CmV4dGVybiB2b2lkIFhGbHVzaEdDKAoKICAgIERpc3BsYXkqCQkgLAogICAgR0MJCQkgCgop OwpleHRlcm4gUGl4bWFwIFhDcmVhdGVQaXhtYXAoCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3 YWJsZQkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICB1bnNp Z25lZCBpbnQJIAkJICAgICAgICAKCik7CmV4dGVybiBQaXhtYXAgWENyZWF0ZUJpdG1hcEZyb21E YXRhKAoKICAgIERpc3BsYXkqCQkgLAogICAgRHJhd2FibGUJCSAsCiAgICBjb25zdCAgY2hhcioJ ICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAKCik7CmV4dGVybiBQaXht YXAgWENyZWF0ZVBpeG1hcEZyb21CaXRtYXBEYXRhKAoKICAgIERpc3BsYXkqCQkgLAogICAgRHJh d2FibGUJCSAsCiAgICBjaGFyKgkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQg aW50CSAsCiAgICB1bnNpZ25lZCBsb25nCSAsCiAgICB1bnNpZ25lZCBsb25nCSAsCiAgICB1bnNp Z25lZCBpbnQJIAoKKTsKZXh0ZXJuIFdpbmRvdyBYQ3JlYXRlU2ltcGxlV2luZG93KAoKICAgIERp c3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICB1 bnNpZ25lZCBpbnQJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAsCiAg ICB1bnNpZ25lZCBsb25nCSAsCiAgICB1bnNpZ25lZCBsb25nCSAKCik7CmV4dGVybiBXaW5kb3cg WEdldFNlbGVjdGlvbk93bmVyKAoKICAgIERpc3BsYXkqCQkgLAogICAgQXRvbQkJIAoKKTsKZXh0 ZXJuIFdpbmRvdyBYQ3JlYXRlV2luZG93KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkg LAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIHVuc2ln bmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICBpbnQJCQkgLAogICAgdW5zaWduZWQg aW50CSAsCiAgICBWaXN1YWwqCQkgLAogICAgdW5zaWduZWQgbG9uZwkgLAogICAgWFNldFdpbmRv d0F0dHJpYnV0ZXMqCSAKCik7IApleHRlcm4gQ29sb3JtYXAgKlhMaXN0SW5zdGFsbGVkQ29sb3Jt YXBzKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgaW50KgkJIAoKKTsKZXh0 ZXJuIGNoYXIgKipYTGlzdEZvbnRzKAoKICAgIERpc3BsYXkqCQkgLAogICAgY29uc3QgIGNoYXIq CSAsCiAgICBpbnQJCQkgLAogICAgaW50KgkJIAoKKTsKZXh0ZXJuIGNoYXIgKipYTGlzdEZvbnRz V2l0aEluZm8oCgogICAgRGlzcGxheSoJCSAsCiAgICBjb25zdCAgY2hhcioJICwKICAgIGludAkJ CSAsCiAgICBpbnQqCQkgLAogICAgWEZvbnRTdHJ1Y3QqKgkgCgopOwpleHRlcm4gY2hhciAqKlhH ZXRGb250UGF0aCgKCiAgICBEaXNwbGF5KgkJICwKICAgIGludCoJCSAKCik7CmV4dGVybiBjaGFy ICoqWExpc3RFeHRlbnNpb25zKAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50KgkJIAoKKTsKZXh0 ZXJuIEF0b20gKlhMaXN0UHJvcGVydGllcygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJ ICwKICAgIGludCoJCSAKCik7CmV4dGVybiBYSG9zdEFkZHJlc3MgKlhMaXN0SG9zdHMoCgogICAg RGlzcGxheSoJCSAsCiAgICBpbnQqCQkgLAogICAgaW50ICoJCSAKCik7CmV4dGVybiBLZXlTeW0g WEtleWNvZGVUb0tleXN5bSgKCiAgICBEaXNwbGF5KgkJICwKCiAgICB1bnNpZ25lZCBpbnQJICwK CgoKICAgIGludAkJCSAKCik7CmV4dGVybiBLZXlTeW0gWExvb2t1cEtleXN5bSgKCiAgICBYS2V5 RXZlbnQqCQkgLAogICAgaW50CQkJIAoKKTsKZXh0ZXJuIEtleVN5bSAqWEdldEtleWJvYXJkTWFw cGluZygKCiAgICBEaXNwbGF5KgkJICwKCiAgICB1bnNpZ25lZCBpbnQJICwKCgoKICAgIGludAkJ CSAsCiAgICBpbnQqCQkgCgopOwpleHRlcm4gS2V5U3ltIFhTdHJpbmdUb0tleXN5bSgKCiAgICBj b25zdCAgY2hhcioJIAoKKTsKZXh0ZXJuIGxvbmcgWE1heFJlcXVlc3RTaXplKAoKICAgIERpc3Bs YXkqCQkgCgopOwpleHRlcm4gbG9uZyBYRXh0ZW5kZWRNYXhSZXF1ZXN0U2l6ZSgKCiAgICBEaXNw bGF5KgkJIAoKKTsKZXh0ZXJuIGNoYXIgKlhSZXNvdXJjZU1hbmFnZXJTdHJpbmcoCgogICAgRGlz cGxheSoJCSAKCik7CmV4dGVybiBjaGFyICpYU2NyZWVuUmVzb3VyY2VTdHJpbmcoCgoJU2NyZWVu KgkJIAoKKTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgWERpc3BsYXlNb3Rpb25CdWZmZXJTaXplKAoK ICAgIERpc3BsYXkqCQkgCgopOwpleHRlcm4gVmlzdWFsSUQgWFZpc3VhbElERnJvbVZpc3VhbCgK CiAgICBWaXN1YWwqCQkgCgopOwoKIAoKZXh0ZXJuIGludCAgWEluaXRUaHJlYWRzKAoKICAgIHZv aWQKCik7CgpleHRlcm4gdm9pZCBYTG9ja0Rpc3BsYXkoCgogICAgRGlzcGxheSoJCSAKCik7Cgpl eHRlcm4gdm9pZCBYVW5sb2NrRGlzcGxheSgKCiAgICBEaXNwbGF5KgkJIAoKKTsKCiAKCmV4dGVy biBYRXh0Q29kZXMgKlhJbml0RXh0ZW5zaW9uKAoKICAgIERpc3BsYXkqCQkgLAogICAgY29uc3Qg IGNoYXIqCSAKCik7CgpleHRlcm4gWEV4dENvZGVzICpYQWRkRXh0ZW5zaW9uKAoKICAgIERpc3Bs YXkqCQkgCgopOwpleHRlcm4gWEV4dERhdGEgKlhGaW5kT25FeHRlbnNpb25MaXN0KAoKICAgIFhF eHREYXRhKioJCSAsCiAgICBpbnQJCQkgCgopOwpleHRlcm4gWEV4dERhdGEgKipYRUhlYWRPZkV4 dGVuc2lvbkxpc3QoCgogICAgWEVEYXRhT2JqZWN0CSAKCik7CgogCmV4dGVybiBXaW5kb3cgWFJv b3RXaW5kb3coCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQJCQkgCgopOwpleHRlcm4gV2luZG93 IFhEZWZhdWx0Um9vdFdpbmRvdygKCiAgICBEaXNwbGF5KgkJIAoKKTsKZXh0ZXJuIFdpbmRvdyBY Um9vdFdpbmRvd09mU2NyZWVuKAoKICAgIFNjcmVlbioJCSAKCik7CmV4dGVybiBWaXN1YWwgKlhE ZWZhdWx0VmlzdWFsKAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50CQkJIAoKKTsKZXh0ZXJuIFZp c3VhbCAqWERlZmF1bHRWaXN1YWxPZlNjcmVlbigKCiAgICBTY3JlZW4qCQkgCgopOwpleHRlcm4g R0MgWERlZmF1bHRHQygKCiAgICBEaXNwbGF5KgkJICwKICAgIGludAkJCSAKCik7CmV4dGVybiBH QyBYRGVmYXVsdEdDT2ZTY3JlZW4oCgogICAgU2NyZWVuKgkJIAoKKTsKZXh0ZXJuIHVuc2lnbmVk IGxvbmcgWEJsYWNrUGl4ZWwoCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQJCQkgCgopOwpleHRl cm4gdW5zaWduZWQgbG9uZyBYV2hpdGVQaXhlbCgKCiAgICBEaXNwbGF5KgkJICwKICAgIGludAkJ CSAKCik7CmV4dGVybiB1bnNpZ25lZCBsb25nIFhBbGxQbGFuZXMoCgogICAgdm9pZAoKKTsKZXh0 ZXJuIHVuc2lnbmVkIGxvbmcgWEJsYWNrUGl4ZWxPZlNjcmVlbigKCiAgICBTY3JlZW4qCQkgCgop OwpleHRlcm4gdW5zaWduZWQgbG9uZyBYV2hpdGVQaXhlbE9mU2NyZWVuKAoKICAgIFNjcmVlbioJ CSAKCik7CmV4dGVybiB1bnNpZ25lZCBsb25nIFhOZXh0UmVxdWVzdCgKCiAgICBEaXNwbGF5KgkJ IAoKKTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgWExhc3RLbm93blJlcXVlc3RQcm9jZXNzZWQoCgog ICAgRGlzcGxheSoJCSAKCik7CmV4dGVybiBjaGFyICpYU2VydmVyVmVuZG9yKAoKICAgIERpc3Bs YXkqCQkgCgopOwpleHRlcm4gY2hhciAqWERpc3BsYXlTdHJpbmcoCgogICAgRGlzcGxheSoJCSAK Cik7CmV4dGVybiBDb2xvcm1hcCBYRGVmYXVsdENvbG9ybWFwKAoKICAgIERpc3BsYXkqCQkgLAog ICAgaW50CQkJIAoKKTsKZXh0ZXJuIENvbG9ybWFwIFhEZWZhdWx0Q29sb3JtYXBPZlNjcmVlbigK CiAgICBTY3JlZW4qCQkgCgopOwpleHRlcm4gRGlzcGxheSAqWERpc3BsYXlPZlNjcmVlbigKCiAg ICBTY3JlZW4qCQkgCgopOwpleHRlcm4gU2NyZWVuICpYU2NyZWVuT2ZEaXNwbGF5KAoKICAgIERp c3BsYXkqCQkgLAogICAgaW50CQkJIAoKKTsKZXh0ZXJuIFNjcmVlbiAqWERlZmF1bHRTY3JlZW5P ZkRpc3BsYXkoCgogICAgRGlzcGxheSoJCSAKCik7CmV4dGVybiBsb25nIFhFdmVudE1hc2tPZlNj cmVlbigKCiAgICBTY3JlZW4qCQkgCgopOwoKZXh0ZXJuIGludCBYU2NyZWVuTnVtYmVyT2ZTY3Jl ZW4oCgogICAgU2NyZWVuKgkJIAoKKTsKCnR5cGVkZWYgaW50ICgqWEVycm9ySGFuZGxlcikgKAkg ICAgIAoKICAgIERpc3BsYXkqCQkgLAogICAgWEVycm9yRXZlbnQqCSAKCik7CgpleHRlcm4gWEVy cm9ySGFuZGxlciBYU2V0RXJyb3JIYW5kbGVyICgKCiAgICBYRXJyb3JIYW5kbGVyCSAKCik7CgoK dHlwZWRlZiBpbnQgKCpYSU9FcnJvckhhbmRsZXIpICggICAgIAoKICAgIERpc3BsYXkqCQkgCgop OwoKZXh0ZXJuIFhJT0Vycm9ySGFuZGxlciBYU2V0SU9FcnJvckhhbmRsZXIgKAoKICAgIFhJT0Vy cm9ySGFuZGxlcgkgCgopOwoKCmV4dGVybiBYUGl4bWFwRm9ybWF0VmFsdWVzICpYTGlzdFBpeG1h cEZvcm1hdHMoCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQqCQkgCgopOwpleHRlcm4gaW50ICpY TGlzdERlcHRocygKCiAgICBEaXNwbGF5KgkJICwKICAgIGludAkJCSAsCiAgICBpbnQqCQkgCgop OwoKIAogCmV4dGVybiBpbnQgIFhSZWNvbmZpZ3VyZVdNV2luZG93KAoKICAgIERpc3BsYXkqCQkg LAogICAgV2luZG93CQkgLAogICAgaW50CQkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgWFdp bmRvd0NoYW5nZXMqCSAKCik7CgpleHRlcm4gaW50ICBYR2V0V01Qcm90b2NvbHMoCgogICAgRGlz cGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBBdG9tKioJCSAsCiAgICBpbnQqCQkgCgopOwpl eHRlcm4gaW50ICBYU2V0V01Qcm90b2NvbHMoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJ CSAsCiAgICBBdG9tKgkJICwKICAgIGludAkJCSAKCik7CmV4dGVybiBpbnQgIFhJY29uaWZ5V2lu ZG93KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgaW50CQkJIAoKKTsKZXh0 ZXJuIGludCAgWFdpdGhkcmF3V2luZG93KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkg LAogICAgaW50CQkJIAoKKTsKZXh0ZXJuIGludCAgWEdldENvbW1hbmQoCgogICAgRGlzcGxheSoJ CSAsCiAgICBXaW5kb3cJCSAsCiAgICBjaGFyKioqCQkgLAogICAgaW50KgkJIAoKKTsKZXh0ZXJu IGludCAgWEdldFdNQ29sb3JtYXBXaW5kb3dzKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93 CQkgLAogICAgV2luZG93KioJCSAsCiAgICBpbnQqCQkgCgopOwpleHRlcm4gaW50ICBYU2V0V01D b2xvcm1hcFdpbmRvd3MoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBXaW5k b3cqCQkgLAogICAgaW50CQkJIAoKKTsKZXh0ZXJuIHZvaWQgWEZyZWVTdHJpbmdMaXN0KAoKICAg IGNoYXIqKgkJIAoKKTsKZXh0ZXJuIGludCBYU2V0VHJhbnNpZW50Rm9ySGludCgKCiAgICBEaXNw bGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIFdpbmRvdwkJIAoKKTsKCiAKCmV4dGVybiBpbnQg WEFjdGl2YXRlU2NyZWVuU2F2ZXIoCgogICAgRGlzcGxheSoJCSAKCik7CgpleHRlcm4gaW50IFhB ZGRIb3N0KAoKICAgIERpc3BsYXkqCQkgLAogICAgWEhvc3RBZGRyZXNzKgkgCgopOwoKZXh0ZXJu IGludCBYQWRkSG9zdHMoCgogICAgRGlzcGxheSoJCSAsCiAgICBYSG9zdEFkZHJlc3MqCSAsCiAg ICBpbnQJCQkgICAgIAoKKTsKCmV4dGVybiBpbnQgWEFkZFRvRXh0ZW5zaW9uTGlzdCgKCiAgICBz dHJ1Y3QgX1hFeHREYXRhKioJICwKICAgIFhFeHREYXRhKgkJIAoKKTsKCmV4dGVybiBpbnQgWEFk ZFRvU2F2ZVNldCgKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJIAoKKTsKCmV4dGVybiBp bnQgIFhBbGxvY0NvbG9yKAoKICAgIERpc3BsYXkqCQkgLAogICAgQ29sb3JtYXAJCSAsCiAgICBY Q29sb3IqCQkgCgopOwoKZXh0ZXJuIGludCAgWEFsbG9jQ29sb3JDZWxscygKCiAgICBEaXNwbGF5 KgkJICwKICAgIENvbG9ybWFwCQkgLAogICAgaW50IAkgICAgICAgICAsCiAgICB1bnNpZ25lZCBs b25nKgkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICB1bnNpZ25lZCBsb25nKgkgLAogICAgdW5z aWduZWQgaW50IAkgCgopOwoKZXh0ZXJuIGludCAgWEFsbG9jQ29sb3JQbGFuZXMoCgogICAgRGlz cGxheSoJCSAsCiAgICBDb2xvcm1hcAkJICwKICAgIGludCAJCSAsCiAgICB1bnNpZ25lZCBsb25n KgkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJICwK ICAgIHVuc2lnbmVkIGxvbmcqCSAsCiAgICB1bnNpZ25lZCBsb25nKgkgLAogICAgdW5zaWduZWQg bG9uZyoJIAoKKTsKCmV4dGVybiBpbnQgIFhBbGxvY05hbWVkQ29sb3IoCgogICAgRGlzcGxheSoJ CSAsCiAgICBDb2xvcm1hcAkJICwKICAgIGNvbnN0ICBjaGFyKgkgLAogICAgWENvbG9yKgkJICwK ICAgIFhDb2xvcioJCSAKCik7CgpleHRlcm4gaW50IFhBbGxvd0V2ZW50cygKCiAgICBEaXNwbGF5 KgkJICwKICAgIGludAkJCSAsCiAgICBUaW1lCQkgCgopOwoKZXh0ZXJuIGludCBYQXV0b1JlcGVh dE9mZigKCiAgICBEaXNwbGF5KgkJIAoKKTsKCmV4dGVybiBpbnQgWEF1dG9SZXBlYXRPbigKCiAg ICBEaXNwbGF5KgkJIAoKKTsKCmV4dGVybiBpbnQgWEJlbGwoCgogICAgRGlzcGxheSoJCSAsCiAg ICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYQml0bWFwQml0T3JkZXIoCgogICAgRGlzcGxheSoJ CSAKCik7CgpleHRlcm4gaW50IFhCaXRtYXBQYWQoCgogICAgRGlzcGxheSoJCSAKCik7CgpleHRl cm4gaW50IFhCaXRtYXBVbml0KAoKICAgIERpc3BsYXkqCQkgCgopOwoKZXh0ZXJuIGludCBYQ2Vs bHNPZlNjcmVlbigKCiAgICBTY3JlZW4qCQkgCgopOwoKZXh0ZXJuIGludCBYQ2hhbmdlQWN0aXZl UG9pbnRlckdyYWIoCgogICAgRGlzcGxheSoJCSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIEN1 cnNvcgkJICwKICAgIFRpbWUJCSAKCik7CgpleHRlcm4gaW50IFhDaGFuZ2VHQygKCiAgICBEaXNw bGF5KgkJICwKICAgIEdDCQkJICwKICAgIHVuc2lnbmVkIGxvbmcJICwKICAgIFhHQ1ZhbHVlcyoJ CSAKCik7CgpleHRlcm4gaW50IFhDaGFuZ2VLZXlib2FyZENvbnRyb2woCgogICAgRGlzcGxheSoJ CSAsCiAgICB1bnNpZ25lZCBsb25nCSAsCiAgICBYS2V5Ym9hcmRDb250cm9sKgkgCgopOwoKZXh0 ZXJuIGludCBYQ2hhbmdlS2V5Ym9hcmRNYXBwaW5nKAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50 CQkJICwKICAgIGludAkJCSAsCiAgICBLZXlTeW0qCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVy biBpbnQgWENoYW5nZVBvaW50ZXJDb250cm9sKAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50IAkJ ICwKICAgIGludCAJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAKCik7 CgpleHRlcm4gaW50IFhDaGFuZ2VQcm9wZXJ0eSgKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRv dwkJICwKICAgIEF0b20JCSAsCiAgICBBdG9tCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAs CiAgICBjb25zdCAgdW5zaWduZWQgY2hhcioJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50 IFhDaGFuZ2VTYXZlU2V0KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgaW50 CQkJIAoKKTsKCmV4dGVybiBpbnQgWENoYW5nZVdpbmRvd0F0dHJpYnV0ZXMoCgogICAgRGlzcGxh eSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICB1bnNpZ25lZCBsb25nCSAsCiAgICBYU2V0V2luZG93 QXR0cmlidXRlcyogIAoKKTsKCmV4dGVybiBpbnQgIFhDaGVja0lmRXZlbnQoCgogICAgRGlzcGxh eSoJCSAsCiAgICBYRXZlbnQqCQkgLAogICAgaW50ICAoKikgKAoKCSAgICAgICBEaXNwbGF5KgkJ CSAsCiAgICAgICAgICAgICAgIFhFdmVudCoJCQkgLAogICAgICAgICAgICAgICBYUG9pbnRlcgkJ CSAKCiAgICAgICAgICAgICApCQkgLAogICAgWFBvaW50ZXIJCSAKCik7CgpleHRlcm4gaW50ICBY Q2hlY2tNYXNrRXZlbnQoCgogICAgRGlzcGxheSoJCSAsCiAgICBsb25nCQkgLAogICAgWEV2ZW50 KgkJIAoKKTsKCmV4dGVybiBpbnQgIFhDaGVja1R5cGVkRXZlbnQoCgogICAgRGlzcGxheSoJCSAs CiAgICBpbnQJCQkgLAogICAgWEV2ZW50KgkJIAoKKTsKCmV4dGVybiBpbnQgIFhDaGVja1R5cGVk V2luZG93RXZlbnQoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBpbnQJCQkg LAogICAgWEV2ZW50KgkJIAoKKTsKCmV4dGVybiBpbnQgIFhDaGVja1dpbmRvd0V2ZW50KAoKICAg IERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgbG9uZwkJICwKICAgIFhFdmVudCoJCSAK Cik7CgpleHRlcm4gaW50IFhDaXJjdWxhdGVTdWJ3aW5kb3dzKAoKICAgIERpc3BsYXkqCQkgLAog ICAgV2luZG93CQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWENpcmN1bGF0ZVN1Yndp bmRvd3NEb3duKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgCgopOwoKZXh0ZXJuIGlu dCBYQ2lyY3VsYXRlU3Vid2luZG93c1VwKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkg CgopOwoKZXh0ZXJuIGludCBYQ2xlYXJBcmVhKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93 CQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIHVu c2lnbmVkIGludAkgLAogICAgaW50IAkJIAoKKTsKCmV4dGVybiBpbnQgWENsZWFyV2luZG93KAoK ICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgCgopOwoKZXh0ZXJuIGludCBYQ2xvc2VEaXNw bGF5KAoKICAgIERpc3BsYXkqCQkgCgopOwoKZXh0ZXJuIGludCBYQ29uZmlndXJlV2luZG93KAoK ICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICBY V2luZG93Q2hhbmdlcyoJIAkJIAoKKTsKCmV4dGVybiBpbnQgWENvbm5lY3Rpb25OdW1iZXIoCgog ICAgRGlzcGxheSoJCSAKCik7CgpleHRlcm4gaW50IFhDb252ZXJ0U2VsZWN0aW9uKAoKICAgIERp c3BsYXkqCQkgLAogICAgQXRvbQkJICwKICAgIEF0b20gCQkgLAogICAgQXRvbQkJICwKICAgIFdp bmRvdwkJICwKICAgIFRpbWUJCSAKCik7CgpleHRlcm4gaW50IFhDb3B5QXJlYSgKCiAgICBEaXNw bGF5KgkJICwKICAgIERyYXdhYmxlCQkgLAogICAgRHJhd2FibGUJCSAsCiAgICBHQwkJCSAsCiAg ICBpbnQJCQkgLAogICAgaW50CQkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQg aW50CSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWENvcHlHQygK CiAgICBEaXNwbGF5KgkJICwKICAgIEdDCQkJICwKICAgIHVuc2lnbmVkIGxvbmcJICwKICAgIEdD CQkJIAoKKTsKCmV4dGVybiBpbnQgWENvcHlQbGFuZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIERy YXdhYmxlCQkgLAogICAgRHJhd2FibGUJCSAsCiAgICBHQwkJCSAsCiAgICBpbnQJCQkgLAogICAg aW50CQkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICBpbnQJ CQkgLAogICAgaW50CQkJICwKICAgIHVuc2lnbmVkIGxvbmcJIAoKKTsKCmV4dGVybiBpbnQgWERl ZmF1bHREZXB0aCgKCiAgICBEaXNwbGF5KgkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50 IFhEZWZhdWx0RGVwdGhPZlNjcmVlbigKCiAgICBTY3JlZW4qCQkgCgopOwoKZXh0ZXJuIGludCBY RGVmYXVsdFNjcmVlbigKCiAgICBEaXNwbGF5KgkJIAoKKTsKCmV4dGVybiBpbnQgWERlZmluZUN1 cnNvcigKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIEN1cnNvcgkJIAoKKTsK CmV4dGVybiBpbnQgWERlbGV0ZVByb3BlcnR5KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93 CQkgLAogICAgQXRvbQkJIAoKKTsKCmV4dGVybiBpbnQgWERlc3Ryb3lXaW5kb3coCgogICAgRGlz cGxheSoJCSAsCiAgICBXaW5kb3cJCSAKCik7CgpleHRlcm4gaW50IFhEZXN0cm95U3Vid2luZG93 cygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJIAoKKTsKCmV4dGVybiBpbnQgWERvZXNC YWNraW5nU3RvcmUoCgogICAgU2NyZWVuKgkJICAgICAKCik7CgpleHRlcm4gaW50ICBYRG9lc1Nh dmVVbmRlcnMoCgogICAgU2NyZWVuKgkJIAoKKTsKCmV4dGVybiBpbnQgWERpc2FibGVBY2Nlc3ND b250cm9sKAoKICAgIERpc3BsYXkqCQkgCgopOwoKCmV4dGVybiBpbnQgWERpc3BsYXlDZWxscygK CiAgICBEaXNwbGF5KgkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhEaXNwbGF5SGVp Z2h0KAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWERpc3Bs YXlIZWlnaHRNTSgKCiAgICBEaXNwbGF5KgkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50 IFhEaXNwbGF5S2V5Y29kZXMoCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQqCQkgLAogICAgaW50 KgkJIAoKKTsKCmV4dGVybiBpbnQgWERpc3BsYXlQbGFuZXMoCgogICAgRGlzcGxheSoJCSAsCiAg ICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYRGlzcGxheVdpZHRoKAoKICAgIERpc3BsYXkqCQkg LAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWERpc3BsYXlXaWR0aE1NKAoKICAgIERpc3Bs YXkqCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWERyYXdBcmMoCgogICAgRGlzcGxh eSoJCSAsCiAgICBEcmF3YWJsZQkJICwKICAgIEdDCQkJICwKICAgIGludAkJCSAsCiAgICBpbnQJ CQkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIGludAkJCSAs CiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYRHJhd0FyY3MoCgogICAgRGlzcGxheSoJCSAs CiAgICBEcmF3YWJsZQkJICwKICAgIEdDCQkJICwKICAgIFhBcmMqCQkgLAogICAgaW50CQkJIAoK KTsKCmV4dGVybiBpbnQgWERyYXdJbWFnZVN0cmluZygKCiAgICBEaXNwbGF5KgkJICwKICAgIERy YXdhYmxlCQkgLAogICAgR0MJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBjb25z dCAgY2hhcioJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhEcmF3SW1hZ2VTdHJpbmcx NigKCiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxlCQkgLAogICAgR0MJCQkgLAogICAgaW50 CQkJICwKICAgIGludAkJCSAsCiAgICBjb25zdCAgWENoYXIyYioJICwKICAgIGludAkJCSAKCik7 CgpleHRlcm4gaW50IFhEcmF3TGluZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxlCQkg LAogICAgR0MJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAg aW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWERyYXdMaW5lcygKCiAgICBEaXNwbGF5KgkJICwKICAg IERyYXdhYmxlCQkgLAogICAgR0MJCQkgLAogICAgWFBvaW50KgkJICwKICAgIGludAkJCSAsCiAg ICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYRHJhd1BvaW50KAoKICAgIERpc3BsYXkqCQkgLAog ICAgRHJhd2FibGUJCSAsCiAgICBHQwkJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJIAoKKTsK CmV4dGVybiBpbnQgWERyYXdQb2ludHMoCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJ ICwKICAgIEdDCQkJICwKICAgIFhQb2ludCoJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJIAoK KTsKCmV4dGVybiBpbnQgWERyYXdSZWN0YW5nbGUoCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3 YWJsZQkJICwKICAgIEdDCQkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgdW5zaWdu ZWQgaW50CSAsCiAgICB1bnNpZ25lZCBpbnQJIAoKKTsKCmV4dGVybiBpbnQgWERyYXdSZWN0YW5n bGVzKAoKICAgIERpc3BsYXkqCQkgLAogICAgRHJhd2FibGUJCSAsCiAgICBHQwkJCSAsCiAgICBY UmVjdGFuZ2xlKgkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhEcmF3U2VnbWVudHMo CgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJICwKICAgIEdDCQkJICwKICAgIFhTZWdt ZW50KgkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhEcmF3U3RyaW5nKAoKICAgIERp c3BsYXkqCQkgLAogICAgRHJhd2FibGUJCSAsCiAgICBHQwkJCSAsCiAgICBpbnQJCQkgLAogICAg aW50CQkJICwKICAgIGNvbnN0ICBjaGFyKgkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQg WERyYXdTdHJpbmcxNigKCiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxlCQkgLAogICAgR0MJ CQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBjb25zdCAgWENoYXIyYioJICwKICAg IGludAkJCSAKCik7CgpleHRlcm4gaW50IFhEcmF3VGV4dCgKCiAgICBEaXNwbGF5KgkJICwKICAg IERyYXdhYmxlCQkgLAogICAgR0MJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBY VGV4dEl0ZW0qCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWERyYXdUZXh0MTYoCgog ICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJICwKICAgIEdDCQkJICwKICAgIGludAkJCSAs CiAgICBpbnQJCQkgLAogICAgWFRleHRJdGVtMTYqCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJu IGludCBYRW5hYmxlQWNjZXNzQ29udHJvbCgKCiAgICBEaXNwbGF5KgkJIAoKKTsKCmV4dGVybiBp bnQgWEV2ZW50c1F1ZXVlZCgKCiAgICBEaXNwbGF5KgkJICwKICAgIGludAkJCSAKCik7CgpleHRl cm4gaW50ICBYRmV0Y2hOYW1lKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAg Y2hhcioqCQkgCgopOwoKZXh0ZXJuIGludCBYRmlsbEFyYygKCiAgICBEaXNwbGF5KgkJICwKICAg IERyYXdhYmxlCQkgLAogICAgR0MJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICB1 bnNpZ25lZCBpbnQJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgaW50CQkJICwKICAgIGludAkJ CSAKCik7CgpleHRlcm4gaW50IFhGaWxsQXJjcygKCiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdh YmxlCQkgLAogICAgR0MJCQkgLAogICAgWEFyYyoJCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJu IGludCBYRmlsbFBvbHlnb24oCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJICwKICAg IEdDCQkJICwKICAgIFhQb2ludCoJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJICwKICAgIGlu dAkJCSAKCik7CgpleHRlcm4gaW50IFhGaWxsUmVjdGFuZ2xlKAoKICAgIERpc3BsYXkqCQkgLAog ICAgRHJhd2FibGUJCSAsCiAgICBHQwkJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJICwKICAg IHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAKCik7CgpleHRlcm4gaW50IFhGaWxs UmVjdGFuZ2xlcygKCiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxlCQkgLAogICAgR0MJCQkg LAogICAgWFJlY3RhbmdsZSoJCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYRmx1c2go CgogICAgRGlzcGxheSoJCSAKCik7CgpleHRlcm4gaW50IFhGb3JjZVNjcmVlblNhdmVyKAoKICAg IERpc3BsYXkqCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWEZyZWUoCgogICAgdm9p ZCoJCSAKCik7CgpleHRlcm4gaW50IFhGcmVlQ29sb3JtYXAoCgogICAgRGlzcGxheSoJCSAsCiAg ICBDb2xvcm1hcAkJIAoKKTsKCmV4dGVybiBpbnQgWEZyZWVDb2xvcnMoCgogICAgRGlzcGxheSoJ CSAsCiAgICBDb2xvcm1hcAkJICwKICAgIHVuc2lnbmVkIGxvbmcqCSAsCiAgICBpbnQJCQkgLAog ICAgdW5zaWduZWQgbG9uZwkgCgopOwoKZXh0ZXJuIGludCBYRnJlZUN1cnNvcigKCiAgICBEaXNw bGF5KgkJICwKICAgIEN1cnNvcgkJIAoKKTsKCmV4dGVybiBpbnQgWEZyZWVFeHRlbnNpb25MaXN0 KAoKICAgIGNoYXIqKgkJICAgICAKCik7CgpleHRlcm4gaW50IFhGcmVlRm9udCgKCiAgICBEaXNw bGF5KgkJICwKICAgIFhGb250U3RydWN0KgkgCgopOwoKZXh0ZXJuIGludCBYRnJlZUZvbnRJbmZv KAoKICAgIGNoYXIqKgkJICwKICAgIFhGb250U3RydWN0KgkgLAogICAgaW50CQkJIAoKKTsKCmV4 dGVybiBpbnQgWEZyZWVGb250TmFtZXMoCgogICAgY2hhcioqCQkgCgopOwoKZXh0ZXJuIGludCBY RnJlZUZvbnRQYXRoKAoKICAgIGNoYXIqKgkJIAoKKTsKCmV4dGVybiBpbnQgWEZyZWVHQygKCiAg ICBEaXNwbGF5KgkJICwKICAgIEdDCQkJIAoKKTsKCmV4dGVybiBpbnQgWEZyZWVNb2RpZmllcm1h cCgKCiAgICBYTW9kaWZpZXJLZXltYXAqCSAKCik7CgpleHRlcm4gaW50IFhGcmVlUGl4bWFwKAoK ICAgIERpc3BsYXkqCQkgLAogICAgUGl4bWFwCQkgCgopOwoKZXh0ZXJuIGludCBYR2VvbWV0cnko CgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQJCQkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBj b25zdCAgY2hhcioJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAsCiAg ICB1bnNpZ25lZCBpbnQJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgaW50KgkJICwK ICAgIGludCoJCSAsCiAgICBpbnQqCQkgLAogICAgaW50KgkJIAoKKTsKCmV4dGVybiBpbnQgWEdl dEVycm9yRGF0YWJhc2VUZXh0KAoKICAgIERpc3BsYXkqCQkgLAogICAgY29uc3QgIGNoYXIqCSAs CiAgICBjb25zdCAgY2hhcioJICwKICAgIGNvbnN0ICBjaGFyKgkgLAogICAgY2hhcioJCSAsCiAg ICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYR2V0RXJyb3JUZXh0KAoKICAgIERpc3BsYXkqCQkg LAogICAgaW50CQkJICwKICAgIGNoYXIqCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQg IFhHZXRGb250UHJvcGVydHkoCgogICAgWEZvbnRTdHJ1Y3QqCSAsCiAgICBBdG9tCQkgLAogICAg dW5zaWduZWQgbG9uZyoJIAoKKTsKCmV4dGVybiBpbnQgIFhHZXRHQ1ZhbHVlcygKCiAgICBEaXNw bGF5KgkJICwKICAgIEdDCQkJICwKICAgIHVuc2lnbmVkIGxvbmcJICwKICAgIFhHQ1ZhbHVlcyoJ CSAKCik7CgpleHRlcm4gaW50ICBYR2V0R2VvbWV0cnkoCgogICAgRGlzcGxheSoJCSAsCiAgICBE cmF3YWJsZQkJICwKICAgIFdpbmRvdyoJCSAsCiAgICBpbnQqCQkgLAogICAgaW50KgkJICwKICAg IHVuc2lnbmVkIGludCoJICwKICAgIHVuc2lnbmVkIGludCoJICwKICAgIHVuc2lnbmVkIGludCoJ ICwKICAgIHVuc2lnbmVkIGludCoJIAoKKTsKCmV4dGVybiBpbnQgIFhHZXRJY29uTmFtZSgKCiAg ICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIGNoYXIqKgkJIAoKKTsKCmV4dGVybiBp bnQgWEdldElucHV0Rm9jdXMoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cqCQkgLAogICAg aW50KgkJIAoKKTsKCmV4dGVybiBpbnQgWEdldEtleWJvYXJkQ29udHJvbCgKCiAgICBEaXNwbGF5 KgkJICwKICAgIFhLZXlib2FyZFN0YXRlKgkgCgopOwoKZXh0ZXJuIGludCBYR2V0UG9pbnRlckNv bnRyb2woCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQqCQkgLAogICAgaW50KgkJICwKICAgIGlu dCoJCSAKCik7CgpleHRlcm4gaW50IFhHZXRQb2ludGVyTWFwcGluZygKCiAgICBEaXNwbGF5KgkJ ICwKICAgIHVuc2lnbmVkIGNoYXIqCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYR2V0 U2NyZWVuU2F2ZXIoCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQqCQkgLAogICAgaW50KgkJICwK ICAgIGludCoJCSAsCiAgICBpbnQqCQkgCgopOwoKZXh0ZXJuIGludCAgWEdldFRyYW5zaWVudEZv ckhpbnQoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBXaW5kb3cqCQkgCgop OwoKZXh0ZXJuIGludCBYR2V0V2luZG93UHJvcGVydHkoCgogICAgRGlzcGxheSoJCSAsCiAgICBX aW5kb3cJCSAsCiAgICBBdG9tCQkgLAogICAgbG9uZwkJICwKICAgIGxvbmcJCSAsCiAgICBpbnQg CQkgLAogICAgQXRvbQkJICwKICAgIEF0b20qCQkgLAogICAgaW50KgkJICwKICAgIHVuc2lnbmVk IGxvbmcqCSAsCiAgICB1bnNpZ25lZCBsb25nKgkgLAogICAgdW5zaWduZWQgY2hhcioqCSAKCik7 CgpleHRlcm4gaW50ICBYR2V0V2luZG93QXR0cmlidXRlcygKCiAgICBEaXNwbGF5KgkJICwKICAg IFdpbmRvdwkJICwKICAgIFhXaW5kb3dBdHRyaWJ1dGVzKgkgCgopOwoKZXh0ZXJuIGludCBYR3Jh YkJ1dHRvbigKCiAgICBEaXNwbGF5KgkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWdu ZWQgaW50CSAsCiAgICBXaW5kb3cJCSAsCiAgICBpbnQgCQkgLAogICAgdW5zaWduZWQgaW50CSAs CiAgICBpbnQJCQkgLAogICAgaW50CQkJICwKICAgIFdpbmRvdwkJICwKICAgIEN1cnNvcgkJIAoK KTsKCmV4dGVybiBpbnQgWEdyYWJLZXkoCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQJCQkgLAog ICAgdW5zaWduZWQgaW50CSAsCiAgICBXaW5kb3cJCSAsCiAgICBpbnQgCQkgLAogICAgaW50CQkJ ICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhHcmFiS2V5Ym9hcmQoCgogICAgRGlzcGxh eSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBpbnQgCQkgLAogICAgaW50CQkJICwKICAgIGludAkJ CSAsCiAgICBUaW1lCQkgCgopOwoKZXh0ZXJuIGludCBYR3JhYlBvaW50ZXIoCgogICAgRGlzcGxh eSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBpbnQgCQkgLAogICAgdW5zaWduZWQgaW50CSAsCiAg ICBpbnQJCQkgLAogICAgaW50CQkJICwKICAgIFdpbmRvdwkJICwKICAgIEN1cnNvcgkJICwKICAg IFRpbWUJCSAKCik7CgpleHRlcm4gaW50IFhHcmFiU2VydmVyKAoKICAgIERpc3BsYXkqCQkgCgop OwoKZXh0ZXJuIGludCBYSGVpZ2h0TU1PZlNjcmVlbigKCiAgICBTY3JlZW4qCQkgCgopOwoKZXh0 ZXJuIGludCBYSGVpZ2h0T2ZTY3JlZW4oCgogICAgU2NyZWVuKgkJIAoKKTsKCmV4dGVybiBpbnQg WElmRXZlbnQoCgogICAgRGlzcGxheSoJCSAsCiAgICBYRXZlbnQqCQkgLAogICAgaW50ICAoKikg KAoKCSAgICAgICBEaXNwbGF5KgkJCSAsCiAgICAgICAgICAgICAgIFhFdmVudCoJCQkgLAogICAg ICAgICAgICAgICBYUG9pbnRlcgkJCSAKCiAgICAgICAgICAgICApCQkgLAogICAgWFBvaW50ZXIJ CSAKCik7CgpleHRlcm4gaW50IFhJbWFnZUJ5dGVPcmRlcigKCiAgICBEaXNwbGF5KgkJIAoKKTsK CmV4dGVybiBpbnQgWEluc3RhbGxDb2xvcm1hcCgKCiAgICBEaXNwbGF5KgkJICwKICAgIENvbG9y bWFwCQkgCgopOwoKZXh0ZXJuIEtleUNvZGUgWEtleXN5bVRvS2V5Y29kZSgKCiAgICBEaXNwbGF5 KgkJICwKICAgIEtleVN5bQkJIAoKKTsKCmV4dGVybiBpbnQgWEtpbGxDbGllbnQoCgogICAgRGlz cGxheSoJCSAsCiAgICBYSUQJCQkgCgopOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgWExhc3RLbm93 blJlcXVlc3RQcm9jZXNzZWQoCgogICAgRGlzcGxheSoJCSAKCik7CgpleHRlcm4gaW50ICBYTG9v a3VwQ29sb3IoCgogICAgRGlzcGxheSoJCSAsCiAgICBDb2xvcm1hcAkJICwKICAgIGNvbnN0ICBj aGFyKgkgLAogICAgWENvbG9yKgkJICwKICAgIFhDb2xvcioJCSAKCik7CgpleHRlcm4gaW50IFhM b3dlcldpbmRvdygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJIAoKKTsKCmV4dGVybiBp bnQgWE1hcFJhaXNlZCgKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJIAoKKTsKCmV4dGVy biBpbnQgWE1hcFN1YndpbmRvd3MoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAKCik7 CgpleHRlcm4gaW50IFhNYXBXaW5kb3coCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAK Cik7CgpleHRlcm4gaW50IFhNYXNrRXZlbnQoCgogICAgRGlzcGxheSoJCSAsCiAgICBsb25nCQkg LAogICAgWEV2ZW50KgkJIAoKKTsKCmV4dGVybiBpbnQgWE1heENtYXBzT2ZTY3JlZW4oCgogICAg U2NyZWVuKgkJIAoKKTsKCmV4dGVybiBpbnQgWE1pbkNtYXBzT2ZTY3JlZW4oCgogICAgU2NyZWVu KgkJIAoKKTsKCmV4dGVybiBpbnQgWE1vdmVSZXNpemVXaW5kb3coCgogICAgRGlzcGxheSoJCSAs CiAgICBXaW5kb3cJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJICwKICAgIHVuc2lnbmVkIGlu dAkgLAogICAgdW5zaWduZWQgaW50CSAKCik7CgpleHRlcm4gaW50IFhNb3ZlV2luZG93KAoKICAg IERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAKCik7 CgpleHRlcm4gaW50IFhOZXh0RXZlbnQoCgogICAgRGlzcGxheSoJCSAsCiAgICBYRXZlbnQqCQkg CgopOwoKZXh0ZXJuIGludCBYTm9PcCgKCiAgICBEaXNwbGF5KgkJIAoKKTsKCmV4dGVybiBpbnQg IFhQYXJzZUNvbG9yKAoKICAgIERpc3BsYXkqCQkgLAogICAgQ29sb3JtYXAJCSAsCiAgICBjb25z dCAgY2hhcioJICwKICAgIFhDb2xvcioJCSAKCik7CgpleHRlcm4gaW50IFhQYXJzZUdlb21ldHJ5 KAoKICAgIGNvbnN0ICBjaGFyKgkgLAogICAgaW50KgkJICwKICAgIGludCoJCSAsCiAgICB1bnNp Z25lZCBpbnQqCSAsCiAgICB1bnNpZ25lZCBpbnQqCSAKCik7CgpleHRlcm4gaW50IFhQZWVrRXZl bnQoCgogICAgRGlzcGxheSoJCSAsCiAgICBYRXZlbnQqCQkgCgopOwoKZXh0ZXJuIGludCBYUGVl a0lmRXZlbnQoCgogICAgRGlzcGxheSoJCSAsCiAgICBYRXZlbnQqCQkgLAogICAgaW50ICAoKikg KAoKCSAgICAgICBEaXNwbGF5KgkJICwKICAgICAgICAgICAgICAgWEV2ZW50KgkJICwKICAgICAg ICAgICAgICAgWFBvaW50ZXIJCSAKCiAgICAgICAgICAgICApCQkgLAogICAgWFBvaW50ZXIJCSAK Cik7CgpleHRlcm4gaW50IFhQZW5kaW5nKAoKICAgIERpc3BsYXkqCQkgCgopOwoKZXh0ZXJuIGlu dCBYUGxhbmVzT2ZTY3JlZW4oCgogICAgU2NyZWVuKgkJIAogICAgCgopOwoKZXh0ZXJuIGludCBY UHJvdG9jb2xSZXZpc2lvbigKCiAgICBEaXNwbGF5KgkJIAoKKTsKCmV4dGVybiBpbnQgWFByb3Rv Y29sVmVyc2lvbigKCiAgICBEaXNwbGF5KgkJIAoKKTsKCgpleHRlcm4gaW50IFhQdXRCYWNrRXZl bnQoCgogICAgRGlzcGxheSoJCSAsCiAgICBYRXZlbnQqCQkgCgopOwoKZXh0ZXJuIGludCBYUHV0 SW1hZ2UoCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJICwKICAgIEdDCQkJICwKICAg IFhJbWFnZSoJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBp bnQJCQkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICB1bnNpZ25lZCBpbnQJIAkgIAoKKTsKCmV4 dGVybiBpbnQgWFFMZW5ndGgoCgogICAgRGlzcGxheSoJCSAKCik7CgpleHRlcm4gaW50ICBYUXVl cnlCZXN0Q3Vyc29yKAoKICAgIERpc3BsYXkqCQkgLAogICAgRHJhd2FibGUJCSAsCiAgICB1bnNp Z25lZCBpbnQgICAgICAgICAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIHVuc2lnbmVkIGludCoJ ICwKICAgIHVuc2lnbmVkIGludCoJIAoKKTsKCmV4dGVybiBpbnQgIFhRdWVyeUJlc3RTaXplKAoK ICAgIERpc3BsYXkqCQkgLAogICAgaW50CQkJICwKICAgIERyYXdhYmxlCQkgLAogICAgdW5zaWdu ZWQgaW50CSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIHVuc2lnbmVkIGludCoJICwKICAgIHVu c2lnbmVkIGludCoJIAoKKTsKCmV4dGVybiBpbnQgIFhRdWVyeUJlc3RTdGlwcGxlKAoKICAgIERp c3BsYXkqCQkgLAogICAgRHJhd2FibGUJCSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIHVuc2ln bmVkIGludAkgLAogICAgdW5zaWduZWQgaW50KgkgLAogICAgdW5zaWduZWQgaW50KgkgCgopOwoK ZXh0ZXJuIGludCAgWFF1ZXJ5QmVzdFRpbGUoCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJs ZQkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICB1bnNpZ25l ZCBpbnQqCSAsCiAgICB1bnNpZ25lZCBpbnQqCSAKCik7CgpleHRlcm4gaW50IFhRdWVyeUNvbG9y KAoKICAgIERpc3BsYXkqCQkgLAogICAgQ29sb3JtYXAJCSAsCiAgICBYQ29sb3IqCQkgCgopOwoK ZXh0ZXJuIGludCBYUXVlcnlDb2xvcnMoCgogICAgRGlzcGxheSoJCSAsCiAgICBDb2xvcm1hcAkJ ICwKICAgIFhDb2xvcioJCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCAgWFF1ZXJ5RXh0 ZW5zaW9uKAoKICAgIERpc3BsYXkqCQkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBpbnQqCQkg LAogICAgaW50KgkJICwKICAgIGludCoJCSAKCik7CgpleHRlcm4gaW50IFhRdWVyeUtleW1hcCgK CiAgICBEaXNwbGF5KgkJICwKICAgIGNoYXIgWzMyXQkJIAoKKTsKCmV4dGVybiBpbnQgIFhRdWVy eVBvaW50ZXIoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBXaW5kb3cqCQkg LAogICAgV2luZG93KgkJICwKICAgIGludCoJCSAsCiAgICBpbnQqCQkgLAogICAgaW50KgkJICwK ICAgIGludCoJCSAsCiAgICB1bnNpZ25lZCBpbnQqICAgICAgICAKCik7CgpleHRlcm4gaW50IFhR dWVyeVRleHRFeHRlbnRzKAoKICAgIERpc3BsYXkqCQkgLAogICAgWElECQkJICwKICAgIGNvbnN0 ICBjaGFyKgkgLAogICAgaW50CQkJICwKICAgIGludCoJCSAsCiAgICBpbnQqCQkgLAogICAgaW50 KgkJICwKICAgIFhDaGFyU3RydWN0KgkgICAgIAoKKTsKCmV4dGVybiBpbnQgWFF1ZXJ5VGV4dEV4 dGVudHMxNigKCiAgICBEaXNwbGF5KgkJICwKICAgIFhJRAkJCSAsCiAgICBjb25zdCAgWENoYXIy YioJICwKICAgIGludAkJCSAsCiAgICBpbnQqCQkgLAogICAgaW50KgkJICwKICAgIGludCoJCSAs CiAgICBYQ2hhclN0cnVjdCoJIAoKKTsKCmV4dGVybiBpbnQgIFhRdWVyeVRyZWUoCgogICAgRGlz cGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBXaW5kb3cqCQkgLAogICAgV2luZG93KgkJICwK ICAgIFdpbmRvdyoqCQkgLAogICAgdW5zaWduZWQgaW50KgkgCgopOwoKZXh0ZXJuIGludCBYUmFp c2VXaW5kb3coCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAKCik7CgpleHRlcm4gaW50 IFhSZWFkQml0bWFwRmlsZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdhYmxlIAkJICwKICAg IGNvbnN0ICBjaGFyKgkgLAogICAgdW5zaWduZWQgaW50KgkgLAogICAgdW5zaWduZWQgaW50Kgkg LAogICAgUGl4bWFwKgkJICwKICAgIGludCoJCSAsCiAgICBpbnQqCQkgCgopOwoKZXh0ZXJuIGlu dCBYUmVhZEJpdG1hcEZpbGVEYXRhKAoKICAgIGNvbnN0ICBjaGFyKgkgLAogICAgdW5zaWduZWQg aW50KgkgLAogICAgdW5zaWduZWQgaW50KgkgLAogICAgdW5zaWduZWQgY2hhcioqCSAsCiAgICBp bnQqCQkgLAogICAgaW50KgkJIAoKKTsKCmV4dGVybiBpbnQgWFJlYmluZEtleXN5bSgKCiAgICBE aXNwbGF5KgkJICwKICAgIEtleVN5bQkJICwKICAgIEtleVN5bSoJCSAsCiAgICBpbnQJCQkgLAog ICAgY29uc3QgIHVuc2lnbmVkIGNoYXIqCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBY UmVjb2xvckN1cnNvcigKCiAgICBEaXNwbGF5KgkJICwKICAgIEN1cnNvcgkJICwKICAgIFhDb2xv cioJCSAsCiAgICBYQ29sb3IqCQkgCgopOwoKZXh0ZXJuIGludCBYUmVmcmVzaEtleWJvYXJkTWFw cGluZygKCiAgICBYTWFwcGluZ0V2ZW50KgkgICAgIAoKKTsKCmV4dGVybiBpbnQgWFJlbW92ZUZy b21TYXZlU2V0KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgCgopOwoKZXh0ZXJuIGlu dCBYUmVtb3ZlSG9zdCgKCiAgICBEaXNwbGF5KgkJICwKICAgIFhIb3N0QWRkcmVzcyoJIAoKKTsK CmV4dGVybiBpbnQgWFJlbW92ZUhvc3RzKAoKICAgIERpc3BsYXkqCQkgLAogICAgWEhvc3RBZGRy ZXNzKgkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWFJlcGFyZW50V2luZG93KAoKICAg IERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgV2luZG93CQkgLAogICAgaW50CQkJICwK ICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhSZXNldFNjcmVlblNhdmVyKAoKICAgIERpc3Bs YXkqCQkgCgopOwoKZXh0ZXJuIGludCBYUmVzaXplV2luZG93KAoKICAgIERpc3BsYXkqCQkgLAog ICAgV2luZG93CQkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICB1bnNpZ25lZCBpbnQJIAoKKTsK CmV4dGVybiBpbnQgWFJlc3RhY2tXaW5kb3dzKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93 KgkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhSb3RhdGVCdWZmZXJzKAoKICAgIERp c3BsYXkqCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWFJvdGF0ZVdpbmRvd1Byb3Bl cnRpZXMoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBBdG9tKgkJICwKICAg IGludAkJCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYU2NyZWVuQ291bnQoCgogICAg RGlzcGxheSoJCSAKCik7CgpleHRlcm4gaW50IFhTZWxlY3RJbnB1dCgKCiAgICBEaXNwbGF5KgkJ ICwKICAgIFdpbmRvdwkJICwKICAgIGxvbmcJCSAKCik7CgpleHRlcm4gaW50ICBYU2VuZEV2ZW50 KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgaW50IAkJICwKICAgIGxvbmcJ CSAsCiAgICBYRXZlbnQqCQkgCgopOwoKZXh0ZXJuIGludCBYU2V0QWNjZXNzQ29udHJvbCgKCiAg ICBEaXNwbGF5KgkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhTZXRBcmNNb2RlKAoK ICAgIERpc3BsYXkqCQkgLAogICAgR0MJCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQg WFNldEJhY2tncm91bmQoCgogICAgRGlzcGxheSoJCSAsCiAgICBHQwkJCSAsCiAgICB1bnNpZ25l ZCBsb25nCSAKCik7CgpleHRlcm4gaW50IFhTZXRDbGlwTWFzaygKCiAgICBEaXNwbGF5KgkJICwK ICAgIEdDCQkJICwKICAgIFBpeG1hcAkJIAoKKTsKCmV4dGVybiBpbnQgWFNldENsaXBPcmlnaW4o CgogICAgRGlzcGxheSoJCSAsCiAgICBHQwkJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJIAoK KTsKCmV4dGVybiBpbnQgWFNldENsaXBSZWN0YW5nbGVzKAoKICAgIERpc3BsYXkqCQkgLAogICAg R0MJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBYUmVjdGFuZ2xlKgkJICwKICAg IGludAkJCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYU2V0Q2xvc2VEb3duTW9kZSgK CiAgICBEaXNwbGF5KgkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhTZXRDb21tYW5k KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgY2hhcioqCQkgLAogICAgaW50 CQkJIAoKKTsKCmV4dGVybiBpbnQgWFNldERhc2hlcygKCiAgICBEaXNwbGF5KgkJICwKICAgIEdD CQkJICwKICAgIGludAkJCSAsCiAgICBjb25zdCAgY2hhcioJICwKICAgIGludAkJCSAKCik7Cgpl eHRlcm4gaW50IFhTZXRGaWxsUnVsZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIEdDCQkJICwKICAg IGludAkJCSAKCik7CgpleHRlcm4gaW50IFhTZXRGaWxsU3R5bGUoCgogICAgRGlzcGxheSoJCSAs CiAgICBHQwkJCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYU2V0Rm9udCgKCiAgICBE aXNwbGF5KgkJICwKICAgIEdDCQkJICwKICAgIEZvbnQJCSAKCik7CgpleHRlcm4gaW50IFhTZXRG b250UGF0aCgKCiAgICBEaXNwbGF5KgkJICwKICAgIGNoYXIqKgkJICwKICAgIGludAkJCSAJICAg ICAKCik7CgpleHRlcm4gaW50IFhTZXRGb3JlZ3JvdW5kKAoKICAgIERpc3BsYXkqCQkgLAogICAg R0MJCQkgLAogICAgdW5zaWduZWQgbG9uZwkgCgopOwoKZXh0ZXJuIGludCBYU2V0RnVuY3Rpb24o CgogICAgRGlzcGxheSoJCSAsCiAgICBHQwkJCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGlu dCBYU2V0R3JhcGhpY3NFeHBvc3VyZXMoCgogICAgRGlzcGxheSoJCSAsCiAgICBHQwkJCSAsCiAg ICBpbnQgCQkgCgopOwoKZXh0ZXJuIGludCBYU2V0SWNvbk5hbWUoCgogICAgRGlzcGxheSoJCSAs CiAgICBXaW5kb3cJCSAsCiAgICBjb25zdCAgY2hhcioJIAoKKTsKCmV4dGVybiBpbnQgWFNldElu cHV0Rm9jdXMoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBpbnQJCQkgLAog ICAgVGltZQkJIAoKKTsKCmV4dGVybiBpbnQgWFNldExpbmVBdHRyaWJ1dGVzKAoKICAgIERpc3Bs YXkqCQkgLAogICAgR0MJCQkgLAogICAgdW5zaWduZWQgaW50CSAsCiAgICBpbnQJCQkgLAogICAg aW50CQkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhTZXRNb2RpZmllck1hcHBpbmco CgogICAgRGlzcGxheSoJCSAsCiAgICBYTW9kaWZpZXJLZXltYXAqCSAKCik7CgpleHRlcm4gaW50 IFhTZXRQbGFuZU1hc2soCgogICAgRGlzcGxheSoJCSAsCiAgICBHQwkJCSAsCiAgICB1bnNpZ25l ZCBsb25nCSAKCik7CgpleHRlcm4gaW50IFhTZXRQb2ludGVyTWFwcGluZygKCiAgICBEaXNwbGF5 KgkJICwKICAgIGNvbnN0ICB1bnNpZ25lZCBjaGFyKgkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVy biBpbnQgWFNldFNjcmVlblNhdmVyKAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50CQkJICwKICAg IGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWFNldFNl bGVjdGlvbk93bmVyKAoKICAgIERpc3BsYXkqCQkgLAogICAgQXRvbQkgICAgICAgICAsCiAgICBX aW5kb3cJCSAsCiAgICBUaW1lCQkgCgopOwoKZXh0ZXJuIGludCBYU2V0U3RhdGUoCgogICAgRGlz cGxheSoJCSAsCiAgICBHQwkJCSAsCiAgICB1bnNpZ25lZCBsb25nIAkgLAogICAgdW5zaWduZWQg bG9uZwkgLAogICAgaW50CQkJICwKICAgIHVuc2lnbmVkIGxvbmcJIAoKKTsKCmV4dGVybiBpbnQg WFNldFN0aXBwbGUoCgogICAgRGlzcGxheSoJCSAsCiAgICBHQwkJCSAsCiAgICBQaXhtYXAJCSAK Cik7CgpleHRlcm4gaW50IFhTZXRTdWJ3aW5kb3dNb2RlKAoKICAgIERpc3BsYXkqCQkgLAogICAg R0MJCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWFNldFRTT3JpZ2luKAoKICAgIERp c3BsYXkqCQkgLAogICAgR0MJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAKCik7CgpleHRl cm4gaW50IFhTZXRUaWxlKAoKICAgIERpc3BsYXkqCQkgLAogICAgR0MJCQkgLAogICAgUGl4bWFw CQkgCgopOwoKZXh0ZXJuIGludCBYU2V0V2luZG93QmFja2dyb3VuZCgKCiAgICBEaXNwbGF5KgkJ ICwKICAgIFdpbmRvdwkJICwKICAgIHVuc2lnbmVkIGxvbmcJIAoKKTsKCmV4dGVybiBpbnQgWFNl dFdpbmRvd0JhY2tncm91bmRQaXhtYXAoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAs CiAgICBQaXhtYXAJCSAKCik7CgpleHRlcm4gaW50IFhTZXRXaW5kb3dCb3JkZXIoCgogICAgRGlz cGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICB1bnNpZ25lZCBsb25nCSAKCik7CgpleHRlcm4g aW50IFhTZXRXaW5kb3dCb3JkZXJQaXhtYXAoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJ CSAsCiAgICBQaXhtYXAJCSAKCik7CgpleHRlcm4gaW50IFhTZXRXaW5kb3dCb3JkZXJXaWR0aCgK CiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIHVuc2lnbmVkIGludAkgCgopOwoK ZXh0ZXJuIGludCBYU2V0V2luZG93Q29sb3JtYXAoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5k b3cJCSAsCiAgICBDb2xvcm1hcAkJIAoKKTsKCmV4dGVybiBpbnQgWFN0b3JlQnVmZmVyKAoKICAg IERpc3BsYXkqCQkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJ IAoKKTsKCmV4dGVybiBpbnQgWFN0b3JlQnl0ZXMoCgogICAgRGlzcGxheSoJCSAsCiAgICBjb25z dCAgY2hhcioJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhTdG9yZUNvbG9yKAoKICAg IERpc3BsYXkqCQkgLAogICAgQ29sb3JtYXAJCSAsCiAgICBYQ29sb3IqCQkgCgopOwoKZXh0ZXJu IGludCBYU3RvcmVDb2xvcnMoCgogICAgRGlzcGxheSoJCSAsCiAgICBDb2xvcm1hcAkJICwKICAg IFhDb2xvcioJCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIGludCBYU3RvcmVOYW1lKAoKICAg IERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgY29uc3QgIGNoYXIqCSAKCik7CgpleHRl cm4gaW50IFhTdG9yZU5hbWVkQ29sb3IoCgogICAgRGlzcGxheSoJCSAsCiAgICBDb2xvcm1hcAkJ ICwKICAgIGNvbnN0ICBjaGFyKgkgLAogICAgdW5zaWduZWQgbG9uZwkgLAogICAgaW50CQkJIAoK KTsKCmV4dGVybiBpbnQgWFN5bmMoCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQgCQkgCgopOwoK ZXh0ZXJuIGludCBYVGV4dEV4dGVudHMoCgogICAgWEZvbnRTdHJ1Y3QqCSAsCiAgICBjb25zdCAg Y2hhcioJICwKICAgIGludAkJCSAsCiAgICBpbnQqCQkgLAogICAgaW50KgkJICwKICAgIGludCoJ CSAsCiAgICBYQ2hhclN0cnVjdCoJIAoKKTsKCmV4dGVybiBpbnQgWFRleHRFeHRlbnRzMTYoCgog ICAgWEZvbnRTdHJ1Y3QqCSAsCiAgICBjb25zdCAgWENoYXIyYioJICwKICAgIGludAkJCSAsCiAg ICBpbnQqCQkgLAogICAgaW50KgkJICwKICAgIGludCoJCSAsCiAgICBYQ2hhclN0cnVjdCoJIAoK KTsKCmV4dGVybiBpbnQgWFRleHRXaWR0aCgKCiAgICBYRm9udFN0cnVjdCoJICwKICAgIGNvbnN0 ICBjaGFyKgkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgWFRleHRXaWR0aDE2KAoKICAg IFhGb250U3RydWN0KgkgLAogICAgY29uc3QgIFhDaGFyMmIqCSAsCiAgICBpbnQJCQkgCgopOwoK ZXh0ZXJuIGludCAgWFRyYW5zbGF0ZUNvb3JkaW5hdGVzKAoKICAgIERpc3BsYXkqCQkgLAogICAg V2luZG93CQkgLAogICAgV2luZG93CQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBp bnQqCQkgLAogICAgaW50KgkJICwKICAgIFdpbmRvdyoJCSAKCik7CgpleHRlcm4gaW50IFhVbmRl ZmluZUN1cnNvcigKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJIAoKKTsKCmV4dGVybiBp bnQgWFVuZ3JhYkJ1dHRvbigKCiAgICBEaXNwbGF5KgkJICwKICAgIHVuc2lnbmVkIGludAkgLAog ICAgdW5zaWduZWQgaW50CSAsCiAgICBXaW5kb3cJCSAKCik7CgpleHRlcm4gaW50IFhVbmdyYWJL ZXkoCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQJCQkgLAogICAgdW5zaWduZWQgaW50CSAsCiAg ICBXaW5kb3cJCSAKCik7CgpleHRlcm4gaW50IFhVbmdyYWJLZXlib2FyZCgKCiAgICBEaXNwbGF5 KgkJICwKICAgIFRpbWUJCSAKCik7CgpleHRlcm4gaW50IFhVbmdyYWJQb2ludGVyKAoKICAgIERp c3BsYXkqCQkgLAogICAgVGltZQkJIAoKKTsKCmV4dGVybiBpbnQgWFVuZ3JhYlNlcnZlcigKCiAg ICBEaXNwbGF5KgkJIAoKKTsKCmV4dGVybiBpbnQgWFVuaW5zdGFsbENvbG9ybWFwKAoKICAgIERp c3BsYXkqCQkgLAogICAgQ29sb3JtYXAJCSAKCik7CgpleHRlcm4gaW50IFhVbmxvYWRGb250KAoK ICAgIERpc3BsYXkqCQkgLAogICAgRm9udAkJIAoKKTsKCmV4dGVybiBpbnQgWFVubWFwU3Vid2lu ZG93cygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJIAoKKTsKCmV4dGVybiBpbnQgWFVu bWFwV2luZG93KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgCgopOwoKZXh0ZXJuIGlu dCBYVmVuZG9yUmVsZWFzZSgKCiAgICBEaXNwbGF5KgkJIAoKKTsKCmV4dGVybiBpbnQgWFdhcnBQ b2ludGVyKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgV2luZG93CQkgLAog ICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIHVuc2lnbmVk IGludAkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAJICAgICAKCik7CgpleHRlcm4gaW50IFhX aWR0aE1NT2ZTY3JlZW4oCgogICAgU2NyZWVuKgkJIAoKKTsKCmV4dGVybiBpbnQgWFdpZHRoT2ZT Y3JlZW4oCgogICAgU2NyZWVuKgkJIAoKKTsKCmV4dGVybiBpbnQgWFdpbmRvd0V2ZW50KAoKICAg IERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgbG9uZwkJICwKICAgIFhFdmVudCoJCSAK Cik7CgpleHRlcm4gaW50IFhXcml0ZUJpdG1hcEZpbGUoCgogICAgRGlzcGxheSoJCSAsCiAgICBj b25zdCAgY2hhcioJICwKICAgIFBpeG1hcAkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgdW5z aWduZWQgaW50CSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJIAkJICAgICAKCik7CgpleHRlcm4g aW50ICBYU3VwcG9ydHNMb2NhbGUoCgogICAgdm9pZAoKKTsKCmV4dGVybiBjaGFyICpYU2V0TG9j YWxlTW9kaWZpZXJzKAoKICAgIGNvbnN0ICBjaGFyKgkgCgopOwoKZXh0ZXJuIFhPTSBYT3Blbk9N KAoKICAgIERpc3BsYXkqCQkJICwKICAgIHN0cnVjdCBfWHJtSGFzaEJ1Y2tldFJlYyoJICwKICAg IGNvbnN0ICBjaGFyKgkJICwKICAgIGNvbnN0ICBjaGFyKgkJIAoKKTsKCmV4dGVybiBpbnQgIFhD bG9zZU9NKAoKICAgIFhPTQkJCSAKCik7CgpleHRlcm4gY2hhciAqWFNldE9NVmFsdWVzKAoKICAg IFhPTQkJCSAsCiAgICAuLi4KCik7CgpleHRlcm4gY2hhciAqWEdldE9NVmFsdWVzKAoKICAgIFhP TQkJCSAsCiAgICAuLi4KCik7CgpleHRlcm4gRGlzcGxheSAqWERpc3BsYXlPZk9NKAoKICAgIFhP TQkJCSAKCik7CgpleHRlcm4gY2hhciAqWExvY2FsZU9mT00oCgogICAgWE9NCQkJIAoKKTsKCmV4 dGVybiBYT0MgWENyZWF0ZU9DKAoKICAgIFhPTQkJCSAsCiAgICAuLi4KCik7CgpleHRlcm4gdm9p ZCBYRGVzdHJveU9DKAoKICAgIFhPQwkJCSAKCik7CgpleHRlcm4gWE9NIFhPTU9mT0MoCgogICAg WE9DCQkJIAoKKTsKCmV4dGVybiBjaGFyICpYU2V0T0NWYWx1ZXMoCgogICAgWE9DCQkJICwKICAg IC4uLgoKKTsKCmV4dGVybiBjaGFyICpYR2V0T0NWYWx1ZXMoCgogICAgWE9DCQkJICwKICAgIC4u LgoKKTsKCmV4dGVybiBYRm9udFNldCBYQ3JlYXRlRm9udFNldCgKCiAgICBEaXNwbGF5KgkJICwK ICAgIGNvbnN0ICBjaGFyKgkgLAogICAgY2hhcioqKgkJICwKICAgIGludCoJCSAsCiAgICBjaGFy KioJCSAKCik7CgpleHRlcm4gdm9pZCBYRnJlZUZvbnRTZXQoCgogICAgRGlzcGxheSoJCSAsCiAg ICBYRm9udFNldAkJIAoKKTsKCmV4dGVybiBpbnQgWEZvbnRzT2ZGb250U2V0KAoKICAgIFhGb250 U2V0CQkgLAogICAgWEZvbnRTdHJ1Y3QqKioJICwKICAgIGNoYXIqKioJCSAKCik7CgpleHRlcm4g Y2hhciAqWEJhc2VGb250TmFtZUxpc3RPZkZvbnRTZXQoCgogICAgWEZvbnRTZXQJCSAKCik7Cgpl eHRlcm4gY2hhciAqWExvY2FsZU9mRm9udFNldCgKCiAgICBYRm9udFNldAkJIAoKKTsKCmV4dGVy biBpbnQgIFhDb250ZXh0RGVwZW5kZW50RHJhd2luZygKCiAgICBYRm9udFNldAkJIAoKKTsKCmV4 dGVybiBpbnQgIFhEaXJlY3Rpb25hbERlcGVuZGVudERyYXdpbmcoCgogICAgWEZvbnRTZXQJCSAK Cik7CgpleHRlcm4gaW50ICBYQ29udGV4dHVhbERyYXdpbmcoCgogICAgWEZvbnRTZXQJCSAKCik7 CgpleHRlcm4gWEZvbnRTZXRFeHRlbnRzICpYRXh0ZW50c09mRm9udFNldCgKCiAgICBYRm9udFNl dAkJIAoKKTsKCmV4dGVybiBpbnQgWG1iVGV4dEVzY2FwZW1lbnQoCgogICAgWEZvbnRTZXQJCSAs CiAgICBjb25zdCAgY2hhcioJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFh3Y1RleHRF c2NhcGVtZW50KAoKICAgIFhGb250U2V0CQkgLAogICAgY29uc3QgIHdjaGFyX3QqCSAsCiAgICBp bnQJCQkgCgopOwoKZXh0ZXJuIGludCBYbWJUZXh0RXh0ZW50cygKCiAgICBYRm9udFNldAkJICwK ICAgIGNvbnN0ICBjaGFyKgkgLAogICAgaW50CQkJICwKICAgIFhSZWN0YW5nbGUqCQkgLAogICAg WFJlY3RhbmdsZSoJCSAKCik7CgpleHRlcm4gaW50IFh3Y1RleHRFeHRlbnRzKAoKICAgIFhGb250 U2V0CQkgLAogICAgY29uc3QgIHdjaGFyX3QqCSAsCiAgICBpbnQJCQkgLAogICAgWFJlY3Rhbmds ZSoJCSAsCiAgICBYUmVjdGFuZ2xlKgkJIAoKKTsKCmV4dGVybiBpbnQgIFhtYlRleHRQZXJDaGFy RXh0ZW50cygKCiAgICBYRm9udFNldAkJICwKICAgIGNvbnN0ICBjaGFyKgkgLAogICAgaW50CQkJ ICwKICAgIFhSZWN0YW5nbGUqCQkgLAogICAgWFJlY3RhbmdsZSoJCSAsCiAgICBpbnQJCQkgLAog ICAgaW50KgkJICwKICAgIFhSZWN0YW5nbGUqCQkgLAogICAgWFJlY3RhbmdsZSoJCSAKCik7Cgpl eHRlcm4gaW50ICBYd2NUZXh0UGVyQ2hhckV4dGVudHMoCgogICAgWEZvbnRTZXQJCSAsCiAgICBj b25zdCAgd2NoYXJfdCoJICwKICAgIGludAkJCSAsCiAgICBYUmVjdGFuZ2xlKgkJICwKICAgIFhS ZWN0YW5nbGUqCQkgLAogICAgaW50CQkJICwKICAgIGludCoJCSAsCiAgICBYUmVjdGFuZ2xlKgkJ ICwKICAgIFhSZWN0YW5nbGUqCQkgCgopOwoKZXh0ZXJuIHZvaWQgWG1iRHJhd1RleHQoCgogICAg RGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJICwKICAgIEdDCQkJICwKICAgIGludAkJCSAsCiAg ICBpbnQJCQkgLAogICAgWG1iVGV4dEl0ZW0qCSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIHZv aWQgWHdjRHJhd1RleHQoCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJICwKICAgIEdD CQkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgWHdjVGV4dEl0ZW0qCSAsCiAgICBp bnQJCQkgCgopOwoKZXh0ZXJuIHZvaWQgWG1iRHJhd1N0cmluZygKCiAgICBEaXNwbGF5KgkJICwK ICAgIERyYXdhYmxlCQkgLAogICAgWEZvbnRTZXQJCSAsCiAgICBHQwkJCSAsCiAgICBpbnQJCQkg LAogICAgaW50CQkJICwKICAgIGNvbnN0ICBjaGFyKgkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVy biB2b2lkIFh3Y0RyYXdTdHJpbmcoCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJICwK ICAgIFhGb250U2V0CQkgLAogICAgR0MJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAg ICBjb25zdCAgd2NoYXJfdCoJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gdm9pZCBYbWJEcmF3 SW1hZ2VTdHJpbmcoCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJICwKICAgIFhGb250 U2V0CQkgLAogICAgR0MJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBjb25zdCAg Y2hhcioJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gdm9pZCBYd2NEcmF3SW1hZ2VTdHJpbmco CgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJICwKICAgIFhGb250U2V0CQkgLAogICAg R0MJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBjb25zdCAgd2NoYXJfdCoJICwK ICAgIGludAkJCSAKCik7CgpleHRlcm4gWElNIFhPcGVuSU0oCgogICAgRGlzcGxheSoJCQkgLAog ICAgc3RydWN0IF9Ycm1IYXNoQnVja2V0UmVjKgkgLAogICAgY2hhcioJCQkgLAogICAgY2hhcioJ CQkgCgopOwoKZXh0ZXJuIGludCAgWENsb3NlSU0oCgogICAgWElNICAKCik7CgpleHRlcm4gY2hh ciAqWEdldElNVmFsdWVzKAoKICAgIFhJTSAgLCAuLi4KCik7CgpleHRlcm4gRGlzcGxheSAqWERp c3BsYXlPZklNKAoKICAgIFhJTSAgCgopOwoKZXh0ZXJuIGNoYXIgKlhMb2NhbGVPZklNKAoKICAg IFhJTSAgCgopOwoKZXh0ZXJuIFhJQyBYQ3JlYXRlSUMoCgogICAgWElNICAsIC4uLgoKKTsKCmV4 dGVybiB2b2lkIFhEZXN0cm95SUMoCgogICAgWElDICAKCik7CgpleHRlcm4gdm9pZCBYU2V0SUNG b2N1cygKCiAgICBYSUMgIAoKKTsKCmV4dGVybiB2b2lkIFhVbnNldElDRm9jdXMoCgogICAgWElD ICAKCik7CgpleHRlcm4gd2NoYXJfdCAqWHdjUmVzZXRJQygKCiAgICBYSUMgIAoKKTsKCmV4dGVy biBjaGFyICpYbWJSZXNldElDKAoKICAgIFhJQyAgCgopOwoKZXh0ZXJuIGNoYXIgKlhTZXRJQ1Zh bHVlcygKCiAgICBYSUMgICwgLi4uCgopOwoKZXh0ZXJuIGNoYXIgKlhHZXRJQ1ZhbHVlcygKCiAg ICBYSUMgICwgLi4uCgopOwoKZXh0ZXJuIFhJTSBYSU1PZklDKAoKICAgIFhJQyAgCgopOwoKZXh0 ZXJuIGludCAgWEZpbHRlckV2ZW50KAoKICAgIFhFdmVudCoJICwKICAgIFdpbmRvdwkgCgopOwoK ZXh0ZXJuIGludCBYbWJMb29rdXBTdHJpbmcoCgogICAgWElDCQkJICwKICAgIFhLZXlQcmVzc2Vk RXZlbnQqCSAsCiAgICBjaGFyKgkJICwKICAgIGludAkJCSAsCiAgICBLZXlTeW0qCQkgLAogICAg aW50ICoJCSAKCik7CgpleHRlcm4gaW50IFh3Y0xvb2t1cFN0cmluZygKCiAgICBYSUMJCQkgLAog ICAgWEtleVByZXNzZWRFdmVudCoJICwKICAgIHdjaGFyX3QqCQkgLAogICAgaW50CQkJICwKICAg IEtleVN5bSoJCSAsCiAgICBpbnQgKgkJIAoKKTsKCmV4dGVybiBYVmFOZXN0ZWRMaXN0IFhWYUNy ZWF0ZU5lc3RlZExpc3QoCgogICAgaW50ICAsIC4uLgoKKTsKCiAKCmV4dGVybiBpbnQgIFhSZWdp c3RlcklNSW5zdGFudGlhdGVDYWxsYmFjaygKCiAgICBEaXNwbGF5KgkJCSAsCiAgICBzdHJ1Y3Qg X1hybUhhc2hCdWNrZXRSZWMqCSAsCiAgICBjaGFyKgkJCSAsCiAgICBjaGFyKgkJCSAsCiAgICBY SU1Qcm9jCQkJICwKICAgIFhQb2ludGVyKgkJCSAKCik7CgpleHRlcm4gaW50ICBYVW5yZWdpc3Rl cklNSW5zdGFudGlhdGVDYWxsYmFjaygKCiAgICBEaXNwbGF5KgkJCSAsCiAgICBzdHJ1Y3QgX1hy bUhhc2hCdWNrZXRSZWMqCSAsCiAgICBjaGFyKgkJCSAsCiAgICBjaGFyKgkJCSAsCiAgICBYSU1Q cm9jCQkJICwKICAgIFhQb2ludGVyKgkJCSAKCik7Cgp0eXBlZGVmIHZvaWQgKCpYQ29ubmVjdGlv bldhdGNoUHJvYykoCgogICAgRGlzcGxheSoJCQkgLAogICAgWFBvaW50ZXIJCQkgLAogICAgaW50 CQkJCSAsCiAgICBpbnQgCQkJICwJICAKICAgIFhQb2ludGVyKgkJCSAgIAoKKTsKICAgIAoKZXh0 ZXJuIGludCAgWEludGVybmFsQ29ubmVjdGlvbk51bWJlcnMoCgogICAgRGlzcGxheSoJCQkgLAog ICAgaW50KioJCQkgLAogICAgaW50KgkJCSAKCik7CgpleHRlcm4gdm9pZCBYUHJvY2Vzc0ludGVy bmFsQ29ubmVjdGlvbigKCiAgICBEaXNwbGF5KgkJCSAsCiAgICBpbnQJCQkJIAoKKTsKCmV4dGVy biBpbnQgIFhBZGRDb25uZWN0aW9uV2F0Y2goCgogICAgRGlzcGxheSoJCQkgLAogICAgWENvbm5l Y3Rpb25XYXRjaFByb2MJICwKICAgIFhQb2ludGVyCQkJIAoKKTsKCmV4dGVybiB2b2lkIFhSZW1v dmVDb25uZWN0aW9uV2F0Y2goCgogICAgRGlzcGxheSoJCQkgLAogICAgWENvbm5lY3Rpb25XYXRj aFByb2MJICwKICAgIFhQb2ludGVyCQkJIAoKKTsKCn0gCgoKIyA1NiAiL3Vzci9vcGVud2luL2lu Y2x1ZGUvWDExL0ludHJpbnNpYy5oIiAyCgojIDEgIi91c3Ivb3Blbndpbi9pbmNsdWRlL1gxMS9Y dXRpbC5oIiAxCiAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCiNwcmFnbWEgaWRlbnQgIkAoIylYdXRpbC5oCTEuMgkwMC8wNy8wNSBTTUkiCgog CgogCgoKCgoKCgoKCgoKCiAKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgCWxvbmcgZmxhZ3M7CSAK CWludCB4LCB5OwkJIAoJaW50IHdpZHRoLCBoZWlnaHQ7CSAKCWludCBtaW5fd2lkdGgsIG1pbl9o ZWlnaHQ7CglpbnQgbWF4X3dpZHRoLCBtYXhfaGVpZ2h0OwogICAgCWludCB3aWR0aF9pbmMsIGhl aWdodF9pbmM7CglzdHJ1Y3QgewoJCWludCB4OwkgCgkJaW50IHk7CSAKCX0gbWluX2FzcGVjdCwg bWF4X2FzcGVjdDsKCWludCBiYXNlX3dpZHRoLCBiYXNlX2hlaWdodDsJCSAKCWludCB3aW5fZ3Jh dml0eTsJCQkgCn0gWFNpemVIaW50czsKCiAKCgoKCiAKCgoKCgoKCgoKCgoKIAoKCgoKdHlwZWRl ZiBzdHJ1Y3QgewoJbG9uZyBmbGFnczsJIAoJaW50ICBpbnB1dDsJIAoKCWludCBpbml0aWFsX3N0 YXRlOwkgCglQaXhtYXAgaWNvbl9waXhtYXA7CSAKCVdpbmRvdyBpY29uX3dpbmRvdzsgCSAKCWlu dCBpY29uX3gsIGljb25feTsgCSAKCVBpeG1hcCBpY29uX21hc2s7CSAKCVhJRCB3aW5kb3dfZ3Jv dXA7CSAKCSAKfSBYV01IaW50czsKCiAKCgoKCgoKCgoKCgoKIAoKCgoKIAoKCgoKCgkJCSAKCgog CgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIHVuc2lnbmVkIGNoYXIgKnZhbHVlOwkJIAogICAgQXRv bSBlbmNvZGluZzsJCQkgCiAgICBpbnQgZm9ybWF0OwkJCQkgCiAgICB1bnNpZ25lZCBsb25nIG5p dGVtczsJCSAKfSBYVGV4dFByb3BlcnR5OwoKCgoKCnR5cGVkZWYgZW51bSB7CiAgICBYU3RyaW5n U3R5bGUsCQkgCiAgICBYQ29tcG91bmRUZXh0U3R5bGUsCQkgCiAgICBYVGV4dFN0eWxlLAkJCSAK ICAgIFhTdGRJQ0NUZXh0U3R5bGUJCSAKfSBYSUNDRW5jb2RpbmdTdHlsZTsKCnR5cGVkZWYgc3Ry dWN0IHsKCWludCBtaW5fd2lkdGgsIG1pbl9oZWlnaHQ7CglpbnQgbWF4X3dpZHRoLCBtYXhfaGVp Z2h0OwoJaW50IHdpZHRoX2luYywgaGVpZ2h0X2luYzsKfSBYSWNvblNpemU7Cgp0eXBlZGVmIHN0 cnVjdCB7CgljaGFyICpyZXNfbmFtZTsKCWNoYXIgKnJlc19jbGFzczsKfSBYQ2xhc3NIaW50OwoK IAoKCgoKCgoKCgoKCgoKCiAKCgp0eXBlZGVmIHN0cnVjdCBfWENvbXBvc2VTdGF0dXMgewogICAg WFBvaW50ZXIgY29tcG9zZV9wdHI7CSAKICAgIGludCBjaGFyc19tYXRjaGVkOwkJIAp9IFhDb21w b3NlU3RhdHVzOwoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKdHlwZWRlZiBzdHJ1Y3Qg X1hSZWdpb24gKlJlZ2lvbjsgCgogCiAKCgoKIAoKIAoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogIFZp c3VhbCAqdmlzdWFsOwogIFZpc3VhbElEIHZpc3VhbGlkOwogIGludCBzY3JlZW47CiAgaW50IGRl cHRoOwoKICBpbnQgY19jbGFzczsJCQkJCSAKCgoKICB1bnNpZ25lZCBsb25nIHJlZF9tYXNrOwog IHVuc2lnbmVkIGxvbmcgZ3JlZW5fbWFzazsKICB1bnNpZ25lZCBsb25nIGJsdWVfbWFzazsKICBp bnQgY29sb3JtYXBfc2l6ZTsKICBpbnQgYml0c19wZXJfcmdiOwp9IFhWaXN1YWxJbmZvOwoKCgoK CgoKCgoKCgoKIAoKCgp0eXBlZGVmIHN0cnVjdCB7CglDb2xvcm1hcCBjb2xvcm1hcDsKCXVuc2ln bmVkIGxvbmcgcmVkX21heDsKCXVuc2lnbmVkIGxvbmcgcmVkX211bHQ7Cgl1bnNpZ25lZCBsb25n IGdyZWVuX21heDsKCXVuc2lnbmVkIGxvbmcgZ3JlZW5fbXVsdDsKCXVuc2lnbmVkIGxvbmcgYmx1 ZV9tYXg7Cgl1bnNpZ25lZCBsb25nIGJsdWVfbXVsdDsKCXVuc2lnbmVkIGxvbmcgYmFzZV9waXhl bDsKCVZpc3VhbElEIHZpc3VhbGlkOwkJIAoJWElEIGtpbGxpZDsJCQkgCn0gWFN0YW5kYXJkQ29s b3JtYXA7CgoKCgogCgoKCgoKCgogCgoKCgoKCiAKCgoKCgp0eXBlZGVmIGludCBYQ29udGV4dDsK CgoKCmV4dGVybiAiQyIgeyAKCiAKCmV4dGVybiBYQ2xhc3NIaW50ICpYQWxsb2NDbGFzc0hpbnQg KAoKICAgIHZvaWQKCik7CgpleHRlcm4gWEljb25TaXplICpYQWxsb2NJY29uU2l6ZSAoCgogICAg dm9pZAoKKTsKCmV4dGVybiBYU2l6ZUhpbnRzICpYQWxsb2NTaXplSGludHMgKAoKICAgIHZvaWQK Cik7CgpleHRlcm4gWFN0YW5kYXJkQ29sb3JtYXAgKlhBbGxvY1N0YW5kYXJkQ29sb3JtYXAgKAoK ICAgIHZvaWQKCik7CgpleHRlcm4gWFdNSGludHMgKlhBbGxvY1dNSGludHMgKAoKICAgIHZvaWQK Cik7CgpleHRlcm4gaW50IFhDbGlwQm94KAoKICAgIFJlZ2lvbgkJICwKICAgIFhSZWN0YW5nbGUq CQkgCgopOwoKZXh0ZXJuIFJlZ2lvbiBYQ3JlYXRlUmVnaW9uKAoKICAgIHZvaWQKCik7CgpleHRl cm4gY2hhciAqWERlZmF1bHRTdHJpbmcoCgogICAgdm9pZAoKKTsKCmV4dGVybiBpbnQgWERlbGV0 ZUNvbnRleHQoCgogICAgRGlzcGxheSoJCSAsCiAgICBYSUQJCQkgLAogICAgWENvbnRleHQJCSAK Cik7CgpleHRlcm4gaW50IFhEZXN0cm95UmVnaW9uKAoKICAgIFJlZ2lvbgkJIAoKKTsKCmV4dGVy biBpbnQgWEVtcHR5UmVnaW9uKAoKICAgIFJlZ2lvbgkJIAoKKTsKCmV4dGVybiBpbnQgWEVxdWFs UmVnaW9uKAoKICAgIFJlZ2lvbgkJICwKICAgIFJlZ2lvbgkJIAoKKTsKCmV4dGVybiBpbnQgWEZp bmRDb250ZXh0KAoKICAgIERpc3BsYXkqCQkgLAogICAgWElECQkJICwKICAgIFhDb250ZXh0CQkg LAogICAgWFBvaW50ZXIqCQkgCgopOwoKZXh0ZXJuIGludCAgWEdldENsYXNzSGludCgKCiAgICBE aXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIFhDbGFzc0hpbnQqCQkgCgopOwoKZXh0ZXJu IGludCAgWEdldEljb25TaXplcygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAg IFhJY29uU2l6ZSoqCQkgLAogICAgaW50KgkJIAoKKTsKCmV4dGVybiBpbnQgIFhHZXROb3JtYWxI aW50cygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIFhTaXplSGludHMqCQkg CgopOwoKZXh0ZXJuIGludCAgWEdldFJHQkNvbG9ybWFwcygKCiAgICBEaXNwbGF5KgkJICwKICAg IFdpbmRvdwkJICwKICAgIFhTdGFuZGFyZENvbG9ybWFwKiogICwKICAgIGludCoJCSAsCiAgICBB dG9tCQkgCgopOwoKZXh0ZXJuIGludCAgWEdldFNpemVIaW50cygKCiAgICBEaXNwbGF5KgkJICwK ICAgIFdpbmRvdwkJICwKICAgIFhTaXplSGludHMqCQkgLAogICAgQXRvbQkJIAoKKTsKCmV4dGVy biBpbnQgIFhHZXRTdGFuZGFyZENvbG9ybWFwKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93 CQkgLAogICAgWFN0YW5kYXJkQ29sb3JtYXAqCSAsCiAgICBBdG9tCQkgCQkJICAgIAoKKTsKCmV4 dGVybiBpbnQgIFhHZXRUZXh0UHJvcGVydHkoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJ CSAsCiAgICBYVGV4dFByb3BlcnR5KgkgLAogICAgQXRvbQkJIAoKKTsKCmV4dGVybiBYVmlzdWFs SW5mbyAqWEdldFZpc3VhbEluZm8oCgogICAgRGlzcGxheSoJCSAsCiAgICBsb25nCQkgLAogICAg WFZpc3VhbEluZm8qCSAsCiAgICBpbnQqCQkgCgopOwoKZXh0ZXJuIGludCAgWEdldFdNQ2xpZW50 TWFjaGluZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIFhUZXh0UHJvcGVy dHkqCSAKCik7CgpleHRlcm4gWFdNSGludHMgKlhHZXRXTUhpbnRzKAoKICAgIERpc3BsYXkqCQkg LAogICAgV2luZG93CQkgCQkgICAgICAKCik7CgpleHRlcm4gaW50ICBYR2V0V01JY29uTmFtZSgK CiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwKICAgIFhUZXh0UHJvcGVydHkqCSAKCik7 CgpleHRlcm4gaW50ICBYR2V0V01OYW1lKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkg LAogICAgWFRleHRQcm9wZXJ0eSoJIAoKKTsKCmV4dGVybiBpbnQgIFhHZXRXTU5vcm1hbEhpbnRz KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgWFNpemVIaW50cyoJCSAsCiAg ICBsb25nKgkJICAKCik7CgpleHRlcm4gaW50ICBYR2V0V01TaXplSGludHMoCgogICAgRGlzcGxh eSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBYU2l6ZUhpbnRzKgkJICwKICAgIGxvbmcqCQkgLAog ICAgQXRvbQkJIAoKKTsKCmV4dGVybiBpbnQgIFhHZXRab29tSGludHMoCgogICAgRGlzcGxheSoJ CSAsCiAgICBXaW5kb3cJCSAsCiAgICBYU2l6ZUhpbnRzKgkJIAoKKTsKCmV4dGVybiBpbnQgWElu dGVyc2VjdFJlZ2lvbigKCiAgICBSZWdpb24JCSAsCiAgICBSZWdpb24JCSAsCiAgICBSZWdpb24J CSAKCik7CgpleHRlcm4gdm9pZCBYQ29udmVydENhc2UoCgogICAgS2V5U3ltCQkgLAogICAgS2V5 U3ltKgkJICwKICAgIEtleVN5bSoJCSAKCik7CgpleHRlcm4gaW50IFhMb29rdXBTdHJpbmcoCgog ICAgWEtleUV2ZW50KgkJICwKICAgIGNoYXIqCQkgLAogICAgaW50CQkJICwKICAgIEtleVN5bSoJ CSAsCiAgICBYQ29tcG9zZVN0YXR1cyoJIAoKKTsKCmV4dGVybiBpbnQgIFhNYXRjaFZpc3VhbElu Zm8oCgogICAgRGlzcGxheSoJCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJICwKICAgIGludAkJ CSAsCiAgICBYVmlzdWFsSW5mbyoJIAoKKTsKCmV4dGVybiBpbnQgWE9mZnNldFJlZ2lvbigKCiAg ICBSZWdpb24JCSAsCiAgICBpbnQJCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgIFhQ b2ludEluUmVnaW9uKAoKICAgIFJlZ2lvbgkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgCgop OwoKZXh0ZXJuIFJlZ2lvbiBYUG9seWdvblJlZ2lvbigKCiAgICBYUG9pbnQqCQkgLAogICAgaW50 CQkJICwKICAgIGludAkJCSAKCik7CgpleHRlcm4gaW50IFhSZWN0SW5SZWdpb24oCgogICAgUmVn aW9uCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAg IHVuc2lnbmVkIGludAkgCgopOwoKZXh0ZXJuIGludCBYU2F2ZUNvbnRleHQoCgogICAgRGlzcGxh eSoJCSAsCiAgICBYSUQJCQkgLAogICAgWENvbnRleHQJCSAsCiAgICBjb25zdCAgY2hhcioJIAoK KTsKCmV4dGVybiBpbnQgWFNldENsYXNzSGludCgKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRv dwkJICwKICAgIFhDbGFzc0hpbnQqCQkgCgopOwoKZXh0ZXJuIGludCBYU2V0SWNvblNpemVzKAoK ICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgWEljb25TaXplKgkJICwKICAgIGlu dAkJCSAgICAgCgopOwoKZXh0ZXJuIGludCBYU2V0Tm9ybWFsSGludHMoCgogICAgRGlzcGxheSoJ CSAsCiAgICBXaW5kb3cJCSAsCiAgICBYU2l6ZUhpbnRzKgkJIAoKKTsKCmV4dGVybiB2b2lkIFhT ZXRSR0JDb2xvcm1hcHMoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBYU3Rh bmRhcmRDb2xvcm1hcCoJICwKICAgIGludAkJCSAsCiAgICBBdG9tCQkgCgopOwoKZXh0ZXJuIGlu dCBYU2V0U2l6ZUhpbnRzKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgWFNp emVIaW50cyoJCSAsCiAgICBBdG9tCQkgCgopOwoKZXh0ZXJuIGludCBYU2V0U3RhbmRhcmRQcm9w ZXJ0aWVzKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgY29uc3QgIGNoYXIq CSAsCiAgICBjb25zdCAgY2hhcioJICwKICAgIFBpeG1hcAkJICwKICAgIGNoYXIqKgkJICwKICAg IGludAkJCSAsCiAgICBYU2l6ZUhpbnRzKgkJIAoKKTsKCmV4dGVybiB2b2lkIFhTZXRUZXh0UHJv cGVydHkoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBYVGV4dFByb3BlcnR5 KgkgLAogICAgQXRvbQkJIAoKKTsKCmV4dGVybiB2b2lkIFhTZXRXTUNsaWVudE1hY2hpbmUoCgog ICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBYVGV4dFByb3BlcnR5KgkgCgopOwoK ZXh0ZXJuIGludCBYU2V0V01IaW50cygKCiAgICBEaXNwbGF5KgkJICwKICAgIFdpbmRvdwkJICwK ICAgIFhXTUhpbnRzKgkJIAoKKTsKCmV4dGVybiB2b2lkIFhTZXRXTUljb25OYW1lKAoKICAgIERp c3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgWFRleHRQcm9wZXJ0eSoJIAoKKTsKCmV4dGVy biB2b2lkIFhTZXRXTU5hbWUoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBY VGV4dFByb3BlcnR5KgkgCgopOwoKZXh0ZXJuIHZvaWQgWFNldFdNTm9ybWFsSGludHMoCgogICAg RGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBYU2l6ZUhpbnRzKgkJIAoKKTsKCmV4dGVy biB2b2lkIFhTZXRXTVByb3BlcnRpZXMoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAs CiAgICBYVGV4dFByb3BlcnR5KgkgLAogICAgWFRleHRQcm9wZXJ0eSoJICwKICAgIGNoYXIqKgkJ ICwKICAgIGludAkJCSAsCiAgICBYU2l6ZUhpbnRzKgkJICwKICAgIFhXTUhpbnRzKgkJICwKICAg IFhDbGFzc0hpbnQqCQkgCgopOwoKZXh0ZXJuIHZvaWQgWG1iU2V0V01Qcm9wZXJ0aWVzKAoKICAg IERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgY29uc3QgIGNoYXIqCSAsCiAgICBjb25z dCAgY2hhcioJICwKICAgIGNoYXIqKgkJICwKICAgIGludAkJCSAsCiAgICBYU2l6ZUhpbnRzKgkJ ICwKICAgIFhXTUhpbnRzKgkJICwKICAgIFhDbGFzc0hpbnQqCQkgCgopOwoKZXh0ZXJuIHZvaWQg WFNldFdNU2l6ZUhpbnRzKAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93CQkgLAogICAgWFNp emVIaW50cyoJCSAsCiAgICBBdG9tCQkgCgopOwoKZXh0ZXJuIGludCBYU2V0UmVnaW9uKAoKICAg IERpc3BsYXkqCQkgLAogICAgR0MJCQkgLAogICAgUmVnaW9uCQkgCgopOwoKZXh0ZXJuIHZvaWQg WFNldFN0YW5kYXJkQ29sb3JtYXAoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAg ICBYU3RhbmRhcmRDb2xvcm1hcCoJICwKICAgIEF0b20JCSAKCik7CgpleHRlcm4gaW50IFhTZXRa b29tSGludHMoCgogICAgRGlzcGxheSoJCSAsCiAgICBXaW5kb3cJCSAsCiAgICBYU2l6ZUhpbnRz KgkJIAoKKTsKCmV4dGVybiBpbnQgWFNocmlua1JlZ2lvbigKCiAgICBSZWdpb24JCSAsCiAgICBp bnQJCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgIFhTdHJpbmdMaXN0VG9UZXh0UHJv cGVydHkoCgogICAgY2hhcioqCQkgLAogICAgaW50CQkJICwKICAgIFhUZXh0UHJvcGVydHkqCSAK Cik7CgpleHRlcm4gaW50IFhTdWJ0cmFjdFJlZ2lvbigKCiAgICBSZWdpb24JCSAsCiAgICBSZWdp b24JCSAsCiAgICBSZWdpb24JCSAKCik7CgpleHRlcm4gaW50IFhtYlRleHRMaXN0VG9UZXh0UHJv cGVydHkoCgogICAgRGlzcGxheSoJCSAsCiAgICBjaGFyKioJCSAsCiAgICBpbnQJCQkgLAogICAg WElDQ0VuY29kaW5nU3R5bGUJICwKICAgIFhUZXh0UHJvcGVydHkqCSAKCik7CgpleHRlcm4gaW50 IFh3Y1RleHRMaXN0VG9UZXh0UHJvcGVydHkoCgogICAgRGlzcGxheSoJCSAsCiAgICB3Y2hhcl90 KioJCSAsCiAgICBpbnQJCQkgLAogICAgWElDQ0VuY29kaW5nU3R5bGUJICwKICAgIFhUZXh0UHJv cGVydHkqCSAKCik7CgpleHRlcm4gdm9pZCBYd2NGcmVlU3RyaW5nTGlzdCgKCiAgICB3Y2hhcl90 KioJCSAKCik7CgpleHRlcm4gaW50ICBYVGV4dFByb3BlcnR5VG9TdHJpbmdMaXN0KAoKICAgIFhU ZXh0UHJvcGVydHkqCSAsCiAgICBjaGFyKioqCQkgLAogICAgaW50KgkJIAoKKTsKCmV4dGVybiBp bnQgWG1iVGV4dFByb3BlcnR5VG9UZXh0TGlzdCgKCiAgICBEaXNwbGF5KgkJICwKICAgIFhUZXh0 UHJvcGVydHkqCSAsCiAgICBjaGFyKioqCQkgLAogICAgaW50KgkJIAoKKTsKCmV4dGVybiBpbnQg WHdjVGV4dFByb3BlcnR5VG9UZXh0TGlzdCgKCiAgICBEaXNwbGF5KgkJICwKICAgIFhUZXh0UHJv cGVydHkqCSAsCiAgICB3Y2hhcl90KioqCQkgLAogICAgaW50KgkJIAoKKTsKCmV4dGVybiBpbnQg WFVuaW9uUmVjdFdpdGhSZWdpb24oCgogICAgWFJlY3RhbmdsZSoJCSAsCiAgICBSZWdpb24JCSAs CiAgICBSZWdpb24JCSAKCik7CgpleHRlcm4gaW50IFhVbmlvblJlZ2lvbigKCiAgICBSZWdpb24J CSAsCiAgICBSZWdpb24JCSAsCiAgICBSZWdpb24JCSAKCik7CgpleHRlcm4gaW50IFhXTUdlb21l dHJ5KAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50CQkJICwKICAgIGNvbnN0ICBjaGFyKgkgLAog ICAgY29uc3QgIGNoYXIqCSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIFhTaXplSGludHMqCQkg LAogICAgaW50KgkJICwKICAgIGludCoJCSAsCiAgICBpbnQqCQkgLAogICAgaW50KgkJICwKICAg IGludCoJCSAKCik7CgpleHRlcm4gaW50IFhYb3JSZWdpb24oCgogICAgUmVnaW9uCQkgLAogICAg UmVnaW9uCQkgLAogICAgUmVnaW9uCQkgCgopOwoKfSAKCgojIDU3ICIvdXNyL29wZW53aW4vaW5j bHVkZS9YMTEvSW50cmluc2ljLmgiIDIKCiMgMSAiL3Vzci9vcGVud2luL2luY2x1ZGUvWDExL1hy ZXNvdXJjZS5oIiAxCiAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCiNwcmFnbWEgaWRlbnQgIkAoIylYcmVzb3VyY2UuaAkxLjIJMS4yIFNNSSIK CiAKCiAKCgoKCgoKCgoKZXh0ZXJuICJDIiB7IAoKIAoKCgoKCmV4dGVybiBjaGFyICpYcGVybWFs bG9jKAoKICAgIHVuc2lnbmVkIGludAkgCgopOwoKIAoKCgoKCnR5cGVkZWYgaW50ICAgICBYcm1R dWFyaywgKlhybVF1YXJrTGlzdDsKCgp0eXBlZGVmIGNoYXIgKlhybVN0cmluZzsKCgogCmV4dGVy biBYcm1RdWFyayBYcm1TdHJpbmdUb1F1YXJrKAoKICAgIGNvbnN0ICBjaGFyKiAJIAoKKTsKCmV4 dGVybiBYcm1RdWFyayBYcm1QZXJtU3RyaW5nVG9RdWFyaygKCiAgICBjb25zdCAgY2hhciogCSAK Cik7CgogCmV4dGVybiBYcm1TdHJpbmcgWHJtUXVhcmtUb1N0cmluZygKCiAgICBYcm1RdWFyayAJ CSAKCik7CgpleHRlcm4gWHJtUXVhcmsgWHJtVW5pcXVlUXVhcmsoCgogICAgdm9pZAoKKTsKCgoK CiAKCgoKCgp0eXBlZGVmIGVudW0ge1hybUJpbmRUaWdodGx5LCBYcm1CaW5kTG9vc2VseX0gWHJt QmluZGluZywgKlhybUJpbmRpbmdMaXN0OwoKZXh0ZXJuIHZvaWQgWHJtU3RyaW5nVG9RdWFya0xp c3QoCgogICAgY29uc3QgIGNoYXIqCSAsCiAgICBYcm1RdWFya0xpc3QJIAoKKTsKCmV4dGVybiB2 b2lkIFhybVN0cmluZ1RvQmluZGluZ1F1YXJrTGlzdCgKCiAgICBjb25zdCAgY2hhcioJICwKICAg IFhybUJpbmRpbmdMaXN0CSAsCiAgICBYcm1RdWFya0xpc3QJIAoKKTsKCiAKCgoKCgp0eXBlZGVm IFhybVF1YXJrICAgICBYcm1OYW1lOwp0eXBlZGVmIFhybVF1YXJrTGlzdCBYcm1OYW1lTGlzdDsK CgoKCnR5cGVkZWYgWHJtUXVhcmsgICAgIFhybUNsYXNzOwp0eXBlZGVmIFhybVF1YXJrTGlzdCBY cm1DbGFzc0xpc3Q7CgoKCgoKCiAKCgoKCgp0eXBlZGVmIFhybVF1YXJrICAgICBYcm1SZXByZXNl bnRhdGlvbjsKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgdW5zaWduZWQgaW50ICAgIHNpemU7CiAg ICBYUG9pbnRlcgkgICAgYWRkcjsKfSBYcm1WYWx1ZSwgKlhybVZhbHVlUHRyOwoKCiAKCgoKCgp0 eXBlZGVmIHN0cnVjdCBfWHJtSGFzaEJ1Y2tldFJlYyAqWHJtSGFzaEJ1Y2tldDsKdHlwZWRlZiBY cm1IYXNoQnVja2V0ICpYcm1IYXNoVGFibGU7CnR5cGVkZWYgWHJtSGFzaFRhYmxlIFhybVNlYXJj aExpc3RbXTsKdHlwZWRlZiBzdHJ1Y3QgX1hybUhhc2hCdWNrZXRSZWMgKlhybURhdGFiYXNlOwoK CmV4dGVybiB2b2lkIFhybURlc3Ryb3lEYXRhYmFzZSgKCiAgICBYcm1EYXRhYmFzZQkJICAgICAK Cik7CgpleHRlcm4gdm9pZCBYcm1RUHV0UmVzb3VyY2UoCgogICAgWHJtRGF0YWJhc2UqCSAsCiAg ICBYcm1CaW5kaW5nTGlzdAkgLAogICAgWHJtUXVhcmtMaXN0CSAsCiAgICBYcm1SZXByZXNlbnRh dGlvbgkgLAogICAgWHJtVmFsdWUqCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHJtUHV0UmVzb3VyY2Uo CgogICAgWHJtRGF0YWJhc2UqCSAsCiAgICBjb25zdCAgY2hhcioJICwKICAgIGNvbnN0ICBjaGFy KgkgLAogICAgWHJtVmFsdWUqCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHJtUVB1dFN0cmluZ1Jlc291 cmNlKAoKICAgIFhybURhdGFiYXNlKgkgLAogICAgWHJtQmluZGluZ0xpc3QgICAgICAgLAogICAg WHJtUXVhcmtMaXN0CSAsCiAgICBjb25zdCAgY2hhcioJIAoKKTsKCmV4dGVybiB2b2lkIFhybVB1 dFN0cmluZ1Jlc291cmNlKAoKICAgIFhybURhdGFiYXNlKgkgLAogICAgY29uc3QgIGNoYXIqCSAs CiAgICBjb25zdCAgY2hhcioJIAoKKTsKCmV4dGVybiB2b2lkIFhybVB1dExpbmVSZXNvdXJjZSgK CiAgICBYcm1EYXRhYmFzZSoJICwKICAgIGNvbnN0ICBjaGFyKgkgCgopOwoKZXh0ZXJuIGludCAg WHJtUUdldFJlc291cmNlKAoKICAgIFhybURhdGFiYXNlCQkgLAogICAgWHJtTmFtZUxpc3QJCSAs CiAgICBYcm1DbGFzc0xpc3QJICwKICAgIFhybVJlcHJlc2VudGF0aW9uKgkgLAogICAgWHJtVmFs dWUqCQkgCgopOwoKZXh0ZXJuIGludCAgWHJtR2V0UmVzb3VyY2UoCgogICAgWHJtRGF0YWJhc2UJ CSAsCiAgICBjb25zdCAgY2hhcioJICwKICAgIGNvbnN0ICBjaGFyKgkgLAogICAgY2hhcioqCQkg LAogICAgWHJtVmFsdWUqCQkgCgopOwoKZXh0ZXJuIGludCAgWHJtUUdldFNlYXJjaExpc3QoCgog ICAgWHJtRGF0YWJhc2UJCSAsCiAgICBYcm1OYW1lTGlzdAkJICwKICAgIFhybUNsYXNzTGlzdAkg LAogICAgWHJtU2VhcmNoTGlzdAkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBpbnQgIFhybVFH ZXRTZWFyY2hSZXNvdXJjZSgKCiAgICBYcm1TZWFyY2hMaXN0CSAsCiAgICBYcm1OYW1lCQkgLAog ICAgWHJtQ2xhc3MJCSAsCiAgICBYcm1SZXByZXNlbnRhdGlvbioJICwKICAgIFhybVZhbHVlKgkJ IAoKKTsKCiAKCgoKCgpleHRlcm4gdm9pZCBYcm1TZXREYXRhYmFzZSgKCiAgICBEaXNwbGF5KgkJ ICwKICAgIFhybURhdGFiYXNlCQkgCgopOwoKZXh0ZXJuIFhybURhdGFiYXNlIFhybUdldERhdGFi YXNlKAoKICAgIERpc3BsYXkqCQkgCgopOwoKZXh0ZXJuIFhybURhdGFiYXNlIFhybUdldEZpbGVE YXRhYmFzZSgKCiAgICBjb25zdCAgY2hhcioJIAoKKTsKCmV4dGVybiBpbnQgIFhybUNvbWJpbmVG aWxlRGF0YWJhc2UoCgogICAgY29uc3QgIGNoYXIqIAkgLAogICAgWHJtRGF0YWJhc2UqCSAsCiAg ICBpbnQgCQkgCgopOwoKZXh0ZXJuIFhybURhdGFiYXNlIFhybUdldFN0cmluZ0RhdGFiYXNlKAoK ICAgIGNvbnN0ICBjaGFyKgkgICAgCgopOwoKZXh0ZXJuIHZvaWQgWHJtUHV0RmlsZURhdGFiYXNl KAoKICAgIFhybURhdGFiYXNlCQkgLAogICAgY29uc3QgIGNoYXIqCSAKCik7CgpleHRlcm4gdm9p ZCBYcm1NZXJnZURhdGFiYXNlcygKCiAgICBYcm1EYXRhYmFzZQkJICwKICAgIFhybURhdGFiYXNl KgkgCgopOwoKZXh0ZXJuIHZvaWQgWHJtQ29tYmluZURhdGFiYXNlKAoKICAgIFhybURhdGFiYXNl CQkgLAogICAgWHJtRGF0YWJhc2UqCSAsCiAgICBpbnQgCQkgCgopOwoKCgoKZXh0ZXJuIGludCAg WHJtRW51bWVyYXRlRGF0YWJhc2UoCgogICAgWHJtRGF0YWJhc2UJCSAsCiAgICBYcm1OYW1lTGlz dAkJICwKICAgIFhybUNsYXNzTGlzdAkgLAogICAgaW50CQkJICwKICAgIGludCAgKCopKAoKCSAg ICAgWHJtRGF0YWJhc2UqCSAsCgkgICAgIFhybUJpbmRpbmdMaXN0CSAsCgkgICAgIFhybVF1YXJr TGlzdAkgLAoJICAgICBYcm1SZXByZXNlbnRhdGlvbioJICwKCSAgICAgWHJtVmFsdWUqCQkgLAoJ ICAgICBYUG9pbnRlcgkJIAoKCSAgICAgKQkJICwKICAgIFhQb2ludGVyCQkgCgopOwoKZXh0ZXJu IGNoYXIgKlhybUxvY2FsZU9mRGF0YWJhc2UoCgogICAgWHJtRGF0YWJhc2UgCSAKCik7CgoKIAoK CgoKCnR5cGVkZWYgZW51bSB7CiAgICBYcm1vcHRpb25Ob0FyZywJIAogICAgWHJtb3B0aW9uSXNB cmcsICAgICAgCiAgICBYcm1vcHRpb25TdGlja3lBcmcsICAKICAgIFhybW9wdGlvblNlcEFyZywg ICAgIAogICAgWHJtb3B0aW9uUmVzQXJnLAkgCiAgICBYcm1vcHRpb25Ta2lwQXJnLCAgICAKICAg IFhybW9wdGlvblNraXBMaW5lLCAgIAogICAgWHJtb3B0aW9uU2tpcE5BcmdzCSAKCn0gWHJtT3B0 aW9uS2luZDsKCnR5cGVkZWYgc3RydWN0IHsKICAgIGNoYXIJICAgICpvcHRpb247CSAgICAgCiAg ICBjaGFyCSAgICAqc3BlY2lmaWVyOyAgICAgIAogICAgWHJtT3B0aW9uS2luZCAgIGFyZ0tpbmQ7 CSAgICAgCiAgICBYUG9pbnRlcgkgICAgdmFsdWU7CSAgICAgCn0gWHJtT3B0aW9uRGVzY1JlYywg KlhybU9wdGlvbkRlc2NMaXN0OwoKCmV4dGVybiB2b2lkIFhybVBhcnNlQ29tbWFuZCgKCiAgICBY cm1EYXRhYmFzZSoJICwKICAgIFhybU9wdGlvbkRlc2NMaXN0CSAsCiAgICBpbnQJCQkgLAogICAg Y29uc3QgIGNoYXIqCSAsCiAgICBpbnQqCQkgLAogICAgY2hhcioqCQkgCQkgICAgIAoKKTsKCn0g CgoKIAojIDU4ICIvdXNyL29wZW53aW4vaW5jbHVkZS9YMTEvSW50cmluc2ljLmgiIDIKCgoKCgoK CgoKCgoKCgoKCgoKCnR5cGVkZWYgY2hhciAqU3RyaW5nOwoKCgogCgoKCgoKCiAKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBfV2lkZ2V0UmVjICpXaWRn ZXQ7CnR5cGVkZWYgV2lkZ2V0ICpXaWRnZXRMaXN0Owp0eXBlZGVmIHN0cnVjdCBfV2lkZ2V0Q2xh c3NSZWMgKldpZGdldENsYXNzOwp0eXBlZGVmIHN0cnVjdCBfQ29tcG9zaXRlUmVjICpDb21wb3Np dGVXaWRnZXQ7CnR5cGVkZWYgc3RydWN0IF9YdEFjdGlvbnNSZWMgKlh0QWN0aW9uTGlzdDsKdHlw ZWRlZiBzdHJ1Y3QgX1h0RXZlbnRSZWMgKlh0RXZlbnRUYWJsZTsKCnR5cGVkZWYgc3RydWN0IF9Y dEFwcFN0cnVjdCAqWHRBcHBDb250ZXh0Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcJWHRWYWx1ZU1h c2s7CnR5cGVkZWYgdW5zaWduZWQgbG9uZwlYdEludGVydmFsSWQ7CnR5cGVkZWYgdW5zaWduZWQg bG9uZwlYdElucHV0SWQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZwlYdFdvcmtQcm9jSWQ7CnR5cGVk ZWYgdW5zaWduZWQgbG9uZwlYdFNpZ25hbElkOwp0eXBlZGVmIHVuc2lnbmVkIGludAlYdEdlb21l dHJ5TWFzazsKdHlwZWRlZiB1bnNpZ25lZCBsb25nCVh0R0NNYXNrOyAgICAKdHlwZWRlZiB1bnNp Z25lZCBsb25nCVBpeGVsOwkgICAgIAp0eXBlZGVmIGludAkJWHRDYWNoZVR5cGU7CgoKCgoKCQkJ CQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJCQkJIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKdHlwZWRlZiBjaGFyCQlCb29sZWFuOwp0eXBlZGVmIGxvbmcJCVh0QXJnVmFsOwp0eXBl ZGVmIHVuc2lnbmVkIGNoYXIJWHRFbnVtOwoKCnR5cGVkZWYgdW5zaWduZWQgaW50CUNhcmRpbmFs Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0CURpbWVuc2lvbjsgICAKdHlwZWRlZiBzaG9ydAkJUG9z aXRpb247ICAgIAoKCnR5cGVkZWYgdm9pZCoJCVh0UG9pbnRlcjsKCgoKCiAKIAp0eXBlZGVmIFh0 UG9pbnRlcglPcGFxdWU7CgojIDEgIi91c3Ivb3Blbndpbi9pbmNsdWRlL1gxMS9Db3JlLmgiIDEK IAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CnR5cGVkZWYgc3RydWN0IF9XaWRnZXRDbGFzc1JlYyAqQ29yZVdpZGdldENsYXNzOwp0eXBlZGVm IHN0cnVjdCBfV2lkZ2V0UmVjICpDb3JlV2lkZ2V0OwpleHRlcm4gIFdpZGdldENsYXNzIGNvcmVX aWRnZXRDbGFzczsKCgpleHRlcm4gIFdpZGdldENsYXNzIHdpZGdldENsYXNzOwoKCgoKIAojIDE5 NCAiL3Vzci9vcGVud2luL2luY2x1ZGUvWDExL0ludHJpbnNpYy5oIiAyCgojIDEgIi91c3Ivb3Bl bndpbi9pbmNsdWRlL1gxMS9Db21wb3NpdGUuaCIgMQogCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX0NvbXBvc2l0ZUNs YXNzUmVjICpDb21wb3NpdGVXaWRnZXRDbGFzczsKCnR5cGVkZWYgQ2FyZGluYWwgKCpYdE9yZGVy UHJvYykoCgogICAgV2lkZ2V0IAkgCgopOwoKZXh0ZXJuICJDIiB7IAoKZXh0ZXJuIHZvaWQgWHRN YW5hZ2VDaGlsZHJlbigKCiAgICBXaWRnZXRMaXN0IAkJICwKICAgIENhcmRpbmFsIAkJIAoKKTsK CmV4dGVybiB2b2lkIFh0TWFuYWdlQ2hpbGQoCgogICAgV2lkZ2V0IAkJIAoKKTsKCmV4dGVybiB2 b2lkIFh0VW5tYW5hZ2VDaGlsZHJlbigKCiAgICBXaWRnZXRMaXN0IAkJICwKICAgIENhcmRpbmFs IAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0VW5tYW5hZ2VDaGlsZCgKCiAgICBXaWRnZXQgCQkgCgop OwoKdHlwZWRlZiB2b2lkICgqWHREb0NoYW5nZVByb2MpKAoKICAgIFdpZGdldAkJICwKICAgIFdp ZGdldExpc3QJCSAsCiAgICBDYXJkaW5hbCAqCQkgLAogICAgV2lkZ2V0TGlzdAkJICwKICAgIENh cmRpbmFsICoJCSAsCiAgICBYdFBvaW50ZXIJCSAKCik7CgpleHRlcm4gdm9pZCBYdENoYW5nZU1h bmFnZWRTZXQoCgogICAgV2lkZ2V0TGlzdAkJICwKICAgIENhcmRpbmFsCQkgLAogICAgWHREb0No YW5nZVByb2MJICwKICAgIFh0UG9pbnRlcgkJICwKICAgIFdpZGdldExpc3QJCSAsCiAgICBDYXJk aW5hbAkJIAoKKTsKCn0gCgoKZXh0ZXJuICBXaWRnZXRDbGFzcyBjb21wb3NpdGVXaWRnZXRDbGFz czsKCgoKIAojIDE5NSAiL3Vzci9vcGVud2luL2luY2x1ZGUvWDExL0ludHJpbnNpYy5oIiAyCgoj IDEgIi91c3Ivb3Blbndpbi9pbmNsdWRlL1gxMS9Db25zdHJhaW50LmgiIDEKIAogCiAKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIHN0cnVj dCBfQ29uc3RyYWludENsYXNzUmVjICpDb25zdHJhaW50V2lkZ2V0Q2xhc3M7CgoKZXh0ZXJuICBX aWRnZXRDbGFzcyBjb25zdHJhaW50V2lkZ2V0Q2xhc3M7CgoKCiAKIyAxOTYgIi91c3Ivb3Blbndp bi9pbmNsdWRlL1gxMS9JbnRyaW5zaWMuaCIgMgoKIyAxICIvdXNyL29wZW53aW4vaW5jbHVkZS9Y MTEvT2JqZWN0LmgiIDEKIAogCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBfT2JqZWN0UmVjICpPYmplY3Q7CnR5cGVkZWYg c3RydWN0IF9PYmplY3RDbGFzc1JlYyAqT2JqZWN0Q2xhc3M7CgoKZXh0ZXJuICBXaWRnZXRDbGFz cyBvYmplY3RDbGFzczsKCgogCiMgMTk3ICIvdXNyL29wZW53aW4vaW5jbHVkZS9YMTEvSW50cmlu c2ljLmgiIDIKCiMgMSAiL3Vzci9vcGVud2luL2luY2x1ZGUvWDExL1JlY3RPYmouaCIgMQogCiAK IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVk ZWYgc3RydWN0IF9SZWN0T2JqUmVjICpSZWN0T2JqOwp0eXBlZGVmIHN0cnVjdCBfUmVjdE9iakNs YXNzUmVjICpSZWN0T2JqQ2xhc3M7CgoKZXh0ZXJuICBXaWRnZXRDbGFzcyByZWN0T2JqQ2xhc3M7 CgoKIAojIDE5OCAiL3Vzci9vcGVud2luL2luY2x1ZGUvWDExL0ludHJpbnNpYy5oIiAyCgoKdHlw ZWRlZiBzdHJ1Y3QgX1RyYW5zbGF0aW9uRGF0YSAqWHRUcmFuc2xhdGlvbnM7CnR5cGVkZWYgc3Ry dWN0IF9UcmFuc2xhdGlvbkRhdGEgKlh0QWNjZWxlcmF0b3JzOwp0eXBlZGVmIHVuc2lnbmVkIGlu dCBNb2RpZmllcnM7Cgp0eXBlZGVmIHZvaWQgKCpYdEFjdGlvblByb2MpKAoKICAgIFdpZGdldCAJ CSAsCiAgICBYRXZlbnQqCQkgLAogICAgU3RyaW5nKgkJICwKICAgIENhcmRpbmFsKgkJIAoKKTsK CnR5cGVkZWYgWHRBY3Rpb25Qcm9jKiBYdEJvdW5kQWN0aW9uczsKCnR5cGVkZWYgc3RydWN0IF9Y dEFjdGlvbnNSZWN7CiAgICBTdHJpbmcJIHN0cmluZzsKICAgIFh0QWN0aW9uUHJvYyBwcm9jOwp9 IFh0QWN0aW9uc1JlYzsKCnR5cGVkZWYgZW51bSB7CiAKIAogICAgWHRBZGRyZXNzLAkJIAogICAg WHRCYXNlT2Zmc2V0LAkgCiAgICBYdEltbWVkaWF0ZSwJIAogICAgWHRSZXNvdXJjZVN0cmluZywJ IAogICAgWHRSZXNvdXJjZVF1YXJrLAkgCiAgICBYdFdpZGdldEJhc2VPZmZzZXQsCSAKICAgIFh0 UHJvY2VkdXJlQXJnCSAKfSBYdEFkZHJlc3NNb2RlOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgWHRB ZGRyZXNzTW9kZSAgIGFkZHJlc3NfbW9kZTsKICAgIFh0UG9pbnRlcgkgICAgYWRkcmVzc19pZDsK ICAgIENhcmRpbmFsCSAgICBzaXplOwp9IFh0Q29udmVydEFyZ1JlYywgKlh0Q29udmVydEFyZ0xp c3Q7Cgp0eXBlZGVmIHZvaWQgKCpYdENvbnZlcnRBcmdQcm9jKSgKCiAgICBXaWRnZXQgCQkgLAog ICAgQ2FyZGluYWwqCQkgLAogICAgWHJtVmFsdWUqCQkgCgopOwoKdHlwZWRlZiBzdHJ1Y3Qgewog ICAgWHRHZW9tZXRyeU1hc2sgcmVxdWVzdF9tb2RlOwogICAgUG9zaXRpb24geCwgeTsKICAgIERp bWVuc2lvbiB3aWR0aCwgaGVpZ2h0LCBib3JkZXJfd2lkdGg7CiAgICBXaWRnZXQgc2libGluZzsK ICAgIGludCBzdGFja19tb2RlOyAgICAKfSBYdFdpZGdldEdlb21ldHJ5OwoKIAoKCiAKCgp0eXBl ZGVmIHZvaWQgKCpYdENvbnZlcnRlcikoICAKCiAgICBYcm1WYWx1ZSoJCSAsCiAgICBDYXJkaW5h bCoJCSAsCiAgICBYcm1WYWx1ZSoJCSAsCiAgICBYcm1WYWx1ZSoJCSAKCik7Cgp0eXBlZGVmIEJv b2xlYW4gKCpYdFR5cGVDb252ZXJ0ZXIpKAoKICAgIERpc3BsYXkqCQkgLAogICAgWHJtVmFsdWUq CQkgLAogICAgQ2FyZGluYWwqCQkgLAogICAgWHJtVmFsdWUqCQkgLAogICAgWHJtVmFsdWUqCQkg LAogICAgWHRQb2ludGVyKgkJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKlh0RGVzdHJ1Y3RvcikoWHRB cHBDb250ZXh0LCBYcm1WYWx1ZSAqLCBYdFBvaW50ZXIsIFhybVZhbHVlICosIENhcmRpbmFsICop OwoKdHlwZWRlZiBYdFBvaW50ZXIgKCpYdFJlcGxpY2F0b3IpKFh0UG9pbnRlcik7Cgp0eXBlZGVm IE9wYXF1ZSBYdENhY2hlUmVmOwoKdHlwZWRlZiBPcGFxdWUgWHRBY3Rpb25Ib29rSWQ7Cgp0eXBl ZGVmIHZvaWQgKCpYdEFjdGlvbkhvb2tQcm9jKSgKCiAgICBXaWRnZXQJCSAsCiAgICBYdFBvaW50 ZXIJCSAsCiAgICBTdHJpbmcJCSAsCiAgICBYRXZlbnQqCQkgLAogICAgU3RyaW5nKgkJICwKICAg IENhcmRpbmFsKgkJIAoKKTsKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBYdEJsb2NrSG9va0lkOwoK dHlwZWRlZiB2b2lkICgqWHRCbG9ja0hvb2tQcm9jKSgKCiAgICBYdFBvaW50ZXIJCSAKCik7Cgp0 eXBlZGVmIHZvaWQgKCpYdEtleVByb2MpKAoKICAgIERpc3BsYXkqCQkgLAogICAgdW5zaWduZWQg aW50ICAJCSAsCiAgICBNb2RpZmllcnMJCSAsCiAgICBNb2RpZmllcnMqCQkgLAogICAgS2V5U3lt KgkJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKlh0Q2FzZVByb2MpKAoKICAgIERpc3BsYXkqCQkgLAog ICAgS2V5U3ltCQkgLAogICAgS2V5U3ltKgkJICwKICAgIEtleVN5bSoJCSAKCik7Cgp0eXBlZGVm IHZvaWQgKCpYdEV2ZW50SGFuZGxlcikoCgogICAgV2lkZ2V0IAkJICwKICAgIFh0UG9pbnRlciAJ CSAsCiAgICBYRXZlbnQqCQkgLAogICAgQm9vbGVhbioJCSAKCik7CnR5cGVkZWYgdW5zaWduZWQg bG9uZyBFdmVudE1hc2s7Cgp0eXBlZGVmIGVudW0ge1h0TGlzdEhlYWQsIFh0TGlzdFRhaWwgfSBY dExpc3RQb3NpdGlvbjsKCnR5cGVkZWYgdW5zaWduZWQgbG9uZwlYdElucHV0TWFzazsKCgoKCgp0 eXBlZGVmIHZvaWQgKCpYdFRpbWVyQ2FsbGJhY2tQcm9jKSgKCiAgICBYdFBvaW50ZXIgCQkgLAog ICAgWHRJbnRlcnZhbElkKgkgCgopOwoKdHlwZWRlZiB2b2lkICgqWHRJbnB1dENhbGxiYWNrUHJv YykoCgogICAgWHRQb2ludGVyIAkJICwKICAgIGludCoJCSAsCiAgICBYdElucHV0SWQqCQkgCgop OwoKdHlwZWRlZiB2b2lkICgqWHRTaWduYWxDYWxsYmFja1Byb2MpKAoKICAgIFh0UG9pbnRlcgkJ ICwKICAgIFh0U2lnbmFsSWQqCQkgCgopOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgU3RyaW5nCW5h bWU7CiAgICBYdEFyZ1ZhbAl2YWx1ZTsKfSBBcmcsICpBcmdMaXN0OwoKdHlwZWRlZiBYdFBvaW50 ZXIJWHRWYXJBcmdzTGlzdDsKCnR5cGVkZWYgdm9pZCAoKlh0Q2FsbGJhY2tQcm9jKSgKCiAgICBX aWRnZXQgCQkgLAogICAgWHRQb2ludGVyIAkJICwJIAogICAgWHRQb2ludGVyIAkJIAkgCgopOwoK dHlwZWRlZiBzdHJ1Y3QgX1h0Q2FsbGJhY2tSZWMgewogICAgWHRDYWxsYmFja1Byb2MgIGNhbGxi YWNrOwogICAgWHRQb2ludGVyCSAgICBjbG9zdXJlOwp9IFh0Q2FsbGJhY2tSZWMsICpYdENhbGxi YWNrTGlzdDsKCnR5cGVkZWYgZW51bSB7CglYdENhbGxiYWNrTm9MaXN0LAoJWHRDYWxsYmFja0hh c05vbmUsCglYdENhbGxiYWNrSGFzU29tZQp9IFh0Q2FsbGJhY2tTdGF0dXM7Cgp0eXBlZGVmIGVu dW0gIHsKICAgIFh0R2VvbWV0cnlZZXMsCSAgIAogICAgWHRHZW9tZXRyeU5vLAkgICAKICAgIFh0 R2VvbWV0cnlBbG1vc3QsCSAgIAogICAgWHRHZW9tZXRyeURvbmUJICAgCn0gWHRHZW9tZXRyeVJl c3VsdDsKCnR5cGVkZWYgZW51bSB7WHRHcmFiTm9uZSwgWHRHcmFiTm9uZXhjbHVzaXZlLCBYdEdy YWJFeGNsdXNpdmV9IFh0R3JhYktpbmQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBXaWRnZXQgIHNo ZWxsX3dpZGdldDsKICAgIFdpZGdldCAgZW5hYmxlX3dpZGdldDsKfSBYdFBvcGRvd25JRFJlYywg Klh0UG9wZG93bklEOwoKdHlwZWRlZiBzdHJ1Y3QgX1h0UmVzb3VyY2UgewogICAgU3RyaW5nCXJl c291cmNlX25hbWU7CSAKICAgIFN0cmluZwlyZXNvdXJjZV9jbGFzczsJIAogICAgU3RyaW5nCXJl c291cmNlX3R5cGU7CSAKICAgIENhcmRpbmFsCXJlc291cmNlX3NpemU7CSAKICAgIENhcmRpbmFs CXJlc291cmNlX29mZnNldDsgCiAgICBTdHJpbmcJZGVmYXVsdF90eXBlOwkgCiAgICBYdFBvaW50 ZXIJZGVmYXVsdF9hZGRyOwkgCn0gWHRSZXNvdXJjZSwgKlh0UmVzb3VyY2VMaXN0OwoKdHlwZWRl ZiB2b2lkICgqWHRSZXNvdXJjZURlZmF1bHRQcm9jKSgKCiAgICBXaWRnZXQJICwKICAgIGludAkJ ICwKICAgIFhybVZhbHVlKgkgCgopOwoKdHlwZWRlZiBTdHJpbmcgKCpYdExhbmd1YWdlUHJvYyko CgogICAgRGlzcGxheSoJICwKICAgIFN0cmluZwkgLAogICAgWHRQb2ludGVyCSAKCik7Cgp0eXBl ZGVmIHZvaWQgKCpYdEVycm9yTXNnSGFuZGxlcikoCgogICAgU3RyaW5nIAkJICwKICAgIFN0cmlu ZwkJICwKICAgIFN0cmluZwkJICwKICAgIFN0cmluZwkJICwKICAgIFN0cmluZyoJCSAsCiAgICBD YXJkaW5hbCoJCSAKCik7Cgp0eXBlZGVmIHZvaWQgKCpYdEVycm9ySGFuZGxlcikoCgogIFN0cmlu ZwkJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKlh0Q3JlYXRlUG9wdXBDaGlsZFByb2MpKAoKICAgIFdp ZGdldAkgCgopOwoKdHlwZWRlZiBCb29sZWFuICgqWHRXb3JrUHJvYykoCgogICAgWHRQb2ludGVy IAkJIAkgCgopOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgY2hhciBtYXRjaDsKICAgIFN0cmluZyBz dWJzdGl0dXRpb247Cn0gU3Vic3RpdHV0aW9uUmVjLCAqU3Vic3RpdHV0aW9uOwoKdHlwZWRlZiBC b29sZWFuICgqWHRGaWxlUHJlZGljYXRlKSgKCiAgIFN0cmluZyAgCgopOwoKdHlwZWRlZiBYdFBv aW50ZXIgWHRSZXF1ZXN0SWQ7Cgp0eXBlZGVmIEJvb2xlYW4gKCpYdENvbnZlcnRTZWxlY3Rpb25Q cm9jKSgKCiAgICBXaWRnZXQgCQkgLAogICAgQXRvbSoJCSAsCiAgICBBdG9tKgkJICwKICAgIEF0 b20qCQkgLAogICAgWHRQb2ludGVyKgkJICwKICAgIHVuc2lnbmVkIGxvbmcqCSAsCiAgICBpbnQq CQkgCgopOwoKdHlwZWRlZiB2b2lkICgqWHRMb3NlU2VsZWN0aW9uUHJvYykoCgogICAgV2lkZ2V0 IAkJICwKICAgIEF0b20qCQkgCgopOwoKdHlwZWRlZiB2b2lkICgqWHRTZWxlY3Rpb25Eb25lUHJv YykoCgogICAgV2lkZ2V0IAkJICwKICAgIEF0b20qCQkgLAogICAgQXRvbSoJCSAKCik7Cgp0eXBl ZGVmIHZvaWQgKCpYdFNlbGVjdGlvbkNhbGxiYWNrUHJvYykoCgogICAgV2lkZ2V0IAkJICwKICAg IFh0UG9pbnRlciAJCSAsCiAgICBBdG9tKgkJICwKICAgIEF0b20qCQkgLAogICAgWHRQb2ludGVy IAkJICwKICAgIHVuc2lnbmVkIGxvbmcqCSAsCiAgICBpbnQqCQkgCgopOwoKdHlwZWRlZiB2b2lk ICgqWHRMb3NlU2VsZWN0aW9uSW5jclByb2MpKAoKICAgIFdpZGdldCAJCSAsCiAgICBBdG9tKgkJ ICwKICAgIFh0UG9pbnRlciAJCSAKCik7Cgp0eXBlZGVmIHZvaWQgKCpYdFNlbGVjdGlvbkRvbmVJ bmNyUHJvYykoCgogICAgV2lkZ2V0IAkJICwKICAgIEF0b20qCQkgLAogICAgQXRvbSoJCSAsCiAg ICBYdFJlcXVlc3RJZCoJICwKICAgIFh0UG9pbnRlciAJCSAKCik7Cgp0eXBlZGVmIEJvb2xlYW4g KCpYdENvbnZlcnRTZWxlY3Rpb25JbmNyUHJvYykoCgogICAgV2lkZ2V0IAkJICwKICAgIEF0b20q CQkgLAogICAgQXRvbSoJCSAsCiAgICBBdG9tKgkJICwKICAgIFh0UG9pbnRlcioJCSAsCiAgICB1 bnNpZ25lZCBsb25nKgkgLAogICAgaW50KgkJICwKICAgIHVuc2lnbmVkIGxvbmcqCSAsCiAgICBY dFBvaW50ZXIgCQkgLAogICAgWHRSZXF1ZXN0SWQqCSAKCik7Cgp0eXBlZGVmIHZvaWQgKCpYdENh bmNlbENvbnZlcnRTZWxlY3Rpb25Qcm9jKSgKCiAgICBXaWRnZXQgCQkgLAogICAgQXRvbSoJCSAs CiAgICBBdG9tKgkJICwKICAgIFh0UmVxdWVzdElkKgkgLAogICAgWHRQb2ludGVyIAkJIAoKKTsK CnR5cGVkZWYgQm9vbGVhbiAoKlh0RXZlbnREaXNwYXRjaFByb2MpKAoKICAgIFhFdmVudCoJCSAK Cik7Cgp0eXBlZGVmIHZvaWQgKCpYdEV4dGVuc2lvblNlbGVjdFByb2MpKAoKICAgIFdpZGdldAkJ ICwKICAgIGludCoJCSAsCiAgICBYdFBvaW50ZXIqCQkgLAogICAgaW50CQkJICwKICAgIFh0UG9p bnRlcgkJIAoKKTsKCiAKCgoKCgpleHRlcm4gIkMiIHsgCgpleHRlcm4gQm9vbGVhbiBYdENvbnZl cnRBbmRTdG9yZSgKCiAgICBXaWRnZXQgCQkgLAogICAgY29uc3QgIGNoYXIqICAJICwKICAgIFhy bVZhbHVlKgkJICwKICAgIGNvbnN0ICBjaGFyKiAgCSAsCiAgICBYcm1WYWx1ZSoJCSAKCik7Cgpl eHRlcm4gQm9vbGVhbiBYdENhbGxDb252ZXJ0ZXIoCgogICAgRGlzcGxheSoJCSAsCiAgICBYdFR5 cGVDb252ZXJ0ZXIgCSAsCiAgICBYcm1WYWx1ZVB0ciAJICwKICAgIENhcmRpbmFsIAkJICwKICAg IFhybVZhbHVlUHRyIAkgLAogICAgWHJtVmFsdWUqCQkgLAogICAgWHRDYWNoZVJlZioJCSAKCik7 CgpleHRlcm4gQm9vbGVhbiBYdERpc3BhdGNoRXZlbnQoCgogICAgWEV2ZW50KiAJCSAKCik7Cgpl eHRlcm4gQm9vbGVhbiBYdENhbGxBY2NlcHRGb2N1cygKCiAgICBXaWRnZXQgCQkgLAogICAgVGlt ZSoJCSAKCik7CgpleHRlcm4gQm9vbGVhbiBYdFBlZWtFdmVudCggIAoKICAgIFhFdmVudCoJCSAK Cik7CgpleHRlcm4gQm9vbGVhbiBYdEFwcFBlZWtFdmVudCgKCiAgICBYdEFwcENvbnRleHQgCSAs CiAgICBYRXZlbnQqCQkgCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRJc1N1YmNsYXNzKAoKICAgIFdp ZGdldCAJCSAsCiAgICBXaWRnZXRDbGFzcyAJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0SXNPYmpl Y3QoCgogICAgV2lkZ2V0IAkJIAoKKTsKCmV4dGVybiBCb29sZWFuIF9YdENoZWNrU3ViY2xhc3NG bGFnKCAgCgogICAgV2lkZ2V0CQkgLAogICAgdW5zaWduZWQgaW50IAkJIAoKKTsKCmV4dGVybiBC b29sZWFuIF9YdElzU3ViY2xhc3NPZiggIAoKICAgIFdpZGdldAkJICwKICAgIFdpZGdldENsYXNz CQkgLAogICAgV2lkZ2V0Q2xhc3MJCSAsCiAgICB1bnNpZ25lZCBpbnQgCQkgCgopOwoKZXh0ZXJu IEJvb2xlYW4gWHRJc01hbmFnZWQoCgogICAgV2lkZ2V0IAkJIAoKKTsKCmV4dGVybiBCb29sZWFu IFh0SXNSZWFsaXplZCgKCiAgICBXaWRnZXQgCQkgCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRJc1Nl bnNpdGl2ZSgKCiAgICBXaWRnZXQgCQkgCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRPd25TZWxlY3Rp b24oCgogICAgV2lkZ2V0IAkJICwKICAgIEF0b20gCQkgLAogICAgVGltZSAJCSAsCiAgICBYdENv bnZlcnRTZWxlY3Rpb25Qcm9jICAsCiAgICBYdExvc2VTZWxlY3Rpb25Qcm9jCSAsCiAgICBYdFNl bGVjdGlvbkRvbmVQcm9jICAKCik7CgpleHRlcm4gQm9vbGVhbiBYdE93blNlbGVjdGlvbkluY3Jl bWVudGFsKAoKICAgIFdpZGdldCAJCSAsCiAgICBBdG9tIAkJICwKICAgIFRpbWUgCQkgLAogICAg WHRDb252ZXJ0U2VsZWN0aW9uSW5jclByb2MJICwKICAgIFh0TG9zZVNlbGVjdGlvbkluY3JQcm9j CSAsCiAgICBYdFNlbGVjdGlvbkRvbmVJbmNyUHJvYwkgLAogICAgWHRDYW5jZWxDb252ZXJ0U2Vs ZWN0aW9uUHJvYyAgLAogICAgWHRQb2ludGVyIAkJIAoKKTsKCmV4dGVybiBYdEdlb21ldHJ5UmVz dWx0IFh0TWFrZVJlc2l6ZVJlcXVlc3QoCgogICAgV2lkZ2V0IAkJICwKICAgIHVuc2lnbmVkIGlu dCAJICwKICAgIHVuc2lnbmVkIGludCAJICwKICAgIERpbWVuc2lvbioJCSAsCiAgICBEaW1lbnNp b24qCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRUcmFuc2xhdGVDb29yZHMoCgogICAgV2lkZ2V0IAkJ ICwKICAgIGludCAJCSAsCiAgICBpbnQgCQkgLAogICAgUG9zaXRpb24qCQkgLAogICAgUG9zaXRp b24qCQkgCgopOwoKZXh0ZXJuIEtleVN5bSogWHRHZXRLZXlzeW1UYWJsZSgKCiAgICBEaXNwbGF5 KgkJICwKICAgIEtleUNvZGUqCQkgLAogICAgaW50KgkJIAoKKTsKCmV4dGVybiB2b2lkIFh0S2V5 c3ltVG9LZXljb2RlTGlzdCgKCiAgICBEaXNwbGF5KgkJICwKICAgIEtleVN5bSAJCSAsCiAgICBL ZXlDb2RlKioJCSAsCiAgICBDYXJkaW5hbCoJCSAKCik7CgpleHRlcm4gdm9pZCBYdFN0cmluZ0Nv bnZlcnNpb25XYXJuaW5nKCAgCgogICAgY29uc3QgIGNoYXIqIAkgLAogICAgY29uc3QgIGNoYXIq IAkgCgopOwoKZXh0ZXJuIHZvaWQgWHREaXNwbGF5U3RyaW5nQ29udmVyc2lvbldhcm5pbmcoCgog ICAgRGlzcGxheSoJIAkgLAogICAgY29uc3QgIGNoYXIqIAkgLAogICAgY29uc3QgIGNoYXIqIAkg CgopOwoKCmV4dGVybiAgWHRDb252ZXJ0QXJnUmVjIGNvbnN0IGNvbG9yQ29udmVydEFyZ3NbXTsK ZXh0ZXJuICBYdENvbnZlcnRBcmdSZWMgY29uc3Qgc2NyZWVuQ29udmVydEFyZ1tdOwoKCgoKCmV4 dGVybiB2b2lkIFh0QXBwQWRkQ29udmVydGVyKCAgCgogICAgWHRBcHBDb250ZXh0CSAsCiAgICBj b25zdCAgY2hhciogCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBYdENvbnZlcnRlciAJICwK ICAgIFh0Q29udmVydEFyZ0xpc3QJICwKICAgIENhcmRpbmFsIAkJIAoKKTsKCmV4dGVybiB2b2lk IFh0QWRkQ29udmVydGVyKCAgCgogICAgY29uc3QgIGNoYXIqIAkgLAogICAgY29uc3QgIGNoYXIq ICAJICwKICAgIFh0Q29udmVydGVyIAkgLAogICAgWHRDb252ZXJ0QXJnTGlzdCAJICwKICAgIENh cmRpbmFsIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0U2V0VHlwZUNvbnZlcnRlcigKCiAgICBjb25z dCAgY2hhciogIAkgLAogICAgY29uc3QgIGNoYXIqICAJICwKICAgIFh0VHlwZUNvbnZlcnRlciAJ ICwKICAgIFh0Q29udmVydEFyZ0xpc3QgCSAsCiAgICBDYXJkaW5hbCAJCSAsCiAgICBYdENhY2hl VHlwZSAJICwKICAgIFh0RGVzdHJ1Y3RvciAJIAoKKTsKCmV4dGVybiB2b2lkIF9YdFNldFR5cGVD b252ZXJ0ZXIoCgogICAgY29uc3QgIGNoYXIqICAJICwKICAgIGNvbnN0ICBjaGFyKiAgCSAsCiAg ICBYdFR5cGVDb252ZXJ0ZXIgCSAsCiAgICBYdENvbnZlcnRBcmdMaXN0IAkgLAogICAgQ2FyZGlu YWwgCQkgLAogICAgWHRDYWNoZVR5cGUgCSAsCiAgICBYdERlc3RydWN0b3IgCSAsCiAgICBYdFJl cGxpY2F0b3IgCSAKCik7CgpleHRlcm4gdm9pZCBYdEFwcFNldFR5cGVDb252ZXJ0ZXIoCgogICAg WHRBcHBDb250ZXh0IAkgLAogICAgY29uc3QgIGNoYXIqICAJICwKICAgIGNvbnN0ICBjaGFyKiAg CSAsCiAgICBYdFR5cGVDb252ZXJ0ZXIgCSAsCiAgICBYdENvbnZlcnRBcmdMaXN0IAkgLAogICAg Q2FyZGluYWwgCQkgLAogICAgWHRDYWNoZVR5cGUgCSAsCiAgICBYdERlc3RydWN0b3IgCSAKCik7 CgpleHRlcm4gdm9pZCBYdENvbnZlcnQoICAKCiAgICBXaWRnZXQgCQkgLAogICAgY29uc3QgIGNo YXIqICAJICwKICAgIFhybVZhbHVlKgkJICwKICAgIGNvbnN0ICBjaGFyKiAgCSAsCiAgICBYcm1W YWx1ZSoJCSAKCik7CgpleHRlcm4gdm9pZCBYdERpcmVjdENvbnZlcnQoICAKCiAgICBYdENvbnZl cnRlciAJICwKICAgIFhybVZhbHVlUHRyIAkgLAogICAgQ2FyZGluYWwgCQkgLAogICAgWHJtVmFs dWVQdHIgCSAsCiAgICBYcm1WYWx1ZSoJCSAKCik7CgogCgoKCgoKZXh0ZXJuIFh0VHJhbnNsYXRp b25zIFh0UGFyc2VUcmFuc2xhdGlvblRhYmxlKAoKICAgIGNvbnN0ICBjaGFyKiAJIAoKKTsKCmV4 dGVybiBYdEFjY2VsZXJhdG9ycyBYdFBhcnNlQWNjZWxlcmF0b3JUYWJsZSgKCiAgICBjb25zdCAg Y2hhciogCSAKCik7CgpleHRlcm4gdm9pZCBYdE92ZXJyaWRlVHJhbnNsYXRpb25zKAoKICAgIFdp ZGdldCAJCSAsCiAgICBYdFRyYW5zbGF0aW9ucyAJIAoKKTsKCmV4dGVybiB2b2lkIFh0QXVnbWVu dFRyYW5zbGF0aW9ucygKCiAgICBXaWRnZXQgCQkgLAogICAgWHRUcmFuc2xhdGlvbnMgCSAKCik7 CgpleHRlcm4gdm9pZCBYdEluc3RhbGxBY2NlbGVyYXRvcnMoCgogICAgV2lkZ2V0IAkJICwKICAg IFdpZGdldAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0SW5zdGFsbEFsbEFjY2VsZXJhdG9ycygKCiAg ICBXaWRnZXQgCQkgLAogICAgV2lkZ2V0CQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRVbmluc3RhbGxU cmFuc2xhdGlvbnMoCgogICAgV2lkZ2V0IAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0QXBwQWRkQWN0 aW9ucygKCiAgICBYdEFwcENvbnRleHQgCSAsCiAgICBYdEFjdGlvbkxpc3QgCSAsCiAgICBDYXJk aW5hbCAJCSAKCik7CgpleHRlcm4gdm9pZCBYdEFkZEFjdGlvbnMoICAKCiAgICBYdEFjdGlvbkxp c3QgCSAsCiAgICBDYXJkaW5hbCAJCSAKCik7CgpleHRlcm4gWHRBY3Rpb25Ib29rSWQgWHRBcHBB ZGRBY3Rpb25Ib29rKAoKICAgIFh0QXBwQ29udGV4dCAJICwKICAgIFh0QWN0aW9uSG9va1Byb2Mg CSAsCiAgICBYdFBvaW50ZXIgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRSZW1vdmVBY3Rpb25Ib29r KAoKICAgIFh0QWN0aW9uSG9va0lkIAkgCgopOwoKZXh0ZXJuIHZvaWQgWHRHZXRBY3Rpb25MaXN0 KAoKICAgIFdpZGdldENsYXNzCQkgLAogICAgWHRBY3Rpb25MaXN0KgkgLAogICAgQ2FyZGluYWwq CQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRDYWxsQWN0aW9uUHJvYygKCiAgICBXaWRnZXQJCSAsCiAg ICBjb25zdCAgY2hhciogCSAsCiAgICBYRXZlbnQqCQkgLAogICAgU3RyaW5nKgkJICwKICAgIENh cmRpbmFsCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRSZWdpc3RlckdyYWJBY3Rpb24oCgogICAgWHRB Y3Rpb25Qcm9jIAkgLAogICAgaW50ICAJCSAsCiAgICB1bnNpZ25lZCBpbnQgCSAsCiAgICBpbnQJ CQkgLAogICAgaW50CSAJCSAKCik7CgpleHRlcm4gdm9pZCBYdFNldE11bHRpQ2xpY2tUaW1lKAoK ICAgIERpc3BsYXkqCQkgLAogICAgaW50IAkJIAoKKTsKCmV4dGVybiBpbnQgWHRHZXRNdWx0aUNs aWNrVGltZSgKCiAgICBEaXNwbGF5KgkJIAoKKTsKCmV4dGVybiBLZXlTeW0gWHRHZXRBY3Rpb25L ZXlzeW0oCgogICAgWEV2ZW50KgkJICwKICAgIE1vZGlmaWVycyoJCSAKCik7CgogCgoKCgoKZXh0 ZXJuIHZvaWQgWHRUcmFuc2xhdGVLZXljb2RlKAoKICAgIERpc3BsYXkqCQkgLAogICAgdW5zaWdu ZWQgaW50ICAJCSAsCiAgICBNb2RpZmllcnMgCQkgLAogICAgTW9kaWZpZXJzKgkJICwKICAgIEtl eVN5bSoJCSAKCik7CgpleHRlcm4gdm9pZCBYdFRyYW5zbGF0ZUtleSgKCiAgICBEaXNwbGF5KgkJ ICwKICAgIHVuc2lnbmVkIGludCAJCSAsCiAgICBNb2RpZmllcnMJCSAsCiAgICBNb2RpZmllcnMq CQkgLAogICAgS2V5U3ltKgkJIAoKKTsKCmV4dGVybiB2b2lkIFh0U2V0S2V5VHJhbnNsYXRvcigK CiAgICBEaXNwbGF5KgkJICwKICAgIFh0S2V5UHJvYyAJCSAKCik7CgpleHRlcm4gdm9pZCBYdFJl Z2lzdGVyQ2FzZUNvbnZlcnRlcigKCiAgICBEaXNwbGF5KgkJICwKICAgIFh0Q2FzZVByb2MgCQkg LAogICAgS2V5U3ltIAkJICwKICAgIEtleVN5bSAJCSAKCik7CgpleHRlcm4gdm9pZCBYdENvbnZl cnRDYXNlKAoKICAgIERpc3BsYXkqCQkgLAogICAgS2V5U3ltIAkJICwKICAgIEtleVN5bSoJCSAs CiAgICBLZXlTeW0qCQkgCgopOwoKIAoKCgoKCiAKCgoKCmV4dGVybiB2b2lkIFh0QWRkRXZlbnRI YW5kbGVyKAoKICAgIFdpZGdldCAJCSAsCiAgICBFdmVudE1hc2sgCQkgLAogICAgaW50ICAJCSAs CiAgICBYdEV2ZW50SGFuZGxlciAJICwKICAgIFh0UG9pbnRlciAJCSAKCik7CgpleHRlcm4gdm9p ZCBYdFJlbW92ZUV2ZW50SGFuZGxlcigKCiAgICBXaWRnZXQgCQkgLAogICAgRXZlbnRNYXNrIAkJ ICwKICAgIGludCAgCQkgLAogICAgWHRFdmVudEhhbmRsZXIgCSAsCiAgICBYdFBvaW50ZXIgCQkg CgopOwoKZXh0ZXJuIHZvaWQgWHRBZGRSYXdFdmVudEhhbmRsZXIoCgogICAgV2lkZ2V0IAkJICwK ICAgIEV2ZW50TWFzayAJCSAsCiAgICBpbnQgIAkJICwKICAgIFh0RXZlbnRIYW5kbGVyIAkgLAog ICAgWHRQb2ludGVyIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0UmVtb3ZlUmF3RXZlbnRIYW5kbGVy KAoKICAgIFdpZGdldCAJCSAsCiAgICBFdmVudE1hc2sgCQkgLAogICAgaW50ICAJCSAsCiAgICBY dEV2ZW50SGFuZGxlciAJICwKICAgIFh0UG9pbnRlciAJCSAKCik7CgpleHRlcm4gdm9pZCBYdElu c2VydEV2ZW50SGFuZGxlcigKCiAgICBXaWRnZXQgCQkgLAogICAgRXZlbnRNYXNrIAkJICwKICAg IGludCAgCQkgLAogICAgWHRFdmVudEhhbmRsZXIgCSAsCiAgICBYdFBvaW50ZXIgCQkgLAogICAg WHRMaXN0UG9zaXRpb24gCSAKCik7CgpleHRlcm4gdm9pZCBYdEluc2VydFJhd0V2ZW50SGFuZGxl cigKCiAgICBXaWRnZXQgCQkgLAogICAgRXZlbnRNYXNrIAkJICwKICAgIGludCAgCQkgLAogICAg WHRFdmVudEhhbmRsZXIgCSAsCiAgICBYdFBvaW50ZXIgCQkgLAogICAgWHRMaXN0UG9zaXRpb24g CSAKCik7CgpleHRlcm4gWHRFdmVudERpc3BhdGNoUHJvYyBYdFNldEV2ZW50RGlzcGF0Y2hlcigK CiAgICBEaXNwbGF5KgkJICwKICAgIGludAkJCSAsCiAgICBYdEV2ZW50RGlzcGF0Y2hQcm9jCSAK Cik7CgpleHRlcm4gQm9vbGVhbiBYdERpc3BhdGNoRXZlbnRUb1dpZGdldCgKCiAgICBXaWRnZXQJ CSAsCiAgICBYRXZlbnQqCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRJbnNlcnRFdmVudFR5cGVIYW5k bGVyKAoKICAgIFdpZGdldAkJICwKICAgIGludAkJCSAsCiAgICBYdFBvaW50ZXIJCSAsCiAgICBY dEV2ZW50SGFuZGxlcgkgLAogICAgWHRQb2ludGVyCQkgLAogICAgWHRMaXN0UG9zaXRpb24JIAoK KTsKCmV4dGVybiB2b2lkIFh0UmVtb3ZlRXZlbnRUeXBlSGFuZGxlcigKCiAgICBXaWRnZXQJCSAs CiAgICBpbnQJCQkgLAogICAgWHRQb2ludGVyCQkgLAogICAgWHRFdmVudEhhbmRsZXIJICwKICAg IFh0UG9pbnRlcgkJIAoKKTsKCmV4dGVybiBFdmVudE1hc2sgWHRCdWlsZEV2ZW50TWFzaygKCiAg ICBXaWRnZXQgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRSZWdpc3RlckV4dGVuc2lvblNlbGVjdG9y KAoKICAgIERpc3BsYXkqCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICBYdEV4dGVu c2lvblNlbGVjdFByb2MgICwKICAgIFh0UG9pbnRlcgkJIAoKKTsKCmV4dGVybiB2b2lkIFh0QWRk R3JhYigKCiAgICBXaWRnZXQgCQkgLAogICAgaW50ICAJCSAsCiAgICBpbnQgIAkJIAoKKTsKCmV4 dGVybiB2b2lkIFh0UmVtb3ZlR3JhYigKCiAgICBXaWRnZXQgCQkgCgopOwoKZXh0ZXJuIHZvaWQg WHRQcm9jZXNzRXZlbnQoICAKCiAgICBYdElucHV0TWFzayAJCSAKCik7CgpleHRlcm4gdm9pZCBY dEFwcFByb2Nlc3NFdmVudCgKCiAgICBYdEFwcENvbnRleHQgCQkgLAogICAgWHRJbnB1dE1hc2sg CQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRNYWluTG9vcCggIAoKICAgIHZvaWQKCik7CgpleHRlcm4g dm9pZCBYdEFwcE1haW5Mb29wKAoKICAgIFh0QXBwQ29udGV4dCAJCSAKCik7CgpleHRlcm4gdm9p ZCBYdEFkZEV4cG9zdXJlVG9SZWdpb24oCgogICAgWEV2ZW50KgkJICwKICAgIFJlZ2lvbiAJCSAK Cik7CgpleHRlcm4gdm9pZCBYdFNldEtleWJvYXJkRm9jdXMoCgogICAgV2lkZ2V0CQkgLAogICAg V2lkZ2V0IAkJIAoKKTsKCmV4dGVybiBXaWRnZXQgWHRHZXRLZXlib2FyZEZvY3VzV2lkZ2V0KAoK ICAgIFdpZGdldAkJIAoKKTsKCmV4dGVybiBYRXZlbnQqIFh0TGFzdEV2ZW50UHJvY2Vzc2VkKAoK ICAgIERpc3BsYXkqCQkgCgopOwoKZXh0ZXJuIFRpbWUgWHRMYXN0VGltZXN0YW1wUHJvY2Vzc2Vk KAoKICAgIERpc3BsYXkqCQkgCgopOwoKIAoKCgoKCmV4dGVybiBYdEludGVydmFsSWQgWHRBZGRU aW1lT3V0KCAgCgogICAgdW5zaWduZWQgbG9uZyAJICwKICAgIFh0VGltZXJDYWxsYmFja1Byb2Mg ICwKICAgIFh0UG9pbnRlciAJCSAKCik7CgpleHRlcm4gWHRJbnRlcnZhbElkIFh0QXBwQWRkVGlt ZU91dCgKCiAgICBYdEFwcENvbnRleHQgCSAsCiAgICB1bnNpZ25lZCBsb25nIAkgLAogICAgWHRU aW1lckNhbGxiYWNrUHJvYyAgLAogICAgWHRQb2ludGVyIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0 UmVtb3ZlVGltZU91dCgKCiAgICBYdEludGVydmFsSWQgCSAKCik7CgpleHRlcm4gWHRJbnB1dElk IFh0QWRkSW5wdXQoICAKCiAgICBpbnQgCQkgLAogICAgWHRQb2ludGVyIAkJICwKICAgIFh0SW5w dXRDYWxsYmFja1Byb2MgICwKICAgIFh0UG9pbnRlciAJCSAKCik7CgpleHRlcm4gWHRJbnB1dElk IFh0QXBwQWRkSW5wdXQoCgogICAgWHRBcHBDb250ZXh0ICAgICAgIAkgLAogICAgaW50IAkJICwK ICAgIFh0UG9pbnRlciAJCSAsCiAgICBYdElucHV0Q2FsbGJhY2tQcm9jICAsCiAgICBYdFBvaW50 ZXIgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRSZW1vdmVJbnB1dCgKCiAgICBYdElucHV0SWQgCQkg CgopOwoKZXh0ZXJuIFh0SW5wdXRJZCBYdEFwcEFkZFNpZ25hbCgKCiAgICBYdEFwcENvbnRleHQg ICAgICAgCSAsCiAgICBYdFNpZ25hbENhbGxiYWNrUHJvYyAgLAogICAgWHRQb2ludGVyIAkJIAoK KTsKCmV4dGVybiB2b2lkIFh0UmVtb3ZlU2lnbmFsKAoKICAgIFh0U2lnbmFsSWQgCQkgCgopOwoK ZXh0ZXJuIHZvaWQgWHROb3RpY2VTaWduYWwoCgogICAgWHRTaWduYWxJZAkJIAoKKTsKCmV4dGVy biB2b2lkIFh0TmV4dEV2ZW50KCAgCgogICAgWEV2ZW50KiAJCSAKCik7CgpleHRlcm4gdm9pZCBY dEFwcE5leHRFdmVudCgKCiAgICBYdEFwcENvbnRleHQgCSAsCiAgICBYRXZlbnQqCQkgCgopOwoK CgoKCgoKZXh0ZXJuIFh0SW5wdXRNYXNrIFh0UGVuZGluZyggIAoKICAgIHZvaWQKCik7CgpleHRl cm4gWHRJbnB1dE1hc2sgWHRBcHBQZW5kaW5nKAoKICAgIFh0QXBwQ29udGV4dCAJIAoKKTsKCmV4 dGVybiBYdEJsb2NrSG9va0lkIFh0QXBwQWRkQmxvY2tIb29rKAoKICAgIFh0QXBwQ29udGV4dCAJ ICwKICAgIFh0QmxvY2tIb29rUHJvYyAJICwKICAgIFh0UG9pbnRlciAJCSAKCik7CgpleHRlcm4g dm9pZCBYdFJlbW92ZUJsb2NrSG9vaygKCiAgICBYdEJsb2NrSG9va0lkIAkgCgopOwoKIAoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuIHZvaWQgWHRSZWFsaXplV2lkZ2V0KAoKICAg IFdpZGdldCAJCSAKCik7Cgp2b2lkIFh0VW5yZWFsaXplV2lkZ2V0KAoKICAgIFdpZGdldCAJCSAK Cik7CgpleHRlcm4gdm9pZCBYdERlc3Ryb3lXaWRnZXQoCgogICAgV2lkZ2V0IAkJIAoKKTsKCmV4 dGVybiB2b2lkIFh0U2V0U2Vuc2l0aXZlKAoKICAgIFdpZGdldCAJCSAsCiAgICBpbnQgIAkJIAoK KTsKCmV4dGVybiB2b2lkIFh0U2V0TWFwcGVkV2hlbk1hbmFnZWQoCgogICAgV2lkZ2V0IAkJICwK ICAgIGludCAgCQkgCgopOwoKZXh0ZXJuIFdpZGdldCBYdE5hbWVUb1dpZGdldCgKCiAgICBXaWRn ZXQgCQkgLAogICAgY29uc3QgIGNoYXIqIAkgCgopOwoKZXh0ZXJuIFdpZGdldCBYdFdpbmRvd1Rv V2lkZ2V0KAoKICAgIERpc3BsYXkqCQkgLAogICAgV2luZG93IAkJIAoKKTsKCmV4dGVybiBYdFBv aW50ZXIgWHRHZXRDbGFzc0V4dGVuc2lvbigKCiAgICBXaWRnZXRDbGFzcwkJICwKICAgIENhcmRp bmFsCQkgLAogICAgWHJtUXVhcmsJCSAsCiAgICBsb25nCQkgLAogICAgQ2FyZGluYWwJCSAKCik7 CgogCgoKCgoKCgoKCmV4dGVybiBBcmdMaXN0IFh0TWVyZ2VBcmdMaXN0cygKCiAgICBBcmdMaXN0 IAkJICwKICAgIENhcmRpbmFsIAkJICwKICAgIEFyZ0xpc3QgCQkgLAogICAgQ2FyZGluYWwgCQkg CgopOwoKIAoKCgoKCgoKCmV4dGVybiBYdFZhckFyZ3NMaXN0IFh0VmFDcmVhdGVBcmdzTGlzdCgK CiAgICBYdFBvaW50ZXIJCSAsIC4uLgoKKTsKCiAKCgoKCgoKCiAKCmV4dGVybiBEaXNwbGF5ICpY dERpc3BsYXkoCgogICAgV2lkZ2V0IAkJIAoKKTsKCmV4dGVybiBEaXNwbGF5ICpYdERpc3BsYXlP Zk9iamVjdCgKCiAgICBXaWRnZXQgCQkgCgopOwoKZXh0ZXJuIFNjcmVlbiAqWHRTY3JlZW4oCgog ICAgV2lkZ2V0IAkJIAoKKTsKCmV4dGVybiBTY3JlZW4gKlh0U2NyZWVuT2ZPYmplY3QoCgogICAg V2lkZ2V0IAkJIAoKKTsKCmV4dGVybiBXaW5kb3cgWHRXaW5kb3coCgogICAgV2lkZ2V0IAkJIAoK KTsKCmV4dGVybiBXaW5kb3cgWHRXaW5kb3dPZk9iamVjdCgKCiAgICBXaWRnZXQgCQkgCgopOwoK ZXh0ZXJuIFN0cmluZyBYdE5hbWUoCgogICAgV2lkZ2V0IAkJIAoKKTsKCmV4dGVybiBXaWRnZXRD bGFzcyBYdFN1cGVyY2xhc3MoCgogICAgV2lkZ2V0IAkJIAoKKTsKCmV4dGVybiBXaWRnZXRDbGFz cyBYdENsYXNzKAoKICAgIFdpZGdldCAJCSAKCik7CgpleHRlcm4gV2lkZ2V0IFh0UGFyZW50KAoK ICAgIFdpZGdldCAJCSAKCik7CgoKCgoKCgpleHRlcm4gdm9pZCBYdEFkZENhbGxiYWNrKAoKICAg IFdpZGdldCAJCSAsCiAgICBjb25zdCAgY2hhciogIAkgLAogICAgWHRDYWxsYmFja1Byb2MgCSAs CiAgICBYdFBvaW50ZXIgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRSZW1vdmVDYWxsYmFjaygKCiAg ICBXaWRnZXQgCQkgLAogICAgY29uc3QgIGNoYXIqICAJICwKICAgIFh0Q2FsbGJhY2tQcm9jIAkg LAogICAgWHRQb2ludGVyIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0QWRkQ2FsbGJhY2tzKAoKICAg IFdpZGdldCAJCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBYdENhbGxiYWNrTGlzdCAJIAoK KTsKCmV4dGVybiB2b2lkIFh0UmVtb3ZlQ2FsbGJhY2tzKAoKICAgIFdpZGdldCAJCSAsCiAgICBj b25zdCAgY2hhciogIAkgLAogICAgWHRDYWxsYmFja0xpc3QgCSAKCik7CgpleHRlcm4gdm9pZCBY dFJlbW92ZUFsbENhbGxiYWNrcygKCiAgICBXaWRnZXQgCQkgLAogICAgY29uc3QgIGNoYXIqICAJ IAoKKTsKCgpleHRlcm4gdm9pZCBYdENhbGxDYWxsYmFja3MoCgogICAgV2lkZ2V0IAkJICwKICAg IGNvbnN0ICBjaGFyKiAgCSAsCiAgICBYdFBvaW50ZXIgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRD YWxsQ2FsbGJhY2tMaXN0KAoKICAgIFdpZGdldAkJICwKICAgIFh0Q2FsbGJhY2tMaXN0IAkgLAog ICAgWHRQb2ludGVyIAkJIAoKKTsKCmV4dGVybiBYdENhbGxiYWNrU3RhdHVzIFh0SGFzQ2FsbGJh Y2tzKAoKICAgIFdpZGdldCAJCSAsCiAgICBjb25zdCAgY2hhciogIAkgCgopOwoKIAoKCgoKCgpl eHRlcm4gWHRHZW9tZXRyeVJlc3VsdCBYdE1ha2VHZW9tZXRyeVJlcXVlc3QoCgogICAgV2lkZ2V0 IAkJICwKICAgIFh0V2lkZ2V0R2VvbWV0cnkqCSAsCiAgICBYdFdpZGdldEdlb21ldHJ5KgkgCgop OwoKZXh0ZXJuIFh0R2VvbWV0cnlSZXN1bHQgWHRRdWVyeUdlb21ldHJ5KAoKICAgIFdpZGdldCAJ CSAsCiAgICBYdFdpZGdldEdlb21ldHJ5KgkgLAogICAgWHRXaWRnZXRHZW9tZXRyeSoJIAoKKTsK CmV4dGVybiBXaWRnZXQgWHRDcmVhdGVQb3B1cFNoZWxsKAoKICAgIGNvbnN0ICBjaGFyKiAJICwK ICAgIFdpZGdldENsYXNzIAkgLAogICAgV2lkZ2V0IAkJICwKICAgIEFyZ0xpc3QgCQkgLAogICAg Q2FyZGluYWwgCQkgCgopOwoKZXh0ZXJuIFdpZGdldCBYdFZhQ3JlYXRlUG9wdXBTaGVsbCgKCiAg ICBjb25zdCAgY2hhciogCSAsCiAgICBXaWRnZXRDbGFzcwkJICwKICAgIFdpZGdldAkJICwKICAg IC4uLgoKKTsKCmV4dGVybiB2b2lkIFh0UG9wdXAoCgogICAgV2lkZ2V0IAkJICwKICAgIFh0R3Jh YktpbmQgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRQb3B1cFNwcmluZ0xvYWRlZCgKCiAgICBXaWRn ZXQgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRDYWxsYmFja05vbmUoCgogICAgV2lkZ2V0IAkJICwK ICAgIFh0UG9pbnRlciAJCSAsCiAgICBYdFBvaW50ZXIgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRD YWxsYmFja05vbmV4Y2x1c2l2ZSgKCiAgICBXaWRnZXQgCQkgLAogICAgWHRQb2ludGVyIAkJICwK ICAgIFh0UG9pbnRlciAJCSAKCik7CgpleHRlcm4gdm9pZCBYdENhbGxiYWNrRXhjbHVzaXZlKAoK ICAgIFdpZGdldCAJCSAsCiAgICBYdFBvaW50ZXIgCQkgLAogICAgWHRQb2ludGVyIAkJIAoKKTsK CmV4dGVybiB2b2lkIFh0UG9wZG93bigKCiAgICBXaWRnZXQgCQkgCgopOwoKZXh0ZXJuIHZvaWQg WHRDYWxsYmFja1BvcGRvd24oCgogICAgV2lkZ2V0IAkJICwKICAgIFh0UG9pbnRlciAJCSAsCiAg ICBYdFBvaW50ZXIgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRNZW51UG9wdXBBY3Rpb24oCgogICAg V2lkZ2V0IAkJICwKICAgIFhFdmVudCoJCSAsCiAgICBTdHJpbmcqCQkgLAogICAgQ2FyZGluYWwq CQkgCgopOwoKZXh0ZXJuIFdpZGdldCBYdENyZWF0ZVdpZGdldCgKCiAgICBjb25zdCAgY2hhciog IAkgLAogICAgV2lkZ2V0Q2xhc3MgCSAsCiAgICBXaWRnZXQgCQkgLAogICAgQXJnTGlzdCAJCSAs CiAgICBDYXJkaW5hbCAJCSAKCik7CgpleHRlcm4gV2lkZ2V0IFh0Q3JlYXRlTWFuYWdlZFdpZGdl dCgKCiAgICBjb25zdCAgY2hhciogIAkgLAogICAgV2lkZ2V0Q2xhc3MgCSAsCiAgICBXaWRnZXQg CQkgLAogICAgQXJnTGlzdCAJCSAsCiAgICBDYXJkaW5hbCAJCSAKCik7CgpleHRlcm4gV2lkZ2V0 IFh0VmFDcmVhdGVXaWRnZXQoCgogICAgY29uc3QgIGNoYXIqIAkgLAogICAgV2lkZ2V0Q2xhc3MJ CSAsCiAgICBXaWRnZXQJCSAsCiAgICAuLi4KCik7CgpleHRlcm4gV2lkZ2V0IFh0VmFDcmVhdGVN YW5hZ2VkV2lkZ2V0KAoKICAgIGNvbnN0ICBjaGFyKiAJICwKICAgIFdpZGdldENsYXNzCQkgLAog ICAgV2lkZ2V0CQkgLAogICAgLi4uCgopOwoKZXh0ZXJuIFdpZGdldCBYdENyZWF0ZUFwcGxpY2F0 aW9uU2hlbGwoICAKCiAgICBjb25zdCAgY2hhciogIAkgLAogICAgV2lkZ2V0Q2xhc3MgCSAsCiAg ICBBcmdMaXN0IAkJICwKICAgIENhcmRpbmFsIAkJIAoKKTsKCmV4dGVybiBXaWRnZXQgWHRBcHBD cmVhdGVTaGVsbCgKCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAg ICBXaWRnZXRDbGFzcyAJICwKICAgIERpc3BsYXkqCQkgLAogICAgQXJnTGlzdCAJCSAsCiAgICBD YXJkaW5hbCAJCSAKCik7CgpleHRlcm4gV2lkZ2V0IFh0VmFBcHBDcmVhdGVTaGVsbCgKCiAgICBj b25zdCAgY2hhciogCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBXaWRnZXRDbGFzcwkJICwK ICAgIERpc3BsYXkqCQkgLAogICAgLi4uCgopOwoKIAoKCgoKCmV4dGVybiB2b2lkIFh0VG9vbGtp dEluaXRpYWxpemUoCgogICAgdm9pZAoKKTsKCmV4dGVybiBYdExhbmd1YWdlUHJvYyBYdFNldExh bmd1YWdlUHJvYygKCiAgICBYdEFwcENvbnRleHQJICwKICAgIFh0TGFuZ3VhZ2VQcm9jCSAsCiAg ICBYdFBvaW50ZXIJCSAKCik7CgpleHRlcm4gdm9pZCBYdERpc3BsYXlJbml0aWFsaXplKAoKICAg IFh0QXBwQ29udGV4dCAJICwKICAgIERpc3BsYXkqCQkgLAogICAgY29uc3QgIGNoYXIqIAkgLAog ICAgY29uc3QgIGNoYXIqIAkgLAogICAgWHJtT3B0aW9uRGVzY1JlYyogCSAsCiAgICBDYXJkaW5h bCAJCSAsCiAgICBpbnQqCQkgLAogICAgY2hhcioqCQkgCgopOwoKZXh0ZXJuIFdpZGdldCBYdE9w ZW5BcHBsaWNhdGlvbigKCiAgICBYdEFwcENvbnRleHQqCSAsCiAgICBjb25zdCAgY2hhciogCSAs CiAgICBYcm1PcHRpb25EZXNjTGlzdCAJICwKICAgIENhcmRpbmFsIAkJICwKICAgIGludCoJCSAs CiAgICBTdHJpbmcqCQkgLAogICAgU3RyaW5nKgkJICwKICAgIFdpZGdldENsYXNzCQkgLAogICAg QXJnTGlzdCAJCSAsCiAgICBDYXJkaW5hbCAJCSAKCik7CgpleHRlcm4gV2lkZ2V0IFh0VmFPcGVu QXBwbGljYXRpb24oCgogICAgWHRBcHBDb250ZXh0KgkgLAogICAgY29uc3QgIGNoYXIqIAkgLAog ICAgWHJtT3B0aW9uRGVzY0xpc3QJICwKICAgIENhcmRpbmFsCQkgLAogICAgaW50KgkJICwKICAg IFN0cmluZyoJCSAsCiAgICBTdHJpbmcqCQkgLAogICAgV2lkZ2V0Q2xhc3MJCSAsCiAgICAuLi4K Cik7CgpleHRlcm4gV2lkZ2V0IFh0QXBwSW5pdGlhbGl6ZSggIAoKICAgIFh0QXBwQ29udGV4dCoJ ICwKICAgIGNvbnN0ICBjaGFyKiAJICwKICAgIFhybU9wdGlvbkRlc2NMaXN0IAkgLAogICAgQ2Fy ZGluYWwgCQkgLAogICAgaW50KgkJICwKICAgIFN0cmluZyoJCSAsCiAgICBTdHJpbmcqCQkgLAog ICAgQXJnTGlzdCAJCSAsCiAgICBDYXJkaW5hbCAJCSAKCik7CgpleHRlcm4gV2lkZ2V0IFh0VmFB cHBJbml0aWFsaXplKCAgCgogICAgWHRBcHBDb250ZXh0KgkgLAogICAgY29uc3QgIGNoYXIqIAkg LAogICAgWHJtT3B0aW9uRGVzY0xpc3QJICwKICAgIENhcmRpbmFsCQkgLAogICAgaW50KgkJICwK ICAgIFN0cmluZyoJCSAsCiAgICBTdHJpbmcqCQkgLAogICAgLi4uCgopOwoKZXh0ZXJuIFdpZGdl dCBYdEluaXRpYWxpemUoICAKCiAgICBjb25zdCAgY2hhciogIAkgLAogICAgY29uc3QgIGNoYXIq ICAJICwKICAgIFhybU9wdGlvbkRlc2NSZWMqIAkgLAogICAgQ2FyZGluYWwgCQkgLAogICAgaW50 KgkJICwKICAgIGNoYXIqKgkJIAoKKTsKCmV4dGVybiBEaXNwbGF5ICpYdE9wZW5EaXNwbGF5KAoK ICAgIFh0QXBwQ29udGV4dCAJICwKICAgIGNvbnN0ICBjaGFyKiAJICwKICAgIGNvbnN0ICBjaGFy KiAJICwKICAgIGNvbnN0ICBjaGFyKiAJICwKICAgIFhybU9wdGlvbkRlc2NSZWMqCSAsCiAgICBD YXJkaW5hbCAJCSAsCiAgICBpbnQqCQkgLAogICAgY2hhcioqCQkgCgopOwoKZXh0ZXJuIFh0QXBw Q29udGV4dCBYdENyZWF0ZUFwcGxpY2F0aW9uQ29udGV4dCgKCiAgICB2b2lkCgopOwoKZXh0ZXJu IHZvaWQgWHRBcHBTZXRGYWxsYmFja1Jlc291cmNlcygKCiAgICBYdEFwcENvbnRleHQgCSAsCiAg ICBTdHJpbmcqCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHREZXN0cm95QXBwbGljYXRpb25Db250ZXh0 KAoKICAgIFh0QXBwQ29udGV4dCAJIAoKKTsKCmV4dGVybiB2b2lkIFh0SW5pdGlhbGl6ZVdpZGdl dENsYXNzKAoKICAgIFdpZGdldENsYXNzIAkgCgopOwoKZXh0ZXJuIFh0QXBwQ29udGV4dCBYdFdp ZGdldFRvQXBwbGljYXRpb25Db250ZXh0KAoKICAgIFdpZGdldCAJCSAKCik7CgpleHRlcm4gWHRB cHBDb250ZXh0IFh0RGlzcGxheVRvQXBwbGljYXRpb25Db250ZXh0KAoKICAgIERpc3BsYXkqCQkg CgopOwoKZXh0ZXJuIFhybURhdGFiYXNlIFh0RGF0YWJhc2UoCgogICAgRGlzcGxheSoJCSAKCik7 CgpleHRlcm4gWHJtRGF0YWJhc2UgWHRTY3JlZW5EYXRhYmFzZSgKCiAgICBTY3JlZW4qCQkgCgop OwoKZXh0ZXJuIHZvaWQgWHRDbG9zZURpc3BsYXkoCgogICAgRGlzcGxheSoJCSAKCik7CgpleHRl cm4gdm9pZCBYdEdldEFwcGxpY2F0aW9uUmVzb3VyY2VzKAoKICAgIFdpZGdldCAJCSAsCiAgICBY dFBvaW50ZXIgCQkgLAogICAgWHRSZXNvdXJjZUxpc3QgCSAsCiAgICBDYXJkaW5hbCAJCSAsCiAg ICBBcmdMaXN0IAkJICwKICAgIENhcmRpbmFsIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0VmFHZXRB cHBsaWNhdGlvblJlc291cmNlcygKCiAgICBXaWRnZXQJCSAsCiAgICBYdFBvaW50ZXIJCSAsCiAg ICBYdFJlc291cmNlTGlzdAkgLAogICAgQ2FyZGluYWwJCSAsCiAgICAuLi4KCik7CgpleHRlcm4g dm9pZCBYdEdldFN1YnJlc291cmNlcygKCiAgICBXaWRnZXQgCQkgLAogICAgWHRQb2ludGVyIAkJ ICwKICAgIGNvbnN0ICBjaGFyKiAgCSAsCiAgICBjb25zdCAgY2hhciogIAkgLAogICAgWHRSZXNv dXJjZUxpc3QgCSAsCiAgICBDYXJkaW5hbCAJCSAsCiAgICBBcmdMaXN0IAkJICwKICAgIENhcmRp bmFsIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0VmFHZXRTdWJyZXNvdXJjZXMoCgogICAgV2lkZ2V0 CQkgLAogICAgWHRQb2ludGVyCQkgLAogICAgY29uc3QgIGNoYXIqIAkgLAogICAgY29uc3QgIGNo YXIqIAkgLAogICAgWHRSZXNvdXJjZUxpc3QJICwKICAgIENhcmRpbmFsCQkgLAogICAgLi4uCgop OwoKZXh0ZXJuIHZvaWQgWHRTZXRWYWx1ZXMoCgogICAgV2lkZ2V0IAkJICwKICAgIEFyZ0xpc3Qg CQkgLAogICAgQ2FyZGluYWwgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRWYVNldFZhbHVlcygKCiAg ICBXaWRnZXQJCSAsCiAgICAuLi4KCik7CgpleHRlcm4gdm9pZCBYdEdldFZhbHVlcygKCiAgICBX aWRnZXQgCQkgLAogICAgQXJnTGlzdCAJCSAsCiAgICBDYXJkaW5hbCAJCSAKCik7CgpleHRlcm4g dm9pZCBYdFZhR2V0VmFsdWVzKAoKICAgIFdpZGdldAkJICwKICAgIC4uLgoKKTsKCmV4dGVybiB2 b2lkIFh0U2V0U3VidmFsdWVzKAoKICAgIFh0UG9pbnRlciAJCSAsCiAgICBYdFJlc291cmNlTGlz dCAJICwKICAgIENhcmRpbmFsIAkJICwKICAgIEFyZ0xpc3QgCQkgLAogICAgQ2FyZGluYWwgCQkg CgopOwoKZXh0ZXJuIHZvaWQgWHRWYVNldFN1YnZhbHVlcygKCiAgICBYdFBvaW50ZXIJCSAsCiAg ICBYdFJlc291cmNlTGlzdAkgLAogICAgQ2FyZGluYWwJCSAsCiAgICAuLi4KCik7CgpleHRlcm4g dm9pZCBYdEdldFN1YnZhbHVlcygKCiAgICBYdFBvaW50ZXIgCQkgLAogICAgWHRSZXNvdXJjZUxp c3QgCSAsCiAgICBDYXJkaW5hbCAJCSAsCiAgICBBcmdMaXN0IAkJICwKICAgIENhcmRpbmFsIAkJ IAoKKTsKCmV4dGVybiB2b2lkIFh0VmFHZXRTdWJ2YWx1ZXMoCgogICAgWHRQb2ludGVyCQkgLAog ICAgWHRSZXNvdXJjZUxpc3QJICwKICAgIENhcmRpbmFsCQkgLAogICAgLi4uCgopOwoKZXh0ZXJu IHZvaWQgWHRHZXRSZXNvdXJjZUxpc3QoCgogICAgV2lkZ2V0Q2xhc3MgCSAsCiAgICBYdFJlc291 cmNlTGlzdCoJICwKICAgIENhcmRpbmFsKgkJIAoKKTsKCmV4dGVybiB2b2lkIFh0R2V0Q29uc3Ry YWludFJlc291cmNlTGlzdCgKCiAgICBXaWRnZXRDbGFzcyAJICwKICAgIFh0UmVzb3VyY2VMaXN0 KgkgLAogICAgQ2FyZGluYWwqCQkgCgopOwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoK dHlwZWRlZiBzdHJ1Y3QgX1h0Q2hlY2twb2ludFRva2VuUmVjIHsKICAgIGludAkJc2F2ZV90eXBl OwogICAgaW50CQlpbnRlcmFjdF9zdHlsZTsKICAgIEJvb2xlYW4Jc2h1dGRvd247CiAgICBCb29s ZWFuCWZhc3Q7CiAgICBCb29sZWFuCWNhbmNlbF9zaHV0ZG93bjsKICAgIGludAkJcGhhc2U7CiAg ICBpbnQJCWludGVyYWN0X2RpYWxvZ190eXBlOwkgCiAgICBCb29sZWFuCXJlcXVlc3RfY2FuY2Vs OwkJIAogICAgQm9vbGVhbglyZXF1ZXN0X25leHRfcGhhc2U7CSAKICAgIEJvb2xlYW4Jc2F2ZV9z dWNjZXNzOwkJIAogICAgaW50CQl0eXBlOwkJIAogICAgV2lkZ2V0CXdpZGdldDsJCSAKfSBYdENo ZWNrcG9pbnRUb2tlblJlYywgKlh0Q2hlY2twb2ludFRva2VuOwoKWHRDaGVja3BvaW50VG9rZW4g WHRTZXNzaW9uR2V0VG9rZW4oCgogICAgV2lkZ2V0CQkgCgopOwoKdm9pZCBYdFNlc3Npb25SZXR1 cm5Ub2tlbigKCiAgICBYdENoZWNrcG9pbnRUb2tlbgkgCgopOwoKIAoKCgoKCmV4dGVybiBYdEVy cm9yTXNnSGFuZGxlciBYdEFwcFNldEVycm9yTXNnSGFuZGxlcigKCiAgICBYdEFwcENvbnRleHQg CSAsCiAgICBYdEVycm9yTXNnSGFuZGxlciAJIAoKKTsKCmV4dGVybiB2b2lkIFh0U2V0RXJyb3JN c2dIYW5kbGVyKCAgCgogICAgWHRFcnJvck1zZ0hhbmRsZXIgCSAKCik7CgpleHRlcm4gWHRFcnJv ck1zZ0hhbmRsZXIgWHRBcHBTZXRXYXJuaW5nTXNnSGFuZGxlcigKCiAgICBYdEFwcENvbnRleHQg CSAsCiAgICBYdEVycm9yTXNnSGFuZGxlciAJIAoKKTsKCmV4dGVybiB2b2lkIFh0U2V0V2Fybmlu Z01zZ0hhbmRsZXIoICAKCiAgICBYdEVycm9yTXNnSGFuZGxlciAJIAoKKTsKCmV4dGVybiB2b2lk IFh0QXBwRXJyb3JNc2coCgogICAgWHRBcHBDb250ZXh0IAkgLAogICAgY29uc3QgIGNoYXIqICAJ ICwKICAgIGNvbnN0ICBjaGFyKiAJICwKICAgIGNvbnN0ICBjaGFyKiAJICwKICAgIGNvbnN0ICBj aGFyKiAJICwKICAgIFN0cmluZyoJCSAsCiAgICBDYXJkaW5hbCoJCSAKCik7CgpleHRlcm4gdm9p ZCBYdEVycm9yTXNnKCAgCgogICAgY29uc3QgIGNoYXIqICAJICwKICAgIGNvbnN0ICBjaGFyKiAJ ICwKICAgIGNvbnN0ICBjaGFyKiAJICwKICAgIGNvbnN0ICBjaGFyKiAJICwKICAgIFN0cmluZyoJ CSAsCiAgICBDYXJkaW5hbCoJCSAKCik7CgpleHRlcm4gdm9pZCBYdEFwcFdhcm5pbmdNc2coCgog ICAgWHRBcHBDb250ZXh0IAkgLAogICAgY29uc3QgIGNoYXIqICAJICwKICAgIGNvbnN0ICBjaGFy KiAgCSAsCiAgICBjb25zdCAgY2hhciogIAkgLAogICAgY29uc3QgIGNoYXIqICAJICwKICAgIFN0 cmluZyoJCSAsCiAgICBDYXJkaW5hbCoJCSAKCik7CgpleHRlcm4gdm9pZCBYdFdhcm5pbmdNc2co ICAKCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBjb25zdCAg Y2hhciogCSAsCiAgICBjb25zdCAgY2hhciogCSAsCiAgICBTdHJpbmcqCQkgLAogICAgQ2FyZGlu YWwqCQkgCgopOwoKZXh0ZXJuIFh0RXJyb3JIYW5kbGVyIFh0QXBwU2V0RXJyb3JIYW5kbGVyKAoK ICAgIFh0QXBwQ29udGV4dCAJICwKICAgIFh0RXJyb3JIYW5kbGVyIAkgCgopOwoKZXh0ZXJuIHZv aWQgWHRTZXRFcnJvckhhbmRsZXIoICAKCiAgICBYdEVycm9ySGFuZGxlciAJIAoKKTsKCmV4dGVy biBYdEVycm9ySGFuZGxlciBYdEFwcFNldFdhcm5pbmdIYW5kbGVyKAoKICAgIFh0QXBwQ29udGV4 dCAJICwKICAgIFh0RXJyb3JIYW5kbGVyIAkgCgopOwoKZXh0ZXJuIHZvaWQgWHRTZXRXYXJuaW5n SGFuZGxlciggIAoKICAgIFh0RXJyb3JIYW5kbGVyIAkgCgopOwoKZXh0ZXJuIHZvaWQgWHRBcHBF cnJvcigKCiAgICBYdEFwcENvbnRleHQgCSAsCiAgICBjb25zdCAgY2hhciogCSAKCik7CgpleHRl cm4gdm9pZCBYdEVycm9yKCAgCgogICAgY29uc3QgIGNoYXIqIAkgCgopOwoKZXh0ZXJuIHZvaWQg WHRBcHBXYXJuaW5nKAoKICAgIFh0QXBwQ29udGV4dCAJICwKICAgIGNvbnN0ICBjaGFyKiAJIAoK KTsKCmV4dGVybiB2b2lkIFh0V2FybmluZyggIAoKICAgIGNvbnN0ICBjaGFyKiAJIAoKKTsKCmV4 dGVybiBYcm1EYXRhYmFzZSAqWHRBcHBHZXRFcnJvckRhdGFiYXNlKAoKICAgIFh0QXBwQ29udGV4 dCAJIAoKKTsKCmV4dGVybiBYcm1EYXRhYmFzZSAqWHRHZXRFcnJvckRhdGFiYXNlKCAgCgogICAg dm9pZAoKKTsKCmV4dGVybiB2b2lkIFh0QXBwR2V0RXJyb3JEYXRhYmFzZVRleHQoCgogICAgWHRB cHBDb250ZXh0IAkgLAogICAgY29uc3QgIGNoYXIqIAkgLAogICAgY29uc3QgIGNoYXIqIAkgLAog ICAgY29uc3QgIGNoYXIqIAkgLAogICAgY29uc3QgIGNoYXIqICAJICwKICAgIFN0cmluZyAJCSAs CiAgICBpbnQgCQkgLAogICAgWHJtRGF0YWJhc2UgCSAKCik7CgpleHRlcm4gdm9pZCBYdEdldEVy cm9yRGF0YWJhc2VUZXh0KCAgCgogICAgY29uc3QgIGNoYXIqIAkgLAogICAgY29uc3QgIGNoYXIq IAkgLAogICAgY29uc3QgIGNoYXIqIAkgLAogICAgY29uc3QgIGNoYXIqICAJICwKICAgIFN0cmlu ZyAJCSAsCiAgICBpbnQgCQkgCgopOwoKIAoKCgoKCmV4dGVybiBjaGFyICpYdE1hbGxvYygKCiAg ICBDYXJkaW5hbCAJCSAKCik7CgpleHRlcm4gY2hhciAqWHRDYWxsb2MoCgogICAgQ2FyZGluYWwJ CSAsCiAgICBDYXJkaW5hbCAJCSAKCik7CgpleHRlcm4gY2hhciAqWHRSZWFsbG9jKAoKICAgIGNo YXIqIAkJICwKICAgIENhcmRpbmFsIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0RnJlZSgKCiAgICBj aGFyKgkJIAoKKTsKCiMgMjM1NCAiL3Vzci9vcGVud2luL2luY2x1ZGUvWDExL0ludHJpbnNpYy5o IgoKCgoKCgogCgoKCgoKZXh0ZXJuIFh0V29ya1Byb2NJZCBYdEFkZFdvcmtQcm9jKCAgCgogICAg WHRXb3JrUHJvYyAJCSAsCiAgICBYdFBvaW50ZXIgCQkgCgopOwoKZXh0ZXJuIFh0V29ya1Byb2NJ ZCBYdEFwcEFkZFdvcmtQcm9jKAoKICAgIFh0QXBwQ29udGV4dCAJICwKICAgIFh0V29ya1Byb2Mg CQkgLAogICAgWHRQb2ludGVyIAkJIAoKKTsKCmV4dGVybiB2b2lkICBYdFJlbW92ZVdvcmtQcm9j KAoKICAgIFh0V29ya1Byb2NJZCAJIAoKKTsKCgogCgoKCgpleHRlcm4gR0MgWHRHZXRHQygKCiAg ICBXaWRnZXQgCQkgLAogICAgWHRHQ01hc2sgCQkgLAogICAgWEdDVmFsdWVzKiAJCSAKCik7Cgpl eHRlcm4gR0MgWHRBbGxvY2F0ZUdDKAoKICAgIFdpZGdldCAJCSAsCiAgICBDYXJkaW5hbAkJICwK ICAgIFh0R0NNYXNrIAkJICwKICAgIFhHQ1ZhbHVlcyogCQkgLAogICAgWHRHQ01hc2sJCSAsCiAg ICBYdEdDTWFzawkJIAoKKTsKCiAKCgoKZXh0ZXJuIHZvaWQgWHREZXN0cm95R0MoICAKCiAgICBH QyAJCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRSZWxlYXNlR0MoCgogICAgV2lkZ2V0IAkJICwKICAg IEdDIAkJCSAKCik7CgoKCmV4dGVybiB2b2lkIFh0QXBwUmVsZWFzZUNhY2hlUmVmcygKCiAgICBY dEFwcENvbnRleHQJICwKICAgIFh0Q2FjaGVSZWYqCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRDYWxs YmFja1JlbGVhc2VDYWNoZVJlZigKCiAgICBXaWRnZXQgCQkgLAogICAgWHRQb2ludGVyIAkJICwJ IAogICAgWHRQb2ludGVyIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0Q2FsbGJhY2tSZWxlYXNlQ2Fj aGVSZWZMaXN0KAoKICAgIFdpZGdldCAJCSAsCiAgICBYdFBvaW50ZXIgCQkgLAkgCiAgICBYdFBv aW50ZXIgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRTZXRXTUNvbG9ybWFwV2luZG93cygKCiAgICBX aWRnZXQgCQkgLAogICAgV2lkZ2V0KgkJICwKICAgIENhcmRpbmFsCQkgCgopOwoKZXh0ZXJuIFN0 cmluZyBYdEZpbmRGaWxlKAoKICAgIGNvbnN0ICBjaGFyKiAJICwKICAgIFN1YnN0aXR1dGlvbgkg LAogICAgQ2FyZGluYWwgCQkgLAogICAgWHRGaWxlUHJlZGljYXRlCSAKCik7CgpleHRlcm4gU3Ry aW5nIFh0UmVzb2x2ZVBhdGhuYW1lKAoKICAgIERpc3BsYXkqCQkgLAogICAgY29uc3QgIGNoYXIq IAkgLAogICAgY29uc3QgIGNoYXIqIAkgLAogICAgY29uc3QgIGNoYXIqIAkgLAogICAgY29uc3Qg IGNoYXIqIAkgLAogICAgU3Vic3RpdHV0aW9uCSAsCiAgICBDYXJkaW5hbAkJICwKICAgIFh0Rmls ZVByZWRpY2F0ZSAJIAoKKTsKCiAKCgoKCgoKICAgIApleHRlcm4gdm9pZCBYdERpc293blNlbGVj dGlvbigKCiAgICBXaWRnZXQgCQkgLAogICAgQXRvbSAJCSAsCiAgICBUaW1lIAkJIAoKKTsKCmV4 dGVybiB2b2lkIFh0R2V0U2VsZWN0aW9uVmFsdWUoCgogICAgV2lkZ2V0IAkJICwKICAgIEF0b20g CQkgLAogICAgQXRvbSAJCSAsCiAgICBYdFNlbGVjdGlvbkNhbGxiYWNrUHJvYyAgLAogICAgWHRQ b2ludGVyIAkJICwKICAgIFRpbWUgCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRHZXRTZWxlY3Rpb25W YWx1ZXMoCgogICAgV2lkZ2V0IAkJICwKICAgIEF0b20gCQkgLAogICAgQXRvbSoJCSAsCiAgICBp bnQgCQkgLAogICAgWHRTZWxlY3Rpb25DYWxsYmFja1Byb2MgICwKICAgIFh0UG9pbnRlcioJCSAs CiAgICBUaW1lIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0QXBwU2V0U2VsZWN0aW9uVGltZW91dCgK CiAgICBYdEFwcENvbnRleHQgCSAsCiAgICB1bnNpZ25lZCBsb25nIAkgCgopOwoKZXh0ZXJuIHZv aWQgWHRTZXRTZWxlY3Rpb25UaW1lb3V0KCAgCgogICAgdW5zaWduZWQgbG9uZyAJIAoKKTsKCmV4 dGVybiB1bnNpZ25lZCBsb25nIFh0QXBwR2V0U2VsZWN0aW9uVGltZW91dCgKCiAgICBYdEFwcENv bnRleHQgCSAKCik7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBYdEdldFNlbGVjdGlvblRpbWVvdXQo ICAKCiAgICB2b2lkCgopOwoKZXh0ZXJuIFhTZWxlY3Rpb25SZXF1ZXN0RXZlbnQgKlh0R2V0U2Vs ZWN0aW9uUmVxdWVzdCgKCiAgICBXaWRnZXQgCQkgLAogICAgQXRvbSAJCSAsCiAgICBYdFJlcXVl c3RJZCAJIAoKKTsKCmV4dGVybiB2b2lkIFh0R2V0U2VsZWN0aW9uVmFsdWVJbmNyZW1lbnRhbCgK CiAgICBXaWRnZXQgCQkgLAogICAgQXRvbSAJCSAsCiAgICBBdG9tIAkJICwKICAgIFh0U2VsZWN0 aW9uQ2FsbGJhY2tQcm9jICAsCiAgICBYdFBvaW50ZXIgCQkgLAogICAgVGltZSAJCSAKCik7Cgpl eHRlcm4gdm9pZCBYdEdldFNlbGVjdGlvblZhbHVlc0luY3JlbWVudGFsKAoKICAgIFdpZGdldCAJ CSAsCiAgICBBdG9tIAkJICwKICAgIEF0b20qCQkgLAogICAgaW50IAkJICwKICAgIFh0U2VsZWN0 aW9uQ2FsbGJhY2tQcm9jICAsCiAgICBYdFBvaW50ZXIqCQkgLAogICAgVGltZSAJCSAKCik7Cgpl eHRlcm4gdm9pZCBYdFNldFNlbGVjdGlvblBhcmFtZXRlcnMoCgogICAgV2lkZ2V0CQkgLAogICAg QXRvbQkJICwKICAgIEF0b20JCSAsCiAgICBYdFBvaW50ZXIJCSAsCiAgICB1bnNpZ25lZCBsb25n CSAsCiAgICBpbnQJCQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRHZXRTZWxlY3Rpb25QYXJhbWV0ZXJz KAoKICAgIFdpZGdldAkJICwKICAgIEF0b20JCSAsCiAgICBYdFJlcXVlc3RJZAkJICwKICAgIEF0 b20qCQkgLAogICAgWHRQb2ludGVyKgkJICwKICAgIHVuc2lnbmVkIGxvbmcqCSAsCiAgICBpbnQq CQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRDcmVhdGVTZWxlY3Rpb25SZXF1ZXN0KAoKICAgIFdpZGdl dAkJICwKICAgIEF0b20JCSAKCik7CgpleHRlcm4gdm9pZCBYdFNlbmRTZWxlY3Rpb25SZXF1ZXN0 KAoKICAgIFdpZGdldAkJICwKICAgIEF0b20JCSAsCiAgICBUaW1lCQkgCgopOwoKZXh0ZXJuIHZv aWQgWHRDYW5jZWxTZWxlY3Rpb25SZXF1ZXN0KAoKICAgIFdpZGdldAkJICwKICAgIEF0b20JCSAK Cik7CgpleHRlcm4gQXRvbSBYdFJlc2VydmVQcm9wZXJ0eUF0b20oCgogICAgV2lkZ2V0CQkgCgop OwoKZXh0ZXJuIHZvaWQgWHRSZWxlYXNlUHJvcGVydHlBdG9tKAoKICAgIFdpZGdldAkJICwKICAg IEF0b20JCSAKCik7CgpleHRlcm4gdm9pZCBYdEdyYWJLZXkoCgogICAgV2lkZ2V0IAkJICwKICAg IHVuc2lnbmVkIGludCAgCQkgLAogICAgTW9kaWZpZXJzCSAJICwKICAgIGludCAgCQkgLAogICAg aW50IAkJICwKICAgIGludCAJCSAKCik7CgpleHRlcm4gdm9pZCBYdFVuZ3JhYktleSgKCiAgICBX aWRnZXQgCQkgLAogICAgdW5zaWduZWQgaW50ICAJCSAsCiAgICBNb2RpZmllcnMJIAkgCgopOwoK ZXh0ZXJuIGludCBYdEdyYWJLZXlib2FyZCgKCiAgICBXaWRnZXQgCQkgLAogICAgaW50ICAJCSAs CiAgICBpbnQgCQkgLAogICAgaW50IAkJICwKICAgIFRpbWUgCQkgCgopOwoKZXh0ZXJuIHZvaWQg WHRVbmdyYWJLZXlib2FyZCgKCiAgICBXaWRnZXQgCQkgLAogICAgVGltZSAJCSAKCik7CgpleHRl cm4gdm9pZCBYdEdyYWJCdXR0b24oCgogICAgV2lkZ2V0IAkJICwKICAgIGludCAJCSAsCiAgICBN b2RpZmllcnMJIAkgLAogICAgaW50ICAJCSAsCiAgICB1bnNpZ25lZCBpbnQJICwKICAgIGludCAJ CSAsCiAgICBpbnQgCQkgLAogICAgV2luZG93IAkJICwKICAgIEN1cnNvciAJCSAKCik7CgpleHRl cm4gdm9pZCBYdFVuZ3JhYkJ1dHRvbigKCiAgICBXaWRnZXQgCQkgLAogICAgdW5zaWduZWQgaW50 CSAsCiAgICBNb2RpZmllcnMJIAkgCgopOwoKZXh0ZXJuIGludCBYdEdyYWJQb2ludGVyKAoKICAg IFdpZGdldCAJCSAsCiAgICBpbnQgIAkJICwKICAgIHVuc2lnbmVkIGludAkgLAogICAgaW50IAkJ ICwKICAgIGludCAJCSAsCiAgICBXaW5kb3cgCQkgLAogICAgQ3Vyc29yIAkJICwKICAgIFRpbWUg CQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRVbmdyYWJQb2ludGVyKAoKICAgIFdpZGdldCAJCSAsCiAg ICBUaW1lIAkJIAoKKTsKCmV4dGVybiB2b2lkIFh0R2V0QXBwbGljYXRpb25OYW1lQW5kQ2xhc3Mo CgogICAgRGlzcGxheSoJCSAsCiAgICBTdHJpbmcqCQkgLAogICAgU3RyaW5nKgkJIAoKKTsKCmV4 dGVybiB2b2lkIFh0UmVnaXN0ZXJEcmF3YWJsZSgKCiAgICBEaXNwbGF5KgkJICwKICAgIERyYXdh YmxlCQkgLAogICAgV2lkZ2V0CQkgCgopOwoKZXh0ZXJuIHZvaWQgWHRVbnJlZ2lzdGVyRHJhd2Fi bGUoCgogICAgRGlzcGxheSoJCSAsCiAgICBEcmF3YWJsZQkJIAoKKTsKCmV4dGVybiBXaWRnZXQg WHRIb29rc09mRGlzcGxheSgKCiAgICBEaXNwbGF5KgkJIAoKKTsKCnR5cGVkZWYgc3RydWN0IHsK ICAgIFN0cmluZyB0eXBlOwogICAgV2lkZ2V0IHdpZGdldDsKICAgIEFyZ0xpc3QgYXJnczsKICAg IENhcmRpbmFsIG51bV9hcmdzOwp9IFh0Q3JlYXRlSG9va0RhdGFSZWMsICpYdENyZWF0ZUhvb2tE YXRhOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgU3RyaW5nIHR5cGU7CiAgICBXaWRnZXQgd2lkZ2V0 OwogICAgWHRQb2ludGVyIGV2ZW50X2RhdGE7CiAgICBDYXJkaW5hbCBudW1fZXZlbnRfZGF0YTsK fSBYdENoYW5nZUhvb2tEYXRhUmVjLCAqWHRDaGFuZ2VIb29rRGF0YTsKCnR5cGVkZWYgc3RydWN0 IHsKICAgIFdpZGdldCBvbGQsIHJlcTsKICAgIEFyZ0xpc3QgYXJnczsKICAgIENhcmRpbmFsIG51 bV9hcmdzOwp9IFh0Q2hhbmdlSG9va1NldFZhbHVlc0RhdGFSZWMsICpYdENoYW5nZUhvb2tTZXRW YWx1ZXNEYXRhOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgU3RyaW5nIHR5cGU7CiAgICBXaWRnZXQg d2lkZ2V0OwogICAgWHRHZW9tZXRyeU1hc2sgY2hhbmdlTWFzazsKICAgIFhXaW5kb3dDaGFuZ2Vz IGNoYW5nZXM7Cn0gWHRDb25maWd1cmVIb29rRGF0YVJlYywgKlh0Q29uZmlndXJlSG9va0RhdGE7 Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBTdHJpbmcgdHlwZTsKICAgIFdpZGdldCB3aWRnZXQ7CiAg ICBYdFdpZGdldEdlb21ldHJ5KiByZXF1ZXN0OwogICAgWHRXaWRnZXRHZW9tZXRyeSogcmVwbHk7 CiAgICBYdEdlb21ldHJ5UmVzdWx0IHJlc3VsdDsKfSBYdEdlb21ldHJ5SG9va0RhdGFSZWMsICpY dEdlb21ldHJ5SG9va0RhdGE7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBTdHJpbmcgdHlwZTsKICAg IFdpZGdldCB3aWRnZXQ7Cn0gWHREZXN0cm95SG9va0RhdGFSZWMsICpYdERlc3Ryb3lIb29rRGF0 YTsKCmV4dGVybiB2b2lkIFh0R2V0RGlzcGxheXMoCgogICAgWHRBcHBDb250ZXh0CSAsCiAgICBE aXNwbGF5KioqCQkgLAogICAgQ2FyZGluYWwqCQkgCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRUb29s a2l0VGhyZWFkSW5pdGlhbGl6ZSgKCiAgICB2b2lkCgopOwoKZXh0ZXJuIHZvaWQgWHRBcHBTZXRF eGl0RmxhZygKCiAgICBYdEFwcENvbnRleHQJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0QXBwR2V0 RXhpdEZsYWcoCgogICAgWHRBcHBDb250ZXh0CSAKCik7CgpleHRlcm4gdm9pZCBYdEFwcExvY2so CgogICAgWHRBcHBDb250ZXh0CSAKCik7CgpleHRlcm4gdm9pZCBYdEFwcFVubG9jaygKCiAgICBY dEFwcENvbnRleHQJIAoKKTsKCiAKCgoKCiAKCmV4dGVybiBCb29sZWFuIFh0Q3Z0U3RyaW5nVG9B Y2NlbGVyYXRvclRhYmxlKAoKICAgIERpc3BsYXkqCSAsCiAgICBYcm1WYWx1ZVB0ciAgLAkgCiAg ICBDYXJkaW5hbCogICAgLAkKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYcm1WYWx1ZVB0cgkgLAog ICAgWHRQb2ludGVyKgkgCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRTdHJpbmdUb0F0b20oCgog ICAgRGlzcGxheSoJICwKICAgIFhybVZhbHVlUHRyICAsCSAKICAgIENhcmRpbmFsKiAgICAsCQog ICAgWHJtVmFsdWVQdHIJICwKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYdFBvaW50ZXIqCSAKCik7 CgpleHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1RvQm9vbCgKCiAgICBEaXNwbGF5KgkgLAogICAg WHJtVmFsdWVQdHIgICwJIAogICAgQ2FyZGluYWwqICAgICwJCiAgICBYcm1WYWx1ZVB0cgkgLAog ICAgWHJtVmFsdWVQdHIJICwKICAgIFh0UG9pbnRlcioJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0 Q3Z0U3RyaW5nVG9Cb29sZWFuKAoKICAgIERpc3BsYXkqCSAsCiAgICBYcm1WYWx1ZVB0ciAgLAkg CiAgICBDYXJkaW5hbCogICAgLAkKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYcm1WYWx1ZVB0cgkg LAogICAgWHRQb2ludGVyKgkgCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRTdHJpbmdUb0NvbW1h bmRBcmdBcnJheSgKCiAgICBEaXNwbGF5KgkgLAogICAgWHJtVmFsdWVQdHIgICwJIAogICAgQ2Fy ZGluYWwqICAgICwJCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHJtVmFsdWVQdHIJICwKICAgIFh0 UG9pbnRlcioJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0U3RyaW5nVG9DdXJzb3IoCgogICAg RGlzcGxheSoJICwKICAgIFhybVZhbHVlUHRyICAsCSAKICAgIENhcmRpbmFsKiAgICAsCQogICAg WHJtVmFsdWVQdHIJICwKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYdFBvaW50ZXIqCSAKCik7Cgpl eHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1RvRGltZW5zaW9uKAoKICAgIERpc3BsYXkqCSAsCiAg ICBYcm1WYWx1ZVB0ciAgLAkgCiAgICBDYXJkaW5hbCogICAgLAkKICAgIFhybVZhbHVlUHRyCSAs CiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHRQb2ludGVyKgkgCgopOwoKZXh0ZXJuIEJvb2xlYW4g WHRDdnRTdHJpbmdUb0RpcmVjdG9yeVN0cmluZygKCiAgICBEaXNwbGF5KgkgLAogICAgWHJtVmFs dWVQdHIgICwJIAogICAgQ2FyZGluYWwqICAgICwJCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHJt VmFsdWVQdHIJICwKICAgIFh0UG9pbnRlcioJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0U3Ry aW5nVG9EaXNwbGF5KAoKICAgIERpc3BsYXkqCSAsCiAgICBYcm1WYWx1ZVB0ciAgLAkgCiAgICBD YXJkaW5hbCogICAgLAkKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYcm1WYWx1ZVB0cgkgLAogICAg WHRQb2ludGVyKgkgCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRTdHJpbmdUb0ZpbGUoCgogICAg RGlzcGxheSoJICwKICAgIFhybVZhbHVlUHRyICAsCSAKICAgIENhcmRpbmFsKiAgICAsCQogICAg WHJtVmFsdWVQdHIJICwKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYdFBvaW50ZXIqCSAKCik7Cgpl eHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1RvRmxvYXQoCgogICAgRGlzcGxheSoJICwKICAgIFhy bVZhbHVlUHRyICAsCSAKICAgIENhcmRpbmFsKiAgICAsCQogICAgWHJtVmFsdWVQdHIJICwKICAg IFhybVZhbHVlUHRyCSAsCiAgICBYdFBvaW50ZXIqCSAKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2 dFN0cmluZ1RvRm9udCgKCiAgICBEaXNwbGF5KgkgLAogICAgWHJtVmFsdWVQdHIgICwJIAogICAg Q2FyZGluYWwqICAgICwJCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHJtVmFsdWVQdHIJICwKICAg IFh0UG9pbnRlcioJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0U3RyaW5nVG9Gb250U2V0KAoK ICAgIERpc3BsYXkqCSAsCiAgICBYcm1WYWx1ZVB0ciAgLAkgCiAgICBDYXJkaW5hbCogICAgLAkK ICAgIFhybVZhbHVlUHRyCSAsCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHRQb2ludGVyKgkgCgop OwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRTdHJpbmdUb0ZvbnRTdHJ1Y3QoCgogICAgRGlzcGxheSoJ ICwKICAgIFhybVZhbHVlUHRyICAsCSAKICAgIENhcmRpbmFsKiAgICAsCQogICAgWHJtVmFsdWVQ dHIJICwKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYdFBvaW50ZXIqCSAKCik7CgpleHRlcm4gQm9v bGVhbiBYdEN2dFN0cmluZ1RvR3Jhdml0eSgKCiAgICBEaXNwbGF5KgkgLAogICAgWHJtVmFsdWVQ dHIgICwKICAgIENhcmRpbmFsKiAgICAsCQogICAgWHJtVmFsdWVQdHIJICwKICAgIFhybVZhbHVl UHRyCSAsCiAgICBYdFBvaW50ZXIqCSAKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dFN0cmluZ1Rv SW5pdGlhbFN0YXRlKAoKICAgIERpc3BsYXkqCSAsCiAgICBYcm1WYWx1ZVB0ciAgLAkgCiAgICBD YXJkaW5hbCogICAgLAkKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYcm1WYWx1ZVB0cgkgLAogICAg WHRQb2ludGVyKgkgCgopOwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRTdHJpbmdUb0ludCgKCiAgICBE aXNwbGF5KgkgLAogICAgWHJtVmFsdWVQdHIgICwJIAogICAgQ2FyZGluYWwqICAgICwJCiAgICBY cm1WYWx1ZVB0cgkgLAogICAgWHJtVmFsdWVQdHIJICwKICAgIFh0UG9pbnRlcioJIAoKKTsKCmV4 dGVybiBCb29sZWFuIFh0Q3Z0U3RyaW5nVG9QaXhlbCgKCiAgICBEaXNwbGF5KgkgLAogICAgWHJt VmFsdWVQdHIgICwJIAogICAgQ2FyZGluYWwqICAgICwJCiAgICBYcm1WYWx1ZVB0cgkgLAogICAg WHJtVmFsdWVQdHIJICwKICAgIFh0UG9pbnRlcioJIAoKKTsKCgoKZXh0ZXJuIEJvb2xlYW4gWHRD dnRTdHJpbmdUb1Jlc3RhcnRTdHlsZSgKCiAgICBEaXNwbGF5KgkgLAogICAgWHJtVmFsdWVQdHIg ICwJIAogICAgQ2FyZGluYWwqICAgICwJCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHJtVmFsdWVQ dHIJICwKICAgIFh0UG9pbnRlcioJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0U3RyaW5nVG9T aG9ydCgKCiAgICBEaXNwbGF5KgkgLAogICAgWHJtVmFsdWVQdHIgICwJIAogICAgQ2FyZGluYWwq ICAgICwJCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHJtVmFsdWVQdHIJICwKICAgIFh0UG9pbnRl cioJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0U3RyaW5nVG9UcmFuc2xhdGlvblRhYmxlKAoK ICAgIERpc3BsYXkqCSAsCiAgICBYcm1WYWx1ZVB0ciAgLAkgCiAgICBDYXJkaW5hbCogICAgLAkK ICAgIFhybVZhbHVlUHRyCSAsCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHRQb2ludGVyKgkgCgop OwoKZXh0ZXJuIEJvb2xlYW4gWHRDdnRTdHJpbmdUb1Vuc2lnbmVkQ2hhcigKCiAgICBEaXNwbGF5 KgkgLAogICAgWHJtVmFsdWVQdHIgICwJIAogICAgQ2FyZGluYWwqICAgICwJCiAgICBYcm1WYWx1 ZVB0cgkgLAogICAgWHJtVmFsdWVQdHIJICwKICAgIFh0UG9pbnRlcioJIAoKKTsKCmV4dGVybiBC b29sZWFuIFh0Q3Z0U3RyaW5nVG9WaXN1YWwoCgogICAgRGlzcGxheSoJICwKICAgIFhybVZhbHVl UHRyICAsCSAKICAgIENhcmRpbmFsKiAgICAsCQogICAgWHJtVmFsdWVQdHIJICwKICAgIFhybVZh bHVlUHRyCSAsCiAgICBYdFBvaW50ZXIqCSAKCik7CgogCgpleHRlcm4gQm9vbGVhbiBYdEN2dElu dFRvQm9vbCgKCiAgICBEaXNwbGF5KgkgLAogICAgWHJtVmFsdWVQdHIgICwJIAogICAgQ2FyZGlu YWwqICAgICwJCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHJtVmFsdWVQdHIJICwKICAgIFh0UG9p bnRlcioJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0SW50VG9Cb29sZWFuKAoKICAgIERpc3Bs YXkqCSAsCiAgICBYcm1WYWx1ZVB0ciAgLAkgCiAgICBDYXJkaW5hbCogICAgLAkKICAgIFhybVZh bHVlUHRyCSAsCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHRQb2ludGVyKgkgCgopOwoKZXh0ZXJu IEJvb2xlYW4gWHRDdnRJbnRUb0NvbG9yKAoKICAgIERpc3BsYXkqCSAsCiAgICBYcm1WYWx1ZVB0 ciAgLAkgCiAgICBDYXJkaW5hbCogICAgLAkKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYcm1WYWx1 ZVB0cgkgLAogICAgWHRQb2ludGVyKgkgCgopOwoKCgpleHRlcm4gQm9vbGVhbiBYdEN2dEludFRv RmxvYXQoCgogICAgRGlzcGxheSoJICwKICAgIFhybVZhbHVlUHRyICAsCSAKICAgIENhcmRpbmFs KiAgICAsCQogICAgWHJtVmFsdWVQdHIJICwKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYdFBvaW50 ZXIqCSAKCik7CgpleHRlcm4gQm9vbGVhbiBYdEN2dEludFRvRm9udCgKCiAgICBEaXNwbGF5Kgkg LAogICAgWHJtVmFsdWVQdHIgICwJIAogICAgQ2FyZGluYWwqICAgICwJCiAgICBYcm1WYWx1ZVB0 cgkgLAogICAgWHJtVmFsdWVQdHIJICwKICAgIFh0UG9pbnRlcioJIAoKKTsKCmV4dGVybiBCb29s ZWFuIFh0Q3Z0SW50VG9QaXhlbCgKCiAgICBEaXNwbGF5KgkgLAogICAgWHJtVmFsdWVQdHIgICwJ IAogICAgQ2FyZGluYWwqICAgICwJCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHJtVmFsdWVQdHIJ ICwKICAgIFh0UG9pbnRlcioJIAoKKTsKCmV4dGVybiBCb29sZWFuIFh0Q3Z0SW50VG9QaXhtYXAo CgogICAgRGlzcGxheSoJICwKICAgIFhybVZhbHVlUHRyICAsCSAKICAgIENhcmRpbmFsKiAgICAs CQogICAgWHJtVmFsdWVQdHIJICwKICAgIFhybVZhbHVlUHRyCSAsCiAgICBYdFBvaW50ZXIqCSAK Cik7CgoKCmV4dGVybiBCb29sZWFuIFh0Q3Z0SW50VG9TaG9ydCgKCiAgICBEaXNwbGF5KgkgLAog ICAgWHJtVmFsdWVQdHIgICwJIAogICAgQ2FyZGluYWwqICAgICwJCiAgICBYcm1WYWx1ZVB0cgkg LAogICAgWHJtVmFsdWVQdHIJICwKICAgIFh0UG9pbnRlcioJIAoKKTsKCmV4dGVybiBCb29sZWFu IFh0Q3Z0SW50VG9VbnNpZ25lZENoYXIoCgogICAgRGlzcGxheSoJICwKICAgIFhybVZhbHVlUHRy ICAsCSAKICAgIENhcmRpbmFsKiAgICAsCQogICAgWHJtVmFsdWVQdHIJICwKICAgIFhybVZhbHVl UHRyCSAsCiAgICBYdFBvaW50ZXIqCSAKCik7CgogCgpleHRlcm4gQm9vbGVhbiBYdEN2dENvbG9y VG9QaXhlbCgKCiAgICBEaXNwbGF5KgkgLAogICAgWHJtVmFsdWVQdHIgICwJIAogICAgQ2FyZGlu YWwqICAgICwJCiAgICBYcm1WYWx1ZVB0cgkgLAogICAgWHJtVmFsdWVQdHIJICwKICAgIFh0UG9p bnRlcioJIAoKKTsKCiAKCgoKCn0gCgoKIAojIDYgIi4uLy4uL2luY2x1ZGUvbGliaW5jL2xpYnV0 aWwuaCIgMgoKCgoKCiMgMSAiLi4vLi4vaW5jbHVkZS9sb2NhbGluYy9kZXYvZmlmby5oIiAxCgoK IAoKIAoKCgoKCgoKIAoKCgoKc3RydWN0IGZpZm8KewogICAgc2hvcnQgZl9sb2NrOwkgCiAgICBz aG9ydCBmX3NpemU7CSAKICAgIHNob3J0IGZfcmQ7CQkgCiAgICBzaG9ydCBmX3dyOwkJIAp9OwoK dHlwZWRlZiBzdHJ1Y3QgZmlmbyAqZnBfdDsKCgpzdGF0aWMgaW5saW5lIGludApmZmVtcHR5KGZw X3QgZnApCnsKICAgIHJldHVybihmcC0+Zl9yZCA9PSBmcC0+Zl93cik7Cn0KCnN0YXRpYyBpbmxp bmUgaW50CmZmZnVsbChmcF90IGZwKQp7CiAgICByZXR1cm4oZnAtPmZfcmQgLSBmcC0+Zl93ciA9 PSAxIHx8CgkgICAgIGZwLT5mX3JkIC0gZnAtPmZfd3IgPT0gMSAtIGZwLT5mX3NpemUpOwp9Cgpz dGF0aWMgaW5saW5lIHZvaWQKZnJmbHVzaChmcF90IGZwKQp7CiAgICBmcC0+Zl9yZCA9IGZwLT5m X3dyOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQKZndmbHVzaChmcF90IGZwKQp7CiAgICBmcC0+Zl93 ciA9IGZwLT5mX3JkOwp9CgpzdGF0aWMgaW5saW5lIGludApmZnNpemUoZnBfdCBmcCkKewogICAg cmV0dXJuKGZwLT5mX3NpemUtMSk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZApmZmluaXQoZnBfdCBm cCwgaW50IHNpemUpCnsKICAgIGZwLT5mX3NpemUgPSBzaXplKzE7CiAgICBmcC0+Zl9sb2NrID0g ZnAtPmZfcmQgPSBmcC0+Zl93cj0wOwp9CgogCnN0YXRpYyBpbmxpbmUgaW50CmZmcm9vbShmcF90 IGZwKQp7CiAgICByZXR1cm4oKGZwLT5mX3JkLSBmcC0+Zl93ciArIGZmc2l6ZShmcCkpICUgKGxv bmcpZnAtPmZfc2l6ZSk7Cn0KCiAKc3RhdGljIGlubGluZSBpbnQKZmZhdmFpbChmcF90IGZwKQp7 CiAgICByZXR1cm4oKGZwLT5mX3dyIC0gZnAtPmZfcmQgKyBmcC0+Zl9zaXplKSAlIChsb25nKWZw LT5mX3NpemUpOwp9CgojIDEwOSAiLi4vLi4vaW5jbHVkZS9sb2NhbGluYy9kZXYvZmlmby5oIgoK CgoKCgojIDEyMyAiLi4vLi4vaW5jbHVkZS9sb2NhbGluYy9kZXYvZmlmby5oIgoKCiMgMTEgIi4u Ly4uL2luY2x1ZGUvbGliaW5jL2xpYnV0aWwuaCIgMgoKIyAxICIuLi8uLi9pbmNsdWRlL2xvY2Fs aW5jL20zeDMuaCIgMQoKCiAKCmNsYXNzIG0zX3QgewpwdWJsaWM6CiAgICBmbG9hdCBhM3gzWzNd WzNdOwp9OwoKCgoKCgoKCgoKCmNsYXNzIHYzX3QgewpwdWJsaWM6CiAgICBmbG9hdCBhMXgzWzNd Owp9OwoKCgoKCiMgMTIgIi4uLy4uL2luY2x1ZGUvbGliaW5jL2xpYnV0aWwuaCIgMgoKIyAxICIu Li8uLi9pbmNsdWRlL2xvY2FsaW5jL1BjYkNvbnN0YW50cy5oIiAxCgoKCgogCgoKCmNvbnN0IGlu dCBrVXNlclF1aXQJCT0gMTsKCnR5cGVkZWYgY2hhcgkJCUJvb2xlYW47CnR5cGVkZWYgaW50CQkJ c25hcF9yZXNfdDsKdHlwZWRlZglpbnQJCQlsb2FkX2NvZGVfdDsKIAoKCnR5cGVkZWYJc2hvcnQJ CQl0aHJlc2hvbGRfZGF0YV90Owp0eXBlZGVmIHNob3J0CQkJY29vcl90Owp0eXBlZGVmIHNob3J0 CQkJbm1uZHhfdDsgIAp0eXBlZGVmCXNob3J0CQkJcmVzdWx0c19kYXRhX3Q7Cgp0eXBlZGVmIHVu c2lnbmVkIGNoYXIgKgkJZmJhZGRyX3Q7Cgpjb25zdCBpbnQgTlVMTE5BTUUJCT0gLTE7Cgpjb25z dAlpbnQJa0JvYXJkRnVkZ2VGYWN0b3IJPSAzMDA7CiAKCgpjb25zdCBpbnQgUk9UXzAJCT0gMHgw Owpjb25zdCBpbnQgUk9UXzkwCT0gMHgxOwpjb25zdCBpbnQgUk9UXzE4MAk9IDB4MjsKY29uc3Qg aW50IFJPVF8yNzAJPSAweDM7CmNvbnN0IGludCBST1RBVElPTl9NQVNLCT0gMHgzOwoKCgoKCmNv bnN0IGludCBUcnVlCQk9IDE7CmNvbnN0IGludCBGYWxzZQkJPSAwOwoKCgoKCmNvbnN0IHVfaW50 IE1BWEJSRAkJPSA4OwkgCmNvbnN0IHVfaW50IGtNYXhCcmQJCT0gTUFYQlJEOwpjb25zdCB1X2lu dCBrTWF4UGFzc2VzCQk9IE1BWEJSRDsKCmNvbnN0IHVfaW50IE5WQ1BVUkVTCQk9IDg7Cgpjb25z dCB1X2ludCBOQ01NQ0FNCQk9IDg7CmNvbnN0IHVfaW50IGtOdW1DbW1DYW0JCT0gTkNNTUNBTTsK CmNvbnN0IHVfaW50IGtDYW1lcmFPbmUJCT0gMTsKY29uc3QgdV9pbnQga0NhbWVyYVR3bwkJPSAy Owpjb25zdCB1X2ludCBrQ2FtZXJhVGhyZWUJPSAzOwpjb25zdCB1X2ludCBrQ2FtZXJhRm91cgkJ PSA0Owpjb25zdCB1X2ludCBrQ2FtZXJhRml2ZQkJPSA1Owpjb25zdCB1X2ludCBrQ2FtZXJhU2l4 CQk9IDY7CmNvbnN0IHVfaW50IGtDYW1lcmFTZXZlbgk9IDc7CmNvbnN0IHVfaW50IGtDYW1lcmFF aWdodAk9IDg7CgogCgoKY29uc3QgaW50IFJFU09MVE4JCT0gMTY7Cgpjb25zdCBpbnQgTkNSVFBB UgkJPSAzMjsJIAoKIAoKCgpjb25zdCBpbnQgTkZJRFUJCQk9IDQ7CmNvbnN0IGludCBrTWF4Rmlk dVJlc3VsdHMJPSBORklEVTsKCiAKCgpjb25zdCB1X2ludCBBTEdPX05BTUVfU0laRQk9IDMyOwoK Y29uc3QgdV9pbnQga0FsZ29OYW1lTGVuZ3RoCT0gQUxHT19OQU1FX1NJWkU7CmNvbnN0IHVfaW50 IGtPbGRBbGdvTmFtZUxlbmd0aAk9IGtBbGdvTmFtZUxlbmd0aCAvIDI7CQkgCgp0eXBlZGVmIGVu dW0geyBrRmxpcFgsIGtGbGlwWSB9IGVGbGlwQnk7CgogCmNvbnN0IGludCBGTElQWAkJCT0gMDsK Y29uc3QgaW50IEZMSVBZCQkJPSAxOwoKIApjb25zdCBpbnQgTk8JCQk9IEZhbHNlOwkgCmNvbnN0 IGludCBZRVMJCQk9IFRydWU7Cgpjb25zdCB1X2ludCBNQUpOQklUUwkJPSA5OwkgCmNvbnN0IHVf aW50IE1BWE1BSk9SCQk9ICgxIDw8IE1BSk5CSVRTKTsKY29uc3QgdV9pbnQga01heEFsZ29zUGVy TGV2ZWwJPSBNQVhNQUpPUjsKY29uc3QgdV9pbnQga1Bhc3NBbGdvCQk9IGtNYXhBbGdvc1Blckxl dmVsOwoKIAoKCgoKCgpjb25zdCBsb25nIEFMR09fUElOX1BSRQkJPSAwOwpjb25zdCBsb25nIEFM R09fUElOX1BPU1QJPSAxOwpjb25zdCBsb25nIEFMR09fUE9TVAkJPSAyOwpjb25zdCBsb25nIEFM R09fUEFTVEUJCT0gMzsKY29uc3QgbG9uZyBBTEdPX0xBU0VSCQk9IDQ7CmNvbnN0IGxvbmcgQUxH T19GSURVCQk9IDU7CmNvbnN0IGxvbmcgQUxHT19WT0xVTUUJCT0gNjsKY29uc3QgbG9uZyBBTEdP X09DUgkJPSA3Owpjb25zdCBsb25nIE5FVFdPUktFUgkJPSAyNTsJIApjb25zdCBsb25nIEFMR09f U1BBUkUJCT0gMjY7CmNvbnN0IGxvbmcgUFBVU0NBTk5FUgkJPSAyNzsJIApjb25zdCBsb25nIERC R0VOCQk9IDI4OwkgCmNvbnN0IGxvbmcgVFJBSU5FUgkJPSAyOTsJIApjb25zdCBsb25nIFJFUEFJ UgkJPSAzMDsJIApjb25zdCBsb25nIE1BWF9LRVlTCQk9IDMxOwkgCgogCgoKCgpjb25zdCBpbnQg QUxHT0RPTkUJCT0gIDA7CSAKY29uc3QgaW50IE5PQUxHTwkJPSAtMTsJIApjb25zdCBpbnQgQkFE U05BUAkJPSAtMjsJIApjb25zdCBpbnQgSVYyU01BTEwJCT0gLTM7CSAKY29uc3QgaW50IEJBRFRI UEFSQU0JCT0gLTQ7CSAKY29uc3QgaW50IEJBRFdJTkRPVwkJPSAtNTsJIAoKIAoKCmNvbnN0IGlu dCBNYXhQaW5QZXJQYXJ0CQk9ICgyNTYgKiAzKTsKY29uc3QgaW50IGtNYXhQaW5QZXJQYXJ0CT0g TWF4UGluUGVyUGFydDsKCiAKY29uc3Qgc2hvcnQga0NzZWdTeXNwYXJEb25lCT0gMHgwMTsgIApj b25zdCBzaG9ydCBrRmx5aW5nU25hcHMJPSAweDAyOyAgCmNvbnN0IHNob3J0IGtGaXJzdEFydGlj bGUJPSAweDA0OyAgCmNvbnN0IHNob3J0IGtTYXZlSXRlbVNuYXBzCT0gMHgwODsgIApjb25zdCBz aG9ydCBrSGFzSG9zdFJ0YwkJPSAweDEwOyAgCmNvbnN0IHNob3J0IGtIYXNBdXRvTmV0d29ya2Vy CT0gMHgyMDsJIAoKIAoKCmNvbnN0IGludCBrQ3NlZ0NoZWNrCQk9IDEgPDwgMDsKY29uc3QgaW50 IGtDc2VnQ3JlYXRlCQk9IDEgPDwgMTsKY29uc3QgaW50IGtDc2VnRW11bGF0aW9uCT0gMSA8PCAy Owpjb25zdCBpbnQga0NzZWdSZXBhaXIJCT0gMSA8PCAzOwpjb25zdCBpbnQga0NzZWdNYXBGaXhl ZAkJPSAxIDw8IDQ7Cgpjb25zdCBsb25nCWtDb21tc2VnCT0gMHg4MDAwMDA7CSAKY29uc3QgbG9u ZwlrRm91ck1lZwk9IDRMICogMTAyNEwgKiAxMDI0TDsKY29uc3QgbG9uZwlrRWlnaHRNZWcJPSA4 TCAqIDEwMjRMICogMTAyNEw7CmNvbnN0IGxvbmcJa1NpeHRlZW5NZWcJPSAxNkwgKiAxMDI0TCAq IDEwMjRMOwpjb25zdCBsb25nCWtIYXJkd2FyZVJlc2VydmVkID0gKGtTaXh0ZWVuTWVnIC0gMHhm ZTAwMDApOwogCgoKY29uc3QgbG9uZwlrMzJNZWcJCT0gMzJMICogMTAyNEwgKiAxMDI0TDsKY29u c3QgbG9uZwlrNjRNZWcJCT0gNjRMICogMTAyNEwgKiAxMDI0TDsKY29uc3QgbG9uZwlrMTI4TWVn CQk9IDEyOEwgKiAxMDI0TCAqIDEwMjRMOwoKY29uc3QgbG9uZwlrQ29tbXNlZ1NpemUJPSBrRm91 ck1lZzsKIAoKCmNvbnN0IGxvbmcJa0RlYnVnRnJhbWVCdWZmZXJTaXplID0gKDY0MEwgKiA0ODBM KTsKCiAKCgpjb25zdCBpbnQgTkRCRk5BTUUJCT0gMTI4Owpjb25zdCBpbnQgQUxJR05TSElGVAkJ PSA4Owpjb25zdCBpbnQgTlNFUklBTAkJPSAxMjg7CmNvbnN0IGludCBORkxBVk9SCQk9IDMyOwkg CmNvbnN0IGludCBOU1EJCQk9IDE2Owpjb25zdCBpbnQgTUFYU0JVRgkJPSA0OwkgCgogCgoKCgpj b25zdCBpbnQga0ludGVsRmllbGRMZW5ndGggICA9IDEwMDsKCiAKCgpjb25zdCBpbnQga05vVmlk ZW8JCT0gMDsKY29uc3QgaW50IEtNR0FCT0FSRAkJPSAxOwpjb25zdCBpbnQgS0dEQjNCT0FSRAkJ PSAyOwoKIAoKCmNvbnN0IGludCBET19ISVNUCQk9IDE7CmNvbnN0IGludCBET19BVkcJCT0gMjsK CiAKCgpjb25zdCBpbnQga1ZQQXJjaDQwCQk9IDQwOwpjb25zdCBpbnQga1ZQQXJjaDYwCQk9IDYw Owpjb25zdCBpbnQga1ZQQXJjaElCQgkJPSAxOwoKIAoKCiAKY29uc3QgaW50IGtJdGVtU25hcFNp emUgPSAyMDA7CgoKIAoKCgoKCmNvbnN0IHVfaW50IGtDYW1lcmFXaWR0aFNtYWxsCT0gNTEyOwpj b25zdCB1X2ludCBrQ2FtZXJhV2lkdGhNZWRpdW0JPSA2NDA7CmNvbnN0IHVfaW50IGtDYW1lcmFX aWR0aExhcmdlCT0gMTAwMDsKIAoKCmNvbnN0IHVfaW50IGtDYW1lcmFXaWR0aENhbWVyYUxpbmsg PSAxMjgwOwoKY29uc3QgdV9pbnQga0NhbWVyYUhlaWdodE5vcm1hbAkJPSA0ODA7CmNvbnN0IHVf aW50IGtDYW1lcmFIZWlnaHRMYXJnZQkJPSAxMDAwOwpjb25zdCB1X2ludCBrQ2FtZXJhSGVpZ2h0 Q2FtZXJhTGluawk9IDEwMjQ7CgojIDEzICIuLi8uLi9pbmNsdWRlL2xpYmluYy9saWJ1dGlsLmgi IDIKCiMgMSAiLi4vLi4vaW5jbHVkZS9saWJpbmMvaXBjaGRyLmgiIDEKCgoKdHlwZWRlZiBzdHJ1 Y3QgY2hhbiB7CiAgICB1bnNpZ25lZCBzaG9ydCBjaF9kX21jaDo0LCBjaF9kX3N1Yjo0LCBjaF9k X2NtZDo4LCBjaF9kX21zZzoxNjsKfSBDaGFuOwoKdHlwZWRlZiBzdHJ1Y3QgbmV0IHsKICAgIHVu c2lnbmVkIHNob3J0IG5ldF9kX25ldGFkZHI6OCwgbmV0X2Rfdm1jaDo4LCBuZXRfeF9tc2c6MTY7 Cn0gTmV0OwoKdHlwZWRlZiB1bmlvbiBMb25nX2RhdGEgewogICAgQ2hhbiBjaGFuOwogICAgTmV0 ICBuZXQ7CiAgICBsb25nIGRhdGE7Cn0gTG9uZzsKCgoKCgoKCgoKIyAxNCAiLi4vLi4vaW5jbHVk ZS9saWJpbmMvbGlidXRpbC5oIiAyCgoKCgoKIyAxICIvb3B0L212cGxvY2FsL2xpYi9nY2MtbGli L3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdHJp bmciIDEgMwogCgoKCgojIDEgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNv bGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAx IDMKIAogCgogCiAKIAogCiAKCiAKIAogCiAKCiAKIAogCgogCiAKIAogCiAKCiAKIAoKCgoKCiNw cmFnbWEgaW50ZXJmYWNlCgoKIyAxICIvb3B0L212cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1 bi1zb2xhcmlzMi8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9jc3RkZGVmIiAxIDMK IAogCgoKCiMgMSAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIv Mi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzQyICIvb3B0L212cGxvY2FsL2xpYi9n Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMyA0Cgoj IDYgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8u Li8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2NzdGRkZWYiIDIgMwoKCiMgMzUgIi9vcHQvbXZwbG9j YWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNs dWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAyIDMKCiMgMSAiL29wdC9tdnBsb2NhbC9saWIvZ2Nj LWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMv c3RkL3N0cmFpdHMuaCIgMSAzCiAKIAoKIAogCiAKIAogCgogCiAKIAogCgogCiAKIAoKIAogCiAK IAogCgogCiAKCgoKCgogCiNwcmFnbWEgaW50ZXJmYWNlICJzdGQvc3RyYWl0cy5oIgoKCgoKZXh0 ZXJuICJDKysiIHsKdGVtcGxhdGUgPGNsYXNzIGNoYXJUPgpzdHJ1Y3Qgc3RyaW5nX2NoYXJfdHJh aXRzIHsKICB0eXBlZGVmIGNoYXJUIGNoYXJfdHlwZTsgIAoKICAgCgogIHN0YXRpYyB2b2lkIGFz c2lnbiAoY2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikKICAgIHsgYzEgPSBjMjsg fQogIHN0YXRpYyBib29sIGVxIChjb25zdCBjaGFyX3R5cGUmIGMxLCBjb25zdCBjaGFyX3R5cGUm IGMyKQogICAgeyByZXR1cm4gKGMxID09IGMyKTsgfQogIHN0YXRpYyBib29sIG5lIChjb25zdCBj aGFyX3R5cGUmIGMxLCBjb25zdCBjaGFyX3R5cGUmIGMyKQogICAgeyByZXR1cm4gIShjMSA9PSBj Mik7IH0KICBzdGF0aWMgYm9vbCBsdCAoY29uc3QgY2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcl90 eXBlJiBjMikKICAgIHsgcmV0dXJuIChjMSA8IGMyKTsgfQogIHN0YXRpYyBjaGFyX3R5cGUgZW9z ICgpIHsgcmV0dXJuIGNoYXJfdHlwZSgpOyB9ICAKICBzdGF0aWMgYm9vbCBpc19kZWwoY2hhcl90 eXBlIGEpIHsgcmV0dXJuIDA7IH0KICAgCiAgCiAgIAoKICBzdGF0aWMgaW50IGNvbXBhcmUgKGNv bnN0IGNoYXJfdHlwZSogczEsIGNvbnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuKQogICAgewog ICAgICBzaXplX3QgaTsKICAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkKCWlmIChuZSAoczFb aV0sIHMyW2ldKSkKCSAgcmV0dXJuIGx0IChzMVtpXSwgczJbaV0pID8gLTEgOiAxOwoKICAgICAg cmV0dXJuIDA7CiAgICB9CiAgICAKICBzdGF0aWMgc2l6ZV90IGxlbmd0aCAoY29uc3QgY2hhcl90 eXBlKiBzKQogICAgewogICAgICBzaXplX3QgbCA9IDA7CiAgICAgIHdoaWxlIChuZSAoKnMrKywg ZW9zICgpKSkKCSsrbDsKICAgICAgcmV0dXJuIGw7CiAgICB9CgogIHN0YXRpYyBjaGFyX3R5cGUq IGNvcHkgKGNoYXJfdHlwZSogczEsIGNvbnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuKQogICAg ewogICAgICBmb3IgKDsgbi0tOyApCglhc3NpZ24gKHMxW25dLCBzMltuXSk7CiAgICAgIHJldHVy biBzMTsKICAgIH0KCiAgc3RhdGljIGNoYXJfdHlwZSogbW92ZSAoY2hhcl90eXBlKiBzMSwgY29u c3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4pCiAgICB7CiAgICAgIGNoYXJfdHlwZSBhW25dOwog ICAgICBzaXplX3QgaTsKICAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkKCWFzc2lnbiAoYVtp XSwgczJbaV0pOwogICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKQoJYXNzaWduIChzMVtpXSwg YVtpXSk7CiAgICAgIHJldHVybiBzMTsKICAgIH0KCiAgc3RhdGljIGNoYXJfdHlwZSogc2V0IChj aGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUmIGMsIHNpemVfdCBuKQogICAgewogICAgICBm b3IgKDsgbi0tOyApCglhc3NpZ24gKHMxW25dLCBjKTsKICAgICAgcmV0dXJuIHMxOwogICAgfQp9 OwoKY2xhc3MgaXN0cmVhbTsKY2xhc3Mgb3N0cmVhbTsKIyAxICIvb3B0L212cGxvY2FsL2xpYi9n Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKyst My9jY3R5cGUiIDEgMwogCiAKCgoKIyAxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMSAzIDQKIAog CgogCiAKIAoKIAoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKWN0eXBlLmgJMS4zMwk5OS8wOC8x MCBTTUkiCQoKIyAxICIvdXNyL2luY2x1ZGUvaXNvL2N0eXBlX2lzby5oIiAxIDMgNAogCiAKCiAK IAogCgogCgoKCgogCgoKCgoKCgoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKWN0eXBlX2lzby5o CTEuMQk5OS8wOC8wOSBTTUkiIAoKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKZXh0ZXJuIGludCBpc2FsbnVtKGludCk7CmV4dGVybiBpbnQgaXNhbHBoYShpbnQp OwpleHRlcm4gaW50IGlzY250cmwoaW50KTsKZXh0ZXJuIGludCBpc2RpZ2l0KGludCk7CmV4dGVy biBpbnQgaXNncmFwaChpbnQpOwpleHRlcm4gaW50IGlzbG93ZXIoaW50KTsKZXh0ZXJuIGludCBp c3ByaW50KGludCk7CmV4dGVybiBpbnQgaXNwdW5jdChpbnQpOwpleHRlcm4gaW50IGlzc3BhY2Uo aW50KTsKZXh0ZXJuIGludCBpc3VwcGVyKGludCk7CmV4dGVybiBpbnQgaXN4ZGlnaXQoaW50KTsK CgoKCgoKCmV4dGVybiBpbnQgdG9sb3dlcihpbnQpOwpleHRlcm4gaW50IHRvdXBwZXIoaW50KTsK CgoKCgpleHRlcm4gdW5zaWduZWQgY2hhcglfX2N0eXBlW107CmV4dGVybiB1bnNpZ25lZCBpbnQJ Kl9fY3R5cGVfbWFzazsKZXh0ZXJuIGludAkJKl9fdHJhbnNfdXBwZXI7CmV4dGVybiBpbnQJCSpf X3RyYW5zX2xvd2VyOwoKCgojIDEyOSAiL3Vzci9pbmNsdWRlL2lzby9jdHlwZV9pc28uaCIgMyA0 CgoKIyAxNDQgIi91c3IvaW5jbHVkZS9pc28vY3R5cGVfaXNvLmgiIDMgNAoKCgoKCgoKCgoKCgoK CgoKCgoKIyAxODMgIi91c3IvaW5jbHVkZS9pc28vY3R5cGVfaXNvLmgiIDMgNAoKCgp9CgoKCiMg MTggIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMgNAoKCiAKCgoKIyAzOCAiL3Vzci9pbmNsdWRl L2N0eXBlLmgiIDMgNAoKCgpleHRlcm4gIkMiIHsKCgoKCgoKCmV4dGVybiBpbnQgaXNhc2NpaShp bnQpOwpleHRlcm4gaW50IHRvYXNjaWkoaW50KTsKZXh0ZXJuIGludCBfdG9sb3dlcihpbnQpOwpl eHRlcm4gaW50IF90b3VwcGVyKGludCk7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyA4NyAiL3Vz ci9pbmNsdWRlL2N0eXBlLmgiIDMgNAoKCgp9CgoKCiMgNiAiL29wdC9tdnBsb2NhbC9saWIvZ2Nj LWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMv Y2N0eXBlIiAyIDMKCgojIDEwNSAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t c29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL3N0cmFpdHMuaCIg MiAzCgojIDEgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIu OTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2NzdHJpbmciIDEgMwogCiAKCgoKCgoKIyA5 NCAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4u Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvY3N0cmluZyIgMwoKCgojIDEwNiAiL29wdC9tdnBsb2Nh bC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1 ZGUvZysrLTMvc3RkL3N0cmFpdHMuaCIgMiAzCgoKc3RydWN0IHN0cmluZ19jaGFyX3RyYWl0cyA8 Y2hhcj4gewogIHR5cGVkZWYgY2hhciBjaGFyX3R5cGU7CgogIHN0YXRpYyB2b2lkIGFzc2lnbiAo Y2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikKICAgIHsgYzEgPSBjMjsgfQogIHN0 YXRpYyBib29sIGVxIChjb25zdCBjaGFyX3R5cGUgJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikK ICAgIHsgcmV0dXJuIChjMSA9PSBjMik7IH0KICBzdGF0aWMgYm9vbCBuZSAoY29uc3QgY2hhcl90 eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikKICAgIHsgcmV0dXJuIChjMSAhPSBjMik7IH0K ICBzdGF0aWMgYm9vbCBsdCAoY29uc3QgY2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBj MikKICAgIHsgcmV0dXJuIChjMSA8IGMyKTsgfQogIHN0YXRpYyBjaGFyX3R5cGUgZW9zICgpIHsg cmV0dXJuIDA7IH0KICBzdGF0aWMgYm9vbCBpc19kZWwoY2hhcl90eXBlIGEpIHsgcmV0dXJuICgo X19jdHlwZSArIDEpWyBhIF0gJiAweDAwMDAwMDA4ICkgOyB9CgogIHN0YXRpYyBpbnQgY29tcGFy ZSAoY29uc3QgY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4pCiAg ICB7IHJldHVybiBtZW1jbXAgKHMxLCBzMiwgbik7IH0KICBzdGF0aWMgc2l6ZV90IGxlbmd0aCAo Y29uc3QgY2hhcl90eXBlKiBzKQogICAgeyByZXR1cm4gc3RybGVuIChzKTsgfQogIHN0YXRpYyBj aGFyX3R5cGUqIGNvcHkgKGNoYXJfdHlwZSogczEsIGNvbnN0IGNoYXJfdHlwZSogczIsIHNpemVf dCBuKQogICAgeyByZXR1cm4gKGNoYXJfdHlwZSopIG1lbWNweSAoczEsIHMyLCBuKTsgfQogIHN0 YXRpYyBjaGFyX3R5cGUqIG1vdmUgKGNoYXJfdHlwZSogczEsIGNvbnN0IGNoYXJfdHlwZSogczIs IHNpemVfdCBuKQogICAgeyByZXR1cm4gKGNoYXJfdHlwZSopIG1lbW1vdmUgKHMxLCBzMiwgbik7 IH0KICBzdGF0aWMgY2hhcl90eXBlKiBzZXQgKGNoYXJfdHlwZSogczEsIGNvbnN0IGNoYXJfdHlw ZSYgYywgc2l6ZV90IG4pCiAgICB7IHJldHVybiAoY2hhcl90eXBlKikgbWVtc2V0IChzMSwgYywg bik7IH0KfTsKCiMgMTU5ICIvb3B0L212cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh cmlzMi8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGQvc3RyYWl0cy5oIiAzCgp9 ICAKCiMgMzYgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIu OTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAyIDMKCgogCiMg MSAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4u Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvYWxsb2MuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCiMg MSAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4u Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2NvbmZpZy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKCgogCiAKIAog CiAKIAogCiAKIAogCiAKCgogCgogCiAKIAogCiAKIAogCgoKCgoKCgoKIyAxNDggIi9vcHQvbXZw bG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9p bmNsdWRlL2crKy0zL3N0bF9jb25maWcuaCIgMwoKCgojIDEgIi9vcHQvbXZwbG9jYWwvbGliL2dj Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9zcGFyYy1zdW4tc29s YXJpczIvaW5jbHVkZS9fR19jb25maWcuaCIgMSAzIDQKICAKCgoKCgoKCgoKdHlwZWRlZiAgICAg ICAgICBpbnQgICBfR19pbnQ4X3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19RSV9fKSkpOwp0 eXBlZGVmIHVuc2lnbmVkIGludCAgX0dfdWludDhfdCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhf X1FJX18pKSk7CnR5cGVkZWYgICAgICAgICAgaW50ICBfR19pbnQxNl90IF9fYXR0cmlidXRlX18o KF9fbW9kZV9fKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDE2X3QgX19h dHRyaWJ1dGVfXygoX19tb2RlX18oX19ISV9fKSkpOwp0eXBlZGVmICAgICAgICAgIGludCAgX0df aW50MzJfdCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX1NJX18pKSk7CnR5cGVkZWYgdW5zaWdu ZWQgaW50IF9HX3VpbnQzMl90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fU0lfXykpKTsKdHlw ZWRlZiAgICAgICAgICBpbnQgIF9HX2ludDY0X3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19E SV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50NjRfdCBfX2F0dHJpYnV0ZV9fKChf X21vZGVfXyhfX0RJX18pKSk7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIF9HX2xs b25nOwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIF9HX3VsbG9uZzsK CgoKCgoKCgp0eXBlZGVmIGxvbmcgX0dfY2xvY2tfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9H X2Rldl90Owp0eXBlZGVmIGxvbmcgX0dfZnBvc190Owp0eXBlZGVmIGxvbmcgX0dfZ2lkX3Q7CnR5 cGVkZWYgdW5zaWduZWQgbG9uZyBfR19pbm9fdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9HX21v ZGVfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9HX25saW5rX3Q7CnR5cGVkZWYgbG9uZyBfR19v ZmZfdDsKdHlwZWRlZiBsb25nIF9HX3BpZF90OwoKCgp0eXBlZGVmIGludCBfR19wdHJkaWZmX3Q7 CnR5cGVkZWYgaW50ICAgX0dfc2lnc2V0X3Q7CgoKCnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3Np emVfdDsKdHlwZWRlZiBsb25nIF9HX3RpbWVfdDsKdHlwZWRlZiBsb25nIF9HX3VpZF90Owp0eXBl ZGVmIGxvbmcgaW50IF9HX3djaGFyX3Q7CgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgaW50IF9HX3Nz aXplX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3dpbnRfdDsKdHlwZWRlZiB2b2lkICogX0df dmFfbGlzdDsKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIv c3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAoKCgoKCgog CgoKIyAxOSAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45 NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIvb3B0L212 cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1LjMvaW5jbHVkZS9zdGRk ZWYuaCIgMyA0CgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCgojIDEy NiAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zL2lu Y2x1ZGUvc3RkZGVmLmgiIDMgNAoKCiAKCgoKCiAKCiAKCgoKIyAxODcgIi9vcHQvbXZwbG9jYWwv bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAz IDQKCgoKCgoKIAoKCgoKIAoKCgojIDI2OCAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFy Yy1zdW4tc29sYXJpczIvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAoKCgoKCgoKCgoKCgoK CgoKCiAKCiAKCiMgMzE3ICIvb3B0L212cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh cmlzMi8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CgoKCgogCgoKCgoKCgoKCgoKCgogCgoK CgoKCgojIDg2ICIvb3B0L212cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8y Ljk1LjMvLi4vLi4vLi4vLi4vc3BhcmMtc3VuLXNvbGFyaXMyL2luY2x1ZGUvX0dfY29uZmlnLmgi IDIgMyA0CgoKIyAxNTEgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy aXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9jb25maWcuaCIgMiAzCgoK CgoKCgoKCgoKCgoKCgoKIyAxNzggIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3Vu LXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9jb25maWcuaCIg MwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjM0ICIvb3B0L212cGxvY2FsL2xp Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9n KystMy9zdGxfY29uZmlnLmgiIDMKCgojIDI0OCAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9z cGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2Nv bmZpZy5oIiAzCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAogCiAKIAoKCgoK CgoKCgoKCgoKCgoKCgogCiAKIyAzMTYgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMt c3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9jb25maWcu aCIgMwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKIAogCiMgMTggIi9v cHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8u Li8uLi9pbmNsdWRlL2crKy0zL2FsbG9jLmgiIDIgMwoKCgojIDEgIi9vcHQvbXZwbG9jYWwvbGli L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2cr Ky0zL3N0bF9hbGxvYy5oIiAxIDMKIAoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgog CiAKIAogCiAKIAoKCgoKCiMgMSAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t c29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvaW9zdHJlYW0uaCIgMSAz CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoKCiMgMSAiL29w dC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4u Ly4uL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKI3ByYWdtYSBpbnRlcmZhY2UKCgogICAKCgoKZXh0ZXJuICJDIiB7CiMgMSAiL29wdC9t dnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4u L2luY2x1ZGUvZysrLTMvbGliaW8uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKIyA1NSAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1z dW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvbGliaW8uaCIgMwoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgojIDEwNCAiL29wdC9tdnBsb2Nh bC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1 ZGUvZysrLTMvbGliaW8uaCIgMwoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CiAKCgoKCgoKCgoKCgoKCgoKCgoKCnN0cnVjdCBfSU9fanVtcF90OyAgc3RydWN0IF9JT19GSUxF OwoKIAojIDE3NSAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIv Mi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvbGliaW8uaCIgMwoKCgoKCgoKCgogICAg dHlwZWRlZiB2b2lkIF9JT19sb2NrX3Q7CgoKCgoKIAoKc3RydWN0IF9JT19tYXJrZXIgewogIHN0 cnVjdCBfSU9fbWFya2VyICpfbmV4dDsKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOwogICAKCiAg IAogIGludCBfcG9zOwojIDIwOCAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t c29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvbGliaW8uaCIgMwoKfTsK CnN0cnVjdCBfSU9fRklMRSB7CiAgaW50IF9mbGFnczsJCSAKCgogICAKICAgCiAgY2hhciogX0lP X3JlYWRfcHRyOwkgCiAgY2hhciogX0lPX3JlYWRfZW5kOwkgCiAgY2hhciogX0lPX3JlYWRfYmFz ZTsJIAogIGNoYXIqIF9JT193cml0ZV9iYXNlOwkgCiAgY2hhciogX0lPX3dyaXRlX3B0cjsJIAog IGNoYXIqIF9JT193cml0ZV9lbmQ7CSAKICBjaGFyKiBfSU9fYnVmX2Jhc2U7CSAKICBjaGFyKiBf SU9fYnVmX2VuZDsJIAogICAKICBjaGFyICpfSU9fc2F2ZV9iYXNlOyAgCiAgY2hhciAqX0lPX2Jh Y2t1cF9iYXNlOyAgIAogIGNoYXIgKl9JT19zYXZlX2VuZDsgIAoKICBzdHJ1Y3QgX0lPX21hcmtl ciAqX21hcmtlcnM7CgogIHN0cnVjdCBfSU9fRklMRSAqX2NoYWluOwoKICBpbnQgX2ZpbGVubzsK ICBpbnQgX2Jsa3NpemU7CgoKCiAgX0dfb2ZmX3QgIF9vZmZzZXQ7CgoKCiAgIAogIHVuc2lnbmVk IHNob3J0IF9jdXJfY29sdW1uOwogIGNoYXIgX3VudXNlZDsKICBjaGFyIF9zaG9ydGJ1ZlsxXTsK CiAgIAoKCgoKCgoKCn07CgoKCgoKCgoKCgoKc3RydWN0IF9JT19GSUxFX3BsdXM7CmV4dGVybiBz dHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fc3RkaW5fLCBfSU9fc3Rkb3V0XywgX0lPX3N0ZGVycl87 CgoKCgoKIAp0eXBlZGVmIHN0cnVjdAp7CiAgX0dfc3NpemVfdCAgKCpyZWFkKSAgKHN0cnVjdCBf SU9fRklMRSAqLCB2b2lkICosIF9HX3NzaXplX3QgKSAgOwogIF9HX3NzaXplX3QgICgqd3JpdGUp ICAoc3RydWN0IF9JT19GSUxFICosIGNvbnN0IHZvaWQgKiwgX0dfc3NpemVfdCApICA7CiAgX0df b2ZmX3QgICgqc2VlaykgIChzdHJ1Y3QgX0lPX0ZJTEUgKiwgX0dfb2ZmX3QgLCBpbnQpICA7CiAg aW50ICgqY2xvc2UpICAoc3RydWN0IF9JT19GSUxFICopICA7Cn0gX0lPX2Nvb2tpZV9pb19mdW5j dGlvbnNfdDsKCiAKc3RydWN0IF9JT19jb29raWVfZmlsZQp7CiAgc3RydWN0IF9JT19GSUxFIGZp bGU7CiAgY29uc3Qgdm9pZCAqdnRhYmxlOwogIHZvaWQgKmNvb2tpZTsKICBfSU9fY29va2llX2lv X2Z1bmN0aW9uc190IGlvX2Z1bmN0aW9uczsKfTsKCgoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGlu dCBfX3VuZGVyZmxvdyAgKF9JT19GSUxFICopICA7CmV4dGVybiBpbnQgX191ZmxvdyAgKF9JT19G SUxFICopICA7CmV4dGVybiBpbnQgX19vdmVyZmxvdyAgKF9JT19GSUxFICosIGludCkgIDsKCgoK CgoKCgoKCgoKCgoKCgpleHRlcm4gaW50IF9JT19nZXRjICAoX0lPX0ZJTEUgKl9fZnApICA7CmV4 dGVybiBpbnQgX0lPX3B1dGMgIChpbnQgX19jLCBfSU9fRklMRSAqX19mcCkgIDsKZXh0ZXJuIGlu dCBfSU9fZmVvZiAgKF9JT19GSUxFICpfX2ZwKSAgOwpleHRlcm4gaW50IF9JT19mZXJyb3IgIChf SU9fRklMRSAqX19mcCkgIDsKCmV4dGVybiBpbnQgX0lPX3BlZWtjX2xvY2tlZCAgKF9JT19GSUxF ICpfX2ZwKSAgOwoKIAoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlICAoX0lPX0ZJTEUgKikg IDsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlICAoX0lPX0ZJTEUgKikgIDsKZXh0ZXJuIGlu dCBfSU9fZnRyeWxvY2tmaWxlICAoX0lPX0ZJTEUgKikgIDsKCgoKCgoKCgoKCgoKCmV4dGVybiBp bnQgX0lPX3Zmc2NhbmYgIChfSU9fRklMRSAqLCBjb25zdCBjaGFyICosIF9HX3ZhX2xpc3QgLCBp bnQgKikgIDsKZXh0ZXJuIGludCBfSU9fdmZwcmludGYgIChfSU9fRklMRSAqLCBjb25zdCBjaGFy ICosIF9HX3ZhX2xpc3QgKSAgOwpleHRlcm4gX0dfc3NpemVfdCAgX0lPX3BhZG4gIChfSU9fRklM RSAqLCBpbnQsIF9HX3NzaXplX3QgKSAgOwpleHRlcm4gX0dfc2l6ZV90ICBfSU9fc2dldG4gIChf SU9fRklMRSAqLCB2b2lkICosIF9HX3NpemVfdCApICA7CgoKCgoKZXh0ZXJuIF9HX29mZl90ICBf SU9fc2Vla29mZiAgKF9JT19GSUxFICosIF9HX29mZl90ICwgaW50LCBpbnQpICA7CmV4dGVybiBf R19vZmZfdCAgX0lPX3NlZWtwb3MgIChfSU9fRklMRSAqLCBfR19vZmZfdCAsIGludCkgIDsKCgpl eHRlcm4gdm9pZCBfSU9fZnJlZV9iYWNrdXBfYXJlYSAgKF9JT19GSUxFICopICA7CgoKfQoKCgoj IDM2ICIvb3B0L212cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1LjMv Li4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdHJlYW1idWYuaCIgMiAzCgp9CiAKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gIkMrKyIgewpjbGFzcyBpc3RyZWFtOyAgCmNsYXNzIG9z dHJlYW07IGNsYXNzIHN0cmVhbWJ1ZjsKCiAKCgoKCgoKCnR5cGVkZWYgX0dfb2ZmX3QgIHN0cmVh bW9mZjsKdHlwZWRlZiBfR19vZmZfdCAgc3RyZWFtcG9zOwoKdHlwZWRlZiBfR19zc2l6ZV90ICBz dHJlYW1zaXplOwoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fZm10ZmxhZ3M7CnR5cGVkZWYgdW5z aWduZWQgY2hhciBfX2lvc3RhdGU7CgpzdHJ1Y3QgX2lvc19maWVsZHMKeyAgCiAgICBzdHJlYW1i dWYgKl9zdHJidWY7CiAgICBvc3RyZWFtKiBfdGllOwogICAgaW50IF93aWR0aDsKICAgIF9fZm10 ZmxhZ3MgX2ZsYWdzOwogICAgc2hvcnQgIF9maWxsOwogICAgX19pb3N0YXRlIF9zdGF0ZTsKICAg IF9faW9zdGF0ZSBfZXhjZXB0aW9uczsKICAgIGludCBfcHJlY2lzaW9uOwoKICAgIHZvaWQgKl9h cnJheXM7ICAKfTsKCgoKCgoKCgoKCgoKCgoKIyAxMjQgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1s aWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0 cmVhbWJ1Zi5oIiAzCgoKY2xhc3MgaW9zIDogcHVibGljIF9pb3NfZmllbGRzIHsKICBpb3MmIG9w ZXJhdG9yPShpb3MmKTsgICAKICBpb3MgKGNvbnN0IGlvcyYpOyAgCiAgcHVibGljOgogICAgdHlw ZWRlZiBfX2ZtdGZsYWdzIGZtdGZsYWdzOwogICAgdHlwZWRlZiBpbnQgaW9zdGF0ZTsKICAgIHR5 cGVkZWYgaW50IG9wZW5tb2RlOwogICAgdHlwZWRlZiBfR19zc2l6ZV90ICBzdHJlYW1zaXplOwog ICAgZW51bSBpb19zdGF0ZSB7Cglnb29kYml0ID0gMCAsCgllb2ZiaXQgPSAxICwKCWZhaWxiaXQg PSAyICwKCWJhZGJpdCA9IDQgIH07CiAgICBlbnVtIG9wZW5fbW9kZSB7CglpbiA9IDEgLAoJb3V0 ID0gMiAsCglhdGUgPSA0ICwKCWFwcCA9IDggLAoJdHJ1bmMgPSAxNiAsCglub2NyZWF0ZSA9IDMy ICwKCW5vcmVwbGFjZSA9IDY0ICwKCWJpbiA9IDEyOCAsICAKCWJpbmFyeSA9IDEyOCAgfTsKICAg IGVudW0gc2Vla19kaXIgeyBiZWcsIGN1ciwgZW5kfTsKICAgIHR5cGVkZWYgZW51bSBzZWVrX2Rp ciBzZWVrZGlyOwogICAgIAogICAgZW51bSB7IHNraXB3cz0gMDEgLAoJICAgbGVmdD0gMDIgLCBy aWdodD0gMDQgLCBpbnRlcm5hbD0gMDEwICwKCSAgIGRlYz0gMDIwICwgb2N0PSAwNDAgLCBoZXg9 IDAxMDAgLAoJICAgc2hvd2Jhc2U9IDAyMDAgLCBzaG93cG9pbnQ9IDA0MDAgLAoJICAgdXBwZXJj YXNlPSAwMTAwMCAsIHNob3dwb3M9IDAyMDAwICwKCSAgIHNjaWVudGlmaWM9IDA0MDAwICwgZml4 ZWQ9IDAxMDAwMCAsCgkgICB1bml0YnVmPSAwMjAwMDAgLCBzdGRpbz0gMDQwMDAwIAoKCgoJICAg fTsKICAgIGVudW0geyAgCgliYXNlZmllbGQ9ZGVjK29jdCtoZXgsCglmbG9hdGZpZWxkID0gc2Np ZW50aWZpYytmaXhlZCwKCWFkanVzdGZpZWxkID0gbGVmdCtyaWdodCtpbnRlcm5hbAogICAgfTsK CiMgMTc3ICIvb3B0L212cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1 LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdHJlYW1idWYuaCIgMwoKCiAgICBvc3RyZWFt KiB0aWUoKSBjb25zdCB7IHJldHVybiBfdGllOyB9CiAgICBvc3RyZWFtKiB0aWUob3N0cmVhbSog dmFsKSB7IG9zdHJlYW0qIHNhdmU9X3RpZTsgX3RpZT12YWw7IHJldHVybiBzYXZlOyB9CgogICAg IAogICAgc2hvcnQgIGZpbGwoKSBjb25zdCB7IHJldHVybiBfZmlsbDsgfQogICAgc2hvcnQgIGZp bGwoc2hvcnQgIG5ld2YpCgl7c2hvcnQgIG9sZGYgPSBfZmlsbDsgX2ZpbGwgPSBuZXdmOyByZXR1 cm4gb2xkZjt9CiAgICBmbXRmbGFncyBmbGFncygpIGNvbnN0IHsgcmV0dXJuIF9mbGFnczsgfQog ICAgZm10ZmxhZ3MgZmxhZ3MoZm10ZmxhZ3MgbmV3X3ZhbCkgewoJZm10ZmxhZ3Mgb2xkX3ZhbCA9 IF9mbGFnczsgX2ZsYWdzID0gbmV3X3ZhbDsgcmV0dXJuIG9sZF92YWw7IH0KICAgIGludCBwcmVj aXNpb24oKSBjb25zdCB7IHJldHVybiBfcHJlY2lzaW9uOyB9CiAgICBpbnQgcHJlY2lzaW9uKGlu dCBuZXdwKSB7Cgl1bnNpZ25lZCBzaG9ydCBvbGRwID0gX3ByZWNpc2lvbjsgX3ByZWNpc2lvbiA9 ICh1bnNpZ25lZCBzaG9ydCluZXdwOwoJcmV0dXJuIG9sZHA7IH0KICAgIGZtdGZsYWdzIHNldGYo Zm10ZmxhZ3MgdmFsKSB7CglmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwoJX2ZsYWdzIHw9IHZh bDsgcmV0dXJuIG9sZGJpdHM7IH0KICAgIGZtdGZsYWdzIHNldGYoZm10ZmxhZ3MgdmFsLCBmbXRm bGFncyBtYXNrKSB7CglmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwoJX2ZsYWdzID0gKF9mbGFn cyAmIH5tYXNrKSB8ICh2YWwgJiBtYXNrKTsgcmV0dXJuIG9sZGJpdHM7IH0KICAgIGZtdGZsYWdz IHVuc2V0ZihmbXRmbGFncyBtYXNrKSB7CglmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwoJX2Zs YWdzICY9IH5tYXNrOyByZXR1cm4gb2xkYml0czsgfQogICAgaW50IHdpZHRoKCkgY29uc3QgeyBy ZXR1cm4gX3dpZHRoOyB9CiAgICBpbnQgd2lkdGgoaW50IHZhbCkgeyBpbnQgc2F2ZSA9IF93aWR0 aDsgX3dpZHRoID0gdmFsOyByZXR1cm4gc2F2ZTsgfQoKCgoKICAgIHZvaWQgX3Rocm93X2ZhaWx1 cmUoKSBjb25zdCB7IH0KCiAgICB2b2lkIGNsZWFyKGlvc3RhdGUgc3RhdGUgPSAwKSB7Cglfc3Rh dGUgPSBfc3RyYnVmID8gc3RhdGUgOiBzdGF0ZXxiYWRiaXQ7CglpZiAoX3N0YXRlICYgX2V4Y2Vw dGlvbnMpIF90aHJvd19mYWlsdXJlKCk7IH0KICAgIHZvaWQgc2V0KGlvc3RhdGUgZmxhZykgeyBf c3RhdGUgfD0gZmxhZzsKCWlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUo KTsgfQogICAgdm9pZCBzZXRzdGF0ZShpb3N0YXRlIGZsYWcpIHsgX3N0YXRlIHw9IGZsYWc7ICAK CWlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQogICAgaW50IGdv b2QoKSBjb25zdCB7IHJldHVybiBfc3RhdGUgPT0gMDsgfQogICAgaW50IGVvZigpIGNvbnN0IHsg cmV0dXJuIF9zdGF0ZSAmIGlvczo6ZW9mYml0OyB9CiAgICBpbnQgZmFpbCgpIGNvbnN0IHsgcmV0 dXJuIF9zdGF0ZSAmIChpb3M6OmJhZGJpdHxpb3M6OmZhaWxiaXQpOyB9CiAgICBpbnQgYmFkKCkg Y29uc3QgeyByZXR1cm4gX3N0YXRlICYgaW9zOjpiYWRiaXQ7IH0KICAgIGlvc3RhdGUgcmRzdGF0 ZSgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZTsgfQogICAgb3BlcmF0b3Igdm9pZCooKSBjb25zdCB7 IHJldHVybiBmYWlsKCkgPyAodm9pZCopMCA6ICh2b2lkKikoLTEpOyB9CiAgICBpbnQgb3BlcmF0 b3IhKCkgY29uc3QgeyByZXR1cm4gZmFpbCgpOyB9CiAgICBpb3N0YXRlIGV4Y2VwdGlvbnMoKSBj b25zdCB7IHJldHVybiBfZXhjZXB0aW9uczsgfQogICAgdm9pZCBleGNlcHRpb25zKGlvc3RhdGUg ZW5hYmxlKSB7CglfZXhjZXB0aW9ucyA9IGVuYWJsZTsKCWlmIChfc3RhdGUgJiBfZXhjZXB0aW9u cykgX3Rocm93X2ZhaWx1cmUoKTsgfQoKICAgIHN0cmVhbWJ1ZiogcmRidWYoKSBjb25zdCB7IHJl dHVybiBfc3RyYnVmOyB9CiAgICBzdHJlYW1idWYqIHJkYnVmKHN0cmVhbWJ1ZiAqX3MpIHsKICAg ICAgc3RyZWFtYnVmICpfb2xkID0gX3N0cmJ1ZjsgX3N0cmJ1ZiA9IF9zOyBjbGVhciAoKTsgcmV0 dXJuIF9vbGQ7IH0KCiAgICBzdGF0aWMgaW50IHN5bmNfd2l0aF9zdGRpbyhpbnQgb24pOwogICAg c3RhdGljIHZvaWQgc3luY193aXRoX3N0ZGlvKCkgeyBzeW5jX3dpdGhfc3RkaW8oMSk7IH0KICAg IHN0YXRpYyBmbXRmbGFncyBiaXRhbGxvYygpOwogICAgc3RhdGljIGludCB4YWxsb2MoKTsKICAg IHZvaWQqJiBwd29yZChpbnQpOwogICAgdm9pZCogcHdvcmQoaW50KSBjb25zdDsKICAgIGxvbmcm IGl3b3JkKGludCk7CiAgICBsb25nIGl3b3JkKGludCkgY29uc3Q7CgoKCgoKCgoKCiAgICAgCiAg ICBjbGFzcyBJbml0IHsKICAgIHB1YmxpYzoKICAgICAgSW5pdCAoKSB7IH0KICAgIH07CgogIHBy b3RlY3RlZDoKICAgIGlubGluZSBpb3Moc3RyZWFtYnVmKiBzYiA9IDAsIG9zdHJlYW0qIHRpZV90 byA9IDApOwogICAgaW5saW5lIHZpcnR1YWwgfmlvcygpOwogICAgaW5saW5lIHZvaWQgaW5pdChz dHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWUgPSAwKTsKfTsKCgoKCnR5cGVkZWYgaW9zOjpzZWVr X2RpciBfc2Vla19kaXI7CgoKIAogCiAKIAogCgogCiAKY2xhc3Mgc3RyZWFtbWFya2VyIDogcHJp dmF0ZSBfSU9fbWFya2VyIHsKICAgIGZyaWVuZCBjbGFzcyBzdHJlYW1idWY7CiAgICB2b2lkIHNl dF9vZmZzZXQoaW50IG9mZnNldCkgeyBfcG9zID0gb2Zmc2V0OyB9CiAgcHVibGljOgogICAgc3Ry ZWFtbWFya2VyKHN0cmVhbWJ1ZiAqc2IpOwogICAgfnN0cmVhbW1hcmtlcigpOwogICAgaW50IHNh dmluZygpIHsgcmV0dXJuICAxOyB9CiAgICBpbnQgZGVsdGEoc3RyZWFtbWFya2VyJik7CiAgICBp bnQgZGVsdGEoKTsKfTsKCnN0cnVjdCBzdHJlYW1idWYgOiBwdWJsaWMgX0lPX0ZJTEUgeyAgCiAg ICBmcmllbmQgY2xhc3MgaW9zOwogICAgZnJpZW5kIGNsYXNzIGlzdHJlYW07CiAgICBmcmllbmQg Y2xhc3Mgb3N0cmVhbTsKICAgIGZyaWVuZCBjbGFzcyBzdHJlYW1tYXJrZXI7CiAgICBjb25zdCB2 b2lkIComX3Z0YWJsZSgpIHsgcmV0dXJuICooY29uc3Qgdm9pZCoqKSgoX0lPX0ZJTEUqKXRoaXMg KyAxKTsgfQogIHByb3RlY3RlZDoKICAgIHN0YXRpYyBzdHJlYW1idWYqIF9saXN0X2FsbDsgIAog ICAgX0lPX0ZJTEUqJiB4Y2hhaW4oKSB7IHJldHVybiBfY2hhaW47IH0KICAgIHZvaWQgX3VuX2xp bmsoKTsKICAgIHZvaWQgX2xpbmtfaW4oKTsKICAgIGNoYXIqIGdwdHIoKSBjb25zdAogICAgICB7 IHJldHVybiBfZmxhZ3MgICYgMHgxMDAgID8gX0lPX3NhdmVfYmFzZSA6IF9JT19yZWFkX3B0cjsg fQogICAgY2hhciogcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9JT193cml0ZV9wdHI7IH0KICAgIGNo YXIqIGVncHRyKCkgY29uc3QKICAgICAgeyByZXR1cm4gX2ZsYWdzICAmIDB4MTAwICA/IF9JT19z YXZlX2VuZCA6IF9JT19yZWFkX2VuZDsgfQogICAgY2hhciogZXBwdHIoKSBjb25zdCB7IHJldHVy biBfSU9fd3JpdGVfZW5kOyB9CiAgICBjaGFyKiBwYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9JT193 cml0ZV9iYXNlOyB9CiAgICBjaGFyKiBlYmFjaygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9mbGFn cyAgJiAweDEwMCAgPyBfSU9fc2F2ZV9iYXNlIDogX0lPX3JlYWRfYmFzZTt9CiAgICBjaGFyKiBi YXNlKCkgY29uc3QgeyByZXR1cm4gX0lPX2J1Zl9iYXNlOyB9CiAgICBjaGFyKiBlYnVmKCkgY29u c3QgeyByZXR1cm4gX0lPX2J1Zl9lbmQ7IH0KICAgIGludCBibGVuKCkgY29uc3QgeyByZXR1cm4g X0lPX2J1Zl9lbmQgLSBfSU9fYnVmX2Jhc2U7IH0KICAgIHZvaWQgeHB1dF9jaGFyKGNoYXIgYykg eyAqX0lPX3dyaXRlX3B0cisrID0gYzsgfQogICAgaW50IHhmbGFncygpIHsgcmV0dXJuIF9mbGFn cyA7IH0KICAgIGludCB4ZmxhZ3MoaW50IGYpIHtpbnQgZmwgPSBfZmxhZ3MgOyBfZmxhZ3MgID0g ZjsgcmV0dXJuIGZsO30KICAgIHZvaWQgeHNldGZsYWdzKGludCBmKSB7IF9mbGFncyAgfD0gZjsg fQogICAgdm9pZCB4c2V0ZmxhZ3MoaW50IGYsIGludCBtYXNrKQogICAgICB7IF9mbGFncyAgPSAo X2ZsYWdzICAmIH5tYXNrKSB8IChmICYgbWFzayk7IH0KICAgIHZvaWQgZ2J1bXAoaW50IG4pCiAg ICAgIHsgX2ZsYWdzICAmIDB4MTAwICA/IChfSU9fc2F2ZV9iYXNlKz1uKTooX0lPX3JlYWRfcHRy Kz1uKTt9CiAgICB2b2lkIHBidW1wKGludCBuKSB7IF9JT193cml0ZV9wdHIgKz0gbjsgfQogICAg dm9pZCBzZXRiKGNoYXIqIGIsIGNoYXIqIGViLCBpbnQgYT0wKTsKICAgIHZvaWQgc2V0cChjaGFy KiBwLCBjaGFyKiBlcCkKICAgICAgeyBfSU9fd3JpdGVfYmFzZT1fSU9fd3JpdGVfcHRyPXA7IF9J T193cml0ZV9lbmQ9ZXA7IH0KICAgIHZvaWQgc2V0ZyhjaGFyKiBlYiwgY2hhciogZywgY2hhciAq ZWcpIHsKICAgICAgaWYgKF9mbGFncyAgJiAweDEwMCApIF9JT19mcmVlX2JhY2t1cF9hcmVhKHRo aXMpOyAKICAgICAgX0lPX3JlYWRfYmFzZSA9IGViOyBfSU9fcmVhZF9wdHIgPSBnOyBfSU9fcmVh ZF9lbmQgPSBlZzsgfQogICAgY2hhciAqc2hvcnRidWYoKSB7IHJldHVybiBfc2hvcnRidWY7IH0K CiAgICBpbnQgaW5fYmFja3VwKCkgeyByZXR1cm4gX2ZsYWdzICYgMHgxMDAgOyB9CiAgICAgCiAg ICBjaGFyICpHYmFzZSgpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3NhdmVfYmFzZSA6IF9J T19yZWFkX2Jhc2U7IH0KICAgICAKICAgIGNoYXIgKmVHcHRyKCkgeyByZXR1cm4gaW5fYmFja3Vw KCkgPyBfSU9fc2F2ZV9lbmQgOiBfSU9fcmVhZF9lbmQ7IH0KICAgICAKICAgIGNoYXIgKkJiYXNl KCkgeyByZXR1cm4gaW5fYmFja3VwKCkgPyBfSU9fcmVhZF9iYXNlIDogX0lPX3NhdmVfYmFzZTsg fQogICAgY2hhciAqQnB0cigpIHsgcmV0dXJuIF9JT19iYWNrdXBfYmFzZTsgfQogICAgIAogICAg Y2hhciAqZUJwdHIoKSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19yZWFkX2VuZCA6IF9JT19z YXZlX2VuZDsgfQogICAgY2hhciAqTmJhc2UoKSB7IHJldHVybiBfSU9fc2F2ZV9iYXNlOyB9CiAg ICBjaGFyICplTnB0cigpIHsgcmV0dXJuIF9JT19zYXZlX2VuZDsgfQogICAgaW50IGhhdmVfYmFj a3VwKCkgeyByZXR1cm4gX0lPX3NhdmVfYmFzZSAhPSBfX251bGwgOyB9CiAgICBpbnQgaGF2ZV9t YXJrZXJzKCkgeyByZXR1cm4gX21hcmtlcnMgIT0gX19udWxsIDsgfQogICAgdm9pZCBmcmVlX2Jh Y2t1cF9hcmVhKCk7CiAgICB2b2lkIHVuc2F2ZV9tYXJrZXJzKCk7ICAKICAgIGludCBwdXRfbW9k ZSgpIHsgcmV0dXJuIF9mbGFncyAmIDB4ODAwIDsgfQogICAgaW50IHN3aXRjaF90b19nZXRfbW9k ZSgpOwogICAgCiAgICBzdHJlYW1idWYoaW50IGZsYWdzPTApOwogIHB1YmxpYzoKICAgIHN0YXRp YyBpbnQgZmx1c2hfYWxsKCk7CiAgICBzdGF0aWMgdm9pZCBmbHVzaF9hbGxfbGluZWJ1ZmZlcmVk KCk7ICAKICAgIHZpcnR1YWwgfnN0cmVhbWJ1ZigpOwogICAgdmlydHVhbCBpbnQgb3ZlcmZsb3co aW50IGMgPSAoLTEpICk7ICAKICAgIHZpcnR1YWwgaW50IHVuZGVyZmxvdygpOyAgCiAgICB2aXJ0 dWFsIGludCB1ZmxvdygpOyAgCiAgICB2aXJ0dWFsIGludCBwYmFja2ZhaWwoaW50IGMpOwogCiAg ICB2aXJ0dWFsIHN0cmVhbXNpemUgeHNwdXRuKGNvbnN0IGNoYXIqIHMsIHN0cmVhbXNpemUgbik7 CiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgeHNnZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAg ICB2aXJ0dWFsIHN0cmVhbXBvcyBzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9k ZT1pb3M6OmlufGlvczo6b3V0KTsKICAgIHZpcnR1YWwgc3RyZWFtcG9zIHNlZWtwb3Moc3RyZWFt cG9zIHBvcywgaW50IG1vZGUgPSBpb3M6OmlufGlvczo6b3V0KTsKCiAgICBzdHJlYW1wb3MgcHVi c2Vla29mZihzdHJlYW1vZmYgbywgX3NlZWtfZGlyIGQsIGludCBtb2RlPWlvczo6aW58aW9zOjpv dXQpCiAgICAgIHsgcmV0dXJuIF9JT19zZWVrb2ZmICh0aGlzLCBvLCBkLCBtb2RlKTsgfQogICAg c3RyZWFtcG9zIHB1YnNlZWtwb3Moc3RyZWFtcG9zIHBvcywgaW50IG1vZGUgPSBpb3M6OmlufGlv czo6b3V0KQogICAgICB7IHJldHVybiBfSU9fc2Vla3BvcyAodGhpcywgcG9zLCBtb2RlKTsgfQog ICAgc3RyZWFtcG9zIHNzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6 OmlufGlvczo6b3V0KTsKICAgIHN0cmVhbXBvcyBzc2Vla3BvcyhzdHJlYW1wb3MgcG9zLCBpbnQg bW9kZSA9IGlvczo6aW58aW9zOjpvdXQpOwogICAgdmlydHVhbCBzdHJlYW1idWYqIHNldGJ1Zihj aGFyKiBwLCBpbnQgbGVuKTsKICAgIHZpcnR1YWwgaW50IHN5bmMoKTsKICAgIHZpcnR1YWwgaW50 IGRvYWxsb2NhdGUoKTsKCiAgICBpbnQgc2Vla21hcmsoc3RyZWFtbWFya2VyJiBtYXJrLCBpbnQg ZGVsdGEgPSAwKTsKICAgIGludCBzcHV0YmFja2MoY2hhciBjKTsKICAgIGludCBzdW5nZXRjKCk7 CiAgICBpbnQgdW5idWZmZXJlZCgpIHsgcmV0dXJuIF9mbGFncyAmIDIgID8gMSA6IDA7IH0KICAg IGludCBsaW5lYnVmZmVyZWQoKSB7IHJldHVybiBfZmxhZ3MgJiAweDIwMCAgPyAxIDogMDsgfQog ICAgdm9pZCB1bmJ1ZmZlcmVkKGludCBpKQoJeyBpZiAoaSkgX2ZsYWdzIHw9IDIgOyBlbHNlIF9m bGFncyAmPSB+MiA7IH0KICAgIHZvaWQgbGluZWJ1ZmZlcmVkKGludCBpKQoJeyBpZiAoaSkgX2Zs YWdzIHw9IDB4MjAwIDsgZWxzZSBfZmxhZ3MgJj0gfjB4MjAwIDsgfQogICAgaW50IGFsbG9jYXRl KCkgeyAgCglpZiAoYmFzZSgpIHx8IHVuYnVmZmVyZWQoKSkgcmV0dXJuIDA7CgllbHNlIHJldHVy biBkb2FsbG9jYXRlKCk7IH0KICAgICAKICAgIHZvaWQgYWxsb2NidWYoKSB7IGlmIChiYXNlKCkg PT0gX19udWxsICkgZG9hbGxvY2J1ZigpOyB9CiAgICB2b2lkIGRvYWxsb2NidWYoKTsKICAgIGlu dCBpbl9hdmFpbCgpIHsgcmV0dXJuIF9JT19yZWFkX2VuZCAtIF9JT19yZWFkX3B0cjsgfQogICAg aW50IG91dF93YWl0aW5nKCkgeyByZXR1cm4gX0lPX3dyaXRlX3B0ciAtIF9JT193cml0ZV9iYXNl OyB9CiAgICBzdHJlYW1zaXplIHNwdXRuKGNvbnN0IGNoYXIqIHMsIHN0cmVhbXNpemUgbikgeyBy ZXR1cm4geHNwdXRuKHMsIG4pOyB9CiAgICBzdHJlYW1zaXplIHBhZG4oY2hhciBwYWQsIHN0cmVh bXNpemUgbikgeyByZXR1cm4gX0lPX3BhZG4odGhpcywgcGFkLCBuKTsgfQogICAgc3RyZWFtc2l6 ZSBzZ2V0bihjaGFyKiBzLCBzdHJlYW1zaXplIG4pIHsgcmV0dXJuIF9JT19zZ2V0bih0aGlzLCBz LCBuKTsgfQogICAgaW50IGlnbm9yZShpbnQpOwogICAgaW50IGdldF9jb2x1bW4oKTsKICAgIGlu dCBzZXRfY29sdW1uKGludCk7CiAgICBsb25nIHNnZXRsaW5lKGNoYXIqIGJ1ZiwgX0dfc2l6ZV90 ICBuLCBjaGFyIGRlbGltLCBpbnQgcHV0YmFja19kZWxpbSk7CiAgICBpbnQgc3B1dGMoaW50IGMp IHsgcmV0dXJuIF9JT19wdXRjKGMsIHRoaXMpOyB9CiAgICBpbnQgc2J1bXBjKCkgeyByZXR1cm4g X0lPX2dldGModGhpcyk7IH0KICAgIGludCBzZ2V0YygpIHsgcmV0dXJuICgoICB0aGlzICApLT5f SU9fcmVhZF9wdHIgPj0gKCAgdGhpcyAgKS0+X0lPX3JlYWRfZW5kICYmIF9fdW5kZXJmbG93ICgg IHRoaXMgICkgPT0gKC0xKSAgPyAoLTEpICA6ICoodW5zaWduZWQgY2hhciAqKSAoICB0aGlzICAp LT5fSU9fcmVhZF9wdHIpICA7IH0KICAgIGludCBzbmV4dGMoKSB7CglpZiAoX0lPX3JlYWRfcHRy ID49IF9JT19yZWFkX2VuZCAmJiBfX3VuZGVyZmxvdyh0aGlzKSA9PSAoLTEpICkKCSAgcmV0dXJu ICgtMSkgOwoJZWxzZSByZXR1cm4gX0lPX3JlYWRfcHRyKyssIHNnZXRjKCk7IH0KICAgIHZvaWQg c3Rvc3NjKCkgeyBpZiAoX0lPX3JlYWRfcHRyIDwgX0lPX3JlYWRfZW5kKSBfSU9fcmVhZF9wdHIr KzsgfQogICAgaW50IHZzY2FuKGNoYXIgY29uc3QgKmZtdDAsIF9HX3ZhX2xpc3QgIGFwLCBpb3Mq IHN0cmVhbSA9IF9fbnVsbCApOwogICAgaW50IHNjYW4oY2hhciBjb25zdCAqZm10MCAuLi4pOwog ICAgaW50IHZmb3JtKGNoYXIgY29uc3QgKmZtdDAsIF9HX3ZhX2xpc3QgIGFwKTsKICAgIGludCBm b3JtKGNoYXIgY29uc3QgKmZtdDAgLi4uKTsKCgoKCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lz X3JlYWQoY2hhciogYnVmLCBzdHJlYW1zaXplIHNpemUpOwogICAgdmlydHVhbCBzdHJlYW1zaXpl IHN5c193cml0ZShjb25zdCBjaGFyKiwgc3RyZWFtc2l6ZSk7CiAgICB2aXJ0dWFsIHN0cmVhbXBv cyBzeXNfc2VlayhzdHJlYW1vZmYsIF9zZWVrX2Rpcik7CiAgICB2aXJ0dWFsIGludCBzeXNfY2xv c2UoKTsKICAgIHZpcnR1YWwgaW50IHN5c19zdGF0KHZvaWQqKTsgIAoKCgoKfTsKCiAKIAoKY2xh c3MgZmlsZWJ1ZiA6IHB1YmxpYyBzdHJlYW1idWYgewogIHByb3RlY3RlZDoKICAgIHZvaWQgaW5p dCgpOwogIHB1YmxpYzoKICAgIHN0YXRpYyBjb25zdCBpbnQgb3BlbnByb3Q7ICAKICAgIGZpbGVi dWYoKTsKICAgIGZpbGVidWYoaW50IGZkKTsKICAgIGZpbGVidWYoaW50IGZkLCBjaGFyKiBwLCBp bnQgbGVuKTsKCgoKICAgIH5maWxlYnVmKCk7CiAgICBmaWxlYnVmKiBhdHRhY2goaW50IGZkKTsK ICAgIGZpbGVidWYqIG9wZW4oY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm1vZGUp OwogICAgZmlsZWJ1Ziogb3Blbihjb25zdCBjaGFyICpmaWxlbmFtZSwgaW9zOjpvcGVubW9kZSBt b2RlLCBpbnQgcHJvdCA9IDA2NjQpOwogICAgdmlydHVhbCBpbnQgdW5kZXJmbG93KCk7CiAgICB2 aXJ0dWFsIGludCBvdmVyZmxvdyhpbnQgYyA9ICgtMSkgKTsKICAgIGludCBpc19vcGVuKCkgY29u c3QgeyByZXR1cm4gX2ZpbGVubyA+PSAwOyB9CiAgICBpbnQgZmQoKSBjb25zdCB7IHJldHVybiBp c19vcGVuKCkgPyBfZmlsZW5vIDogKC0xKSA7IH0KICAgIGZpbGVidWYqIGNsb3NlKCk7CiAgICB2 aXJ0dWFsIGludCBkb2FsbG9jYXRlKCk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzZWVrb2ZmKHN0 cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KTsKICAgIHZpcnR1 YWwgc3RyZWFtYnVmKiBzZXRidWYoY2hhciogcCwgaW50IGxlbik7CiAgICBzdHJlYW1zaXplIHhz cHV0bihjb25zdCBjaGFyKiBzLCBzdHJlYW1zaXplIG4pOwogICAgc3RyZWFtc2l6ZSB4c2dldG4o Y2hhciogcywgc3RyZWFtc2l6ZSBuKTsKICAgIHZpcnR1YWwgaW50IHN5bmMoKTsKICBwcm90ZWN0 ZWQ6ICAKIAogICAgaW50IGlzX3JlYWRpbmcoKSB7IHJldHVybiBlYmFjaygpICE9IGVncHRyKCk7 IH0KICAgIGNoYXIqIGN1cl9wdHIoKSB7IHJldHVybiBpc19yZWFkaW5nKCkgPyAgZ3B0cigpIDog cHB0cigpOyB9CiAgICAgCiAgICBjaGFyKiBmaWxlX3B0cigpIHsgcmV0dXJuIGVHcHRyKCk7IH0K ICAgICAKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSBzeXNfcmVhZChjaGFyKiBidWYsIHN0cmVhbXNp emUgc2l6ZSk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzeXNfc2VlayhzdHJlYW1vZmYsIF9zZWVr X2Rpcik7CiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3dyaXRlKGNvbnN0IGNoYXIqLCBzdHJl YW1zaXplKTsKICAgIHZpcnR1YWwgaW50IHN5c19zdGF0KHZvaWQqKTsgIAogICAgdmlydHVhbCBp bnQgc3lzX2Nsb3NlKCk7CgoKCgp9OwoKaW5saW5lIHZvaWQgaW9zOjppbml0KHN0cmVhbWJ1Ziog c2IsIG9zdHJlYW0qIHRpZV90bykgewoJCV9zdGF0ZSA9IHNiID8gaW9zOjpnb29kYml0IDogaW9z OjpiYWRiaXQ7IF9leGNlcHRpb25zPTA7CgkJX3N0cmJ1Zj1zYjsgX3RpZSA9IHRpZV90bzsgX3dp ZHRoPTA7IF9maWxsPScgJzsKCgkJX2ZsYWdzPWlvczo6c2tpcHdzfGlvczo6ZGVjOwoKCgoJCV9w cmVjaXNpb249NjsgX2FycmF5cyA9IDA7IH0KCmlubGluZSBpb3M6OmlvcyhzdHJlYW1idWYqIHNi LCBvc3RyZWFtKiB0aWVfdG8pIHsgaW5pdChzYiwgdGllX3RvKTsgfQoKaW5saW5lIGlvczo6fmlv cygpIHsKCgoKICAgICAKICAgICAKICAgIG9wZXJhdG9yIGRlbGV0ZVtdIChfYXJyYXlzKTsKfQp9 ICAKCiMgMzEgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIu OTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2lvc3RyZWFtLmgiIDIgMwoKCmV4dGVybiAi QysrIiB7CmNsYXNzIGlzdHJlYW07IGNsYXNzIG9zdHJlYW07CnR5cGVkZWYgaW9zJiAoKl9fbWFu aXApKGlvcyYpOwp0eXBlZGVmIGlzdHJlYW0mICgqX19pbWFuaXApKGlzdHJlYW0mKTsKdHlwZWRl ZiBvc3RyZWFtJiAoKl9fb21hbmlwKShvc3RyZWFtJik7CgpleHRlcm4gaXN0cmVhbSYgd3MoaXN0 cmVhbSYgaW5zKTsKZXh0ZXJuIG9zdHJlYW0mIGZsdXNoKG9zdHJlYW0mIG91dHMpOwpleHRlcm4g b3N0cmVhbSYgZW5kbChvc3RyZWFtJiBvdXRzKTsKZXh0ZXJuIG9zdHJlYW0mIGVuZHMob3N0cmVh bSYgb3V0cyk7CgpjbGFzcyBvc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgaW9zCnsKICAgICAKICAg IHZvaWQgZG9fb3NmeCgpOwogIHB1YmxpYzoKICAgIG9zdHJlYW0oKSB7IH0KICAgIG9zdHJlYW0o c3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllZD0gX19udWxsICk7CiAgICBpbnQgb3BmeCgpIHsK CWlmICghZ29vZCgpKSByZXR1cm4gMDsKCWVsc2UgeyBpZiAoX3RpZSkgX3RpZS0+Zmx1c2goKTsg IDsgcmV0dXJuIDE7fSB9CiAgICB2b2lkIG9zZngoKSB7ICA7CgkJICBpZiAoZmxhZ3MoKSAmIChp b3M6OnVuaXRidWZ8aW9zOjpzdGRpbykpCgkJICAgICAgZG9fb3NmeCgpOyB9CiAgICBvc3RyZWFt JiBmbHVzaCgpOwogICAgb3N0cmVhbSYgcHV0KGNoYXIgYykgeyBfc3RyYnVmLT5zcHV0YyhjKTsg cmV0dXJuICp0aGlzOyB9CgoKCgoKICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IGNoYXIgKnMsIHN0 cmVhbXNpemUgbik7CiAgICBvc3RyZWFtJiB3cml0ZShjb25zdCB1bnNpZ25lZCBjaGFyICpzLCBz dHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHdyaXRlKChjb25zdCBjaGFyKilzLCBuKTt9CiAg ICBvc3RyZWFtJiB3cml0ZShjb25zdCBzaWduZWQgY2hhciAqcywgc3RyZWFtc2l6ZSBuKQogICAg ICB7IHJldHVybiB3cml0ZSgoY29uc3QgY2hhciopcywgbik7fQogICAgb3N0cmVhbSYgd3JpdGUo Y29uc3Qgdm9pZCAqcywgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiB3cml0ZSgoY29uc3Qg Y2hhciopcywgbik7fQogICAgb3N0cmVhbSYgc2Vla3Aoc3RyZWFtcG9zKTsKICAgIG9zdHJlYW0m IHNlZWtwKHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsKICAgIHN0cmVhbXBvcyB0ZWxscCgpOwogICAg b3N0cmVhbSYgZm9ybShjb25zdCBjaGFyICpmb3JtYXQgLi4uKTsKICAgIG9zdHJlYW0mIHZmb3Jt KGNvbnN0IGNoYXIgKmZvcm1hdCwgX0dfdmFfbGlzdCAgYXJncyk7CgogICAgb3N0cmVhbSYgb3Bl cmF0b3I8PChjaGFyIGMpOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBjaGFyIGMp IHsgcmV0dXJuICgqdGhpcykgPDwgKGNoYXIpYzsgfQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChz aWduZWQgY2hhciBjKSB7IHJldHVybiAoKnRoaXMpIDw8IChjaGFyKWM7IH0KICAgIG9zdHJlYW0m IG9wZXJhdG9yPDwoY29uc3QgY2hhciAqcyk7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0 IHVuc2lnbmVkIGNoYXIgKnMpCgl7IHJldHVybiAoKnRoaXMpIDw8IChjb25zdCBjaGFyKilzOyB9 CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0IHNpZ25lZCBjaGFyICpzKQoJeyByZXR1cm4g KCp0aGlzKSA8PCAoY29uc3QgY2hhciopczsgfQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjb25z dCB2b2lkICpwKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoaW50IG4pOwogICAgb3N0cmVhbSYg b3BlcmF0b3I8PCh1bnNpZ25lZCBpbnQgbik7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGxvbmcg bik7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbik7CgogICAgX19leHRl bnNpb25fXyBvc3RyZWFtJiBvcGVyYXRvcjw8KGxvbmcgbG9uZyBuKTsKICAgIF9fZXh0ZW5zaW9u X18gb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIGxvbmcgbik7CgogICAgb3N0cmVh bSYgb3BlcmF0b3I8PChzaG9ydCBuKSB7cmV0dXJuIG9wZXJhdG9yPDwoKGludCluKTt9CiAgICBv c3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIHNob3J0IG4pIHtyZXR1cm4gb3BlcmF0b3I8PCgo dW5zaWduZWQgaW50KW4pO30KCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGJvb2wgYikgeyByZXR1 cm4gb3BlcmF0b3I8PCgoaW50KWIpOyB9CgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChkb3VibGUg bik7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGZsb2F0IG4pIHsgcmV0dXJuIG9wZXJhdG9yPDwo KGRvdWJsZSluKTsgfQoKCgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChsb25nIGRvdWJsZSBuKSB7 IHJldHVybiBvcGVyYXRvcjw8KChkb3VibGUpbik7IH0KCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8 KF9fb21hbmlwIGZ1bmMpIHsgcmV0dXJuICgqZnVuYykoKnRoaXMpOyB9CiAgICBvc3RyZWFtJiBv cGVyYXRvcjw8KF9fbWFuaXAgZnVuYykgeygqZnVuYykoKnRoaXMpOyByZXR1cm4gKnRoaXM7fQog ICAgb3N0cmVhbSYgb3BlcmF0b3I8PChzdHJlYW1idWYqKTsKCgoKfTsKCmNsYXNzIGlzdHJlYW0g OiB2aXJ0dWFsIHB1YmxpYyBpb3MKewogICAgIApwcm90ZWN0ZWQ6CiAgICBfR19zaXplX3QgIF9n Y291bnQ7CgogICAgaW50IF9za2lwX3dzKCk7CiAgcHVibGljOgogICAgaXN0cmVhbSgpOiBfZ2Nv dW50ICgwKSB7IH0KICAgIGlzdHJlYW0oc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSp0aWVkPSBfX251 bGwgKTsKICAgIGlzdHJlYW0mIGdldChjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAn XG4nKTsKICAgIGlzdHJlYW0mIGdldCh1bnNpZ25lZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIg ZGVsaW0gPSAnXG4nKQoJeyByZXR1cm4gZ2V0KChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9CiAg ICBpc3RyZWFtJiBnZXQoY2hhciYgYyk7CiAgICBpc3RyZWFtJiBnZXQodW5zaWduZWQgY2hhciYg YykgeyByZXR1cm4gZ2V0KChjaGFyJiljKTsgfQogICAgaXN0cmVhbSYgZ2V0bGluZShjaGFyKiBw dHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGlzdHJlYW0mIGdldGxpbmUodW5z aWduZWQgY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xuJykKCXsgcmV0dXJuIGdl dGxpbmUoKGNoYXIqKXB0ciwgbGVuLCBkZWxpbSk7IH0KICAgIGlzdHJlYW0mIGdldChzaWduZWQg Y2hhciYgYykgIHsgcmV0dXJuIGdldCgoY2hhciYpYyk7IH0KICAgIGlzdHJlYW0mIGdldChzaWdu ZWQgY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xuJykKCXsgcmV0dXJuIGdldCgo Y2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYgZ2V0bGluZShzaWduZWQgY2hh ciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xuJykKCXsgcmV0dXJuIGdldGxpbmUoKGNo YXIqKXB0ciwgbGVuLCBkZWxpbSk7IH0KICAgIGlzdHJlYW0mIHJlYWQoY2hhciAqcHRyLCBzdHJl YW1zaXplIG4pOwogICAgaXN0cmVhbSYgcmVhZCh1bnNpZ25lZCBjaGFyICpwdHIsIHN0cmVhbXNp emUgbikKICAgICAgeyByZXR1cm4gcmVhZCgoY2hhciopcHRyLCBuKTsgfQogICAgaXN0cmVhbSYg cmVhZChzaWduZWQgY2hhciAqcHRyLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHJlYWQo KGNoYXIqKXB0ciwgbik7IH0KICAgIGlzdHJlYW0mIHJlYWQodm9pZCAqcHRyLCBzdHJlYW1zaXpl IG4pCiAgICAgIHsgcmV0dXJuIHJlYWQoKGNoYXIqKXB0ciwgbik7IH0KICAgIGlzdHJlYW0mIGdl dChzdHJlYW1idWYmIHNiLCBjaGFyIGRlbGltID0gJ1xuJyk7CiAgICBpc3RyZWFtJiBnZXRzKGNo YXIgKipzLCBjaGFyIGRlbGltID0gJ1xuJyk7CiAgICBpbnQgaXBmeChpbnQgbmVlZCA9IDApIHsK CWlmICghZ29vZCgpKSB7IHNldChpb3M6OmZhaWxiaXQpOyByZXR1cm4gMDsgfQoJZWxzZSB7Cgkg ICA7CgkgIGlmIChfdGllICYmIChuZWVkID09IDAgfHwgcmRidWYoKS0+aW5fYXZhaWwoKSA8IG5l ZWQpKSBfdGllLT5mbHVzaCgpOwoJICBpZiAoIW5lZWQgJiYgKGZsYWdzKCkgJiBpb3M6OnNraXB3 cykpIHJldHVybiBfc2tpcF93cygpOwoJICBlbHNlIHJldHVybiAxOwoJfQogICAgfQogICAgaW50 IGlwZngwKCkgeyAgCglpZiAoIWdvb2QoKSkgeyBzZXQoaW9zOjpmYWlsYml0KTsgcmV0dXJuIDA7 IH0KCWVsc2UgewoJICAgOwoJICBpZiAoX3RpZSkgX3RpZS0+Zmx1c2goKTsKCSAgaWYgKGZsYWdz KCkgJiBpb3M6OnNraXB3cykgcmV0dXJuIF9za2lwX3dzKCk7CgkgIGVsc2UgcmV0dXJuIDE7Cgl9 CiAgICB9CiAgICBpbnQgaXBmeDEoKSB7ICAKCWlmICghZ29vZCgpKSB7IHNldChpb3M6OmZhaWxi aXQpOyByZXR1cm4gMDsgfQoJZWxzZSB7CgkgICA7CgkgIGlmIChfdGllICYmIHJkYnVmKCktPmlu X2F2YWlsKCkgPT0gMCkgX3RpZS0+Zmx1c2goKTsKCSAgcmV0dXJuIDE7Cgl9CiAgICB9CiAgICB2 b2lkIGlzZngoKSB7ICA7IH0KICAgIGludCBnZXQoKSB7IGlmICghaXBmeDEoKSkgcmV0dXJuICgt MSkgOwoJCWVsc2UgeyBpbnQgY2ggPSBfc3RyYnVmLT5zYnVtcGMoKTsKCQkgICAgICAgaWYgKGNo ID09ICgtMSkgKSBzZXQoaW9zOjplb2ZiaXQpOwoJCSAgICAgICBpc2Z4KCk7CgkJICAgICAgIHJl dHVybiBjaDsKCQkgICAgIH0gfQogICAgaW50IHBlZWsoKTsKICAgIF9HX3NpemVfdCAgZ2NvdW50 KCkgeyByZXR1cm4gX2djb3VudDsgfQogICAgaXN0cmVhbSYgaWdub3JlKGludCBuPTEsIGludCBk ZWxpbSA9ICgtMSkgKTsKICAgIGludCBzeW5jICgpOwogICAgaXN0cmVhbSYgc2Vla2coc3RyZWFt cG9zKTsKICAgIGlzdHJlYW0mIHNlZWtnKHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsKICAgIHN0cmVh bXBvcyB0ZWxsZygpOwogICAgaXN0cmVhbSYgcHV0YmFjayhjaGFyIGNoKSB7CglpZiAoZ29vZCgp ICYmIF9zdHJidWYtPnNwdXRiYWNrYyhjaCkgPT0gKC0xKSApIGNsZWFyKGlvczo6YmFkYml0KTsK CXJldHVybiAqdGhpczt9CiAgICBpc3RyZWFtJiB1bmdldCgpIHsKCWlmIChnb29kKCkgJiYgX3N0 cmJ1Zi0+c3VuZ2V0YygpID09ICgtMSkgKSBjbGVhcihpb3M6OmJhZGJpdCk7CglyZXR1cm4gKnRo aXM7fQogICAgaXN0cmVhbSYgc2Nhbihjb25zdCBjaGFyICpmb3JtYXQgLi4uKTsKICAgIGlzdHJl YW0mIHZzY2FuKGNvbnN0IGNoYXIgKmZvcm1hdCwgX0dfdmFfbGlzdCAgYXJncyk7CgoKCgoKCiAg ICBpc3RyZWFtJiBvcGVyYXRvcj4+KGNoYXIqKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4odW5z aWduZWQgY2hhciogcCkgeyByZXR1cm4gb3BlcmF0b3I+PigoY2hhciopcCk7IH0KICAgIGlzdHJl YW0mIG9wZXJhdG9yPj4oc2lnbmVkIGNoYXIqcCkgeyByZXR1cm4gb3BlcmF0b3I+PigoY2hhciop cCk7IH0KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oY2hhciYgYyk7CiAgICBpc3RyZWFtJiBvcGVy YXRvcj4+KHVuc2lnbmVkIGNoYXImIGMpIHtyZXR1cm4gb3BlcmF0b3I+PigoY2hhciYpYyk7fQog ICAgaXN0cmVhbSYgb3BlcmF0b3I+PihzaWduZWQgY2hhciYgYykge3JldHVybiBvcGVyYXRvcj4+ KChjaGFyJiljKTt9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGludCYpOwogICAgaXN0cmVhbSYg b3BlcmF0b3I+Pihsb25nJik7CgogICAgX19leHRlbnNpb25fXyBpc3RyZWFtJiBvcGVyYXRvcj4+ KGxvbmcgbG9uZyYpOwogICAgX19leHRlbnNpb25fXyBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2ln bmVkIGxvbmcgbG9uZyYpOwoKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oc2hvcnQmKTsKICAgIGlz dHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQgaW50Jik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+ KHVuc2lnbmVkIGxvbmcmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQgc2hvcnQm KTsKCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGJvb2wmKTsKCiAgICBpc3RyZWFtJiBvcGVyYXRv cj4+KGZsb2F0Jik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGRvdWJsZSYpOwogICAgaXN0cmVh bSYgb3BlcmF0b3I+Pihsb25nIGRvdWJsZSYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+PiggX19t YW5pcCBmdW5jKSB7KCpmdW5jKSgqdGhpcyk7IHJldHVybiAqdGhpczt9CiAgICBpc3RyZWFtJiBv cGVyYXRvcj4+KF9faW1hbmlwIGZ1bmMpIHsgcmV0dXJuICgqZnVuYykoKnRoaXMpOyB9CiAgICBp c3RyZWFtJiBvcGVyYXRvcj4+KHN0cmVhbWJ1ZiopOwp9OwoKY2xhc3MgaW9zdHJlYW0gOiBwdWJs aWMgaXN0cmVhbSwgcHVibGljIG9zdHJlYW0KewogIHB1YmxpYzoKICAgIGlvc3RyZWFtKCkgeyB9 CiAgICBpb3N0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFtKnRpZWQ9IF9fbnVsbCApOwp9OwoK Y2xhc3MgX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiA6IHB1YmxpYyBpc3RyZWFtIHsKcHVibGljOgog IF9JT19pc3RyZWFtX3dpdGhhc3NpZ24mIG9wZXJhdG9yPShpc3RyZWFtJik7CiAgX0lPX2lzdHJl YW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KF9JT19pc3RyZWFtX3dpdGhhc3NpZ24mIHJocykKICAg IHsgcmV0dXJuIG9wZXJhdG9yPSAoc3RhdGljX2Nhc3Q8aXN0cmVhbSY+IChyaHMpKTsgfQp9OwoK Y2xhc3MgX0lPX29zdHJlYW1fd2l0aGFzc2lnbiA6IHB1YmxpYyBvc3RyZWFtIHsKcHVibGljOgog IF9JT19vc3RyZWFtX3dpdGhhc3NpZ24mIG9wZXJhdG9yPShvc3RyZWFtJik7CiAgX0lPX29zdHJl YW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KF9JT19vc3RyZWFtX3dpdGhhc3NpZ24mIHJocykKICAg IHsgcmV0dXJuIG9wZXJhdG9yPSAoc3RhdGljX2Nhc3Q8b3N0cmVhbSY+IChyaHMpKTsgfQp9OwoK ZXh0ZXJuIF9JT19pc3RyZWFtX3dpdGhhc3NpZ24gY2luOwogCmV4dGVybiBfSU9fb3N0cmVhbV93 aXRoYXNzaWduIGNvdXQsIGNlcnI7CgpleHRlcm4gX0lPX29zdHJlYW1fd2l0aGFzc2lnbiBjbG9n CgoKCjsKCmV4dGVybiBpc3RyZWFtJiBsb2NrKGlzdHJlYW0mIGlucyk7CmV4dGVybiBpc3RyZWFt JiB1bmxvY2soaXN0cmVhbSYgaW5zKTsKZXh0ZXJuIG9zdHJlYW0mIGxvY2sob3N0cmVhbSYgb3V0 cyk7CmV4dGVybiBvc3RyZWFtJiB1bmxvY2sob3N0cmVhbSYgb3V0cyk7CgpzdHJ1Y3QgSW9zdHJl YW1faW5pdCB7IH0gOyAgIAoKaW5saW5lIGlvcyYgZGVjKGlvcyYgaSkKeyBpLnNldGYoaW9zOjpk ZWMsIGlvczo6ZGVjfGlvczo6aGV4fGlvczo6b2N0KTsgcmV0dXJuIGk7IH0KaW5saW5lIGlvcyYg aGV4KGlvcyYgaSkKeyBpLnNldGYoaW9zOjpoZXgsIGlvczo6ZGVjfGlvczo6aGV4fGlvczo6b2N0 KTsgcmV0dXJuIGk7IH0KaW5saW5lIGlvcyYgb2N0KGlvcyYgaSkKeyBpLnNldGYoaW9zOjpvY3Qs IGlvczo6ZGVjfGlvczo6aGV4fGlvczo6b2N0KTsgcmV0dXJuIGk7IH0KfSAgCgoKIyA0NSAiL29w dC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4u Ly4uL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDIgMwoKCgoKCgoKCiMgMSAiL29wdC9tdnBs b2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zL2luY2x1ZGUvc3RkZGVm LmgiIDEgMyA0CiMgMzQyICIvb3B0L212cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh cmlzMi8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CgojIDUzICIvb3B0L212cGxvY2FsL2xp Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9n KystMy9zdGxfYWxsb2MuaCIgMiAzCgoKCiMgMSAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9z cGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL3NwYXJjLXN1bi1zb2xhcmlzMi9p bmNsdWRlL2Fzc2VydC5oIiAxIDMgNAogCgoKCgoKCgoKIyAxOSAiL29wdC9tdnBsb2NhbC9saWIv Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL3NwYXJjLXN1bi1z b2xhcmlzMi9pbmNsdWRlL2Fzc2VydC5oIiAzIDQKCgoKCiAKCmV4dGVybiAiQyIgewpleHRlcm4g dm9pZCBfX2VwcmludGYgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCB1bnNpZ25lZCwgY29u c3QgY2hhciAqKQogICAgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSk7Cn0KCgoKCgoKCgoKCgoK IyA1MiAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4z Ly4uLy4uLy4uLy4uL3NwYXJjLXN1bi1zb2xhcmlzMi9pbmNsdWRlL2Fzc2VydC5oIiAzIDQKCgoK IyA1NiAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4z Ly4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDIgMwoKCgoKCgoKCgoKCgog ICAgIAogICAgIAogICAgIAojIDEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDEgMyA0CiAKCgoK CgoKCiNwcmFnbWEgaWRlbnQJIkAoIylwdGhyZWFkLmgJMS4yOAk5OS8xMS8xNSBTTUkiCgoKCgoj IDEgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAxIDMgNAogCiAKCiAKIAogCgoKCgojcHJhZ21hIGlk ZW50CSJAKCMpc2NoZWQuaAkxLjkJOTgvMDEvMTYgU01JIgoKCgoKCmV4dGVybiAiQyIgewoKCnN0 cnVjdCBzY2hlZF9wYXJhbSB7CglpbnQJc2NoZWRfcHJpb3JpdHk7CSAKCWludAlzY2hlZF9uaWNl bGltOwkgCglpbnQJc2NoZWRfbmljZTsJIAoJaW50CXNjaGVkX3BhZFs2XTsJIAoJCQkJIAoJCQkJ IAoJCQkJIAp9OwoKIAoKCgoKCgoKCgogCgoKCmludAlzY2hlZF9nZXRwYXJhbShwaWRfdCBwaWQs IHN0cnVjdCBzY2hlZF9wYXJhbSAqcGFyYW0pOwppbnQJc2NoZWRfc2V0cGFyYW0ocGlkX3QgcGlk LCBjb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKnBhcmFtKTsKaW50CXNjaGVkX2dldHNjaGVkdWxl cihwaWRfdCBwaWQpOwppbnQJc2NoZWRfc2V0c2NoZWR1bGVyKHBpZF90IHBpZCwgaW50IHBvbGlj eSwKCQljb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKnBhcmFtKTsKaW50CXNjaGVkX3lpZWxkKHZv aWQpOwppbnQJc2NoZWRfZ2V0X3ByaW9yaXR5X21heChpbnQgcG9saWN5KTsKaW50CXNjaGVkX2dl dF9wcmlvcml0eV9taW4oaW50IHBvbGljeSk7CmludAlzY2hlZF9ycl9nZXRfaW50ZXJ2YWwocGlk X3QgcGlkLCBzdHJ1Y3QgdGltZXNwZWMgKmludGVydmFsKTsKIyA2MiAiL3Vzci9pbmNsdWRlL3Nj aGVkLmgiIDMgNAoKCgp9CgoKCiMgMTQgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMyA0CgoK CgpleHRlcm4gIkMiIHsKCgogCgoKCgogCgoKIAoKCgogCgoKIAoKCgogCgoKCgoKCgoKIAoKCgoK CgoKCiAKCgoKCgoKIAoKCgoKCgoKCgogCgoKCgoKCgoKIAoKCgoKCgogCgoKCgoKCiAKCgoKCgoK IAoKCnR5cGVkZWYgc3RydWN0IF9jbGVhbnVwIHsKCXVpbnRwdHJfdAlwdGhyZWFkX2NsZWFudXBf cGFkWzRdOwp9IF9jbGVhbnVwX3Q7CgoKCnZvaWQJX19wdGhyZWFkX2NsZWFudXBfcHVzaCh2b2lk ICgqcm91dGluZSkodm9pZCAqKSwgdm9pZCAqYXJncywKCQkJCQljYWRkcl90IGZwLCBfY2xlYW51 cF90ICppbmZvKTsKdm9pZAlfX3B0aHJlYWRfY2xlYW51cF9wb3AoaW50IGV4LCBfY2xlYW51cF90 ICppbmZvKTsKY2FkZHJfdAlfZ2V0ZnAodm9pZCk7CgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgpl eHRlcm4gaW50IHB0aHJlYWRfYXR0cl9pbml0KHB0aHJlYWRfYXR0cl90ICopOwpleHRlcm4gaW50 IHB0aHJlYWRfYXR0cl9kZXN0cm95KHB0aHJlYWRfYXR0cl90ICopOwpleHRlcm4gaW50IHB0aHJl YWRfYXR0cl9zZXRzdGFja3NpemUocHRocmVhZF9hdHRyX3QgKiwgc2l6ZV90KTsKZXh0ZXJuIGlu dCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2tzaXplKGNvbnN0IHB0aHJlYWRfYXR0cl90ICosIHNpemVf dCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2thZGRyKHB0aHJlYWRfYXR0cl90 ICosIHZvaWQgKik7CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrYWRkcihjb25zdCBw dGhyZWFkX2F0dHJfdCAqLCB2b2lkICoqKTsKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0ZGV0 YWNoc3RhdGUocHRocmVhZF9hdHRyX3QgKiwgaW50KTsKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJf Z2V0ZGV0YWNoc3RhdGUoY29uc3QgcHRocmVhZF9hdHRyX3QgKiwgaW50ICopOwpleHRlcm4gaW50 IHB0aHJlYWRfYXR0cl9zZXRzY29wZShwdGhyZWFkX2F0dHJfdCAqLCBpbnQpOwpleHRlcm4gaW50 IHB0aHJlYWRfYXR0cl9nZXRzY29wZShjb25zdCBwdGhyZWFkX2F0dHJfdCAqLCBpbnQgKik7CmV4 dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGluaGVyaXRzY2hlZChwdGhyZWFkX2F0dHJfdCAqLCBp bnQpOwpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRpbmhlcml0c2NoZWQoY29uc3QgcHRocmVh ZF9hdHRyX3QgKiwgaW50ICopOwpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBvbGlj eShwdGhyZWFkX2F0dHJfdCAqLCBpbnQpOwpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzY2hl ZHBvbGljeShjb25zdCBwdGhyZWFkX2F0dHJfdCAqLCBpbnQgKik7CmV4dGVybiBpbnQgcHRocmVh ZF9hdHRyX3NldHNjaGVkcGFyYW0ocHRocmVhZF9hdHRyX3QgKiwKCQkJCQljb25zdCBzdHJ1Y3Qg c2NoZWRfcGFyYW0gKik7CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjaGVkcGFyYW0oY29u c3QgcHRocmVhZF9hdHRyX3QgKiwKCQkJCQlzdHJ1Y3Qgc2NoZWRfcGFyYW0gKik7CmV4dGVybiBp bnQgcHRocmVhZF9jcmVhdGUocHRocmVhZF90ICosIGNvbnN0IHB0aHJlYWRfYXR0cl90ICosCgkJ CQl2b2lkICogKCopKHZvaWQgKiksIHZvaWQgKik7CmV4dGVybiBpbnQgcHRocmVhZF9vbmNlKHB0 aHJlYWRfb25jZV90ICosIHZvaWQgKCopKHZvaWQpKTsKZXh0ZXJuIGludCBwdGhyZWFkX2pvaW4o cHRocmVhZF90LCB2b2lkICoqKTsKZXh0ZXJuIGludCBwdGhyZWFkX2RldGFjaChwdGhyZWFkX3Qp OwpleHRlcm4gdm9pZCBwdGhyZWFkX2V4aXQodm9pZCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX2Nh bmNlbChwdGhyZWFkX3QpOwpleHRlcm4gaW50IHB0aHJlYWRfc2V0c2NoZWRwYXJhbShwdGhyZWFk X3QsIGludCwgY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICopOwpleHRlcm4gaW50IHB0aHJlYWRf Z2V0c2NoZWRwYXJhbShwdGhyZWFkX3QsIGludCAqLCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKik7CmV4 dGVybiBpbnQgcHRocmVhZF9zZXRjYW5jZWxzdGF0ZShpbnQsIGludCAqKTsKZXh0ZXJuIGludCBw dGhyZWFkX3NldGNhbmNlbHR5cGUoaW50LCBpbnQgKik7CmV4dGVybiB2b2lkIHB0aHJlYWRfdGVz dGNhbmNlbCh2b2lkKTsKZXh0ZXJuIGludCBwdGhyZWFkX2VxdWFsKHB0aHJlYWRfdCwgcHRocmVh ZF90KTsKZXh0ZXJuIGludCBwdGhyZWFkX2tleV9jcmVhdGUocHRocmVhZF9rZXlfdCAqLCB2b2lk ICgqKSh2b2lkICopKTsKZXh0ZXJuIGludCBwdGhyZWFkX2tleV9kZWxldGUocHRocmVhZF9rZXlf dCk7CmV4dGVybiBpbnQgcHRocmVhZF9zZXRzcGVjaWZpYyhwdGhyZWFkX2tleV90LCBjb25zdCB2 b2lkICopOwpleHRlcm4gdm9pZCAqcHRocmVhZF9nZXRzcGVjaWZpYyhwdGhyZWFkX2tleV90KTsK ZXh0ZXJuIHB0aHJlYWRfdCBwdGhyZWFkX3NlbGYodm9pZCk7CgogCgoKZXh0ZXJuIGludCBwdGhy ZWFkX211dGV4YXR0cl9pbml0KHB0aHJlYWRfbXV0ZXhhdHRyX3QgKik7CmV4dGVybiBpbnQgcHRo cmVhZF9tdXRleGF0dHJfZGVzdHJveShwdGhyZWFkX211dGV4YXR0cl90ICopOwpleHRlcm4gaW50 IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHBzaGFyZWQocHRocmVhZF9tdXRleGF0dHJfdCAqLCBpbnQp OwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHBzaGFyZWQoY29uc3QgcHRocmVhZF9t dXRleGF0dHJfdCAqLCBpbnQgKik7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0cHJv dG9jb2wocHRocmVhZF9tdXRleGF0dHJfdCAqLCBpbnQpOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0 ZXhhdHRyX2dldHByb3RvY29sKGNvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKiwgaW50ICopOwpl eHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHByaW9jZWlsaW5nKHB0aHJlYWRfbXV0ZXhh dHRyX3QgKiwgaW50KTsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9nZXRwcmlvY2VpbGlu Zyhjb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICosIGludCAqKTsKZXh0ZXJuIGludCBwdGhyZWFk X211dGV4YXR0cl9zZXRyb2J1c3RfbnAocHRocmVhZF9tdXRleGF0dHJfdCAqLCBpbnQpOwpleHRl cm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHJvYnVzdF9ucChjb25zdCBwdGhyZWFkX211dGV4 YXR0cl90ICosIGludCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2luaXQocHRocmVhZF9t dXRleF90ICosIGNvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKik7CmV4dGVybiBpbnQgcHRocmVh ZF9tdXRleF9jb25zaXN0ZW50X25wKHB0aHJlYWRfbXV0ZXhfdCAqKTsKZXh0ZXJuIGludCBwdGhy ZWFkX211dGV4X2Rlc3Ryb3kocHRocmVhZF9tdXRleF90ICopOwpleHRlcm4gaW50IHB0aHJlYWRf bXV0ZXhfbG9jayhwdGhyZWFkX211dGV4X3QgKik7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF91 bmxvY2socHRocmVhZF9tdXRleF90ICopOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdHJ5bG9j ayhwdGhyZWFkX211dGV4X3QgKik7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9zZXRwcmlvY2Vp bGluZyhwdGhyZWFkX211dGV4X3QgKiwgaW50LCBpbnQgKik7CmV4dGVybiBpbnQgcHRocmVhZF9t dXRleF9nZXRwcmlvY2VpbGluZyhjb25zdCBwdGhyZWFkX211dGV4X3QgKiwgaW50ICopOwpleHRl cm4gaW50IHB0aHJlYWRfY29uZGF0dHJfaW5pdChwdGhyZWFkX2NvbmRhdHRyX3QgKik7CmV4dGVy biBpbnQgcHRocmVhZF9jb25kYXR0cl9kZXN0cm95KHB0aHJlYWRfY29uZGF0dHJfdCAqKTsKZXh0 ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX3NldHBzaGFyZWQocHRocmVhZF9jb25kYXR0cl90ICos IGludCk7CmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9nZXRwc2hhcmVkKGNvbnN0IHB0aHJl YWRfY29uZGF0dHJfdCAqLCBpbnQgKik7CmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2luaXQocHRo cmVhZF9jb25kX3QgKiwgY29uc3QgcHRocmVhZF9jb25kYXR0cl90ICopOwpleHRlcm4gaW50IHB0 aHJlYWRfY29uZF9kZXN0cm95KHB0aHJlYWRfY29uZF90ICopOwpleHRlcm4gaW50IHB0aHJlYWRf Y29uZF9icm9hZGNhc3QocHRocmVhZF9jb25kX3QgKik7CmV4dGVybiBpbnQgcHRocmVhZF9jb25k X3NpZ25hbChwdGhyZWFkX2NvbmRfdCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfd2FpdChw dGhyZWFkX2NvbmRfdCAqLCBwdGhyZWFkX211dGV4X3QgKik7CmV4dGVybiBpbnQgcHRocmVhZF9j b25kX3RpbWVkd2FpdChwdGhyZWFkX2NvbmRfdCAqLCBwdGhyZWFkX211dGV4X3QgKiwKCQkJCQlj b25zdCBzdHJ1Y3QgdGltZXNwZWMgKik7CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGd1YXJk c2l6ZShjb25zdCBwdGhyZWFkX2F0dHJfdCAqLCBzaXplX3QgKik7CmV4dGVybiBpbnQgcHRocmVh ZF9hdHRyX3NldGd1YXJkc2l6ZShwdGhyZWFkX2F0dHJfdCAqLCBzaXplX3QpOwpleHRlcm4gaW50 IHB0aHJlYWRfZ2V0Y29uY3VycmVuY3kodm9pZCk7CmV4dGVybiBpbnQgcHRocmVhZF9zZXRjb25j dXJyZW5jeShpbnQgbmV3dmFsKTsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBl KHB0aHJlYWRfbXV0ZXhhdHRyX3QgKiwgaW50KTsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0 cl9nZXR0eXBlKGNvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKiwgaW50ICopOwpleHRlcm4gaW50 IHB0aHJlYWRfcndsb2NrX2luaXQocHRocmVhZF9yd2xvY2tfdCAqLAoJCQkJY29uc3QgcHRocmVh ZF9yd2xvY2thdHRyX3QgKik7CmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfZGVzdHJveShwdGhy ZWFkX3J3bG9ja190ICopOwpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3JkbG9jayhwdGhyZWFk X3J3bG9ja190ICopOwpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3RyeXJkbG9jayhwdGhyZWFk X3J3bG9ja190ICopOwpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3dybG9jayhwdGhyZWFkX3J3 bG9ja190ICopOwpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3RyeXdybG9jayhwdGhyZWFkX3J3 bG9ja190ICopOwpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3VubG9jayhwdGhyZWFkX3J3bG9j a190ICopOwpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9pbml0KHB0aHJlYWRfcndsb2Nr YXR0cl90ICopOwpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9kZXN0cm95KHB0aHJlYWRf cndsb2NrYXR0cl90ICopOwpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9nZXRwc2hhcmVk KGNvbnN0IHB0aHJlYWRfcndsb2NrYXR0cl90ICosIGludCAqKTsKZXh0ZXJuIGludCBwdGhyZWFk X3J3bG9ja2F0dHJfc2V0cHNoYXJlZChwdGhyZWFkX3J3bG9ja2F0dHJfdCAqLCBpbnQpOwoKIyAz MTggIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMgNAoKCgoKCn0KCgoKIyA3MSAiL29wdC9tdnBs b2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2lu Y2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDIgMwoKCgoKCgoKCiMgODcgIi9vcHQvbXZwbG9jYWwv bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl L2crKy0zL3N0bF9hbGxvYy5oIiAzCgojIDk3ICIvb3B0L212cGxvY2FsL2xpYi9nY2MtbGliL3Nw YXJjLXN1bi1zb2xhcmlzMi8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxs b2MuaCIgMwoKIyAxMTUgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy aXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAzCgoKCgoK CgoKCiAKCgoKCgogCiAKCgoKCgoKCgoKdGVtcGxhdGUgPGludCBfX2luc3Q+CmNsYXNzIF9fbWFs bG9jX2FsbG9jX3RlbXBsYXRlIHsKCnByaXZhdGU6CgogIHN0YXRpYyB2b2lkKiBfU19vb21fbWFs bG9jKHNpemVfdCk7CiAgc3RhdGljIHZvaWQqIF9TX29vbV9yZWFsbG9jKHZvaWQqLCBzaXplX3Qp OwoKCiAgc3RhdGljIHZvaWQgKCogX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIpKCk7CgoKcHVi bGljOgoKICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICB7CiAgICB2b2lkKiBf X3Jlc3VsdCA9IG1hbGxvYyhfX24pOwogICAgaWYgKDAgPT0gX19yZXN1bHQpIF9fcmVzdWx0ID0g X1Nfb29tX21hbGxvYyhfX24pOwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KCiAgc3RhdGljIHZv aWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCAgKQogIHsKICAgIGZyZWUoX19wKTsKICB9 CgogIHN0YXRpYyB2b2lkKiByZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90ICAsIHNpemVfdCBf X25ld19zeikKICB7CiAgICB2b2lkKiBfX3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBfX25ld19zeik7 CiAgICBpZiAoMCA9PSBfX3Jlc3VsdCkgX19yZXN1bHQgPSBfU19vb21fcmVhbGxvYyhfX3AsIF9f bmV3X3N6KTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9CgogIHN0YXRpYyB2b2lkICgqIF9fc2V0 X21hbGxvY19oYW5kbGVyKHZvaWQgKCpfX2YpKCkpKSgpCiAgewogICAgdm9pZCAoKiBfX29sZCko KSA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAgX19tYWxsb2NfYWxsb2Nfb29tX2hh bmRsZXIgPSBfX2Y7CiAgICByZXR1cm4oX19vbGQpOwogIH0KCn07CgogCgoKdGVtcGxhdGUgPGlu dCBfX2luc3Q+CnZvaWQgKCogX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6X19tYWxs b2NfYWxsb2Nfb29tX2hhbmRsZXIpKCkgPSAwOwoKCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp2b2lk KgpfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfU19vb21fbWFsbG9jKHNpemVfdCBf X24pCnsKICAgIHZvaWQgKCogX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgIHZvaWQqIF9fcmVz dWx0OwoKICAgIGZvciAoOzspIHsKICAgICAgICBfX215X21hbGxvY19oYW5kbGVyID0gX19tYWxs b2NfYWxsb2Nfb29tX2hhbmRsZXI7CiAgICAgICAgaWYgKDAgPT0gX19teV9tYWxsb2NfaGFuZGxl cikgeyBjZXJyIDw8ICJvdXQgb2YgbWVtb3J5IiA8PCBlbmRsOyBleGl0KDEpIDsgfQogICAgICAg ICgqX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgICBfX3Jlc3VsdCA9IG1hbGxvYyhfX24p OwogICAgICAgIGlmIChfX3Jlc3VsdCkgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0KfQoKdGVtcGxh dGUgPGludCBfX2luc3Q+CnZvaWQqIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9T X29vbV9yZWFsbG9jKHZvaWQqIF9fcCwgc2l6ZV90IF9fbikKewogICAgdm9pZCAoKiBfX215X21h bGxvY19oYW5kbGVyKSgpOwogICAgdm9pZCogX19yZXN1bHQ7CgogICAgZm9yICg7OykgewogICAg ICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAg ICAgICBpZiAoMCA9PSBfX215X21hbGxvY19oYW5kbGVyKSB7IGNlcnIgPDwgIm91dCBvZiBtZW1v cnkiIDw8IGVuZGw7IGV4aXQoMSkgOyB9CiAgICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgp OwogICAgICAgIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3AsIF9fbik7CiAgICAgICAgaWYgKF9fcmVz dWx0KSByZXR1cm4oX19yZXN1bHQpOwogICAgfQp9Cgp0eXBlZGVmIF9fbWFsbG9jX2FsbG9jX3Rl bXBsYXRlPDA+IG1hbGxvY19hbGxvYzsKCnRlbXBsYXRlPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j PgpjbGFzcyBzaW1wbGVfYWxsb2MgewoKcHVibGljOgogICAgc3RhdGljIF9UcCogYWxsb2NhdGUo c2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gMCA9PSBfX24gPyAwIDogKF9UcCopIF9BbGxvYzo6 YWxsb2NhdGUoX19uICogc2l6ZW9mIChfVHApKTsgfQogICAgc3RhdGljIF9UcCogYWxsb2NhdGUo dm9pZCkKICAgICAgeyByZXR1cm4gKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoc2l6ZW9mIChfVHAp KTsgfQogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAg ICAgeyBpZiAoMCAhPSBfX24pIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZiAo X1RwKSk7IH0KICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUoX1RwKiBfX3ApCiAgICAgIHsgX0Fs bG9jOjpkZWFsbG9jYXRlKF9fcCwgc2l6ZW9mIChfVHApKTsgfQp9OwoKIAogCiAKIAogCnRlbXBs YXRlIDxjbGFzcyBfQWxsb2M+CmNsYXNzIGRlYnVnX2FsbG9jIHsKCnByaXZhdGU6CgogIGVudW0g e19TX2V4dHJhID0gOH07ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg ICAgICAgICAgICAgIAoKcHVibGljOgoKICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90IF9f bikKICB7CiAgICBjaGFyKiBfX3Jlc3VsdCA9IChjaGFyKilfQWxsb2M6OmFsbG9jYXRlKF9fbiAr IF9TX2V4dHJhKTsKICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbjsKICAgIHJldHVybiBfX3Jl c3VsdCArIF9TX2V4dHJhOwogIH0KCiAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3As IHNpemVfdCBfX24pCiAgewogICAgY2hhciogX19yZWFsX3AgPSAoY2hhciopX19wIC0gX1NfZXh0 cmE7CiAgICAoKHZvaWQpICgoICooc2l6ZV90KilfX3JlYWxfcCA9PSBfX24gKSA/IDAgOiAoX19l cHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwJICAiL29wdC9tdnBsb2Nh bC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1 ZGUvZysrLTMvc3RsX2FsbG9jLmgiICwgICAyNjMgLCAgIiooc2l6ZV90KilfX3JlYWxfcCA9PSBf X24iICksIDApICkpIDsKICAgIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3JlYWxfcCwgX19uICsgX1Nf ZXh0cmEpOwogIH0KCiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3Qg X19vbGRfc3osIHNpemVfdCBfX25ld19zeikKICB7CiAgICBjaGFyKiBfX3JlYWxfcCA9IChjaGFy KilfX3AgLSBfU19leHRyYTsKICAgICgodm9pZCkgKCggKihzaXplX3QqKV9fcmVhbF9wID09IF9f b2xkX3N6ICkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQgYXNzZXJ0aW9uIGAlcydc biIsCSAgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUu My8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAsICAgMjcwICwgICIqKHNp emVfdCopX19yZWFsX3AgPT0gX19vbGRfc3oiICksIDApICkpIDsKICAgIGNoYXIqIF9fcmVzdWx0 ID0gKGNoYXIqKQogICAgICBfQWxsb2M6OnJlYWxsb2NhdGUoX19yZWFsX3AsIF9fb2xkX3N6ICsg X1NfZXh0cmEsIF9fbmV3X3N6ICsgX1NfZXh0cmEpOwogICAgKihzaXplX3QqKV9fcmVzdWx0ID0g X19uZXdfc3o7CiAgICByZXR1cm4gX19yZXN1bHQgKyBfU19leHRyYTsKICB9Cgp9OwoKCgoKCgoK CgoKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgogCiAKIAogCiAKIAogCiAKIAoKCgoKCgoK dGVtcGxhdGUgPGJvb2wgdGhyZWFkcywgaW50IGluc3Q+CmNsYXNzIF9fZGVmYXVsdF9hbGxvY190 ZW1wbGF0ZSB7Cgpwcml2YXRlOgogICAKICAgCgogICAgZW51bSB7X0FMSUdOID0gOH07CiAgICBl bnVtIHtfTUFYX0JZVEVTID0gMTI4fTsKICAgIGVudW0ge19ORlJFRUxJU1RTID0gX01BWF9CWVRF Uy9fQUxJR059OwoKICBzdGF0aWMgc2l6ZV90CiAgX1Nfcm91bmRfdXAoc2l6ZV90IF9fYnl0ZXMp CiAgICB7IHJldHVybiAoKChfX2J5dGVzKSArIF9BTElHTi0xKSAmIH4oX0FMSUdOIC0gMSkpOyB9 Cgpwcml2YXRlIDoKICB1bmlvbiBfT2JqIHsKICAgICAgICB1bmlvbiBfT2JqKiBfTV9mcmVlX2xp c3RfbGluazsKICAgICAgICBjaGFyIF9NX2NsaWVudF9kYXRhWzFdOyAgICAgCiAgfTsKcHJpdmF0 ZToKCgoKCiAgICBzdGF0aWMgX09iaiogdm9sYXRpbGUgIF9TX2ZyZWVfbGlzdFtfTkZSRUVMSVNU U107CgogIHN0YXRpYyAgc2l6ZV90IF9TX2ZyZWVsaXN0X2luZGV4KHNpemVfdCBfX2J5dGVzKSB7 CiAgICAgICAgcmV0dXJuICgoKF9fYnl0ZXMpICsgX0FMSUdOLTEpL19BTElHTiAtIDEpOwogIH0K CiAgIAogIHN0YXRpYyB2b2lkKiBfU19yZWZpbGwoc2l6ZV90IF9fbik7CiAgIAogICAKICBzdGF0 aWMgY2hhciogX1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpzKTsKCiAg IAogIHN0YXRpYyBjaGFyKiBfU19zdGFydF9mcmVlOwogIHN0YXRpYyBjaGFyKiBfU19lbmRfZnJl ZTsKICBzdGF0aWMgc2l6ZV90IF9TX2hlYXBfc2l6ZTsKCgoKCgoKCgogICAgc3RhdGljIHB0aHJl YWRfbXV0ZXhfdCBfU19ub2RlX2FsbG9jYXRvcl9sb2NrOwoKCgoKCgojIDM4OSAiL29wdC9tdnBs b2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2lu Y2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDMKCgogICAgY2xhc3MgX0xvY2sgewogICAgICAgIHB1 YmxpYzoKICAgICAgICAgICAgX0xvY2soKSB7IGlmICh0aHJlYWRzKSBwdGhyZWFkX211dGV4X2xv Y2soJl9TX25vZGVfYWxsb2NhdG9yX2xvY2spIDsgfQogICAgICAgICAgICB+X0xvY2soKSB7IGlm ICh0aHJlYWRzKSBwdGhyZWFkX211dGV4X3VubG9jaygmX1Nfbm9kZV9hbGxvY2F0b3JfbG9jaykg OyB9CiAgICB9OwogICAgZnJpZW5kIGNsYXNzIF9Mb2NrOwoKcHVibGljOgoKICAgCiAgc3RhdGlj IHZvaWQqIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgewogICAgX09iaiogdm9sYXRpbGUgKiBfX215 X2ZyZWVfbGlzdDsKICAgIF9PYmoqICAgX19yZXN1bHQ7CgogICAgaWYgKF9fbiA+IChzaXplX3Qp IF9NQVhfQllURVMpIHsKICAgICAgICByZXR1cm4obWFsbG9jX2FsbG9jOjphbGxvY2F0ZShfX24p KTsKICAgIH0KICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3Rf aW5kZXgoX19uKTsKICAgICAKICAgICAKICAgICAKCiAgICAgICAgIAogICAgICAgIF9Mb2NrIF9f bG9ja19pbnN0YW5jZTsKCiAgICBfX3Jlc3VsdCA9ICpfX215X2ZyZWVfbGlzdDsKICAgIGlmIChf X3Jlc3VsdCA9PSAwKSB7CiAgICAgICAgdm9pZCogX19yID0gX1NfcmVmaWxsKF9TX3JvdW5kX3Vw KF9fbikpOwogICAgICAgIHJldHVybiBfX3I7CiAgICB9CiAgICAqX19teV9mcmVlX2xpc3QgPSBf X3Jlc3VsdCAtPiBfTV9mcmVlX2xpc3RfbGluazsKICAgIHJldHVybiAoX19yZXN1bHQpOwogIH07 CgogICAKICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fbikKICB7 CiAgICBfT2JqKiBfX3EgPSAoX09iaiopX19wOwogICAgX09iaiogdm9sYXRpbGUgKiBfX215X2Zy ZWVfbGlzdDsKCiAgICBpZiAoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykgewogICAgICAgIG1h bGxvY19hbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbik7CiAgICAgICAgcmV0dXJuOwogICAgfQog ICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24p OwogICAgIAoKICAgICAgICAgCiAgICAgICAgX0xvY2sgX19sb2NrX2luc3RhbmNlOwoKICAgIF9f cSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsKICAgICpfX215X2ZyZWVf bGlzdCA9IF9fcTsKICAgICAKICB9CgogIHN0YXRpYyB2b2lkKiByZWFsbG9jYXRlKHZvaWQqIF9f cCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdfc3opOwoKfSA7Cgp0eXBlZGVmIF9fZGVm YXVsdF9hbGxvY190ZW1wbGF0ZTwgdHJ1ZSAsIDA+IGFsbG9jOwp0eXBlZGVmIF9fZGVmYXVsdF9h bGxvY190ZW1wbGF0ZTxmYWxzZSwgMD4gc2luZ2xlX2NsaWVudF9hbGxvYzsKCgoKIAogCiAKIAp0 ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmNoYXIqCl9fZGVmYXVsdF9hbGxv Y190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3Np emUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCYgX19ub2JqcykKewogICAgY2hhciogX19yZXN1bHQ7CiAgICBzaXplX3QgX190 b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7CiAgICBzaXplX3QgX19ieXRlc19sZWZ0ID0g X1NfZW5kX2ZyZWUgLSBfU19zdGFydF9mcmVlOwoKICAgIGlmIChfX2J5dGVzX2xlZnQgPj0gX190 b3RhbF9ieXRlcykgewogICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsKICAgICAgICBf U19zdGFydF9mcmVlICs9IF9fdG90YWxfYnl0ZXM7CiAgICAgICAgcmV0dXJuKF9fcmVzdWx0KTsK ICAgIH0gZWxzZSBpZiAoX19ieXRlc19sZWZ0ID49IF9fc2l6ZSkgewogICAgICAgIF9fbm9ianMg PSAoaW50KShfX2J5dGVzX2xlZnQvX19zaXplKTsKICAgICAgICBfX3RvdGFsX2J5dGVzID0gX19z aXplICogX19ub2JqczsKICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2ZyZWU7CiAgICAgICAg X1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFsX2J5dGVzOwogICAgICAgIHJldHVybihfX3Jlc3VsdCk7 CiAgICB9IGVsc2UgewogICAgICAgIHNpemVfdCBfX2J5dGVzX3RvX2dldCA9CgkgIDIgKiBfX3Rv dGFsX2J5dGVzICsgX1Nfcm91bmRfdXAoX1NfaGVhcF9zaXplID4+IDQpOwogICAgICAgICAKICAg ICAgICBpZiAoX19ieXRlc19sZWZ0ID4gMCkgewogICAgICAgICAgICBfT2JqKiB2b2xhdGlsZSAq IF9fbXlfZnJlZV9saXN0ID0KICAgICAgICAgICAgICAgICAgICAgICAgX1NfZnJlZV9saXN0ICsg X1NfZnJlZWxpc3RfaW5kZXgoX19ieXRlc19sZWZ0KTsKCiAgICAgICAgICAgICgoX09iaiopX1Nf c3RhcnRfZnJlZSkgLT4gX01fZnJlZV9saXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAg ICAgICAgICpfX215X2ZyZWVfbGlzdCA9IChfT2JqKilfU19zdGFydF9mcmVlOwogICAgICAgIH0K ICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIqKW1hbGxvYyhfX2J5dGVzX3RvX2dldCk7CiAg ICAgICAgaWYgKDAgPT0gX1Nfc3RhcnRfZnJlZSkgewogICAgICAgICAgICBzaXplX3QgX19pOwog ICAgICAgICAgICBfT2JqKiB2b2xhdGlsZSAqIF9fbXlfZnJlZV9saXN0OwoJICAgIF9PYmoqIF9f cDsKICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAg Zm9yIChfX2kgPSBfX3NpemU7IF9faSA8PSBfTUFYX0JZVEVTOyBfX2kgKz0gX0FMSUdOKSB7CiAg ICAgICAgICAgICAgICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0 X2luZGV4KF9faSk7CiAgICAgICAgICAgICAgICBfX3AgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAg ICAgICAgICAgICBpZiAoMCAhPSBfX3ApIHsKICAgICAgICAgICAgICAgICAgICAqX19teV9mcmVl X2xpc3QgPSBfX3AgLT4gX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgICAgICAgICAgICAgX1Nf c3RhcnRfZnJlZSA9IChjaGFyKilfX3A7CiAgICAgICAgICAgICAgICAgICAgX1NfZW5kX2ZyZWUg PSBfU19zdGFydF9mcmVlICsgX19pOwogICAgICAgICAgICAgICAgICAgIHJldHVybihfU19jaHVu a19hbGxvYyhfX3NpemUsIF9fbm9ianMpKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgkgICAgX1NfZW5k X2ZyZWUgPSAwOwkgCiAgICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopbWFsbG9jX2Fs bG9jOjphbGxvY2F0ZShfX2J5dGVzX3RvX2dldCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg IAogICAgICAgICAgICAgCiAgICAgICAgfQogICAgICAgIF9TX2hlYXBfc2l6ZSArPSBfX2J5dGVz X3RvX2dldDsKICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2J5dGVzX3Rv X2dldDsKICAgICAgICByZXR1cm4oX1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKSk7CiAg ICB9Cn0KCgogCiAKIAp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CnZvaWQq Cl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX3JlZmlsbChz aXplX3QgX19uKQp7CiAgICBpbnQgX19ub2JqcyA9IDIwOwogICAgY2hhciogX19jaHVuayA9IF9T X2NodW5rX2FsbG9jKF9fbiwgX19ub2Jqcyk7CiAgICBfT2JqKiB2b2xhdGlsZSAqIF9fbXlfZnJl ZV9saXN0OwogICAgX09iaiogX19yZXN1bHQ7CiAgICBfT2JqKiBfX2N1cnJlbnRfb2JqOwogICAg X09iaiogX19uZXh0X29iajsKICAgIGludCBfX2k7CgogICAgaWYgKDEgPT0gX19ub2JqcykgcmV0 dXJuKF9fY2h1bmspOwogICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVl bGlzdF9pbmRleChfX24pOwoKICAgICAKICAgICAgX19yZXN1bHQgPSAoX09iaiopX19jaHVuazsK ICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19uZXh0X29iaiA9IChfT2JqKikoX19jaHVuayArIF9f bik7CiAgICAgIGZvciAoX19pID0gMTsgOyBfX2krKykgewogICAgICAgIF9fY3VycmVudF9vYmog PSBfX25leHRfb2JqOwogICAgICAgIF9fbmV4dF9vYmogPSAoX09iaiopKChjaGFyKilfX25leHRf b2JqICsgX19uKTsKICAgICAgICBpZiAoX19ub2JqcyAtIDEgPT0gX19pKSB7CiAgICAgICAgICAg IF9fY3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0X2xpbmsgPSAwOwogICAgICAgICAgICBicmVh azsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBfX2N1cnJlbnRfb2JqIC0+IF9NX2ZyZWVf bGlzdF9saW5rID0gX19uZXh0X29iajsKICAgICAgICB9CiAgICAgIH0KICAgIHJldHVybihfX3Jl c3VsdCk7Cn0KCnRlbXBsYXRlIDxib29sIHRocmVhZHMsIGludCBpbnN0Pgp2b2lkKgpfX2RlZmF1 bHRfYWxsb2NfdGVtcGxhdGU8dGhyZWFkcywgaW5zdD46OnJlYWxsb2NhdGUodm9pZCogX19wLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90 IF9fb2xkX3N6LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZV90IF9fbmV3X3N6KQp7CiAgICB2b2lkKiBfX3Jlc3VsdDsKICAgIHNpemVfdCBf X2NvcHlfc3o7CgogICAgaWYgKF9fb2xkX3N6ID4gKHNpemVfdCkgX01BWF9CWVRFUyAmJiBfX25l d19zeiA+IChzaXplX3QpIF9NQVhfQllURVMpIHsKICAgICAgICByZXR1cm4ocmVhbGxvYyhfX3As IF9fbmV3X3N6KSk7CiAgICB9CiAgICBpZiAoX1Nfcm91bmRfdXAoX19vbGRfc3opID09IF9TX3Jv dW5kX3VwKF9fbmV3X3N6KSkgcmV0dXJuKF9fcCk7CiAgICBfX3Jlc3VsdCA9IGFsbG9jYXRlKF9f bmV3X3N6KTsKICAgIF9fY29weV9zeiA9IF9fbmV3X3N6ID4gX19vbGRfc3o/IF9fb2xkX3N6IDog X19uZXdfc3o7CiAgICBtZW1jcHkoX19yZXN1bHQsIF9fcCwgX19jb3B5X3N6KTsKICAgIGRlYWxs b2NhdGUoX19wLCBfX29sZF9zeik7CiAgICByZXR1cm4oX19yZXN1bHQpOwp9CgoKICAgIHRlbXBs YXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIHB0aHJlYWRfbXV0ZXhfdAogICAg X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1Nfbm9kZV9hbGxv Y2F0b3JfbG9jawogICAgICAgID0ge3swLCAwLCAwLCAwfSwge3t7MH19fSwgMH0gOwoKCgoKCgoK CgojIDYwMiAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45 NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDMKCgojIDY4OSAiL29w dC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4u Ly4uL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDMKCgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVh ZHMsIGludCBfX2luc3Q+CmNoYXIqIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMs IF9faW5zdD46Ol9TX3N0YXJ0X2ZyZWUgPSAwOwoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBp bnQgX19pbnN0PgpjaGFyKiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2lu c3Q+OjpfU19lbmRfZnJlZSA9IDA7Cgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2lu c3Q+CnNpemVfdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+Ojpf U19oZWFwX3NpemUgPSAwOwoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pgpf X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfT2JqKiB2b2xhdGls ZSAKX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA6Ol9TX2ZyZWVf bGlzdFsKICAgIF9ORlJFRUxJU1RTCl0gPSB7MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg MCwgMCwgMCwgMCwgMCwgMCwgfTsKIAogCiAKCgoKCgoKCgoKCiAKIAogCiAKIAogCiAKCgoKdGVt cGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgYWxsb2NhdG9yIHsKICB0eXBlZGVmIGFsbG9jIF9BbGxv YzsgICAgICAgICAgIApwdWJsaWM6CiAgdHlwZWRlZiBzaXplX3QgICAgIHNpemVfdHlwZTsKICB0 eXBlZGVmIHB0cmRpZmZfdCAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiAgICAgICBw b2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgX1Rw JiAgICAgICByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsK ICB0eXBlZGVmIF9UcCAgICAgICAgdmFsdWVfdHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+ IHN0cnVjdCByZWJpbmQgewogICAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7CiAgfTsK CiAgYWxsb2NhdG9yKCkgdGhyb3coKSAge30KICBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yJikg dGhyb3coKSAge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gYWxsb2NhdG9yKGNvbnN0IGFsbG9j YXRvcjxfVHAxPiYpIHRocm93KCkgIHt9CiAgfmFsbG9jYXRvcigpIHRocm93KCkgIHt9CgogIHBv aW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CiAgY29u c3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZf X3g7IH0KCiAgIAogICAKICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQq ID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAwID8gc3RhdGljX2Nhc3Q8X1RwKj4oX0FsbG9jOjph bGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpCiAgICAgICAgICAgICAgICAgICAgOiAwOwogIH0K CiAgIAogIHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKICAgIHsg X0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9CgogIHNpemVfdHlw ZSBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkgCiAgICB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6 ZW9mKF9UcCk7IH0KCiAgdm9pZCBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192 YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsgfQogIHZvaWQgZGVzdHJveShwb2ludGVyIF9fcCkg eyBfX3AtPn5fVHAoKTsgfQp9OwoKdGVtcGxhdGU8PgpjbGFzcyBhbGxvY2F0b3I8dm9pZD4gewog IHR5cGVkZWYgc2l6ZV90ICAgICAgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90ICAgZGlm ZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCogICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIGNv bnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2b2lkICAgICAgICB2YWx1ZV90eXBl OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIGFs bG9jYXRvcjxfVHAxPiBvdGhlcjsKICB9Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNz IF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0 IGFsbG9jYXRvcjxfVDI+JikKewogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Qx LCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgYWxsb2NhdG9yPF9UMT4m LCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KCiAKIAogCiAKIAog Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfX2FsbG9jYXRvciB7 CiAgX0FsbG9jIF9fdW5kZXJseWluZ19hbGxvYzsKCiAgdHlwZWRlZiBzaXplX3QgICAgc2l6ZV90 eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCog ICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCogY29uc3RfcG9pbnRlcjsKICB0eXBl ZGVmIF9UcCYgICAgICAgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgX1RwJiBjb25zdF9yZWZl cmVuY2U7CiAgdHlwZWRlZiBfVHAgICAgICAgIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFz cyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0Fs bG9jPiBvdGhlcjsKICB9OwoKICBfX2FsbG9jYXRvcigpIHRocm93KCkgIHt9CiAgX19hbGxvY2F0 b3IoY29uc3QgX19hbGxvY2F0b3ImIF9fYSkgdGhyb3coKSAKICAgIDogX191bmRlcmx5aW5nX2Fs bG9jKF9fYS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+CiAg X19hbGxvY2F0b3IoY29uc3QgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiYgX19hKSB0aHJvdygp IAogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5kZXJseWluZ19hbGxvYykge30KICB+ X19hbGxvY2F0b3IoKSB0aHJvdygpICB7fQoKICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9f eCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9y ZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CgogICAKICBfVHAqIGFsbG9jYXRl KHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAwCiAg ICAgICAgPyBzdGF0aWNfY2FzdDxfVHAqPihfX3VuZGVybHlpbmdfYWxsb2MuYWxsb2NhdGUoX19u ICogc2l6ZW9mKF9UcCkpKQogICAgICAgIDogMDsKICB9CgogICAKICB2b2lkIGRlYWxsb2NhdGUo cG9pbnRlciBfX3AsIHNpemVfdHlwZSBfX24pCiAgICB7IF9fdW5kZXJseWluZ19hbGxvYy5kZWFs bG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgp IGNvbnN0IHRocm93KCkgCiAgICB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0K CiAgdm9pZCBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwpIHsgbmV3KF9f cCkgX1RwKF9fdmFsKTsgfQogIHZvaWQgZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAo KTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KY2xhc3MgX19hbGxvY2F0b3I8dm9pZCwg X0FsbG9jPiB7CiAgdHlwZWRlZiBzaXplX3QgICAgICBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJk aWZmX3QgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkKiAgICAgICBwb2ludGVyOwog IHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgICAgICAg IHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAg IHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsKICB9Owp9OwoKdGVtcGxh dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0 IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICByZXR1cm4gX19hMS5fX3Vu ZGVybHlpbmdfYWxsb2MgPT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0KCgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19h bGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2ExLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMikKewogIHJldHVybiBfX2ExLl9fdW5kZXJs eWluZ19hbGxvYyAhPSBfX2EyLl9fdW5kZXJseWluZ19hbGxvYzsKfQoKCiAKIAogCgp0ZW1wbGF0 ZSA8aW50IGluc3Q+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19tYWxsb2NfYWxsb2Nf dGVtcGxhdGU8aW5zdD4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fbWFsbG9jX2Fs bG9jX3RlbXBsYXRlPGluc3Q+JikKewogIHJldHVybiB0cnVlOwp9CgoKdGVtcGxhdGUgPGludCBf X2luc3Q+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxh dGU8X19pbnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2Nf dGVtcGxhdGU8X19pbnN0PiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KCgoKdGVtcGxhdGUgPGJvb2wg X190aHJlYWRzLCBpbnQgX19pbnN0PgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fZGVm YXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mLAogICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4m KQp7CiAgcmV0dXJuIHRydWU7Cn0KCgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2lu c3Q+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRl PF9fdGhyZWFkcywgX19pbnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19kZWZh dWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYpCnsKICByZXR1cm4gZmFsc2U7 Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25z dCBkZWJ1Z19hbGxvYzxfQWxsb2M+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWJ1 Z19hbGxvYzxfQWxsb2M+JikgewogIHJldHVybiB0cnVlOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9B bGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBkZWJ1Z19hbGxvYzxfQWxsb2M+JiwK ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWJ1Z19hbGxvYzxfQWxsb2M+JikgewogIHJl dHVybiBmYWxzZTsKfQoKCiAKIAogCiAKIAogCgogCiAKIAogCiAKIAoKIAogCiAKIAogCiAKIAog CiAKIAogCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpzdHJ1Y3Qg X0FsbG9jX3RyYWl0cwp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gZmFs c2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NhdG9yOjogICByZWJpbmQ8X1RwPjo6b3RoZXIK ICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg X0FsbG9jYXRvcj4KY29uc3QgYm9vbCBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46Ol9T X2luc3RhbmNlbGVzczsKCiAKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDE+CnN0cnVj dCBfQWxsb2NfdHJhaXRzPF9UcCwgYWxsb2NhdG9yPF9UcDE+ID4KewogIHN0YXRpYyBjb25zdCBi b29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBh bGxvYz4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwPiBhbGxvY2F0b3JfdHlw ZTsKfTsKCiAKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2Nf dHJhaXRzPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+CnsKICBzdGF0aWMg Y29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9j PF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IF9BbGxvY190eXBlOwogIHR5 cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4g YWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgYm9vbCBfX3RocmVhZHMs IGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19kZWZhdWx0X2FsbG9jX3Rl bXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0 YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgX19kZWZhdWx0X2Fs bG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA+CiAgICAgICAgICBfQWxsb2NfdHlwZTsK ICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy ZWFkcywgX19pbnN0PiA+CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgZGVidWdf YWxsb2M8X0FsbG9jPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0 cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9B bGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgogCiAKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9U cDEsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwKICAgICAgICAgICAgICAg ICAgICAgX19hbGxvY2F0b3I8X1RwMSwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+ ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRl ZiBzaW1wbGVfYWxsb2M8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gX0Fs bG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBs YXRlPF9faW5zdD4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj bGFzcyBfVHAxLCBib29sIF9fdGhyLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxf VHAsCiAgICAgICAgICAgICAgICAgICAgICBfX2FsbG9jYXRvcjxfVHAxLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyLCBfX2lu c3Q+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0 eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3Rocixf X2luc3Q+ID4KICAgICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1Rw LCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+CiAgICAgICAgICBhbGxv Y2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBjbGFzcyBf QWxsb2M+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19hbGxvY2F0b3I8X1RwMSwgZGVidWdf YWxsb2M8X0FsbG9jPiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9 IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4g X0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIGRlYnVnX2FsbG9jPF9BbGxv Yz4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgoKCgoKCgogCgoKCgoKIAogCiAKIyAyMSAiL29wdC9t dnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4u L2luY2x1ZGUvZysrLTMvYWxsb2MuaCIgMiAzCgoKCiMgNDAgIi9vcHQvbXZwbG9jYWwvbGliL2dj Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z L2FsbG9jLmgiIDMKCgoKCiAKIAogCiMgMzkgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3Bh cmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0 cmluZy5oIiAyIDMKCgpleHRlcm4gIkMrKyIgewpjbGFzcyBpc3RyZWFtOyBjbGFzcyBvc3RyZWFt OwoKIyAxICIvb3B0L212cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1 LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9pdGVyYXRvciIgMSAzCiAKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgojIDEgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3Vu LXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9yZWxvcHMuaCIg MSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoKdGVtcGxhdGUgPGNsYXNz IF9UcD4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBf X3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5s aW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgewogIHJl dHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBib29sIG9wZXJh dG9yPD0oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSB7CiAgcmV0dXJuICEoX195IDwg X194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25z dCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9Cgog CgoKCiAKIAogCiMgMzEgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy aXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2l0ZXJhdG9yIiAyIDMKCiMgMSAi L29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zL2luY2x1 ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzQyICIvb3B0L212cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJj LXN1bi1zb2xhcmlzMi8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CgojIDMyICIvb3B0L212 cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1LjMvLi4vLi4vLi4vLi4v aW5jbHVkZS9nKystMy9pdGVyYXRvciIgMiAzCgoKCgoKCiMgMSAiL29wdC9tdnBsb2NhbC9saWIv Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr LTMvc3RsX2l0ZXJhdG9yLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoK CiAKCnN0cnVjdCBpbnB1dF9pdGVyYXRvcl90YWcge307CnN0cnVjdCBvdXRwdXRfaXRlcmF0b3Jf dGFnIHt9OwpzdHJ1Y3QgZm9yd2FyZF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgaW5wdXRfaXRlcmF0 b3JfdGFnIHt9OwpzdHJ1Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgZm9y d2FyZF9pdGVyYXRvcl90YWcge307CnN0cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyA6 IHB1YmxpYyBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyB7fTsKCiAKIAogCiAKCnRlbXBsYXRl IDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGlucHV0X2l0ZXJhdG9yIHsKICB0 eXBlZGVmIGlucHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9U cCAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlICAgICAgICAg IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAgICAgICAgICBwb2ludGVyOwog IHR5cGVkZWYgX1RwJiAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKfTsKCnN0cnVjdCBvdXRwdXRf aXRlcmF0b3IgewogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29y eTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZv aWQgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAg ICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICByZWZlcmVuY2U7 Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBmb3J3YXJk X2l0ZXJhdG9yIHsKICB0eXBlZGVmIGZvcndhcmRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVn b3J5OwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVm IF9EaXN0YW5jZSAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAg ICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmICAgICAgICAgICAgICAgICByZWZl cmVuY2U7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3Qg YmlkaXJlY3Rpb25hbF9pdGVyYXRvciB7CiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y X3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAg ICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgICAgICAgICAgICAgICAgICBkaWZm ZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVy OwogIHR5cGVkZWYgX1RwJiAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwp9OwoKdGVt cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgcmFuZG9tX2FjY2Vzc19p dGVyYXRvciB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9j YXRlZ29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7 CiAgdHlwZWRlZiBfRGlzdGFuY2UgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAg dHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgX1Rw JiAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwp9OwoKIyA5OCAiL29wdC9tdnBsb2Nh bC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1 ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKCgoKCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+ CnN0cnVjdCBpdGVyYXRvcl90cmFpdHMgewogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpp dGVyYXRvcl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHR5cGVuYW1lIF9J dGVyYXRvcjo6dmFsdWVfdHlwZSAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1l IF9JdGVyYXRvcjo6ZGlmZmVyZW5jZV90eXBlICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYg dHlwZW5hbWUgX0l0ZXJhdG9yOjpwb2ludGVyICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYg dHlwZW5hbWUgX0l0ZXJhdG9yOjpyZWZlcmVuY2UgICAgICAgICByZWZlcmVuY2U7Cn07Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPF9UcCo+IHsKICB0eXBlZGVm IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYg X1RwICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZm X3QgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiAgICAg ICAgICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmICAgICAgICAgICAgICAg ICAgICAgICAgcmVmZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGl0ZXJh dG9yX3RyYWl0czxjb25zdCBfVHAqPiB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9y X3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAg ICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90ICAgICAgICAgICAgICAgICAgIGRp ZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIGNvbnN0IF9UcCogICAgICAgICAgICAgICAgICBwb2lu dGVyOwogIHR5cGVkZWYgY29uc3QgX1RwJiAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKfTsK CiAKIAogCiAKCiAKCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5Cl9faXRlcmF0b3JfY2F0ZWdvcnko Y29uc3QgX0l0ZXImKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+ OjppdGVyYXRvcl9jYXRlZ29yeSBfQ2F0ZWdvcnk7CiAgcmV0dXJuIF9DYXRlZ29yeSgpOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0 ZXI+OjpkaWZmZXJlbmNlX3R5cGUqCl9fZGlzdGFuY2VfdHlwZShjb25zdCBfSXRlciYpCnsKICBy ZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6ZGlmZmVy ZW5jZV90eXBlKj4oMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGUqCl9fdmFsdWVfdHlwZShjb25zdCBf SXRlciYpCnsKICByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J dGVyPjo6dmFsdWVfdHlwZSo+KDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeQppdGVyYXRv cl9jYXRlZ29yeShjb25zdCBfSXRlciYgX19pKSB7IHJldHVybiBfX2l0ZXJhdG9yX2NhdGVnb3J5 KF9faSk7IH0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUqCmRpc3RhbmNlX3R5cGUoY29uc3QgX0l0 ZXImIF9faSkgeyByZXR1cm4gX19kaXN0YW5jZV90eXBlKF9faSk7IH0KCnRlbXBsYXRlIDxjbGFz cyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5 cGUqCnZhbHVlX3R5cGUoY29uc3QgX0l0ZXImIF9faSkgeyByZXR1cm4gX192YWx1ZV90eXBlKF9f aSk7IH0KCgoKCgojIDI1OSAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s YXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMK Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5l IHZvaWQgX19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlJiBfX24sIGlucHV0X2l0ZXJh dG9yX3RhZykKewogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgeyArK19fZmlyc3Q7ICsrX19u OyB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0 YW5jZT4KaW5saW5lIHZvaWQgX19kaXN0YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJz dCwgCiAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwg CiAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlJiBfX24sIHJhbmRvbV9hY2Nlc3NfaXRl cmF0b3JfdGFnKQp7CiAgX19uICs9IF9fbGFzdCAtIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfSW5wdXRJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBkaXN0YW5jZShf SW5wdXRJdGVyYXRvciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0 b3IgX19sYXN0LCBfRGlzdGFuY2UmIF9fbikKewogIF9fZGlzdGFuY2UoX19maXJzdCwgX19sYXN0 LCBfX24sIGl0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg X0lucHV0SXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRl cmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKX19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0 LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9yX3RhZykKewogIHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAw OwogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgKytfX2ZpcnN0OyArK19fbjsKICB9 CiAgcmV0dXJuIF9fbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4K aW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojpk aWZmZXJlbmNlX3R5cGUKX19kaXN0YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwg X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0 ZXJhdG9yX3RhZykgewogIHJldHVybiBfX2xhc3QgLSBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX0lucHV0SXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0 SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJz dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X0lucHV0SXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSAKICAgIF9DYXRlZ29yeTsK ICByZXR1cm4gX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9DYXRlZ29yeSgpKTsKfQoKCgp0 ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBf X2FkdmFuY2UoX0lucHV0SXRlciYgX19pLCBfRGlzdGFuY2UgX19uLCBpbnB1dF9pdGVyYXRvcl90 YWcpIHsKICB3aGlsZSAoX19uLS0pICsrX19pOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRp cmVjdGlvbmFsSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNl KF9CaWRpcmVjdGlvbmFsSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwgCiAgICAgICAgICAg ICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykgewogIGlmIChfX24gPj0gMCkK ICAgIHdoaWxlIChfX24tLSkgKytfX2k7CiAgZWxzZQogICAgd2hpbGUgKF9fbisrKSAtLV9faTsK fQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0 YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciYgX19pLCBf RGlzdGFuY2UgX19uLCAKICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0 b3JfdGFnKSB7CiAgX19pICs9IF9fbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y LCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIGFkdmFuY2UoX0lucHV0SXRlcmF0b3ImIF9f aSwgX0Rpc3RhbmNlIF9fbikgewogIF9fYWR2YW5jZShfX2ksIF9fbiwgaXRlcmF0b3JfY2F0ZWdv cnkoX19pKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpjbGFzcyBiYWNrX2luc2Vy dF9pdGVyYXRvciB7CnByb3RlY3RlZDoKICBfQ29udGFpbmVyKiBjb250YWluZXI7CnB1YmxpYzoK ICB0eXBlZGVmIF9Db250YWluZXIgICAgICAgICAgY29udGFpbmVyX3R5cGU7CiAgdHlwZWRlZiBv dXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCAgICAg ICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBkaWZm ZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlw ZWRlZiB2b2lkICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKCiAgZXhwbGljaXQgYmFja19pbnNl cnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7fQogIGJhY2tf aW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgogIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBf Q29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKSB7IAogICAgY29udGFpbmVyLT5wdXNoX2Jh Y2soX192YWx1ZSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9y PF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGJhY2tfaW5zZXJ0 X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBi YWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJu ICp0aGlzOyB9Cn07CgojIDM3OCAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t c29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgi IDMKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KaW5saW5lIGJhY2tfaW5zZXJ0X2l0ZXJh dG9yPF9Db250YWluZXI+IGJhY2tfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KSB7CiAgcmV0dXJu IGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfQ29udGFpbmVyPgpjbGFzcyBmcm9udF9pbnNlcnRfaXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAg X0NvbnRhaW5lciogY29udGFpbmVyOwpwdWJsaWM6CiAgdHlwZWRlZiBfQ29udGFpbmVyICAgICAg ICAgIGNvbnRhaW5lcl90eXBlOwogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRv cl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0 eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9p ZCAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBy ZWZlcmVuY2U7CgogIGV4cGxpY2l0IGZyb250X2luc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBf X3gpIDogY29udGFpbmVyKCZfX3gpIHt9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWlu ZXI+JgogIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBf X3ZhbHVlKSB7IAogICAgY29udGFpbmVyLT5wdXNoX2Zyb250KF9fdmFsdWUpOwogICAgcmV0dXJu ICp0aGlzOwogIH0KICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9y KigpIHsgcmV0dXJuICp0aGlzOyB9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+ JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8 X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQp9OwoKIyA0MTcg Ii9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8u Li8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAzCgoKdGVtcGxhdGUgPGNsYXNz IF9Db250YWluZXI+CmlubGluZSBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4gZnJv bnRfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KSB7CiAgcmV0dXJuIGZyb250X2luc2VydF9pdGVy YXRvcjxfQ29udGFpbmVyPihfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KY2xh c3MgaW5zZXJ0X2l0ZXJhdG9yIHsKcHJvdGVjdGVkOgogIF9Db250YWluZXIqIGNvbnRhaW5lcjsK ICB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBpdGVyOwpwdWJsaWM6CiAgdHlwZWRlZiBf Q29udGFpbmVyICAgICAgICAgIGNvbnRhaW5lcl90eXBlOwogIHR5cGVkZWYgb3V0cHV0X2l0ZXJh dG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAg dmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBl OwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCAg ICAgICAgICAgICAgICByZWZlcmVuY2U7CgogIGluc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBf X3gsIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIF9faSkgCiAgICA6IGNvbnRhaW5lcigm X194KSwgaXRlcihfX2kpIHt9CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgogIG9wZXJh dG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKSB7IAog ICAgaXRlciA9IGNvbnRhaW5lci0+aW5zZXJ0KGl0ZXIsIF9fdmFsdWUpOwogICAgKytpdGVyOwog ICAgcmV0dXJuICp0aGlzOwogIH0KICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJh dG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBv cGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5l cj4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQp9OwoKIyA0NTkgIi9vcHQvbXZw bG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9p bmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAzCgoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWlu ZXIsIGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIAppbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4g aW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194LCBfSXRlcmF0b3IgX19pKQp7CiAgdHlwZWRlZiB0eXBl bmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBfX2l0ZXI7CiAgcmV0dXJuIGluc2VydF9pdGVyYXRv cjxfQ29udGFpbmVyPihfX3gsIF9faXRlcihfX2kpKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfQmlk aXJlY3Rpb25hbEl0ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWZlcmVuY2UgPSBfVHAmLCAK ICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSA9IHB0cmRpZmZfdD4gCgoKCgpjbGFzcyByZXZlcnNl X2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IgewogIHR5cGVkZWYgcmV2ZXJzZV9iaWRpcmVjdGlvbmFs X2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIF9UcCwgCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX1JlZmVyZW5jZSwgX0Rpc3RhbmNlPiAgX1NlbGY7CnBy b3RlY3RlZDoKICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIGN1cnJlbnQ7CnB1YmxpYzoKICB0eXBl ZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVk ZWYgX1RwICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0 YW5jZSAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAg ICAgICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBfUmVmZXJlbmNlICAgICAgICAg ICAgICAgICByZWZlcmVuY2U7CgogIHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcigpIHt9 CiAgZXhwbGljaXQgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yKF9CaWRpcmVjdGlvbmFs SXRlcmF0b3IgX194KQogICAgOiBjdXJyZW50KF9feCkge30KICBfQmlkaXJlY3Rpb25hbEl0ZXJh dG9yIGJhc2UoKSBjb25zdCB7IHJldHVybiBjdXJyZW50OyB9CiAgX1JlZmVyZW5jZSBvcGVyYXRv ciooKSBjb25zdCB7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fdG1wID0gY3VycmVudDsK ICAgIHJldHVybiAqLS1fX3RtcDsKICB9CgogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsg cmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgogIF9TZWxmJiBvcGVyYXRvcisrKCkgewogICAgLS1j dXJyZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvcisrKGludCkgewog ICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIC0tY3VycmVudDsKICAgIHJldHVybiBfX3RtcDsK ICB9CiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gKnRo aXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yLS0oaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlz OwogICAgKytjdXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0KfTsKCiMgNTUwICIvb3B0L212 cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1LjMvLi4vLi4vLi4vLi4v aW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMwoKCnRlbXBsYXRlIDxjbGFzcyBfQmlJdGVy LCBjbGFzcyBfVHAsIGNsYXNzIF9SZWYsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+CmlubGlu ZSBib29sIG9wZXJhdG9yPT0oCiAgICBjb25zdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0 b3I8X0JpSXRlciwgX1RwLCBfUmVmLCBfRGlzdGFuY2U+JiBfX3gsIAogICAgY29uc3QgcmV2ZXJz ZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaUl0ZXIsIF9UcCwgX1JlZiwgX0Rpc3RhbmNlPiYg X195KQp7CiAgcmV0dXJuIF9feC5iYXNlKCkgPT0gX195LmJhc2UoKTsKfQoKCgogCiAKIAogCiAK CnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmNsYXNzIHJldmVyc2VfaXRlcmF0b3IgCnsKcHJv dGVjdGVkOgogIF9JdGVyYXRvciBjdXJyZW50OwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkKICAgICAgICAgIGl0 ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVy YXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBk aWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJh dG9yPjo6cG9pbnRlcgogICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2UKICAgICAgICAgIHJlZmVyZW5jZTsKCiAg dHlwZWRlZiBfSXRlcmF0b3IgaXRlcmF0b3JfdHlwZTsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0 b3I8X0l0ZXJhdG9yPiBfU2VsZjsKCnB1YmxpYzoKICByZXZlcnNlX2l0ZXJhdG9yKCkge30KICBl eHBsaWNpdCByZXZlcnNlX2l0ZXJhdG9yKGl0ZXJhdG9yX3R5cGUgX194KSA6IGN1cnJlbnQoX194 KSB7fQoKICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IF9TZWxmJiBfX3gpIDogY3VycmVudChfX3gu Y3VycmVudCkge30KCiAgdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgogIHJldmVyc2VfaXRlcmF0b3Io Y29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcj4mIF9feCkKICAgIDogY3VycmVudChfX3guYmFz ZSgpKSB7fQoKICAgIAogIGl0ZXJhdG9yX3R5cGUgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIGN1cnJl bnQ7IH0KICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgewogICAgX0l0ZXJhdG9yIF9fdG1w ID0gY3VycmVudDsKICAgIHJldHVybiAqLS1fX3RtcDsKICB9CgogIHBvaW50ZXIgb3BlcmF0b3It PigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgoKICBfU2VsZiYgb3BlcmF0b3Ir KygpIHsKICAgIC0tY3VycmVudDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0 b3IrKyhpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICAtLWN1cnJlbnQ7CiAgICBy ZXR1cm4gX190bXA7CiAgfQogIF9TZWxmJiBvcGVyYXRvci0tKCkgewogICAgKytjdXJyZW50Owog ICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvci0tKGludCkgewogICAgX1NlbGYg X190bXAgPSAqdGhpczsKICAgICsrY3VycmVudDsKICAgIHJldHVybiBfX3RtcDsKICB9CgogIF9T ZWxmIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7CiAgICByZXR1cm4gX1Nl bGYoY3VycmVudCAtIF9fbik7CiAgfQogIF9TZWxmJiBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlw ZSBfX24pIHsKICAgIGN1cnJlbnQgLT0gX19uOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2Vs ZiBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgewogICAgcmV0dXJuIF9TZWxm KGN1cnJlbnQgKyBfX24pOwogIH0KICBfU2VsZiYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUg X19uKSB7CiAgICBjdXJyZW50ICs9IF9fbjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgcmVmZXJl bmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKigqdGhp cyArIF9fbik7IH0gIAp9OyAKIAp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgYm9v bCBvcGVyYXRvcj09KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LCAKICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9f eSkgewogIHJldHVybiBfX3guYmFzZSgpID09IF9feS5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfSXRlcmF0b3I+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCByZXZlcnNlX2l0ZXJhdG9y PF9JdGVyYXRvcj4mIF9feCwgCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0 ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVybiBfX3kuYmFzZSgpIDwgX194LmJhc2Uo KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIHJldmVyc2Vf aXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCm9wZXJhdG9yLShjb25zdCByZXZl cnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwgCiAgICAgICAgICBjb25zdCByZXZlcnNlX2l0 ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVybiBfX3kuYmFzZSgpIC0gX194LmJhc2Uo KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIHJldmVyc2VfaXRlcmF0b3I8 X0l0ZXJhdG9yPiAKb3BlcmF0b3IrKHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9y Pjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwKICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8 X0l0ZXJhdG9yPiYgX194KSB7CiAgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPihf X3guYmFzZSgpIC0gX19uKTsKfQoKIyA4MDUgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3Bh cmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9pdGVy YXRvci5oIiAzCgoKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdCA9IHB0cmRp ZmZfdD4gCmNsYXNzIGlzdHJlYW1faXRlcmF0b3IgewogIGZyaWVuZCBib29sIG9wZXJhdG9yPT0g PD4gIChjb25zdCBpc3RyZWFtX2l0ZXJhdG9yJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtX2l0ZXJhdG9yJik7CnByb3RlY3RlZDoK ICBpc3RyZWFtKiBfTV9zdHJlYW07CiAgX1RwIF9NX3ZhbHVlOwogIGJvb2wgX01fZW5kX21hcmtl cjsKICB2b2lkIF9NX3JlYWQoKSB7CiAgICBfTV9lbmRfbWFya2VyID0gKCpfTV9zdHJlYW0pID8g dHJ1ZSA6IGZhbHNlOwogICAgaWYgKF9NX2VuZF9tYXJrZXIpICpfTV9zdHJlYW0gPj4gX01fdmFs dWU7CiAgICBfTV9lbmRfbWFya2VyID0gKCpfTV9zdHJlYW0pID8gdHJ1ZSA6IGZhbHNlOwogIH0K cHVibGljOgogIHR5cGVkZWYgaW5wdXRfaXRlcmF0b3JfdGFnICBpdGVyYXRvcl9jYXRlZ29yeTsK ICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0 ICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgY29uc3QgX1RwKiAgICAg ICAgICBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1RwJiAgICAgICAgICByZWZlcmVuY2U7Cgog IGlzdHJlYW1faXRlcmF0b3IoKSA6IF9NX3N0cmVhbSgmY2luKSwgX01fZW5kX21hcmtlcihmYWxz ZSkge30KICBpc3RyZWFtX2l0ZXJhdG9yKGlzdHJlYW0mIF9fcykgOiBfTV9zdHJlYW0oJl9fcykg eyBfTV9yZWFkKCk7IH0KICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gX01f dmFsdWU7IH0KCiAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRv ciooKSk7IH0KCiAgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9EaXN0PiYgb3BlcmF0b3IrKygpIHsg CiAgICBfTV9yZWFkKCk7IAogICAgcmV0dXJuICp0aGlzOwogIH0KICBpc3RyZWFtX2l0ZXJhdG9y PF9UcCwgX0Rpc3Q+IG9wZXJhdG9yKysoaW50KSAgewogICAgaXN0cmVhbV9pdGVyYXRvcjxfVHAs IF9EaXN0PiBfX3RtcCA9ICp0aGlzOwogICAgX01fcmVhZCgpOwogICAgcmV0dXJuIF9fdG1wOwog IH0KfTsKCiMgODY0ICIvb3B0L212cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz Mi8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMwoKCnRl bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIGJvb2wgb3BlcmF0b3I9 PShjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0Rpc3RhbmNlPiYgX194LAogICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfRGlzdGFuY2U+JiBfX3kp IHsKICByZXR1cm4gKF9feC5fTV9zdHJlYW0gPT0gX195Ll9NX3N0cmVhbSAmJgogICAgICAgICAg X194Ll9NX2VuZF9tYXJrZXIgPT0gX195Ll9NX2VuZF9tYXJrZXIpIHx8CiAgICAgICAgIF9feC5f TV9lbmRfbWFya2VyID09IGZhbHNlICYmIF9feS5fTV9lbmRfbWFya2VyID09IGZhbHNlOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBvc3RyZWFtX2l0ZXJhdG9yIHsKcHJvdGVjdGVkOgog IG9zdHJlYW0qIF9NX3N0cmVhbTsKICBjb25zdCBjaGFyKiBfTV9zdHJpbmc7CnB1YmxpYzoKICB0 eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2 b2lkICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAg ICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcG9pbnRl cjsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwoKICBvc3RyZWFtX2l0 ZXJhdG9yKG9zdHJlYW0mIF9fcykgOiBfTV9zdHJlYW0oJl9fcyksIF9NX3N0cmluZygwKSB7fQog IG9zdHJlYW1faXRlcmF0b3Iob3N0cmVhbSYgX19zLCBjb25zdCBjaGFyKiBfX2MpIAogICAgOiBf TV9zdHJlYW0oJl9fcyksIF9NX3N0cmluZyhfX2MpICB7fQogIG9zdHJlYW1faXRlcmF0b3I8X1Rw PiYgb3BlcmF0b3I9KGNvbnN0IF9UcCYgX192YWx1ZSkgeyAKICAgICpfTV9zdHJlYW0gPDwgX192 YWx1ZTsKICAgIGlmIChfTV9zdHJpbmcpICpfTV9zdHJlYW0gPDwgX01fc3RyaW5nOwogICAgcmV0 dXJuICp0aGlzOwogIH0KICBvc3RyZWFtX2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKigpIHsgcmV0 dXJuICp0aGlzOyB9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcisrKCkgeyByZXR1 cm4gKnRoaXM7IH0gCiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcisrKGludCkgeyBy ZXR1cm4gKnRoaXM7IH0gCn07CgojIDkwNyAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFy Yy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJh dG9yLmgiIDMKCgogCgoKCiAKIAogCiMgMzggIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3Bh cmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2l0ZXJhdG9y IiAyIDMKCgoKCiAKIAogCiMgNDQgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3Vu LXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5o IiAyIDMKCgoKCmV4dGVybiB2b2lkIF9fb3V0X29mX3JhbmdlIChjb25zdCBjaGFyICopOwpleHRl cm4gdm9pZCBfX2xlbmd0aF9lcnJvciAoY29uc3QgY2hhciAqKTsKCgoKCgoKCgoKCgoKCgp0ZW1w bGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cyA9IHN0cmluZ19jaGFyX3RyYWl0czxjaGFy VD4sCgkgIGNsYXNzIEFsbG9jYXRvciA9IGFsbG9jID4KY2xhc3MgYmFzaWNfc3RyaW5nCnsKcHJp dmF0ZToKICBzdHJ1Y3QgUmVwIHsKICAgIHNpemVfdCBsZW4sIHJlcywgcmVmOwogICAgYm9vbCBz ZWxmaXNoOwoKICAgIGNoYXJUKiBkYXRhICgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh clQgKj4odGhpcyArIDEpOyB9CiAgICBjaGFyVCYgb3BlcmF0b3JbXSAoc2l6ZV90IHMpIHsgcmV0 dXJuIGRhdGEgKCkgW3NdOyB9CiAgICBjaGFyVCogZ3JhYiAoKSB7IGlmIChzZWxmaXNoKSByZXR1 cm4gY2xvbmUgKCk7ICsrcmVmOyByZXR1cm4gZGF0YSAoKTsgfQojIDEwOCAiL29wdC9tdnBsb2Nh bC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1 ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmgiIDMKCiAgICB2b2lkIHJlbGVhc2UgKCkgeyBpZiAoLS1y ZWYgPT0gMCkgZGVsZXRlIHRoaXM7IH0KCgogICAgaW5saW5lIHN0YXRpYyB2b2lkICogb3BlcmF0 b3IgbmV3IChzaXplX3QsIHNpemVfdCk7CiAgICBpbmxpbmUgc3RhdGljIHZvaWQgb3BlcmF0b3Ig ZGVsZXRlICh2b2lkICopOwogICAgaW5saW5lIHN0YXRpYyBSZXAqIGNyZWF0ZSAoc2l6ZV90KTsK ICAgIGNoYXJUKiBjbG9uZSAoKTsKCiAgICBpbmxpbmUgdm9pZCBjb3B5IChzaXplX3QsIGNvbnN0 IGNoYXJUICosIHNpemVfdCk7CiAgICBpbmxpbmUgdm9pZCBtb3ZlIChzaXplX3QsIGNvbnN0IGNo YXJUICosIHNpemVfdCk7CiAgICBpbmxpbmUgdm9pZCBzZXQgIChzaXplX3QsIGNvbnN0IGNoYXJU LCAgIHNpemVfdCk7CgogICAgaW5saW5lIHN0YXRpYyBib29sIGV4Y2Vzc19zbG9wIChzaXplX3Qs IHNpemVfdCk7CiAgICBpbmxpbmUgc3RhdGljIHNpemVfdCBmcm9iX3NpemUgKHNpemVfdCk7Cgog IHByaXZhdGU6CiAgICBSZXAgJm9wZXJhdG9yPSAoY29uc3QgUmVwICYpOwogIH07CgpwdWJsaWM6 CiAKICB0eXBlZGVmCSAgIHRyYWl0cwkJdHJhaXRzX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSB0 cmFpdHM6OmNoYXJfdHlwZQl2YWx1ZV90eXBlOwogIHR5cGVkZWYJICAgQWxsb2NhdG9yCQlhbGxv Y2F0b3JfdHlwZTsKCiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlm Zl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIGNoYXJUJiByZWZlcmVuY2U7CiAgdHlwZWRl ZiBjb25zdCBjaGFyVCYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgY2hhclQqIHBvaW50ZXI7 CiAgdHlwZWRlZiBjb25zdCBjaGFyVCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHBvaW50ZXIg aXRlcmF0b3I7CiAgdHlwZWRlZiBjb25zdF9wb2ludGVyIGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVk ZWYgOjpyZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVk ZWYgOjpyZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJh dG9yOwogIHN0YXRpYyBjb25zdCBzaXplX3R5cGUgbnBvcyA9IHN0YXRpY19jYXN0PHNpemVfdHlw ZT4oLTEpOwoKcHJpdmF0ZToKICBSZXAgKnJlcCAoKSBjb25zdCB7IHJldHVybiByZWludGVycHJl dF9jYXN0PFJlcCAqPihkYXQpIC0gMTsgfQogIHZvaWQgcmVwdXAgKFJlcCAqcCkgeyByZXAgKCkt PnJlbGVhc2UgKCk7IGRhdCA9IHAtPmRhdGEgKCk7IH0KCnB1YmxpYzoKICBjb25zdCBjaGFyVCog ZGF0YSAoKSBjb25zdAogICAgeyByZXR1cm4gcmVwICgpLT5kYXRhKCk7IH0KICBzaXplX3R5cGUg bGVuZ3RoICgpIGNvbnN0CiAgICB7IHJldHVybiByZXAgKCktPmxlbjsgfQogIHNpemVfdHlwZSBz aXplICgpIGNvbnN0CiAgICB7IHJldHVybiByZXAgKCktPmxlbjsgfQogIHNpemVfdHlwZSBjYXBh Y2l0eSAoKSBjb25zdAogICAgeyByZXR1cm4gcmVwICgpLT5yZXM7IH0KICBzaXplX3R5cGUgbWF4 X3NpemUgKCkgY29uc3QKICAgIHsgcmV0dXJuIChucG9zIC0gMSkvc2l6ZW9mIChjaGFyVCk7IH0J CSAKICBib29sIGVtcHR5ICgpIGNvbnN0CiAgICB7IHJldHVybiBzaXplICgpID09IDA7IH0KCiAK ICBiYXNpY19zdHJpbmcmIG9wZXJhdG9yPSAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIpCiAgICB7 CiAgICAgIGlmICgmc3RyICE9IHRoaXMpIHsgcmVwICgpLT5yZWxlYXNlICgpOyBkYXQgPSBzdHIu cmVwICgpLT5ncmFiICgpOyB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgZXhwbGljaXQg YmFzaWNfc3RyaW5nICgpOiBkYXQgKG5pbFJlcC5ncmFiICgpKSB7IH0KICBiYXNpY19zdHJpbmcg KGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyKTogZGF0IChzdHIucmVwICgpLT5ncmFiICgpKSB7IH0K ICBiYXNpY19zdHJpbmcgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zLCBz aXplX3R5cGUgbiA9IG5wb3MpCiAgICA6IGRhdCAobmlsUmVwLmdyYWIgKCkpIHsgYXNzaWduIChz dHIsIHBvcywgbik7IH0KICBiYXNpY19zdHJpbmcgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUg bikKICAgIDogZGF0IChuaWxSZXAuZ3JhYiAoKSkgeyBhc3NpZ24gKHMsIG4pOyB9CiAgYmFzaWNf c3RyaW5nIChjb25zdCBjaGFyVCogcykKICAgIDogZGF0IChuaWxSZXAuZ3JhYiAoKSkgeyBhc3Np Z24gKHMpOyB9CiAgYmFzaWNfc3RyaW5nIChzaXplX3R5cGUgbiwgY2hhclQgYykKICAgIDogZGF0 IChuaWxSZXAuZ3JhYiAoKSkgeyBhc3NpZ24gKG4sIGMpOyB9CgogIHRlbXBsYXRlPGNsYXNzIElu cHV0SXRlcmF0b3I+CiAgICBiYXNpY19zdHJpbmcoSW5wdXRJdGVyYXRvciBfX2JlZ2luLCBJbnB1 dEl0ZXJhdG9yIF9fZW5kKQoKCgogICAgOiBkYXQgKG5pbFJlcC5ncmFiICgpKSB7IGFzc2lnbiAo X19iZWdpbiwgX19lbmQpOyB9CgogIH5iYXNpY19zdHJpbmcgKCkKICAgIHsgcmVwICgpLT5yZWxl YXNlICgpOyB9CgogIHZvaWQgc3dhcCAoYmFzaWNfc3RyaW5nICZzKSB7IGNoYXJUICpkID0gZGF0 OyBkYXQgPSBzLmRhdDsgcy5kYXQgPSBkOyB9CgogIGJhc2ljX3N0cmluZyYgYXBwZW5kIChjb25z dCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IDAsCgkJCXNpemVfdHlwZSBuID0g bnBvcykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKGxlbmd0aCAoKSwgMCwgc3RyLCBwb3MsIG4pOyB9 CiAgYmFzaWNfc3RyaW5nJiBhcHBlbmQgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgbikKICAg IHsgcmV0dXJuIHJlcGxhY2UgKGxlbmd0aCAoKSwgMCwgcywgbik7IH0KICBiYXNpY19zdHJpbmcm IGFwcGVuZCAoY29uc3QgY2hhclQqIHMpCiAgICB7IHJldHVybiBhcHBlbmQgKHMsIHRyYWl0czo6 bGVuZ3RoIChzKSk7IH0KICBiYXNpY19zdHJpbmcmIGFwcGVuZCAoc2l6ZV90eXBlIG4sIGNoYXJU IGMpCiAgICB7IHJldHVybiByZXBsYWNlIChsZW5ndGggKCksIDAsIG4sIGMpOyB9CgogIHRlbXBs YXRlPGNsYXNzIElucHV0SXRlcmF0b3I+CiAgICBiYXNpY19zdHJpbmcmIGFwcGVuZChJbnB1dEl0 ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9yIGxhc3QpCgoKCiAgICB7IHJldHVybiByZXBsYWNl IChpZW5kICgpLCBpZW5kICgpLCBmaXJzdCwgbGFzdCk7IH0KCiAgdm9pZCBwdXNoX2JhY2soY2hh clQgX19jKQogIHsgYXBwZW5kKDEsIF9fYyk7IH0KICAKICBiYXNpY19zdHJpbmcmIGFzc2lnbiAo Y29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSAwLAoJCQlzaXplX3R5cGUg biA9IG5wb3MpCiAgICB7IHJldHVybiByZXBsYWNlICgwLCBucG9zLCBzdHIsIHBvcywgbik7IH0K ICBiYXNpY19zdHJpbmcmIGFzc2lnbiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBuKQogICAg eyByZXR1cm4gcmVwbGFjZSAoMCwgbnBvcywgcywgbik7IH0KICBiYXNpY19zdHJpbmcmIGFzc2ln biAoY29uc3QgY2hhclQqIHMpCiAgICB7IHJldHVybiBhc3NpZ24gKHMsIHRyYWl0czo6bGVuZ3Ro IChzKSk7IH0KICBiYXNpY19zdHJpbmcmIGFzc2lnbiAoc2l6ZV90eXBlIG4sIGNoYXJUIGMpCiAg ICB7IHJldHVybiByZXBsYWNlICgwLCBucG9zLCBuLCBjKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBJ bnB1dEl0ZXJhdG9yPgogICAgYmFzaWNfc3RyaW5nJiBhc3NpZ24oSW5wdXRJdGVyYXRvciBmaXJz dCwgSW5wdXRJdGVyYXRvciBsYXN0KQoKCgogICAgeyByZXR1cm4gcmVwbGFjZSAoaWJlZ2luICgp LCBpZW5kICgpLCBmaXJzdCwgbGFzdCk7IH0KCiAgYmFzaWNfc3RyaW5nJiBvcGVyYXRvcj0gKGNv bnN0IGNoYXJUKiBzKQogICAgeyByZXR1cm4gYXNzaWduIChzKTsgfQogIGJhc2ljX3N0cmluZyYg b3BlcmF0b3I9IChjaGFyVCBjKQogICAgeyByZXR1cm4gYXNzaWduICgxLCBjKTsgfQoKICBiYXNp Y19zdHJpbmcmIG9wZXJhdG9yKz0gKGNvbnN0IGJhc2ljX3N0cmluZyYgcmhzKQogICAgeyByZXR1 cm4gYXBwZW5kIChyaHMpOyB9CiAgYmFzaWNfc3RyaW5nJiBvcGVyYXRvcis9IChjb25zdCBjaGFy VCogcykKICAgIHsgcmV0dXJuIGFwcGVuZCAocyk7IH0KICBiYXNpY19zdHJpbmcmIG9wZXJhdG9y Kz0gKGNoYXJUIGMpCiAgICB7IHJldHVybiBhcHBlbmQgKDEsIGMpOyB9CgogIGJhc2ljX3N0cmlu ZyYgaW5zZXJ0IChzaXplX3R5cGUgcG9zMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsCgkJCXNp emVfdHlwZSBwb3MyID0gMCwgc2l6ZV90eXBlIG4gPSBucG9zKQogICAgeyByZXR1cm4gcmVwbGFj ZSAocG9zMSwgMCwgc3RyLCBwb3MyLCBuKTsgfQogIGJhc2ljX3N0cmluZyYgaW5zZXJ0IChzaXpl X3R5cGUgcG9zLCBjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIG4pCiAgICB7IHJldHVybiByZXBs YWNlIChwb3MsIDAsIHMsIG4pOyB9CiAgYmFzaWNfc3RyaW5nJiBpbnNlcnQgKHNpemVfdHlwZSBw b3MsIGNvbnN0IGNoYXJUKiBzKQogICAgeyByZXR1cm4gaW5zZXJ0IChwb3MsIHMsIHRyYWl0czo6 bGVuZ3RoIChzKSk7IH0KICBiYXNpY19zdHJpbmcmIGluc2VydCAoc2l6ZV90eXBlIHBvcywgc2l6 ZV90eXBlIG4sIGNoYXJUIGMpCiAgICB7IHJldHVybiByZXBsYWNlIChwb3MsIDAsIG4sIGMpOyB9 CiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIHAsIGNoYXJUIGMpCiAgICB7IHNpemVfdHlwZSBf X28gPSBwIC0gaWJlZ2luICgpOwogICAgICBpbnNlcnQgKHAgLSBpYmVnaW4gKCksIDEsIGMpOyBz ZWxmaXNoICgpOwogICAgICByZXR1cm4gaWJlZ2luICgpICsgX19vOyB9CiAgaXRlcmF0b3IgaW5z ZXJ0KGl0ZXJhdG9yIHAsIHNpemVfdHlwZSBuLCBjaGFyVCBjKQogICAgeyBzaXplX3R5cGUgX19v ID0gcCAtIGliZWdpbiAoKTsKICAgICAgaW5zZXJ0IChwIC0gaWJlZ2luICgpLCBuLCBjKTsgc2Vs ZmlzaCAoKTsKICAgICAgcmV0dXJuIGliZWdpbiAoKSArIF9fbzsgfQoKICB0ZW1wbGF0ZTxjbGFz cyBJbnB1dEl0ZXJhdG9yPgogICAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgcCwgSW5wdXRJdGVyYXRv ciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0KQoKCgogICAgeyByZXBsYWNlIChwLCBwLCBmaXJz dCwgbGFzdCk7IH0KCiAgYmFzaWNfc3RyaW5nJiBlcmFzZSAoc2l6ZV90eXBlIHBvcyA9IDAsIHNp emVfdHlwZSBuID0gbnBvcykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKHBvcywgbiwgKHNpemVfdHlw ZSkwLCAoY2hhclQpMCk7IH0KICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBwKQogICAgeyBzaXpl X3R5cGUgX19vID0gcCAtIGJlZ2luKCk7CiAgICAgIHJlcGxhY2UgKF9fbywgMSwgKHNpemVfdHlw ZSkwLCAoY2hhclQpMCk7IHNlbGZpc2ggKCk7CiAgICAgIHJldHVybiBpYmVnaW4oKSArIF9fbzsg fQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIGYsIGl0ZXJhdG9yIGwpCiAgICB7IHNpemVfdHlw ZSBfX28gPSBmIC0gaWJlZ2luKCk7CiAgICAgIHJlcGxhY2UgKF9fbywgbC1mLCAoc2l6ZV90eXBl KTAsIChjaGFyVCkwKTtzZWxmaXNoICgpOwogICAgICByZXR1cm4gaWJlZ2luKCkgKyBfX287IH0K CiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChzaXplX3R5cGUgcG9zMSwgc2l6ZV90eXBlIG4xLCBj b25zdCBiYXNpY19zdHJpbmcmIHN0ciwKCQkJIHNpemVfdHlwZSBwb3MyID0gMCwgc2l6ZV90eXBl IG4yID0gbnBvcyk7CiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChzaXplX3R5cGUgcG9zLCBzaXpl X3R5cGUgbjEsIGNvbnN0IGNoYXJUKiBzLAoJCQkgc2l6ZV90eXBlIG4yKTsKICBiYXNpY19zdHJp bmcmIHJlcGxhY2UgKHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuMSwgY29uc3QgY2hhclQqIHMp CiAgICB7IHJldHVybiByZXBsYWNlIChwb3MsIG4xLCBzLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9 CiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbjEsIHNp emVfdHlwZSBuMiwgY2hhclQgYyk7CiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChzaXplX3R5cGUg cG9zLCBzaXplX3R5cGUgbiwgY2hhclQgYykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKHBvcywgbiwg MSwgYyk7IH0KICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKGl0ZXJhdG9yIGkxLCBpdGVyYXRvciBp MiwgY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIpCiAgICB7IHJldHVybiByZXBsYWNlIChpMSAtIGli ZWdpbiAoKSwgaTIgLSBpMSwgc3RyKTsgfQogIGJhc2ljX3N0cmluZyYgcmVwbGFjZSAoaXRlcmF0 b3IgaTEsIGl0ZXJhdG9yIGkyLCBjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIG4pCiAgICB7IHJl dHVybiByZXBsYWNlIChpMSAtIGliZWdpbiAoKSwgaTIgLSBpMSwgcywgbik7IH0KICBiYXNpY19z dHJpbmcmIHJlcGxhY2UgKGl0ZXJhdG9yIGkxLCBpdGVyYXRvciBpMiwgY29uc3QgY2hhclQqIHMp CiAgICB7IHJldHVybiByZXBsYWNlIChpMSAtIGliZWdpbiAoKSwgaTIgLSBpMSwgcyk7IH0KICBi YXNpY19zdHJpbmcmIHJlcGxhY2UgKGl0ZXJhdG9yIGkxLCBpdGVyYXRvciBpMiwgc2l6ZV90eXBl IG4sIGNoYXJUIGMpCiAgICB7IHJldHVybiByZXBsYWNlIChpMSAtIGliZWdpbiAoKSwgaTIgLSBp MSwgbiwgYyk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgSW5wdXRJdGVyYXRvcj4KICAgIGJhc2ljX3N0 cmluZyYgcmVwbGFjZShpdGVyYXRvciBpMSwgaXRlcmF0b3IgaTIsCgkJCSAgSW5wdXRJdGVyYXRv ciBqMSwgSW5wdXRJdGVyYXRvciBqMik7CgoKCgoKcHJpdmF0ZToKICBzdGF0aWMgY2hhclQgZW9z ICgpIHsgcmV0dXJuIHRyYWl0czo6ZW9zICgpOyB9CiAgdm9pZCB1bmlxdWUgKCkgeyBpZiAocmVw ICgpLT5yZWYgPiAxKSBhbGxvYyAobGVuZ3RoICgpLCB0cnVlKTsgfQogIHZvaWQgc2VsZmlzaCAo KSB7IHVuaXF1ZSAoKTsgcmVwICgpLT5zZWxmaXNoID0gdHJ1ZTsgfQoKcHVibGljOgogIGNoYXJU IG9wZXJhdG9yW10gKHNpemVfdHlwZSBwb3MpIGNvbnN0CiAgICB7CiAgICAgIGlmIChwb3MgPT0g bGVuZ3RoICgpKQoJcmV0dXJuIGVvcyAoKTsKICAgICAgcmV0dXJuIGRhdGEgKClbcG9zXTsKICAg IH0KCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10gKHNpemVfdHlwZSBwb3MpCiAgICB7IHNlbGZpc2gg KCk7IHJldHVybiAoKnJlcCAoKSlbcG9zXTsgfQoKICByZWZlcmVuY2UgYXQgKHNpemVfdHlwZSBw b3MpCiAgICB7CiAgICAgIGRvIHsgaWYgKCBwb3MgPj0gbGVuZ3RoICgpICkgX19vdXRfb2ZfcmFu Z2UgKCJwb3MgPj0gbGVuZ3RoICgpIik7IH0gd2hpbGUgKDApIDsKICAgICAgcmV0dXJuICgqdGhp cylbcG9zXTsKICAgIH0KICBjb25zdF9yZWZlcmVuY2UgYXQgKHNpemVfdHlwZSBwb3MpIGNvbnN0 CiAgICB7CiAgICAgIGRvIHsgaWYgKCBwb3MgPj0gbGVuZ3RoICgpICkgX19vdXRfb2ZfcmFuZ2Ug KCJwb3MgPj0gbGVuZ3RoICgpIik7IH0gd2hpbGUgKDApIDsKICAgICAgcmV0dXJuIGRhdGEgKClb cG9zXTsKICAgIH0KCnByaXZhdGU6CiAgdm9pZCB0ZXJtaW5hdGUgKCkgY29uc3QKICAgIHsgdHJh aXRzOjphc3NpZ24gKCgqcmVwICgpKVtsZW5ndGggKCldLCBlb3MgKCkpOyB9CgpwdWJsaWM6CiAg Y29uc3QgY2hhclQqIGNfc3RyICgpIGNvbnN0CiAgICB7IGlmIChsZW5ndGggKCkgPT0gMCkgcmV0 dXJuICIiOyB0ZXJtaW5hdGUgKCk7IHJldHVybiBkYXRhICgpOyB9CiAgdm9pZCByZXNpemUgKHNp emVfdHlwZSBuLCBjaGFyVCBjKTsKICB2b2lkIHJlc2l6ZSAoc2l6ZV90eXBlIG4pCiAgICB7IHJl c2l6ZSAobiwgZW9zICgpKTsgfQogIHZvaWQgcmVzZXJ2ZSAoc2l6ZV90eXBlKSB7IH0KCiAgc2l6 ZV90eXBlIGNvcHkgKGNoYXJUKiBzLCBzaXplX3R5cGUgbiwgc2l6ZV90eXBlIHBvcyA9IDApIGNv bnN0OwoKICBzaXplX3R5cGUgZmluZCAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlw ZSBwb3MgPSAwKSBjb25zdAogICAgeyByZXR1cm4gZmluZCAoc3RyLmRhdGEoKSwgcG9zLCBzdHIu bGVuZ3RoKCkpOyB9CiAgc2l6ZV90eXBlIGZpbmQgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUg cG9zLCBzaXplX3R5cGUgbikgY29uc3Q7CiAgc2l6ZV90eXBlIGZpbmQgKGNvbnN0IGNoYXJUKiBz LCBzaXplX3R5cGUgcG9zID0gMCkgY29uc3QKICAgIHsgcmV0dXJuIGZpbmQgKHMsIHBvcywgdHJh aXRzOjpsZW5ndGggKHMpKTsgfQogIHNpemVfdHlwZSBmaW5kIChjaGFyVCBjLCBzaXplX3R5cGUg cG9zID0gMCkgY29uc3Q7CgogIHNpemVfdHlwZSByZmluZCAoY29uc3QgYmFzaWNfc3RyaW5nJiBz dHIsIHNpemVfdHlwZSBwb3MgPSBucG9zKSBjb25zdAogICAgeyByZXR1cm4gcmZpbmQgKHN0ci5k YXRhKCksIHBvcywgc3RyLmxlbmd0aCgpKTsgfQogIHNpemVfdHlwZSByZmluZCAoY29uc3QgY2hh clQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdDsKICBzaXplX3R5cGUgcmZp bmQgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3QKICAgIHsgcmV0 dXJuIHJmaW5kIChzLCBwb3MsIHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KICBzaXplX3R5cGUgcmZp bmQgKGNoYXJUIGMsIHNpemVfdHlwZSBwb3MgPSBucG9zKSBjb25zdDsKCiAgc2l6ZV90eXBlIGZp bmRfZmlyc3Rfb2YgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gMCkg Y29uc3QKICAgIHsgcmV0dXJuIGZpbmRfZmlyc3Rfb2YgKHN0ci5kYXRhKCksIHBvcywgc3RyLmxl bmd0aCgpKTsgfQogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X29mIChjb25zdCBjaGFyVCogcywgc2l6 ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0OwogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X29m IChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0CiAgICB7IHJldHVybiBm aW5kX2ZpcnN0X29mIChzLCBwb3MsIHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KICBzaXplX3R5cGUg ZmluZF9maXJzdF9vZiAoY2hhclQgYywgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0CiAgICB7IHJl dHVybiBmaW5kIChjLCBwb3MpOyB9CgogIHNpemVfdHlwZSBmaW5kX2xhc3Rfb2YgKGNvbnN0IGJh c2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3QKICAgIHsgcmV0dXJu IGZpbmRfbGFzdF9vZiAoc3RyLmRhdGEoKSwgcG9zLCBzdHIubGVuZ3RoKCkpOyB9CiAgc2l6ZV90 eXBlIGZpbmRfbGFzdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlw ZSBuKSBjb25zdDsKICBzaXplX3R5cGUgZmluZF9sYXN0X29mIChjb25zdCBjaGFyVCogcywgc2l6 ZV90eXBlIHBvcyA9IG5wb3MpIGNvbnN0CiAgICB7IHJldHVybiBmaW5kX2xhc3Rfb2YgKHMsIHBv cywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQogIHNpemVfdHlwZSBmaW5kX2xhc3Rfb2YgKGNoYXJU IGMsIHNpemVfdHlwZSBwb3MgPSBucG9zKSBjb25zdAogICAgeyByZXR1cm4gcmZpbmQgKGMsIHBv cyk7IH0KCiAgc2l6ZV90eXBlIGZpbmRfZmlyc3Rfbm90X29mIChjb25zdCBiYXNpY19zdHJpbmcm IHN0ciwgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0CiAgICB7IHJldHVybiBmaW5kX2ZpcnN0X25v dF9vZiAoc3RyLmRhdGEoKSwgcG9zLCBzdHIubGVuZ3RoKCkpOyB9CiAgc2l6ZV90eXBlIGZpbmRf Zmlyc3Rfbm90X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4p IGNvbnN0OwogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X25vdF9vZiAoY29uc3QgY2hhclQqIHMsIHNp emVfdHlwZSBwb3MgPSAwKSBjb25zdAogICAgeyByZXR1cm4gZmluZF9maXJzdF9ub3Rfb2YgKHMs IHBvcywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X25vdF9v ZiAoY2hhclQgYywgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0OwoKICBzaXplX3R5cGUgZmluZF9s YXN0X25vdF9vZiAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSBucG9z KSBjb25zdAogICAgeyByZXR1cm4gZmluZF9sYXN0X25vdF9vZiAoc3RyLmRhdGEoKSwgcG9zLCBz dHIubGVuZ3RoKCkpOyB9CiAgc2l6ZV90eXBlIGZpbmRfbGFzdF9ub3Rfb2YgKGNvbnN0IGNoYXJU KiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3Q7CiAgc2l6ZV90eXBlIGZpbmRf bGFzdF9ub3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3QK ICAgIHsgcmV0dXJuIGZpbmRfbGFzdF9ub3Rfb2YgKHMsIHBvcywgdHJhaXRzOjpsZW5ndGggKHMp KTsgfQogIHNpemVfdHlwZSBmaW5kX2xhc3Rfbm90X29mIChjaGFyVCBjLCBzaXplX3R5cGUgcG9z ID0gbnBvcykgY29uc3Q7CgogIGJhc2ljX3N0cmluZyBzdWJzdHIgKHNpemVfdHlwZSBwb3MgPSAw LCBzaXplX3R5cGUgbiA9IG5wb3MpIGNvbnN0CiAgICB7IHJldHVybiBiYXNpY19zdHJpbmcgKCp0 aGlzLCBwb3MsIG4pOyB9CgogIGludCBjb21wYXJlIChjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwg c2l6ZV90eXBlIHBvcyA9IDAsIHNpemVfdHlwZSBuID0gbnBvcykgY29uc3Q7CiAgIAogIGludCBj b21wYXJlIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0 OwogIGludCBjb21wYXJlIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0 CiAgICB7IHJldHVybiBjb21wYXJlIChzLCBwb3MsIHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KCiAg aXRlcmF0b3IgYmVnaW4gKCkgeyBzZWxmaXNoICgpOyByZXR1cm4gJigqdGhpcylbMF07IH0KICBp dGVyYXRvciBlbmQgKCkgeyBzZWxmaXNoICgpOyByZXR1cm4gJigqdGhpcylbbGVuZ3RoICgpXTsg fQoKcHJpdmF0ZToKICBpdGVyYXRvciBpYmVnaW4gKCkgY29uc3QgeyByZXR1cm4gJigqcmVwICgp KVswXTsgfQogIGl0ZXJhdG9yIGllbmQgKCkgY29uc3QgeyByZXR1cm4gJigqcmVwICgpKVtsZW5n dGggKCldOyB9CgpwdWJsaWM6CiAgY29uc3RfaXRlcmF0b3IgYmVnaW4gKCkgY29uc3QgeyByZXR1 cm4gaWJlZ2luICgpOyB9CiAgY29uc3RfaXRlcmF0b3IgZW5kICgpIGNvbnN0IHsgcmV0dXJuIGll bmQgKCk7IH0KCiAgcmV2ZXJzZV9pdGVyYXRvciAgICAgICByYmVnaW4oKSB7IHJldHVybiByZXZl cnNlX2l0ZXJhdG9yIChlbmQgKCkpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4o KSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvciAoZW5kICgpKTsgfQog IHJldmVyc2VfaXRlcmF0b3IgICAgICAgcmVuZCgpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3Ig KGJlZ2luICgpKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0CiAgICB7 IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIChiZWdpbiAoKSk7IH0KCnByaXZhdGU6CiAg dm9pZCBhbGxvYyAoc2l6ZV90eXBlIHNpemUsIGJvb2wgc2F2ZSk7CiAgc3RhdGljIHNpemVfdHlw ZSBfZmluZCAoY29uc3QgY2hhclQqIHB0ciwgY2hhclQgYywgc2l6ZV90eXBlIHhwb3MsIHNpemVf dHlwZSBsZW4pOwogIGlubGluZSBib29sIGNoZWNrX3JlYWxsb2MgKHNpemVfdHlwZSBzKSBjb25z dDsKCiAgc3RhdGljIFJlcCBuaWxSZXA7CiAgY2hhclQgKmRhdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xh c3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPiB0ZW1wbGF0ZSA8Y2xhc3Mg SW5wdXRJdGVyYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBi YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpyZXBsYWNlIChpdGVyYXRv ciBpMSwgaXRlcmF0b3IgaTIsIElucHV0SXRlcmF0b3IgajEsIElucHV0SXRlcmF0b3IgajIpCgoK CgoKewogIGNvbnN0IHNpemVfdHlwZSBsZW4gPSBsZW5ndGggKCk7CiAgc2l6ZV90eXBlIHBvcyA9 IGkxIC0gaWJlZ2luICgpOwogIHNpemVfdHlwZSBuMSA9IGkyIC0gaTE7CiAgc2l6ZV90eXBlIG4y ID0gajIgLSBqMTsKCiAgZG8geyBpZiAoIHBvcyA+IGxlbiApIF9fb3V0X29mX3JhbmdlICgicG9z ID4gbGVuIik7IH0gd2hpbGUgKDApIDsKICBpZiAobjEgPiBsZW4gLSBwb3MpCiAgICBuMSA9IGxl biAtIHBvczsKICBkbyB7IGlmICggbGVuIC0gbjEgPiBtYXhfc2l6ZSAoKSAtIG4yICkgX19sZW5n dGhfZXJyb3IgKCJsZW4gLSBuMSA+IG1heF9zaXplICgpIC0gbjIiKTsgfSB3aGlsZSAoMCkgOwog IHNpemVfdCBuZXdsZW4gPSBsZW4gLSBuMSArIG4yOwoKICBpZiAoY2hlY2tfcmVhbGxvYyAobmV3 bGVuKSkKICAgIHsKICAgICAgUmVwICpwID0gUmVwOjpjcmVhdGUgKG5ld2xlbik7CiAgICAgIHAt PmNvcHkgKDAsIGRhdGEgKCksIHBvcyk7CiAgICAgIHAtPmNvcHkgKHBvcyArIG4yLCBkYXRhICgp ICsgcG9zICsgbjEsIGxlbiAtIChwb3MgKyBuMSkpOwogICAgICBmb3IgKDsgajEgIT0gajI7ICsr ajEsICsrcG9zKQoJdHJhaXRzOjphc3NpZ24gKCgqcClbcG9zXSwgKmoxKTsKICAgICAgcmVwdXAg KHApOwogICAgfQogIGVsc2UKICAgIHsKICAgICAgcmVwICgpLT5tb3ZlIChwb3MgKyBuMiwgZGF0 YSAoKSArIHBvcyArIG4xLCBsZW4gLSAocG9zICsgbjEpKTsKICAgICAgZm9yICg7IGoxICE9IGoy OyArK2oxLCArK3BvcykKCXRyYWl0czo6YXNzaWduICgoKnJlcCAoKSlbcG9zXSwgKmoxKTsKICAg IH0KICByZXAgKCktPmxlbiA9IG5ld2xlbjsKCiAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYmFzaWNf c3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+Cm9wZXJhdG9yKyAoY29uc3QgYmFzaWNf c3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsCgkgICBjb25zdCBiYXNpY19z dHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIGJhc2ljX3N0cmluZyA8 Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiBzdHIgKGxocyk7CiAgc3RyLmFwcGVuZCAocmhzKTsK ICByZXR1cm4gc3RyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xh c3MgQWxsb2NhdG9yPgppbmxpbmUgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0 b3I+Cm9wZXJhdG9yKyAoY29uc3QgY2hhclQqIGxocywgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFy VCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFp dHMsIEFsbG9jYXRvcj4gc3RyIChsaHMpOwogIHN0ci5hcHBlbmQgKHJocyk7CiAgcmV0dXJuIHN0 cjsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRv cj4KaW5saW5lIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPgpvcGVyYXRv cisgKGNoYXJUIGxocywgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0 b3I+JiByaHMpCnsKICBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4gc3Ry ICgxLCBsaHMpOwogIHN0ci5hcHBlbmQgKHJocyk7CiAgcmV0dXJuIHN0cjsKfQoKdGVtcGxhdGUg PGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJhc2lj X3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPgpvcGVyYXRvcisgKGNvbnN0IGJhc2lj X3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLCBjb25zdCBjaGFyVCogcmhz KQp7CiAgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+IHN0ciAobGhzKTsK ICBzdHIuYXBwZW5kIChyaHMpOwogIHJldHVybiBzdHI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFy VCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBiYXNpY19zdHJpbmcgPGNo YXJULCB0cmFpdHMsIEFsbG9jYXRvcj4Kb3BlcmF0b3IrIChjb25zdCBiYXNpY19zdHJpbmcgPGNo YXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywgY2hhclQgcmhzKQp7CiAgYmFzaWNfc3RyaW5n IDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+IHN0ciAobGhzKTsKICBzdHIuYXBwZW5kICgxLCBy aHMpOwogIHJldHVybiBzdHI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRz LCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPT0gKGNvbnN0IGJhc2ljX3N0 cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLAoJICAgIGNvbnN0IGJhc2ljX3N0 cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChsaHMuY29t cGFyZSAocmhzKSA9PSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMs IGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I9PSAoY29uc3QgY2hhclQqIGxo cywgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsK ICByZXR1cm4gKHJocy5jb21wYXJlIChsaHMpID09IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hh clQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcj09 IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywgY29u c3QgY2hhclQqIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPT0gMCk7Cn0KCnRl bXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGlu ZSBib29sCm9wZXJhdG9yIT0gKGNvbnN0IGNoYXJUKiBsaHMsIGNvbnN0IGJhc2ljX3N0cmluZyA8 Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChyaHMuY29tcGFyZSAo bGhzKSAhPSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNz IEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3IhPSAoY29uc3QgYmFzaWNfc3RyaW5nIDxj aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsIGNvbnN0IGNoYXJUKiByaHMpCnsKICByZXR1 cm4gKGxocy5jb21wYXJlIChyaHMpICE9IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNs YXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcjwgKGNvbnN0 IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLAoJICAgIGNvbnN0 IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJu IChsaHMuY29tcGFyZSAocmhzKSA8IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNz IHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcjwgKGNvbnN0IGNo YXJUKiBsaHMsIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYg cmhzKQp7CiAgcmV0dXJuIChyaHMuY29tcGFyZSAobGhzKSA+IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVy YXRvcjwgKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhz LCBjb25zdCBjaGFyVCogcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA8IDApOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpp bmxpbmUgYm9vbApvcGVyYXRvcj4gKGNvbnN0IGNoYXJUKiBsaHMsIGNvbnN0IGJhc2ljX3N0cmlu ZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChyaHMuY29tcGFy ZSAobGhzKSA8IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xh c3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcj4gKGNvbnN0IGJhc2ljX3N0cmluZyA8 Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLCBjb25zdCBjaGFyVCogcmhzKQp7CiAgcmV0 dXJuIChsaHMuY29tcGFyZSAocmhzKSA+IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNs YXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcjw9IChjb25z dCBjaGFyVCogbGhzLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRv cj4mIHJocykKewogIHJldHVybiAocmhzLmNvbXBhcmUgKGxocykgPj0gMCk7Cn0KCnRlbXBsYXRl IDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29s Cm9wZXJhdG9yPD0gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9y PiYgbGhzLCBjb25zdCBjaGFyVCogcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA8 PSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9j YXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+PSAoY29uc3QgY2hhclQqIGxocywgY29uc3QgYmFz aWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1cm4gKHJo cy5jb21wYXJlIChsaHMpIDw9IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRy YWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcj49IChjb25zdCBiYXNp Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJo cykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPj0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJh dG9yIT0gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhz LAoJICAgIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhz KQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSAhPSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNz IGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0 b3I+IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywK CSAgIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7 CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA+IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hh clQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcjw9 IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywKCSAg ICBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewog IHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPD0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFy VCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPj0g KGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLAoJICAg IGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAg cmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA+PSAwKTsKfQoKY2xhc3MgaXN0cmVhbTsgY2xhc3Mg b3N0cmVhbTsKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9j YXRvcj4gaXN0cmVhbSYKb3BlcmF0b3I+PiAoaXN0cmVhbSYsIGJhc2ljX3N0cmluZyA8Y2hhclQs IHRyYWl0cywgQWxsb2NhdG9yPiYpOwp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0 cywgY2xhc3MgQWxsb2NhdG9yPiBvc3RyZWFtJgpvcGVyYXRvcjw8IChvc3RyZWFtJiwgY29uc3Qg YmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+Jik7CnRlbXBsYXRlIDxjbGFz cyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+IGlzdHJlYW0mCmdldGxpbmUg KGlzdHJlYW0mLCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mLCBjaGFy VCBkZWxpbSA9ICdcbicpOwoKfSAgCgojIDEgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3Bh cmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0 cmluZy5jYyIgMSAzCiAKIAoKIAogCiAKIAogCgogCiAKIAogCgogCiAKIAoKIAogCiAKIAogCgog CiAKCmV4dGVybiAiQysrIiB7CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBj bGFzcyBBbGxvY2F0b3I+CmlubGluZSB2b2lkICogYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz LCBBbGxvY2F0b3I+OjpSZXA6OgpvcGVyYXRvciBuZXcgKHNpemVfdCBzLCBzaXplX3QgZXh0cmEp CnsKICByZXR1cm4gQWxsb2NhdG9yOjphbGxvY2F0ZShzICsgZXh0cmEgKiBzaXplb2YgKGNoYXJU KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0 b3I+CmlubGluZSB2b2lkIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6 UmVwOjoKb3BlcmF0b3IgZGVsZXRlICh2b2lkICogcHRyKQp7CiAgQWxsb2NhdG9yOjpkZWFsbG9j YXRlKHB0ciwgc2l6ZW9mKFJlcCkgKwoJCQlyZWludGVycHJldF9jYXN0PFJlcCAqPihwdHIpLT5y ZXMgKgoJCQlzaXplb2YgKGNoYXJUKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3Mg dHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBzaXplX3QgYmFzaWNfc3RyaW5nIDxjaGFy VCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXA6Ogpmcm9iX3NpemUgKHNpemVfdCBzKQp7CiAgc2l6 ZV90IGkgPSAxNjsKICB3aGlsZSAoaSA8IHMpIGkgKj0gMjsKICByZXR1cm4gaTsKfQoKdGVtcGxh dGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJh c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwICoKYmFzaWNfc3RyaW5n IDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXA6OgpjcmVhdGUgKHNpemVfdCBleHRyYSkK ewogIGV4dHJhID0gZnJvYl9zaXplIChleHRyYSArIDEpOwogIFJlcCAqcCA9IG5ldyAoZXh0cmEp IFJlcDsKICBwLT5yZXMgPSBleHRyYTsKICBwLT5yZWYgPSAxOwogIHAtPnNlbGZpc2ggPSBmYWxz ZTsKICByZXR1cm4gcDsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNs YXNzIEFsbG9jYXRvcj4KY2hhclQgKiBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j YXRvcj46OlJlcDo6CmNsb25lICgpCnsKICBSZXAgKnAgPSBSZXA6OmNyZWF0ZSAobGVuKTsKICBw LT5jb3B5ICgwLCBkYXRhICgpLCBsZW4pOwogIHAtPmxlbiA9IGxlbjsKICByZXR1cm4gcC0+ZGF0 YSAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9j YXRvcj4KaW5saW5lIGJvb2wgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+ OjpSZXA6OgpleGNlc3Nfc2xvcCAoc2l6ZV90IHMsIHNpemVfdCByKQp7CiAgcmV0dXJuIDIgKiAo cyA8PSAxNiA/IDE2IDogcykgPCByOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRy YWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbCBiYXNpY19zdHJpbmcgPGNoYXJULCB0 cmFpdHMsIEFsbG9jYXRvcj46OgpjaGVja19yZWFsbG9jIChiYXNpY19zdHJpbmc6OnNpemVfdHlw ZSBzKSBjb25zdAp7CiAgcyArPSBzaXplb2YgKGNoYXJUKTsKICByZXAgKCktPnNlbGZpc2ggPSBm YWxzZTsKICByZXR1cm4gKHJlcCAoKS0+cmVmID4gMQoJICB8fCBzID4gY2FwYWNpdHkgKCkKCSAg fHwgUmVwOjpleGNlc3Nfc2xvcCAocywgY2FwYWNpdHkgKCkpKTsKfQoKdGVtcGxhdGUgPGNsYXNz IGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4Kdm9pZCBiYXNpY19zdHJpbmcg PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgphbGxvYyAoYmFzaWNfc3RyaW5nOjpzaXplX3R5 cGUgX19zaXplLCBib29sIF9fc2F2ZSkKewogIGlmICghIGNoZWNrX3JlYWxsb2MgKF9fc2l6ZSkp CiAgICByZXR1cm47CgogIFJlcCAqcCA9IFJlcDo6Y3JlYXRlIChfX3NpemUpOwoKICBpZiAoX19z YXZlKQogICAgewogICAgICBwLT5jb3B5ICgwLCBkYXRhICgpLCBsZW5ndGggKCkpOwogICAgICBw LT5sZW4gPSBsZW5ndGggKCk7CiAgICB9CiAgZWxzZQogICAgcC0+bGVuID0gMDsKCiAgcmVwdXAg KHApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2Nh dG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mCmJhc2ljX3N0cmlu ZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CnJlcGxhY2UgKHNpemVfdHlwZSBwb3MxLCBz aXplX3R5cGUgbjEsCgkgY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MyLCBz aXplX3R5cGUgbjIpCnsKICBjb25zdCBzaXplX3QgbGVuMiA9IHN0ci5sZW5ndGggKCk7CgogIGlm IChwb3MxID09IDAgJiYgbjEgPj0gbGVuZ3RoICgpICYmIHBvczIgPT0gMCAmJiBuMiA+PSBsZW4y KQogICAgcmV0dXJuIG9wZXJhdG9yPSAoc3RyKTsKCiAgZG8geyBpZiAoIHBvczIgPiBsZW4yICkg X19vdXRfb2ZfcmFuZ2UgKCJwb3MyID4gbGVuMiIpOyB9IHdoaWxlICgwKSA7CgogIGlmIChuMiA+ IGxlbjIgLSBwb3MyKQogICAgbjIgPSBsZW4yIC0gcG9zMjsKCiAgcmV0dXJuIHJlcGxhY2UgKHBv czEsIG4xLCBzdHIuZGF0YSAoKSArIHBvczIsIG4yKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJU LCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIHZvaWQgYmFzaWNfc3RyaW5n IDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXA6Ogpjb3B5IChzaXplX3QgcG9zLCBjb25z dCBjaGFyVCAqcywgc2l6ZV90IG4pCnsKICBpZiAobikKICAgIHRyYWl0czo6Y29weSAoZGF0YSAo KSArIHBvcywgcywgbik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBj bGFzcyBBbGxvY2F0b3I+CmlubGluZSB2b2lkIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg QWxsb2NhdG9yPjo6UmVwOjoKbW92ZSAoc2l6ZV90IHBvcywgY29uc3QgY2hhclQgKnMsIHNpemVf dCBuKQp7CiAgaWYgKG4pCiAgICB0cmFpdHM6Om1vdmUgKGRhdGEgKCkgKyBwb3MsIHMsIG4pOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpi YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mCmJhc2ljX3N0cmluZyA8Y2hh clQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CnJlcGxhY2UgKHNpemVfdHlwZSBwb3MsIHNpemVfdHlw ZSBuMSwgY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBuMikKewogIGNvbnN0IHNpemVfdHlwZSBs ZW4gPSBsZW5ndGggKCk7CiAgZG8geyBpZiAoIHBvcyA+IGxlbiApIF9fb3V0X29mX3JhbmdlICgi cG9zID4gbGVuIik7IH0gd2hpbGUgKDApIDsKICBpZiAobjEgPiBsZW4gLSBwb3MpCiAgICBuMSA9 IGxlbiAtIHBvczsKICBkbyB7IGlmICggbGVuIC0gbjEgPiBtYXhfc2l6ZSAoKSAtIG4yICkgX19s ZW5ndGhfZXJyb3IgKCJsZW4gLSBuMSA+IG1heF9zaXplICgpIC0gbjIiKTsgfSB3aGlsZSAoMCkg OwogIHNpemVfdCBuZXdsZW4gPSBsZW4gLSBuMSArIG4yOwoKICBpZiAoY2hlY2tfcmVhbGxvYyAo bmV3bGVuKSkKICAgIHsKICAgICAgUmVwICpwID0gUmVwOjpjcmVhdGUgKG5ld2xlbik7CiAgICAg IHAtPmNvcHkgKDAsIGRhdGEgKCksIHBvcyk7CiAgICAgIHAtPmNvcHkgKHBvcyArIG4yLCBkYXRh ICgpICsgcG9zICsgbjEsIGxlbiAtIChwb3MgKyBuMSkpOwogICAgICBwLT5jb3B5IChwb3MsIHMs IG4yKTsKICAgICAgcmVwdXAgKHApOwogICAgfQogIGVsc2UKICAgIHsKICAgICAgcmVwICgpLT5t b3ZlIChwb3MgKyBuMiwgZGF0YSAoKSArIHBvcyArIG4xLCBsZW4gLSAocG9zICsgbjEpKTsKICAg ICAgcmVwICgpLT5jb3B5IChwb3MsIHMsIG4yKTsKICAgIH0KICByZXAgKCktPmxlbiA9IG5ld2xl bjsKCiAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0 cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgdm9pZCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFp dHMsIEFsbG9jYXRvcj46OlJlcDo6CnNldCAoc2l6ZV90IHBvcywgY29uc3QgY2hhclQgYywgc2l6 ZV90IG4pCnsKICB0cmFpdHM6OnNldCAgKGRhdGEgKCkgKyBwb3MsIGMsIG4pOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJp bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0 cywgQWxsb2NhdG9yPjo6CnJlcGxhY2UgKHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuMSwgc2l6 ZV90eXBlIG4yLCBjaGFyVCBjKQp7CiAgY29uc3Qgc2l6ZV90IGxlbiA9IGxlbmd0aCAoKTsKICBk byB7IGlmICggcG9zID4gbGVuICkgX19vdXRfb2ZfcmFuZ2UgKCJwb3MgPiBsZW4iKTsgfSB3aGls ZSAoMCkgOwogIGlmIChuMSA+IGxlbiAtIHBvcykKICAgIG4xID0gbGVuIC0gcG9zOwogIGRvIHsg aWYgKCBsZW4gLSBuMSA+IG1heF9zaXplICgpIC0gbjIgKSBfX2xlbmd0aF9lcnJvciAoImxlbiAt IG4xID4gbWF4X3NpemUgKCkgLSBuMiIpOyB9IHdoaWxlICgwKSA7CiAgc2l6ZV90IG5ld2xlbiA9 IGxlbiAtIG4xICsgbjI7CgogIGlmIChjaGVja19yZWFsbG9jIChuZXdsZW4pKQogICAgewogICAg ICBSZXAgKnAgPSBSZXA6OmNyZWF0ZSAobmV3bGVuKTsKICAgICAgcC0+Y29weSAoMCwgZGF0YSAo KSwgcG9zKTsKICAgICAgcC0+Y29weSAocG9zICsgbjIsIGRhdGEgKCkgKyBwb3MgKyBuMSwgbGVu IC0gKHBvcyArIG4xKSk7CiAgICAgIHAtPnNldCAgKHBvcywgYywgbjIpOwogICAgICByZXB1cCAo cCk7CiAgICB9CiAgZWxzZQogICAgewogICAgICByZXAgKCktPm1vdmUgKHBvcyArIG4yLCBkYXRh ICgpICsgcG9zICsgbjEsIGxlbiAtIChwb3MgKyBuMSkpOwogICAgICByZXAgKCktPnNldCAgKHBv cywgYywgbjIpOwogICAgfQogIHJlcCAoKS0+bGVuID0gbmV3bGVuOwoKICByZXR1cm4gKnRoaXM7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+ CnZvaWQgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKcmVzaXplIChz aXplX3R5cGUgbiwgY2hhclQgYykKewogIGRvIHsgaWYgKCBuID4gbWF4X3NpemUgKCkgKSBfX2xl bmd0aF9lcnJvciAoIm4gPiBtYXhfc2l6ZSAoKSIpOyB9IHdoaWxlICgwKSA7CgogIGlmIChuID4g bGVuZ3RoICgpKQogICAgYXBwZW5kIChuIC0gbGVuZ3RoICgpLCBjKTsKICBlbHNlCiAgICBlcmFz ZSAobik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxv Y2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBl CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmNvcHkgKGNoYXJUKiBz LCBzaXplX3R5cGUgbiwgc2l6ZV90eXBlIHBvcykgY29uc3QKewogIGRvIHsgaWYgKCBwb3MgPiBs ZW5ndGggKCkgKSBfX291dF9vZl9yYW5nZSAoInBvcyA+IGxlbmd0aCAoKSIpOyB9IHdoaWxlICgw KSA7CgogIGlmIChuID4gbGVuZ3RoICgpIC0gcG9zKQogICAgbiA9IGxlbmd0aCAoKSAtIHBvczsK CiAgdHJhaXRzOjpjb3B5IChzLCBkYXRhICgpICsgcG9zLCBuKTsKICByZXR1cm4gbjsKfQoKdGVt cGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNf c3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5n IDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKZmluZCAoY29uc3QgY2hhclQqIHMsIHNpemVf dHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAgc2l6ZV90IHhwb3MgPSBwb3M7CiAgZm9y ICg7IHhwb3MgKyBuIDw9IGxlbmd0aCAoKTsgKyt4cG9zKQogICAgaWYgKHRyYWl0czo6ZXEgKGRh dGEgKCkgW3hwb3NdLCAqcykKCSYmIHRyYWl0czo6Y29tcGFyZSAoZGF0YSAoKSArIHhwb3MsIHMs IG4pID09IDApCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYmFzaWNf c3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5n IDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKX2ZpbmQgKGNvbnN0IGNoYXJUKiBwdHIsIGNo YXJUIGMsIHNpemVfdHlwZSB4cG9zLCBzaXplX3R5cGUgbGVuKQp7CiAgZm9yICg7IHhwb3MgPCBs ZW47ICsreHBvcykKICAgIGlmICh0cmFpdHM6OmVxIChwdHIgW3hwb3NdLCBjKSkKICAgICAgcmV0 dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3Mg dHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs b2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9y Pjo6CmZpbmQgKGNoYXJUIGMsIHNpemVfdHlwZSBwb3MpIGNvbnN0CnsKICByZXR1cm4gX2ZpbmQg KGRhdGEgKCksIGMsIHBvcywgbGVuZ3RoICgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBj bGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz LCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxv Y2F0b3I+OjoKcmZpbmQgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUg bikgY29uc3QKewogIGlmIChuID4gbGVuZ3RoICgpKQogICAgcmV0dXJuIG5wb3M7CgogIHNpemVf dCB4cG9zID0gbGVuZ3RoICgpIC0gbjsKICBpZiAoeHBvcyA+IHBvcykKICAgIHhwb3MgPSBwb3M7 CgogIGZvciAoKyt4cG9zOyB4cG9zLS0gPiAwOyApCiAgICBpZiAodHJhaXRzOjplcSAoZGF0YSAo KSBbeHBvc10sICpzKQoJJiYgdHJhaXRzOjpjb21wYXJlIChkYXRhICgpICsgeHBvcywgcywgbikg PT0gMCkKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFz cyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hh clQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRy YWl0cywgQWxsb2NhdG9yPjo6CnJmaW5kIChjaGFyVCBjLCBzaXplX3R5cGUgcG9zKSBjb25zdAp7 CiAgaWYgKDEgPiBsZW5ndGggKCkpCiAgICByZXR1cm4gbnBvczsKCiAgc2l6ZV90IHhwb3MgPSBs ZW5ndGggKCkgLSAxOwogIGlmICh4cG9zID4gcG9zKQogICAgeHBvcyA9IHBvczsKCiAgZm9yICgr K3hwb3M7IHhwb3MtLSA+IDA7ICkKICAgIGlmICh0cmFpdHM6OmVxIChkYXRhICgpIFt4cG9zXSwg YykpCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg Y2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJU LCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFp dHMsIEFsbG9jYXRvcj46OgpmaW5kX2ZpcnN0X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBl IHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0CnsKICBzaXplX3QgeHBvcyA9IHBvczsKICBmb3IgKDsg eHBvcyA8IGxlbmd0aCAoKTsgKyt4cG9zKQogICAgaWYgKF9maW5kIChzLCBkYXRhICgpIFt4cG9z XSwgMCwgbikgIT0gbnBvcykKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0KCnRl bXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2lj X3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmlu ZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmZpbmRfbGFzdF9vZiAoY29uc3QgY2hhclQq IHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAgaWYgKGxlbmd0aCgpID09 IDApCiAgICByZXR1cm4gbnBvczsKICBzaXplX3QgeHBvcyA9IGxlbmd0aCAoKSAtIDE7CiAgaWYg KHhwb3MgPiBwb3MpCiAgICB4cG9zID0gcG9zOwogIGZvciAoKyt4cG9zOyB4cG9zLS0gPiAwOykK ICAgIGlmIChfZmluZCAocywgZGF0YSAoKSBbeHBvc10sIDAsIG4pICE9IG5wb3MpCiAgICAgIHJl dHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNz IHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs bG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRv cj46OgpmaW5kX2ZpcnN0X25vdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNp emVfdHlwZSBuKSBjb25zdAp7CiAgc2l6ZV90IHhwb3MgPSBwb3M7CiAgZm9yICg7IHhwb3MgPCBs ZW5ndGggKCk7ICsreHBvcykKICAgIGlmIChfZmluZCAocywgZGF0YSAoKSBbeHBvc10sIDAsIG4p ID09IG5wb3MpCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcg PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJU LCB0cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5kX2ZpcnN0X25vdF9vZiAoY2hhclQgYywgc2l6ZV90 eXBlIHBvcykgY29uc3QKewogIHNpemVfdCB4cG9zID0gcG9zOwogIGZvciAoOyB4cG9zIDwgbGVu Z3RoICgpOyArK3hwb3MpCiAgICBpZiAodHJhaXRzOjpuZSAoZGF0YSAoKSBbeHBvc10sIGMpKQog ICAgICByZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJU LCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJh aXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBB bGxvY2F0b3I+OjoKZmluZF9sYXN0X25vdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBw b3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAgaWYgKGxlbmd0aCgpID09IDApCiAgICByZXR1cm4g bnBvczsKICBzaXplX3QgeHBvcyA9IGxlbmd0aCAoKSAtIDE7CiAgaWYgKHhwb3MgPiBwb3MpCiAg ICB4cG9zID0gcG9zOwogIGZvciAoKyt4cG9zOyB4cG9zLS0gPiAwOykKICAgIGlmIChfZmluZCAo cywgZGF0YSAoKSBbeHBvc10sIDAsIG4pID09IG5wb3MpCiAgICAgIHJldHVybiB4cG9zOwogIHJl dHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3Mg QWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVf dHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5kX2xhc3Rf bm90X29mIChjaGFyVCBjLCBzaXplX3R5cGUgcG9zKSBjb25zdAp7CiAgaWYgKGxlbmd0aCgpID09 IDApCiAgICByZXR1cm4gbnBvczsKICBzaXplX3QgeHBvcyA9IGxlbmd0aCAoKSAtIDE7CiAgaWYg KHhwb3MgPiBwb3MpCiAgICB4cG9zID0gcG9zOwogIGZvciAoKyt4cG9zOyB4cG9zLS0gPiAwOykK ICAgIGlmICh0cmFpdHM6Om5lIChkYXRhICgpIFt4cG9zXSwgYykpCiAgICAgIHJldHVybiB4cG9z OwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywg Y2xhc3MgQWxsb2NhdG9yPgppbnQgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0 b3I+OjoKY29tcGFyZSAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MsIHNp emVfdHlwZSBuKSBjb25zdAp7CiAgZG8geyBpZiAoIHBvcyA+IGxlbmd0aCAoKSApIF9fb3V0X29m X3JhbmdlICgicG9zID4gbGVuZ3RoICgpIik7IH0gd2hpbGUgKDApIDsKCiAgc2l6ZV90IHJsZW4g PSBsZW5ndGggKCkgLSBwb3M7CiAgaWYgKHJsZW4gPiBuKQogICAgcmxlbiA9IG47CiAgaWYgKHJs ZW4gPiBzdHIubGVuZ3RoICgpKQogICAgcmxlbiA9IHN0ci5sZW5ndGggKCk7CiAgaW50IHIgPSB0 cmFpdHM6OmNvbXBhcmUgKGRhdGEgKCkgKyBwb3MsIHN0ci5kYXRhICgpLCBybGVuKTsKICBpZiAo ciAhPSAwKQogICAgcmV0dXJuIHI7CiAgaWYgKHJsZW4gPT0gbikKICAgIHJldHVybiAwOwogIHJl dHVybiAobGVuZ3RoICgpIC0gcG9zKSAtIHN0ci5sZW5ndGggKCk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmludCBiYXNpY19zdHJpbmcg PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46Ogpjb21wYXJlIChjb25zdCBjaGFyVCogcywgc2l6 ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0CnsKICBkbyB7IGlmICggcG9zID4gbGVuZ3Ro ICgpICkgX19vdXRfb2ZfcmFuZ2UgKCJwb3MgPiBsZW5ndGggKCkiKTsgfSB3aGlsZSAoMCkgOwoK ICBzaXplX3QgcmxlbiA9IGxlbmd0aCAoKSAtIHBvczsKICBpZiAocmxlbiA+IG4pCiAgICBybGVu ID0gbjsKICBpbnQgciA9IHRyYWl0czo6Y29tcGFyZSAoZGF0YSAoKSArIHBvcywgcywgcmxlbik7 CiAgaWYgKHIgIT0gMCkKICAgIHJldHVybiByOwogIHJldHVybiAobGVuZ3RoICgpIC0gcG9zKSAt IG47Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9j YXRvcj4KaXN0cmVhbSAmCm9wZXJhdG9yPj4gKGlzdHJlYW0gJmlzLCBiYXNpY19zdHJpbmcgPGNo YXJULCB0cmFpdHMsIEFsbG9jYXRvcj4gJnMpCnsKICBpbnQgdyA9IGlzLndpZHRoICgwKTsKICBp ZiAoaXMuaXBmeDAgKCkpCiAgICB7CiAgICAgIHJlZ2lzdGVyIHN0cmVhbWJ1ZiAqc2IgPSBpcy5y ZGJ1ZiAoKTsKICAgICAgcy5yZXNpemUgKDApOwogICAgICB3aGlsZSAoMSkKCXsKCSAgaW50IGNo ID0gc2ItPnNidW1wYyAoKTsKCSAgaWYgKGNoID09ICgtMSkgKQoJICAgIHsKCSAgICAgIGlzLnNl dHN0YXRlIChpb3M6OmVvZmJpdCk7CgkgICAgICBicmVhazsKCSAgICB9CgkgIGVsc2UgaWYgKHRy YWl0czo6aXNfZGVsIChjaCkpCgkgICAgewoJICAgICAgc2ItPnN1bmdldGMgKCk7CgkgICAgICBi cmVhazsKCSAgICB9CgkgIHMgKz0gc3RhdGljX2Nhc3Q8Y2hhclQ+IChjaCk7CgkgIGlmICgtLXcg PT0gMSkKCSAgICBicmVhazsKCX0KICAgIH0KCiAgaXMuaXNmeCAoKTsKICBpZiAocy5sZW5ndGgg KCkgPT0gMCkKICAgIGlzLnNldHN0YXRlIChpb3M6OmZhaWxiaXQpOwoKICByZXR1cm4gaXM7Cn0K CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+Cm9z dHJlYW0gJgpvcGVyYXRvcjw8IChvc3RyZWFtICZvLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJU LCB0cmFpdHMsIEFsbG9jYXRvcj4mIHMpCnsKICByZXR1cm4gby53cml0ZSAocy5kYXRhICgpLCBz Lmxlbmd0aCAoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFz cyBBbGxvY2F0b3I+CmlzdHJlYW0mCmdldGxpbmUgKGlzdHJlYW0gJmlzLCBiYXNpY19zdHJpbmcg PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHMsIGNoYXJUIGRlbGltKQp7CiAgaWYgKGlzLmlw ZngxICgpKQogICAgewogICAgICBfR19zaXplX3QgIGNvdW50ID0gMDsKICAgICAgc3RyZWFtYnVm ICpzYiA9IGlzLnJkYnVmICgpOwogICAgICBzLnJlc2l6ZSAoMCk7CgogICAgICB3aGlsZSAoMSkK CXsKCSAgaW50IGNoID0gc2ItPnNidW1wYyAoKTsKCSAgaWYgKGNoID09ICgtMSkgKQoJICAgIHsK CSAgICAgIGlzLnNldHN0YXRlIChjb3VudCA9PSAwCgkJCSAgID8gKGlvczo6ZmFpbGJpdHxpb3M6 OmVvZmJpdCkKCQkJICAgOiBpb3M6OmVvZmJpdCk7CgkgICAgICBicmVhazsKCSAgICB9CgoJICAr K2NvdW50OwoKCSAgaWYgKGNoID09IGRlbGltKQoJICAgIGJyZWFrOwoKCSAgcyArPSBzdGF0aWNf Y2FzdDxjaGFyVD4gKGNoKTsKCgkgIGlmIChzLmxlbmd0aCAoKSA9PSBzLm5wb3MgLSAxKQoJICAg IHsKCSAgICAgIGlzLnNldHN0YXRlIChpb3M6OmZhaWxiaXQpOwoJICAgICAgYnJlYWs7CgkgICAg fQoJfQogICAgfQoKICAgCiAgIAogIGlzLmlzZnggKCk7CgogIHJldHVybiBpczsKfQoKdGVtcGxh dGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3Ry aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXAKYmFzaWNfc3RyaW5nPGNoYXJULCB0 cmFpdHMsIEFsbG9jYXRvcj46Om5pbFJlcCA9IHsgMCwgMCwgMSwgZmFsc2UgfTsKCnRlbXBsYXRl IDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmNvbnN0IGJhc2lj X3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmlu ZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6bnBvczsKCn0gIAojIDY1NSAiL29wdC9tdnBs b2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2lu Y2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmgiIDIgMwoKCgojIDYgIi9vcHQvbXZwbG9jYWwvbGli L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2cr Ky0zL3N0cmluZyIgMiAzCgoKZXh0ZXJuICJDKysiIHsKdHlwZWRlZiBiYXNpY19zdHJpbmcgPGNo YXI+IHN0cmluZzsKIAp9ICAKCgojIDE5ICIuLi8uLi9pbmNsdWRlL2xpYmluYy9saWJ1dGlsLmgi IDIKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKY2xhc3MJRmlkdXJlc3VsdDsKY2xhc3MJUGlkU3Rh dGU7CmNsYXNzCVJlc3VsdHM7CmNsYXNzCUZyYW1lOwpjbGFzcwlJdGVtOwpjbGFzcwlHcm91cDsK Y2xhc3MJUHBhcmFtOwpjbGFzcwlXaW5kOwpjbGFzcwlDb21tc2VnOwpjbGFzcwlNZW1kZXNjOwpj bGFzcwlIZHI7CmNsYXNzCVN5c3BhcjsKY2xhc3MJQ2FtZGVzYzsKY2xhc3MJU2lkZW52OwpjbGFz cwlTbmFwOwpjbGFzcwlBbGlnbjsKY2xhc3MJU3luYzsKY2xhc3MJSW5kZXhlcjsKY2xhc3MJRnJh bWVCdWZmZXI7CgogCgoKY2xhc3MJRGJnY3RybDsKY2xhc3MJQ2lvcGNvbTsKY2xhc3MJRGV2M0Rj b250cm9sOwpjbGFzcwlIb3N0dmlkZW87CmNsYXNzCVZjcHVyZXM7CmNsYXNzCU1vbml0b3JDdHJs OwoKY2xhc3MJU2VyaWFsOwpjbGFzcwlTcXVlOwoKY2xhc3MJQ3JjdHJsOwpjbGFzcwlJbmN0cmw7 CmNsYXNzCURiY3RybDsKY2xhc3MJTXRjdHJsOwpjbGFzcwlOZXRjdHJsOwpjbGFzcwlJZ2N0cmw7 CmNsYXNzCVJwY3RybDsKY2xhc3MJVWljdHJsOwpjbGFzcwlCY2N0cmw7CmNsYXNzCVBsY3RybDsK Y2xhc3MJTW5jdHJsOwpjbGFzcwlNc2djdHJsOwpjbGFzcwlIb3N0bWdhOwpjbGFzcwlEZWZlY3Rj dHJsOwpjbGFzcwlSZXZpZXdjdHJsOwpjbGFzcwlEZWxheUNvbnRyb2w7CmNsYXNzCUVsb2dPdXRw dXQ7CgpzdGF0aWMgY29uc3QgaW50IERBVEFfT0ZGCT0gMHgxOwpzdGF0aWMgY29uc3QgaW50IERB VEFfT04JPSAweDI7CnN0YXRpYyBjb25zdCBpbnQgREFUQV9GTFVTSAk9IDB4MzsKCnN0YXRpYyBj b25zdCBpbnQgSU5TVFJfT0ZGCT0gMHg0OwpzdGF0aWMgY29uc3QgaW50IElOU1RSX09OCT0gMHg1 OwpzdGF0aWMgY29uc3QgaW50IElOU1RSX0ZMVVNICT0gMHg2OwoKdHlwZWRlZiBlbnVtIHsga0lu c3BlY3Rpb25QYXNzZWQsIGtJbnNwZWN0aW9uRmFpbGVkLCBrUmV2aWV3RGVmZWN0LCBrUmV2aWV3 RmFsc2VDYWxsIH0gZVBhc3NGYWlsOwoKIAoKCnN0YXRpYyBjb25zdCBpbnQgTk9fRVhURU5TSU9O CT0gMHgwMDsKc3RhdGljIGNvbnN0IGludCBBU19GSUxFCT0gMHgwMTsKc3RhdGljIGNvbnN0IGlu dCBFU19GSUxFCT0gMHgwMjsKc3RhdGljIGNvbnN0IGludCBDVF9GSUxFCT0gMHgwNDsJCSAKc3Rh dGljIGNvbnN0IGludCBDQURfRklMRQk9IDB4MDg7CQkgCnN0YXRpYyBjb25zdCBpbnQgU0NBTk5F Ul9GSUxFCT0gMHgxMDsJCSAKc3RhdGljIGNvbnN0IGludCBGSVJTVF9BUlRJQ0xFX0ZJTEUgPSAw eDIwOwkgCnN0YXRpYyBjb25zdCBpbnQgR0VSQkVSX0ZJTEUJPSAweDQwOwkJIApzdGF0aWMgY29u c3QgaW50IEVYQ0xVREVfRklMRQk9IDB4ODA7CQkgCiAKCgoKIAoKCgpzdGF0aWMgY29uc3QgaW50 IEVYRUNVVEVBQkxFX0ZJTEUgPSAweDEwMDsJIAogCgoKCnN0YXRpYyBjb25zdCBpbnQgRklMRV9N QVNLID0gCiAgICAoQ1RfRklMRSB8IEFTX0ZJTEUgfCBFU19GSUxFIHwgQ0FEX0ZJTEUgfCBTQ0FO TkVSX0ZJTEUgfCBGSVJTVF9BUlRJQ0xFX0ZJTEUgfCBHRVJCRVJfRklMRSB8IEVYQ0xVREVfRklM RSk7CgpzdGF0aWMgY29uc3QgaW50IExPQUQJCT0gMHgxMDAwOwpzdGF0aWMgY29uc3QgaW50IFNB VkUJCT0gMHgyMDAwOwoKc3RhdGljIGNvbnN0IGludCBMT0FEX1NBVkVfTUFTSwk9IChMT0FEIHwg U0FWRSB8IEZJTEVfTUFTSyk7CgpzdGF0aWMgY29uc3QJaW50CVNBVkVfRVNfRklMRQk9IChTQVZF IHwgRVNfRklMRSk7CnN0YXRpYyBjb25zdAlpbnQJU0FWRV9BU19GSUxFCT0gKFNBVkUgfCBBU19G SUxFKTsKc3RhdGljIGNvbnN0CWludAlTQVZFX0NUX0ZJTEUJPSAoU0FWRSB8IENUX0ZJTEUpOwpz dGF0aWMgY29uc3QJaW50CVNBVkVfQ0FEX0ZJTEUJPSAoU0FWRSB8IENBRF9GSUxFKTsKCnN0YXRp YyBjb25zdAlpbnQJU0FWRV9GSVJTVF9BUlRJQ0xFX0ZJTEUJKFNBVkUgfCBGSVJTVF9BUlRJQ0xF X0ZJTEUpOwpzdGF0aWMgY29uc3QJaW50CVNBVkVfR0VSQkVSX0ZJTEUgPSAoU0FWRSB8IEdFUkJF Ul9GSUxFKTsKc3RhdGljIGNvbnN0CWludAlTQVZFX0VYQ0xVREVfRklMRSA9IChTQVZFIHwgRVhD TFVERV9GSUxFKTsKCnN0YXRpYyBjb25zdAlpbnQJQVNDSUlfRklMRQk9IChBU19GSUxFIHwgRklS U1RfQVJUSUNMRV9GSUxFIHwgR0VSQkVSX0ZJTEUpOwoKc3RhdGljIGNvbnN0CWludAlMT0FEX0VT X0ZJTEUJPSAoTE9BRCB8IEVTX0ZJTEUpOwpzdGF0aWMgY29uc3QJaW50CUxPQURfQVNfRklMRQk9 IChMT0FEIHwgQVNfRklMRSk7CnN0YXRpYyBjb25zdAlpbnQJTE9BRF9DVF9GSUxFCT0gKExPQUQg fCBDVF9GSUxFKTsKCnN0YXRpYyBjb25zdAlpbnQJTE9BRF9TQ0FOTkVSX0ZJTEUgPSAoTE9BRCB8 IFNDQU5ORVJfRklMRSk7CnN0YXRpYyBjb25zdAlpbnQJTE9BRF9GSVJTVF9BUlRJQ0xFX0ZJTEUg PSAoTE9BRCB8IEZJUlNUX0FSVElDTEVfRklMRSk7CnN0YXRpYyBjb25zdAlpbnQJTE9BRF9HRVJC RVJfRklMRSA9IChMT0FEIHwgR0VSQkVSX0ZJTEUpOwoKCnN0YXRpYyBjb25zdAlpbnQJTE9BRF9B TllfRklMRSA9IChMT0FEIHwgRVNfRklMRSB8IEFTX0ZJTEUgfCBDVF9GSUxFKTsKCiAKc3RhdGlj IGNvbnN0IGludCBTVFJfTEVBRElORwk9IDB4MDAwMTsKc3RhdGljIGNvbnN0IGludCBTVFJfVFJB SUxJTkcJPSAweDAwMDI7CnN0YXRpYyBjb25zdCBpbnQgU1RSX0NPTVBSRVNTCT0gMHgwMDA0Owpz dGF0aWMgY29uc3QgaW50IFNUUl9UT1VQUEVSCT0gMHgwMDA4OwpzdGF0aWMgY29uc3QgaW50IFNU Ul9UT0xPV0VSCT0gMHgwMDEwOwpzdGF0aWMgY29uc3QgaW50IFNUUl9DT01QUkVTU18yCT0gMHgw MDIwOwoKIApzdGF0aWMgY29uc3QgaW50IE1WUF9PSwk9IDA7CnN0YXRpYyBjb25zdCBpbnQgTVZQ X0VSUk9SCT0gLTE7CgpleHRlcm4gIkMiIHsKdHlwZWRlZiB2b2lkICooKnRocmVhZF9wcm9jX3Qp ICh2b2lkKik7Cn0KIAoKCmV4dGVybiBsb25nIGxmZmdldChzdHJ1Y3QgZmlmbyAqZmlmbyk7CmV4 dGVybiBjaGFyIGJmZmdldChzdHJ1Y3QgZmlmbyAqZmlmbyk7CmV4dGVybiBzaG9ydCBsZmZwdXQo c3RydWN0IGZpZm8gKmZpZm8sIGxvbmcgZGF0YSk7CmV4dGVybiBzaG9ydCBiZmZwdXQoc3RydWN0 IGZpZm8gKmZpZm8sIGNoYXIgZGF0YSk7CgoKZXh0ZXJuIHVfbG9uZyBydGNsaygpOwpleHRlcm4g cGlkX3QgcGxvdF9zdGFydHVwIChjaGFyICphcmdzID0gX19udWxsICk7CmV4dGVybiBwaWRfdCBt b25fc3RhcnR1cCAoY2hhciAqYXJncyA9IF9fbnVsbCApOwojIDIxMCAiLi4vLi4vaW5jbHVkZS9s aWJpbmMvbGlidXRpbC5oIgoKCgpleHRlcm4gIkMiIHsKc3RhdGljIGludCBsZW5ndGhfX3QxOHN0 cmluZ19jaGFyX3RyYWl0czFaY1BDYyhjb25zdCBjaGFyICpwdHIpCnsKICAgIHJldHVybihzdHJs ZW4ocHRyKSk7Cn0KfQoKY29uc3QgaW50IGtMb2NrU3VjY2VzcyA9IDA7CmNvbnN0IGludCBrQWxy ZWFkeUxvY2tlZCA9IDE7CmNvbnN0IGludCBrTG9ja0Vycm9yID0gLTE7CgoKCgoKIAogCmV4dGVy biBib29sIGhhc19kaXJlY3RfZmIoKTsKZXh0ZXJuIGxvbmcgdmNwdXNfb25saW5lKCk7CmV4dGVy biBsb25nIGNvbW1zZWdfZmxhZ3MoKTsKZXh0ZXJuIHZvaWQgY29tbXNlZ19mbGFncyhsb25nIHZh bCk7CmV4dGVybiBQaWRTdGF0ZSAqIHBsb3RfcmVwYWlyKCk7CmV4dGVybiBib29sIGNvbW1zZWdf ZW11bGF0ZWQoKTsKZXh0ZXJuIHZvaWQgdmNwdXNfb25saW5lKGxvbmcgdmFsKTsKZXh0ZXJuIHZv aWQgaGFzX2F1dG9uZXR3b3JrZXIoYm9vbCB2YWwpOwpleHRlcm4gYm9vbCBoYXNfYXV0b25ldHdv cmtlcigpOwpleHRlcm4gdm9pZCAqIGZ1bm5lbF9wYXJhbSgpOwpleHRlcm4gaW50IGFuZ2J2ZWMo aW50IGF4LCBpbnQgYXksIGludCBieCwgaW50IGJ5KTsKZXh0ZXJuIHVfaW50IGF2ZXJhZ2UoY29u c3QgdV9jaGFyICpsLCBpbnQgbnh0bG4sIGludCBsaW5zLCBpbnQgY29scyk7CmV4dGVybiB2b2lk IGNvbG9yX2F2ZXJhZ2UoY29uc3QgdV9jaGFyICpmcywgaW50IGZ3LCBpbnQgc2l6ZSwgdV9sb25n ICplZSwgdV9sb25nICplbywgdV9sb25nICpvZSwgdV9sb25nICpvbyk7CmV4dGVybiBsb25nIHN3 YXBfbG9uZyhsb25nIHdvcmQpOwpleHRlcm4gZmxvYXQgc3dhcF9mbG9hdChmbG9hdCB3b3JkKTsK ZXh0ZXJuIHNob3J0IHN3YXBfc2hvcnQoc2hvcnQgd29yZCk7CmV4dGVybiB2b2lkIGRlbGF5KGlu dCBwYXJ0cyk7CmV4dGVybiB2b2lkIHVkZWxheShpbnQgcGFydHMpOwpleHRlcm4gY29uc3QgY2hh ciAqIGRpcm5hbWUoY29uc3QgY2hhciAqcGF0aCk7CmV4dGVybiBjb25zdCBjaGFyICogd2hhdF9l eHRlbnNpb24oY29uc3QgbG9uZyB0eXBlKTsKZXh0ZXJuIHZvaWQgYXBwZW5kX2V4dGVuc2lvbihj aGFyICpmaWxlbmFtZSwgY29uc3QgbG9uZyB0eXBlKTsKZXh0ZXJuIHZvaWQgYXBwZW5kX2V4dGVu c2lvbihzdGQ6OnN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IGxvbmcgdHlwZSk7CmV4dGVybiBpbnQg Y2hlY2tfZXh0ZW5zaW9uKGNvbnN0IGNoYXIgKmZuKTsKZXh0ZXJuIGNvbnN0IGNoYXIgKiBmYXVs dF9jb2RlKGludCBmYXVsdF9pZCk7CmV4dGVybiBsb25nIGhmbjJoZmEoaW50IGhmbik7CmV4dGVy biB1X2NoYXIgKiBIX2dldGFkcihpbnQgaGZkLCBsb25nIGZybSk7CmV4dGVybiBpbnQgaGZhMmhm bihsb25nIGFkZHIpOwpleHRlcm4gbG9uZyBoZm4ybGxmYShpbnQgaGZuKTsKZXh0ZXJuIHZvaWQg c2V0X2ZyX2FkZHIoaW50IGZybnVtLCBsb25nIGFkZHIpOwpleHRlcm4gY29uc3QgY2hhciAqIGl0 b2EoaW50IG4pOwpleHRlcm4gY29uc3QgY2hhciAqIGl0b2EoaW50IG4sIHNpemVfdCB3aWR0aCwg Y2hhciBmaWxsID0gJyAnKTsKZXh0ZXJuIGNvbnN0IGNoYXIgKiBpdG94KHVuc2lnbmVkIGxvbmcg bik7CmV4dGVybiBjb25zdCBjaGFyICogaXRvWCh1bnNpZ25lZCBsb25nIG4pOwpleHRlcm4gaW50 IG1rZGlycyhjb25zdCBzdGQ6OnN0cmluZyYgZm5hbWUpOwpleHRlcm4gY29uc3QgY2hhciAqIGJh c2VuYW1lKGNvbnN0IGNoYXIgKmYpOwpleHRlcm4gaW50IHBjYnBhdGgoY2hhciAqZm4sIGNvbnN0 IGNoYXIgKmRpciwgaW50IGZubGVuKTsKZXh0ZXJuIGludCB3ZmlscGF0aChjaGFyICpmbiwgaW50 IGZubGVuKTsKZXh0ZXJuIGludCBkZmx0cGF0aChjaGFyICpmbiwgaW50IGZubGVuKTsKZXh0ZXJu IGludCBwYXJtcGF0aChjaGFyICpmbiwgaW50IGZubGVuKTsKZXh0ZXJuIGludCBwY2JldGNwYXRo KGNoYXIgKmZuLCBpbnQgZm5sZW4pOwpleHRlcm4gaW50IHBjYnN0YXRwYXRoKGNoYXIgKmZuLCBp bnQgZm5sZW4pOwpleHRlcm4gaW50IHBjYmhlbHBwYXRoKGNoYXIgKmZuLCBpbnQgZm5sZW4pOwpl eHRlcm4gaW50IHBjYmFsZ29oZWxwcGF0aChjaGFyICpmbiwgaW50IGZubGVuKTsKZXh0ZXJuIGlu dCBwY2JlcnJwYXRoKGNoYXIgKmZuLCBpbnQgZm5sZW4pOwpleHRlcm4gaW50IHBjYmVsZ3BhdGgo Y2hhciAqZm4sIGludCBmbmxlbik7CmV4dGVybiBpbnQgcGNiYmlucGF0aChjaGFyICpmbiwgaW50 IGZubGVuKTsKZXh0ZXJuIGludCBkZnJ1bGUoY2hhciAqZm4sIGludCBmbmxlbik7CmV4dGVybiBp bnQgcGNic2NycGF0aChjaGFyICpmbiwgaW50IGZubGVuKTsKZXh0ZXJuIGludCBwY2JhbGdvcGF0 aChjaGFyICpmbiwgaW50IGZubGVuKTsKZXh0ZXJuIGludCBwY2JwYXRoKHN0ZDo6c3RyaW5nJiBm biwgY29uc3QgY2hhciAqZGlyKTsKZXh0ZXJuIHZvaWQgbWFjaGluZXBhdGgoc3RkOjpzdHJpbmcm IGZuKTsKZXh0ZXJuIGludCB3ZmlscGF0aChzdGQ6OnN0cmluZyYgZm4pOwpleHRlcm4gaW50IGlt YWdlX3BhdGgoc3RkOjpzdHJpbmcmIGZuKTsKZXh0ZXJuIGludCBkZmx0cGF0aChzdGQ6OnN0cmlu ZyYgZm4pOwpleHRlcm4gaW50IGRhdGFiYXNlX3BhdGgoc3RkOjpzdHJpbmcmIGZuKTsKZXh0ZXJu IGludCBwYXJtcGF0aChzdGQ6OnN0cmluZyYgZm4pOwpleHRlcm4gaW50IGV0Y19wYXRoKHN0ZDo6 c3RyaW5nJiBmbik7CmV4dGVybiBpbnQgcGNiZXRjcGF0aChzdGQ6OnN0cmluZyYgZm4pOwpleHRl cm4gaW50IHBjYnN0YXRwYXRoKHN0ZDo6c3RyaW5nJiBmbik7CmV4dGVybiBpbnQgc3RhdHNfcGF0 aChzdGQ6OnN0cmluZyYgZm4pOwpleHRlcm4gaW50IHBjYmhlbHBwYXRoKHN0ZDo6c3RyaW5nJiBm bik7CmV4dGVybiBpbnQgaGVscF9wYXRoKHN0ZDo6c3RyaW5nJiBmbik7CmV4dGVybiBpbnQgcGNi YWxnb2hlbHBwYXRoKHN0ZDo6c3RyaW5nJiBmbik7CmV4dGVybiBpbnQgYWxnb19oZWxwX3BhdGgo c3RkOjpzdHJpbmcmIGZuKTsKZXh0ZXJuIGludCBwY2JlcnJwYXRoKHN0ZDo6c3RyaW5nJiBmbik7 CmV4dGVybiBpbnQgZXJyb3JfcGF0aChzdGQ6OnN0cmluZyYgZm4pOwpleHRlcm4gaW50IHBjYmVs Z3BhdGgoc3RkOjpzdHJpbmcmIGZuKTsKZXh0ZXJuIGludCBlbG9nX3BhdGgoc3RkOjpzdHJpbmcm IGZuKTsKZXh0ZXJuIGludCBwY2JiaW5wYXRoKHN0ZDo6c3RyaW5nJiBmbik7CmV4dGVybiBpbnQg YmluX3BhdGgoc3RkOjpzdHJpbmcmIGZuKTsKZXh0ZXJuIGludCBkZnJ1bGUoc3RkOjpzdHJpbmcm IGZuKTsKZXh0ZXJuIGludCBydWxlc19wYXRoKHN0ZDo6c3RyaW5nJiBmbik7CmV4dGVybiBpbnQg cGNic2NycGF0aChzdGQ6OnN0cmluZyYgZm4pOwpleHRlcm4gaW50IHNjcmlwdF9wYXRoKHN0ZDo6 c3RyaW5nJiBmbik7CmV4dGVybiBpbnQgcGNiYWxnb3BhdGgoc3RkOjpzdHJpbmcmIGZuKTsKZXh0 ZXJuIGludCBiYXJjb2RlcGF0aChzdGQ6OnN0cmluZyAmZm4pOwpleHRlcm4gY2hhciAqIGNyZWF0 ZV9sb2NhbF9jb21tKGxvbmcgc2l6ZSwgbG9uZyBtYXBfYWRkciwgaW50IHNlc3Npb24pOwpleHRl cm4gdm9pZCBkZXN0cm95X2xvY2FsX2NvbW0oY2hhciAqYWRkcik7CmV4dGVybiBib29sIGF0dGFj aF90b19jb21tc2VnKGludCBmbGFncyk7CmV4dGVybiBjaGFyICogZGJnX3ZpcnQoY29uc3QgY2hh ciAqcF9hZGRyKTsKZXh0ZXJuIGNoYXIgKiBkYmdfcGh5cyhjb25zdCBjaGFyICp2X2FkZHIpOwpl eHRlcm4gaW50IGdldGxpbmUocmVnaXN0ZXIgRklMRSAqIGZwLCByZWdpc3RlciBjaGFyICpzLCBy ZWdpc3RlciBpbnQgbGltKTsKZXh0ZXJuIGNoYXIgKiBzZXJyb3Iodm9pZCk7CmV4dGVybiBpbnQg bGkyYXJncyhyZWdpc3RlciBjaGFyICpsaW5lLCByZWdpc3RlciBjaGFyICoqYXJncywgaW50IG5h cmdzKTsKZXh0ZXJuIHZvaWQgdjN4bTMoY29uc3QgdjNfdCAqdiwgY29uc3QgbTNfdCAqbSwgdjNf dCAqcnYpOwpleHRlcm4gdm9pZCBtM3htMyhjb25zdCBtM190ICptMSwgY29uc3QgbTNfdCAqbTIs IG0zX3QgKnJtKTsKZXh0ZXJuIHZvaWQgbTNtayhtM190ICptLCBpbnQgb3JpZW50LCBpbnQgYm90 KTsKZXh0ZXJuIGludCBtM2ludihjb25zdCBtM190ICpzbSwgbTNfdCAqZG0pOwpleHRlcm4gdm9p ZCBtM3ByaW50Zihjb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqZm10LCBjb25zdCBtM190 ICptKTsKZXh0ZXJuIHZvaWQgbWFwX2RpYWxvZ19jYihXaWRnZXQgdywgWHRQb2ludGVyIGNsaWVu dF9kYXRhLCBYdFBvaW50ZXIgeHRfY2FsbF9kYXRhKTsKZXh0ZXJuIHZvaWQgdW5tYXBfZGlhbG9n X2NiKFdpZGdldCB3LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIFh0UG9pbnRlciB4dF9jYWxsX2Rh dGEpOwpleHRlcm4gdm9pZCBzZXRfbWFwcGVkX2RpYWxvZ3Nfc3RhdGUoYm9vbCBzZW5zaXRpdmUp OwpleHRlcm4gdV9pbnQgbW92ZV9jb25zdF92ZWwoSW5kZXhlciAqYSwgdV9sb25nIHVkaXMsIGlu dCBkYl9zbnBkbHksIGludCBkZWJ1Zyk7CmV4dGVybiBjb25zdCBjaGFyICogbXNnc3RyKGludCBt c2cpOwpleHRlcm4gY2hhciAqIHByX3N0YXRlKGxvbmcgc3RhdGUsIGNvbnN0IGNoYXIgKnN0YXRl X3N0cik7CmV4dGVybiB1X2xvbmcgcnRjbGsodm9pZCk7CmV4dGVybiB2b2lkIHJ1bl9zcGNfc2Ny aXB0KGNvbnN0IHN0ZDo6c3RyaW5nIGZsYXZvciwgY29uc3Qgc3RkOjpzdHJpbmcgc2VyaWFsLCBj b25zdCBzdGQ6OnN0cmluZyBzY3JpcHRfdG9fcnVuLCBlUGFzc0ZhaWwgcGFzc2VkKTsKZXh0ZXJu IHBpZF90IHN0YXJ0dXAoY29uc3QgY2hhciAqcHJvZywgY29uc3QgY2hhciAqYXJncyk7CmV4dGVy biBCb29sZWFuIHN0YXJ0X3Bsb3RzdGF0KGNvbnN0IGNoYXIgKmRibmFtZSk7CmV4dGVybiBpbnQg c3R0eXNhbmUoaW50IGZkKTsKZXh0ZXJuIGludCBzdHR5cmF3KGludCBmZCwgaW50IHZtaW4sIGlu dCB2dGltZSk7CmV4dGVybiBpbnQgc3R0eWNicmVhayhpbnQgZmQpOwpleHRlcm4gdm9pZCBzdGFy dF90aW1lcihzdHJ1Y3QgdGltZXZhbCAqc3RhcnRfdGltZSk7CmV4dGVybiB2b2lkIHN0b3BfdGlt ZXIoY29uc3QgY2hhciAqd2hvLCBzdHJ1Y3QgdGltZXZhbCAqc3RhcnRfdGltZSk7CmV4dGVybiB2 b2lkICogc3RhcnRfdGhyZWFkKHRocmVhZF9wcm9jX3Qgc3RhcnRfcm91dGluZSwgdm9pZCAqY2xv c3VyZSwgaW50IHNjaGVkID0gMiAsIGludCBzY29wZSA9IDAgKTsKZXh0ZXJuIHZvaWQgdGhyZWFk X2V4aXQodm9pZCAqY2xvc3VyZSk7CmV4dGVybiBpbnQgaXJpbnQoZG91YmxlIHZhbHVlKTsKZXh0 ZXJuIGJvb2wgaXNfcnVubmluZyhwaWRfdCBwaWQpOwpleHRlcm4gaW50IG51bV92Y3B1X29ubGlu ZSgpOwpleHRlcm4gaW50IGdldHN1Ym9wdCAoY2hhciAqKm9wdGlvbnAsIGNvbnN0IGNoYXIgKmNv bnN0ICp0b2tlbnMsIGNoYXIgKip2YWx1ZXApOwpleHRlcm4gY29uc3QgY2hhciAqIGNoYW5uZWxf bmFtZShzaG9ydCBzdWIsIHNob3J0IG1jaCk7CmV4dGVybiBib29sIGNoZWNrKGNvbnN0IHN0ZDo6 c3RyaW5nICZwcm9jZXNzKTsKZXh0ZXJuIGludCBsb2NrX2ZpbGUgKGludCBmbik7CmV4dGVybiBp bnQgdW5sb2NrX2ZpbGUgKGludCBmbik7CmV4dGVybiBpbnQgU3RyVG9VcHBlcihjaGFyICpzdHIp OwpleHRlcm4gaW50IFN0clRvTG93ZXIoY2hhciAqc3RyKTsKZXh0ZXJuIGludCBTdHJDb21wcmVz cyhjaGFyICpzdHIpOwpleHRlcm4gaW50IFN0clJlbW92ZUxlYWRpbmdTcGFjZXMoY2hhciAqc3Ry KTsKZXh0ZXJuIGludCBTdHJSZW1vdmVUcmFpbGluZ1NwYWNlcyhjaGFyICpzdHIpOwpleHRlcm4g aW50IFN0clJlbW92ZUV4dHJhU3BhY2VzKGNoYXIgKnN0cik7CmV4dGVybiBpbnQgU3RyUXVhbGlm eShjaGFyICpuYW1lLCBjaGFyICpjaGFyU2V0KTsKZXh0ZXJuIGludCBTdHJFZGl0KGNoYXIgKnN0 ciwgaW50IGZsYWcpOwpleHRlcm4gaW50IFN0clRyaW0oY2hhciAqc3RyKTsKZXh0ZXJuIHZvaWQg T3V0cHV0Q2hhcihGSUxFICpmcCwgY2hhciBjLCBpbnQgbiwgaW50IG5ld2xpbmUpOwpleHRlcm4g Y2hhciAqIGdldF9mb3JtYXRfc3RyKGludCBtb2RlKTsKZXh0ZXJuIHRpbWVfdCB0aW1lX3N0cl8y X3RpbWVfdChjaGFyICp0aW1lX3N0ciwgaW50IG1vZGUpOwpleHRlcm4gY2hhciAqIHRpbWVfdF8y X3RpbWVfc3RyKHRpbWVfdCB0LCBjaGFyICp0aW1lX3N0ciwgaW50IG1vZGUpOwpleHRlcm4gdGlt ZV90IGdldF90aW1lX3QoY2hhciAqc3RyLCBpbnQgbW9kZSk7CmV4dGVybiBjaGFyICogZ2V0X3Rp bWVfc3RyKHRpbWVfdCB0LCBjaGFyICp0aW1lX3N0ciwgaW50IG1vZGUpOwpleHRlcm4gdm9pZCBp bnRlbF90aW1lc3RhbXAoc3RkOjpzdHJpbmcgJnRpbWVzdGFtcCk7CmV4dGVybiBpbnQgUmFuZ2VS YW5kKGludCBsb3csIGludCBoaWdoKTsKZXh0ZXJuIHNob3J0IGVzX2ZpbGUoY29uc3QgY2hhciAq ZGIpOwoKIyAzOTYgIi4uLy4uL2luY2x1ZGUvbGliaW5jL2xpYnV0aWwuaCIKCiMgMTEgInNhdmVf c25hcC5jIiAyCgojIDEgIi4uLy4uL2luY2x1ZGUvbGliaW5jL2xpYmRyYXdpbmcuaCIgMQoKCiAK IAoKIAoKIAoKCgojIDEgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy aXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3ZlY3RvciIgMSAzCiAKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFy Yy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29i YXNlLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKIyAx ICIvb3B0L212cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1LjMvLi4v Li4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfcGFpci5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKIAoKCgoKCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CnN0cnVj dCBwYWlyIHsKICB0eXBlZGVmIF9UMSBmaXJzdF90eXBlOwogIHR5cGVkZWYgX1QyIHNlY29uZF90 eXBlOwoKICBfVDEgZmlyc3Q7CiAgX1QyIHNlY29uZDsKICBwYWlyKCkgOiBmaXJzdChfVDEoKSks IHNlY29uZChfVDIoKSkge30KICBwYWlyKGNvbnN0IF9UMSYgX19hLCBjb25zdCBfVDImIF9fYikg OiBmaXJzdChfX2EpLCBzZWNvbmQoX19iKSB7fQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9VMSwgY2xh c3MgX1UyPgogIHBhaXIoY29uc3QgcGFpcjxfVTEsIF9VMj4mIF9fcCkgOiBmaXJzdChfX3AuZmly c3QpLCBzZWNvbmQoX19wLnNlY29uZCkge30KCn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFz cyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwg Y29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkKeyAKICByZXR1cm4gX194LmZpcnN0ID09IF9feS5m aXJzdCAmJiBfX3guc2Vjb25kID09IF9feS5zZWNvbmQ7IAp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Qx LCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBwYWlyPF9UMSwgX1QyPiYg X194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7IAogIHJldHVybiBfX3guZmlyc3QgPCBf X3kuZmlyc3QgfHwgCiAgICAgICAgICghKF9feS5maXJzdCA8IF9feC5maXJzdCkgJiYgX194LnNl Y29uZCA8IF9feS5zZWNvbmQpOyAKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgpp bmxpbmUgcGFpcjxfVDEsIF9UMj4gbWFrZV9wYWlyKGNvbnN0IF9UMSYgX194LCBjb25zdCBfVDIm IF9feSkKewogIHJldHVybiBwYWlyPF9UMSwgX1QyPihfX3gsIF9feSk7Cn0KCiAKCgoKIAogCiAK IyA0MiAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4z Ly4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKCgojIDEgIi9v cHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8u Li8uLi9pbmNsdWRlL2crKy0zL3R5cGVfdHJhaXRzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoK CgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnN0cnVjdCBfX3RydWVfdHlwZSB7 Cn07CgpzdHJ1Y3QgX19mYWxzZV90eXBlIHsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVj dCBfX3R5cGVfdHJhaXRzIHsgCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgIHRoaXNfZHVtbXlf bWVtYmVyX211c3RfYmVfZmlyc3Q7CiAgICAgICAgICAgICAgICAgICAgCgoKCgoKICAgIAoKCgoK CgoKCiAKCiAgIHR5cGVkZWYgX19mYWxzZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29u c3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29u c3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1l bnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3Ry dWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKCgogCiAK IAoKCgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxib29sPiB7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90 cmFpdHM8Y2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1 bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29w eV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3Np Z25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rl c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1w bGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxzaWduZWQgY2hhcj4gewogICB0eXBlZGVmIF9f dHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl X3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0 czx1bnNpZ25lZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxf ZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlh bF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFs X2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZp YWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsK CgoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8d2NoYXJfdD4gewogICB0eXBlZGVm IF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07CgoKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVf dHJhaXRzPHNob3J0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVm YXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9j b3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fz c2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxf ZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCnRl bXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIHNob3J0PiB7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVf dHJhaXRzPGludD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1 bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29w eV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3Np Z25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rl c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1w bGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBpbnQ+IHsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFp dHM8bG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRf Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9j b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25t ZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3Ry dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0 ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBsb25nPiB7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f dHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCiMgMjA4ICIvb3B0L212cGxvY2FsL2xpYi9nY2MtbGli L3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy90eXBl X3RyYWl0cy5oIiAzCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8ZmxvYXQ+IHsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9y OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRv cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0 IF9fdHlwZV90cmFpdHM8ZG91YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3Ry aXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNf dHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190 cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFz X3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlw ZTsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgZG91YmxlPiB7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9U cD4Kc3RydWN0IF9fdHlwZV90cmFpdHM8X1RwKj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAg IGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg ICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAg ICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl ICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNf UE9EX3R5cGU7Cn07CgojIDI5NSAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t c29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvdHlwZV90cmFpdHMuaCIg MwoKCgogCiAKCnRlbXBsYXRlIDxjbGFzcyBfVHA+IHN0cnVjdCBfSXNfaW50ZWdlciB7CiAgdHlw ZWRlZiBfX2ZhbHNlX3R5cGUgX0ludGVncmFsOwp9OwoKCgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lz X2ludGVnZXI8Ym9vbD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKCgp0 ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8Y2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5 cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPHNpZ25lZCBj aGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+ICBz dHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUg X0ludGVncmFsOwp9OwoKCgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8d2NoYXJfdD4g ewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKCgp0ZW1wbGF0ZTw+ICBzdHJ1 Y3QgX0lzX2ludGVnZXI8c2hvcnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsK fTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBzaG9ydD4gewogIHR5 cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19p bnRlZ2VyPGludD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxh dGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGludD4gewogIHR5cGVkZWYgX190cnVl X3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPGxvbmc+ IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gIHN0cnVj dCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50 ZWdyYWw7Cn07CgojIDM2NyAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s YXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvdHlwZV90cmFpdHMuaCIgMwoK CgoKIAogCiAKIyA0NSAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp czIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgiIDIgMwoK CgoKIyAxICIvb3B0L212cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1 LjMvaW5jbHVkZS9saW1pdHMuaCIgMSAzIDQKIAoKCiAKCgoKCgogCiMgMSAiL29wdC9tdnBsb2Nh bC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zL2luY2x1ZGUvc3lzbGltaXRz LmgiIDEgMyA0CiAKCgoKCgojIDEgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3Vu LXNvbGFyaXMyLzIuOTUuMy9pbmNsdWRlL2xpbWl0cy5oIiAxIDMgNAogCgoKIAoKIyAxMTQgIi9v cHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy9pbmNsdWRl L2xpbWl0cy5oIiAzIDQKCgoKIyAxICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDEgMyA0CiAKCgoK CiAKIAoKIAogCiAKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylsaW1pdHMuaAkxLjUxCTk5LzEwLzA4 IFNNSSIJCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2lzby9saW1pdHNfaXNvLmgiIDEgMyA0CiAKCgoK CiAKIAoKIAogCiAKCiAKCgoKCgoKCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpbGltaXRzX2lz by5oCTEuMQk5OS8wOC8wOSBTTUkiIAoKCmV4dGVybiAiQyIgewoKCiAKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgkJCQkJIAoKCgoKCn0KCgoKIyAyMCAiL3Vzci9pbmNsdWRlL2xp bWl0cy5oIiAyIDMgNAoKCiAKCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2ludF9saW1p dHMuaCIgMSAzIDQKIAoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKWludF9saW1pdHMuaAkxLjYJ OTkvMDgvMDYgU01JIgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVy biAiQyIgewoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgogCgoKCgoKCgoKCgogCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKfQoKCgojIDMyICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMyA0CgoKCgpl eHRlcm4gIkMiIHsKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgog CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoJCQkJIAoKCgoKCgoKCgoKCgoKCgoKCQkJCQkJIAoKCQkJCQkJIAoKCgoK CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjI4ICIvdXNy L2luY2x1ZGUvbGltaXRzLmgiIDMgNAoKCgoKCiAKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCmV4 dGVybiBsb25nIF9zeXNjb25mKGludCk7CSAKCgogCgoKCgoKCn0KCgoKIyAxMTcgIi9vcHQvbXZw bG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy9pbmNsdWRlL2xpbWl0 cy5oIiAyIDMgNAoKCgoKIyA3ICIvb3B0L212cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z b2xhcmlzMi8yLjk1LjMvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMiAzIDQKCgojIDExICIvb3B0L212 cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1LjMvaW5jbHVkZS9saW1p dHMuaCIgMiAzIDQKCgoKCgogCgoKCiAKCgoKIAoKCgoKIAoKCgoKCiAKCgoKIAoKCgoKCgoKCgoK CgogCgogCgoKCgogCgoKCiAKCgoKCgoKCgogCgoKCiAKCgoKCgoKCgoKCgoKCiAKCgoKIyAxMDcg Ii9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy9pbmNs dWRlL2xpbWl0cy5oIiAzIDQKCgoKCiAKCgoKCgoKCgoKIyA0OSAiL29wdC9tdnBsb2NhbC9saWIv Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr LTMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKCiMgMSAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9z cGFyYy1zdW4tc29sYXJpczIvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzQyICIv b3B0L212cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1LjMvaW5jbHVk ZS9zdGRkZWYuaCIgMyA0CgojIDUxICIvb3B0L212cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1 bi1zb2xhcmlzMi8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2Uu aCIgMiAzCgojIDEgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy LzIuOTUuMy9pbmNsdWRlL25ldy5oIiAxIDMgNAogCgoKCgojIDEgIi9vcHQvbXZwbG9jYWwvbGli L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy9pbmNsdWRlL25ldyIgMSAzIDQKIAog CgoKCgojcHJhZ21hIGludGVyZmFjZSAibmV3IgojIDEgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1s aWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDM0 MiAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zL2lu Y2x1ZGUvc3RkZGVmLmgiIDMgNAoKIyA4ICIvb3B0L212cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJj LXN1bi1zb2xhcmlzMi8yLjk1LjMvaW5jbHVkZS9uZXciIDIgMyA0CgojIDEgIi9vcHQvbXZwbG9j YWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy9pbmNsdWRlL2V4Y2VwdGlv biIgMSAzIDQKIAogCgoKCgojcHJhZ21hIGludGVyZmFjZSAiZXhjZXB0aW9uIgoKZXh0ZXJuICJD KysiIHsKCm5hbWVzcGFjZSBzdGQgewoKY2xhc3MgZXhjZXB0aW9uIHsKcHVibGljOgogIGV4Y2Vw dGlvbiAoKSB7IH0KICB2aXJ0dWFsIH5leGNlcHRpb24gKCkgeyB9CiAgdmlydHVhbCBjb25zdCBj aGFyKiB3aGF0ICgpIGNvbnN0Owp9OwoKY2xhc3MgYmFkX2V4Y2VwdGlvbiA6IHB1YmxpYyBleGNl cHRpb24gewpwdWJsaWM6CiAgYmFkX2V4Y2VwdGlvbiAoKSB7IH0KICB2aXJ0dWFsIH5iYWRfZXhj ZXB0aW9uICgpIHsgfQp9OwoKdHlwZWRlZiB2b2lkICgqdGVybWluYXRlX2hhbmRsZXIpICgpOwp0 eXBlZGVmIHZvaWQgKCp1bmV4cGVjdGVkX2hhbmRsZXIpICgpOwoKdGVybWluYXRlX2hhbmRsZXIg c2V0X3Rlcm1pbmF0ZSAodGVybWluYXRlX2hhbmRsZXIpOwp2b2lkIHRlcm1pbmF0ZSAoKSBfX2F0 dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CnVuZXhwZWN0ZWRfaGFuZGxlciBzZXRfdW5leHBl Y3RlZCAodW5leHBlY3RlZF9oYW5kbGVyKTsKdm9pZCB1bmV4cGVjdGVkICgpIF9fYXR0cmlidXRl X18gKChfX25vcmV0dXJuX18pKTsKYm9vbCB1bmNhdWdodF9leGNlcHRpb24gKCk7Cgp9ICAKCn0g IAoKCiMgOSAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45 NS4zL2luY2x1ZGUvbmV3IiAyIDMgNAoKCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ugc3RkIHsK CiAgY2xhc3MgYmFkX2FsbG9jIDogcHVibGljIGV4Y2VwdGlvbiB7CiAgcHVibGljOgogICAgdmly dHVhbCBjb25zdCBjaGFyKiB3aGF0KCkgY29uc3QgdGhyb3coKSB7IHJldHVybiAiYmFkX2FsbG9j IjsgfQogIH07CgogIHN0cnVjdCBub3Rocm93X3Qge307CiAgZXh0ZXJuIGNvbnN0IG5vdGhyb3df dCBub3Rocm93OwogIHR5cGVkZWYgdm9pZCAoKm5ld19oYW5kbGVyKSgpOwogIG5ld19oYW5kbGVy IHNldF9uZXdfaGFuZGxlciAobmV3X2hhbmRsZXIpOwoKfSAgCgogCnZvaWQgKm9wZXJhdG9yIG5l dyAoc2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxsb2MpOwp2b2lkICpvcGVyYXRvciBuZXdbXSAo c2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxsb2MpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZSAodm9p ZCAqKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdICh2b2lkICopIHRocm93KCk7CnZv aWQgKm9wZXJhdG9yIG5ldyAoc2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7 CnZvaWQgKm9wZXJhdG9yIG5ld1tdIChzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhy b3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGUgKHZvaWQgKiwgY29uc3Qgc3RkOjpub3Rocm93X3Qm KSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdICh2b2lkICosIGNvbnN0IHN0ZDo6bm90 aHJvd190JikgdGhyb3coKTsKCiAKaW5saW5lIHZvaWQgKm9wZXJhdG9yIG5ldyhzaXplX3QsIHZv aWQgKnBsYWNlKSB0aHJvdygpIHsgcmV0dXJuIHBsYWNlOyB9CmlubGluZSB2b2lkICpvcGVyYXRv ciBuZXdbXShzaXplX3QsIHZvaWQgKnBsYWNlKSB0aHJvdygpIHsgcmV0dXJuIHBsYWNlOyB9Cn0g IAoKCiMgNiAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45 NS4zL2luY2x1ZGUvbmV3LmgiIDIgMyA0CgoKdXNpbmcgc3RkOjpuZXdfaGFuZGxlcjsKdXNpbmcg c3RkOjpzZXRfbmV3X2hhbmRsZXI7CgoKIyA1MiAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9z cGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2Fs Z29iYXNlLmgiIDIgMwoKCgoKCgoKIAoKIAoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEs IGNsYXNzIF9Gb3J3YXJkSXRlcjIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgX19pdGVyX3N3YXAo X0ZvcndhcmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIgX19iLCBfVHAqKSB7CiAgX1RwIF9fdG1w ID0gKl9fYTsKICAqX19hID0gKl9fYjsKICAqX19iID0gX190bXA7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgppbmxpbmUgdm9pZCBpdGVyX3N3 YXAoX0ZvcndhcmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIgX19iKSB7CiAgX19pdGVyX3N3YXAo X19hLCBfX2IsIF9fdmFsdWVfdHlwZSggX19hICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4K aW5saW5lIHZvaWQgc3dhcChfVHAmIF9fYSwgX1RwJiBfX2IpIHsKICBfVHAgX190bXAgPSBfX2E7 CiAgX19hID0gX19iOwogIF9fYiA9IF9fdG1wOwp9CgogCiAKCgoKCgoKdGVtcGxhdGUgPGNsYXNz IF9UcD4KaW5saW5lIGNvbnN0IF9UcCYgbWluKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9f YikgewogIHJldHVybiBfX2IgPCBfX2EgPyBfX2IgOiBfX2E7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf VHA+CmlubGluZSBjb25zdCBfVHAmIG1heChjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2Ip IHsKICByZXR1cm4gIF9fYSA8IF9fYiA/IF9fYiA6IF9fYTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIGNvbnN0IF9UcCYgbWluKGNvbnN0IF9UcCYgX19h LCBjb25zdCBfVHAmIF9fYiwgX0NvbXBhcmUgX19jb21wKSB7CiAgcmV0dXJuIF9fY29tcChfX2Is IF9fYSkgPyBfX2IgOiBfX2E7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJl PgppbmxpbmUgY29uc3QgX1RwJiBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBf Q29tcGFyZSBfX2NvbXApIHsKICByZXR1cm4gX19jb21wKF9fYSwgX19iKSA/IF9fYiA6IF9fYTsK fQoKIAogCgogCiAKIAogCiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3Mg X091dHB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9PdXRwdXRJdGVyIF9fY29weShf SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGlu cHV0X2l0ZXJhdG9yX3RhZywgX0Rpc3RhbmNlKikKewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xh c3Q7ICsrX19yZXN1bHQsICsrX19maXJzdCkKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHJl dHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFz cyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX091dHB1dEl0ZXIKX19jb3B5 KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAg ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywgX0Rp c3RhbmNlKikKewogIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+ IDA7IC0tX19uKSB7CiAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICsrX19maXJzdDsKICAg ICsrX19yZXN1bHQ7CiAgfQogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9U cD4KaW5saW5lIF9UcCoKX19jb3B5X3RyaXZpYWwoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBf VHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkgewogIG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3Qs IHNpemVvZihfVHApICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICByZXR1cm4gX19yZXN1bHQgKyAo X19sYXN0IC0gX19maXJzdCk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz IF9PdXRwdXRJdGVyLCBjbGFzcyBfQm9vbFR5cGU+CnN0cnVjdCBfX2NvcHlfZGlzcGF0Y2ggewog IHN0YXRpYyBfT3V0cHV0SXRlciBjb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpIHsK ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjppdGVyYXRv cl9jYXRlZ29yeSBfQ2F0ZWdvcnk7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKICAgIHJldHVybiBfX2Nv cHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0NhdGVnb3J5KCksIChfRGlzdGFuY2UqKSAw KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX19jb3B5X2Rpc3BhdGNoPF9U cCosIF9UcCosIF9fdHJ1ZV90eXBlPgp7CiAgc3RhdGljIF9UcCogY29weShjb25zdCBfVHAqIF9f Zmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgICByZXR1cm4gX19j b3B5X3RyaXZpYWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgfQp9OwoKdGVtcGxhdGUg PGNsYXNzIF9UcD4Kc3RydWN0IF9fY29weV9kaXNwYXRjaDxjb25zdCBfVHAqLCBfVHAqLCBfX3Ry dWVfdHlwZT4KewogIHN0YXRpYyBfVHAqIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBf VHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkgewogICAgcmV0dXJuIF9fY29weV90cml2aWFsKF9f Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ dGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIF9PdXRwdXRJdGVyIGNvcHkoX0lucHV0SXRl ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX091 dHB1dEl0ZXIgX19yZXN1bHQpIHsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf SW5wdXRJdGVyPjo6dmFsdWVfdHlwZSBfVHA7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJh aXRzPF9UcD46Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IKICAgICAgICAgIF9Ucml2 aWFsOwogIHJldHVybiBfX2NvcHlfZGlzcGF0Y2g8X0lucHV0SXRlciwgX091dHB1dEl0ZXIsIF9U cml2aWFsPgogICAgOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwp9CgojIDIxMyAi L29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4u Ly4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgiIDMKCgogCiAKCnRlbXBsYXRlIDxj bGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLCAKICAg ICAgICAgIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19jb3B5 X2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwgCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwgCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0 ZXIyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfRGlzdGFuY2UqKQp7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQog ICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xh c3MgX0Rpc3RhbmNlPgppbmxpbmUgX0JpZGlyZWN0aW9uYWxJdGVyIF9fY29weV9iYWNrd2FyZChf UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCAKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fcmVzdWx0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJh dG9yX3RhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3Rh bmNlKikKewogIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7 IC0tX19uKQogICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9 CgoKCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBf QmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0Jvb2xUeXBlPgpzdHJ1Y3QgX19j b3B5X2JhY2t3YXJkX2Rpc3BhdGNoCnsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfQmlkaXJlY3Rpb25hbEl0ZXIxPjo6aXRlcmF0b3JfY2F0ZWdvcnkgCiAgICAgICAgICBfQ2F0 OwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcjE+ OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZTsKCiAgc3RhdGljIF9CaWRpcmVj dGlvbmFsSXRlcjIgY29weShfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsIAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsIAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX3Jlc3Vs dCkgewogICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0 LCBfQ2F0KCksIChfRGlzdGFuY2UqKSAwKTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpz dHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgp7 CiAgc3RhdGljIF9UcCogY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0 LCBfVHAqIF9fcmVzdWx0KSB7CiAgICBjb25zdCBwdHJkaWZmX3QgX051bSA9IF9fbGFzdCAtIF9f Zmlyc3Q7CiAgICBtZW1tb3ZlKF9fcmVzdWx0IC0gX051bSwgX19maXJzdCwgc2l6ZW9mKF9UcCkg KiBfTnVtKTsKICAgIHJldHVybiBfX3Jlc3VsdCAtIF9OdW07CiAgfQp9OwoKdGVtcGxhdGUgPGNs YXNzIF9UcD4Kc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxjb25zdCBfVHAqLCBfVHAq LCBfX3RydWVfdHlwZT4KewogIHN0YXRpYyBfVHAqIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBj b25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkgewogICAgcmV0dXJuICBfX2NvcHlfYmFj a3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CiAgICAgIDo6Y29weShfX2Zp cnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JJMSwgY2xh c3MgX0JJMj4KaW5saW5lIF9CSTIgY29weV9iYWNrd2FyZChfQkkxIF9fZmlyc3QsIF9CSTEgX19s YXN0LCBfQkkyIF9fcmVzdWx0KSB7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPHR5 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQkkyPjo6dmFsdWVfdHlwZT4KICAgICAgICAgICAgICAg ICAgICAgICAgOjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAgICBfVHJp dmlhbDsKICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9CSTEsIF9CSTIsIF9Ucml2 aWFsPgogICAgICAgICAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoK IyAzMDMgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUu My8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAzCgoKIAogCgp0ZW1w bGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJdGVyPgpw YWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPiBfX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3Qs IF9TaXplIF9fY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9P dXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICBmb3IgKCA7IF9fY291bnQgPiAwOyAtLV9fY291bnQp IHsKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogICAgKytfX3Jlc3Vs dDsKICB9CiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+KF9fZmlyc3QsIF9f cmVzdWx0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SQUl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBf T3V0cHV0SXRlcj4KaW5saW5lIHBhaXI8X1JBSXRlciwgX091dHB1dEl0ZXI+Cl9fY29weV9uKF9S QUl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1 bHQsCiAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7CiAgX1JBSXRlciBfX2xh c3QgPSBfX2ZpcnN0ICsgX19jb3VudDsKICByZXR1cm4gcGFpcjxfUkFJdGVyLCBfT3V0cHV0SXRl cj4oX19sYXN0LCBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUg PGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5l IHBhaXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+Cl9fY29weV9uKF9JbnB1dEl0ZXIgX19maXJz dCwgX1NpemUgX19jb3VudCwgX091dHB1dEl0ZXIgX19yZXN1bHQpIHsKICByZXR1cm4gX19jb3B5 X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgIF9faXRlcmF0 b3JfY2F0ZWdvcnkoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwg Y2xhc3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgcGFpcjxfSW5wdXRJdGVyLCBf T3V0cHV0SXRlcj4KY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwgX091 dHB1dEl0ZXIgX19yZXN1bHQpIHsKICByZXR1cm4gX19jb3B5X24oX19maXJzdCwgX19jb3VudCwg X19yZXN1bHQpOwp9CgogCiAKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBf VHA+CnZvaWQgZmlsbChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwg Y29uc3QgX1RwJiBfX3ZhbHVlKSB7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2Zp cnN0KQogICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX091dHB1dEl0 ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIGZpbGxfbihfT3V0cHV0SXRl ciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSkgewogIGZvciAoIDsgX19u ID4gMDsgLS1fX24sICsrX19maXJzdCkKICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKICByZXR1cm4g X19maXJzdDsKfQoKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1 dEl0ZXIyPgpwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4gbWlzbWF0Y2goX0lucHV0SXRl cjEgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5w dXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X0lucHV0SXRlcjIgX19maXJzdDIpIHsKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiAq X19maXJzdDEgPT0gKl9fZmlyc3QyKSB7CiAgICArK19fZmlyc3QxOwogICAgKytfX2ZpcnN0MjsK ICB9CiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2ZpcnN0MSwgX19m aXJzdDIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIy LCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgpwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4g bWlzbWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpIHsK ICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwg Kl9fZmlyc3QyKSkgewogICAgKytfX2ZpcnN0MTsKICAgICsrX19maXJzdDI7CiAgfQogIHJldHVy biBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmlyc3QyKTsKfQoK dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KaW5saW5lIGJv b2wgZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAg ICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyKSB7CiAgZm9yICggOyBfX2ZpcnN0MSAh PSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgaWYgKCpfX2ZpcnN0MSAhPSAq X19maXJzdDIpCiAgICAgIHJldHVybiBmYWxzZTsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUg PGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0JpbmFyeVByZWRp Y2F0ZT4KaW5saW5lIGJvb2wgZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIx IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfQmluYXJ5 UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpIHsKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7 ICsrX19maXJzdDEsICsrX19maXJzdDIpCiAgICBpZiAoIV9fYmluYXJ5X3ByZWQoKl9fZmlyc3Qx LCAqX19maXJzdDIpKQogICAgICByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIHRydWU7Cn0KCiAKIAog Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgpib29sIGxl eGljb2dyYXBoaWNhbF9jb21wYXJlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBf X2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy LCBfSW5wdXRJdGVyMiBfX2xhc3QyKSB7CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYm IF9fZmlyc3QyICE9IF9fbGFzdDIKICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsK ICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYg KCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4g X19maXJzdDEgPT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfQ29tcGFyZT4KYm9v bCBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRl cjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp cnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf Q29tcGFyZSBfX2NvbXApIHsKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJz dDIgIT0gX19sYXN0MgogICAgICAgIDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikgewogICAgaWYg KF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYg KF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CiAg cmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKfQoKaW5s aW5lIGJvb2wgCmxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9f Zmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xh c3QxLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0 MiwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MikK ewogIGNvbnN0IHNpemVfdCBfX2xlbjEgPSBfX2xhc3QxIC0gX19maXJzdDE7CiAgY29uc3Qgc2l6 ZV90IF9fbGVuMiA9IF9fbGFzdDIgLSBfX2ZpcnN0MjsKICBjb25zdCBpbnQgX19yZXN1bHQgPSBt ZW1jbXAoX19maXJzdDEsIF9fZmlyc3QyLCBtaW4oX19sZW4xLCBfX2xlbjIpKTsKICByZXR1cm4g X19yZXN1bHQgIT0gMCA/IF9fcmVzdWx0IDwgMCA6IF9fbGVuMSA8IF9fbGVuMjsKfQoKaW5saW5l IGJvb2wgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29uc3QgY2hhciogX19maXJzdDEsIGNvbnN0 IGNoYXIqIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIqIF9fZmlyc3QyLCBjb25zdCBjaGFyKiBfX2xhc3QyKQp7CgogIHJldHVybiBsZXhpY29n cmFwaGljYWxfY29tcGFyZSgoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0MSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJz dDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciop IF9fbGFzdDIpOwoKCgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9J bnB1dEl0ZXIyPgppbnQgX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9JbnB1dEl0ZXIx IF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQp7CiAg d2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAg aWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAgICAgcmV0dXJuIC0xOwogICAgaWYgKCpfX2Zp cnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgcmV0dXJuIDE7CiAgICArK19fZmlyc3QxOwogICAgKytf X2ZpcnN0MjsKICB9CiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpIHsKICAgIHJldHVybiAhKF9f Zmlyc3QxID09IF9fbGFzdDEpOwogIH0KICBlbHNlIHsKICAgIHJldHVybiAtMTsKICB9Cn0KCmlu bGluZSBpbnQKX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KGNvbnN0IHVuc2lnbmVkIGNo YXIqIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu ZWQgY2hhciogX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVu c2lnbmVkIGNoYXIqIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgdW5zaWduZWQgY2hhciogX19sYXN0MikKewogIGNvbnN0IHB0cmRpZmZfdCBfX2xlbjEgPSBf X2xhc3QxIC0gX19maXJzdDE7CiAgY29uc3QgcHRyZGlmZl90IF9fbGVuMiA9IF9fbGFzdDIgLSBf X2ZpcnN0MjsKICBjb25zdCBpbnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEsIF9fZmlyc3Qy LCBtaW4oX19sZW4xLCBfX2xlbjIpKTsKICByZXR1cm4gX19yZXN1bHQgIT0gMCA/IF9fcmVzdWx0 IAogICAgICAgICAgICAgICAgICAgICAgIDogKF9fbGVuMSA9PSBfX2xlbjIgPyAwIDogKF9fbGVu MSA8IF9fbGVuMiA/IC0xIDogMSkpOwp9CgppbmxpbmUgaW50IApfX2xleGljb2dyYXBoaWNhbF9j b21wYXJlXzN3YXkoY29uc3QgY2hhciogX19maXJzdDEsIGNvbnN0IGNoYXIqIF9fbGFzdDEsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2ZpcnN0MiwgY29uc3Qg Y2hhciogX19sYXN0MikKewoKICByZXR1cm4gX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5 KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9f Zmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hh ciopIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25l ZCBjaGFyKikgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0 IHNpZ25lZCBjaGFyKikgX19sYXN0Mik7CgoKCgoKCn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ dGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CmludCBsZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5 KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19s YXN0MikKewogIHJldHVybiBfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoX19maXJzdDEs IF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKfQoKIAoKCgogCiAKIAojIDMwICIvb3B0L212 cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1LjMvLi4vLi4vLi4vLi4v aW5jbHVkZS9nKystMy92ZWN0b3IiIDIgMwoKCiMgMSAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxp Yi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3Rs X2NvbnN0cnVjdC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCiAK CiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgZGVzdHJveShfVHAqIF9fcG9p bnRlcikgewogIF9fcG9pbnRlci0+fl9UcCgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFz cyBfVDI+CmlubGluZSB2b2lkIGNvbnN0cnVjdChfVDEqIF9fcCwgY29uc3QgX1QyJiBfX3ZhbHVl KSB7CiAgbmV3IChfX3ApIF9UMShfX3ZhbHVlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMT4KaW5s aW5lIHZvaWQgY29uc3RydWN0KF9UMSogX19wKSB7CiAgbmV3IChfX3ApIF9UMSgpOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KaW5saW5lIHZvaWQKX19kZXN0cm95X2F1eChf Rm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBfX2ZhbHNl X3R5cGUpCnsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBkZXN0 cm95KCYqX19maXJzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgppbmxp bmUgdm9pZCBfX2Rlc3Ryb3lfYXV4KF9Gb3J3YXJkSXRlcmF0b3IsIF9Gb3J3YXJkSXRlcmF0b3Is IF9fdHJ1ZV90eXBlKSB7fQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNsYXNz IF9UcD4KaW5saW5lIHZvaWQKX19kZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0Zv cndhcmRJdGVyYXRvciBfX2xhc3QsIF9UcCopCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90 cmFpdHM8X1RwPjo6aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcgogICAgICAgICAgX1RyaXZpYWxfZGVz dHJ1Y3RvcjsKICBfX2Rlc3Ryb3lfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX1RyaXZpYWxfZGVzdHJ1 Y3RvcigpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CmlubGluZSB2b2lk IGRlc3Ryb3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFz dCkgewogIF9fZGVzdHJveShfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWVfdHlwZSggX19maXJzdCAp ICk7Cn0KCmlubGluZSB2b2lkIGRlc3Ryb3koY2hhciosIGNoYXIqKSB7fQppbmxpbmUgdm9pZCBk ZXN0cm95KHdjaGFyX3QqLCB3Y2hhcl90Kikge30KCiAKCgoKIAogCiAKIyAzMiAiL29wdC9tdnBs b2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2lu Y2x1ZGUvZysrLTMvdmVjdG9yIiAyIDMKCiMgMSAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9z cGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3Vu aW5pdGlhbGl6ZWQuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoK IAoKIAogCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+Cmlu bGluZSBfRm9yd2FyZEl0ZXIgCl9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfSW5wdXRJdGVyIF9f Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX0Zvcndh cmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpCnsK ICByZXR1cm4gY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPGNs YXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KX0ZvcndhcmRJdGVyIApfX3VuaW5p dGlhbGl6ZWRfY29weV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAg ICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkKewogIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9f cmVzdWx0OwogIHRyeSAgewogICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0 LCArK19fY3VyKQogICAgICBjb25zdHJ1Y3QoJipfX2N1ciwgKl9fZmlyc3QpOwogICAgcmV0dXJu IF9fY3VyOwogIH0KICBjYXRjaCguLi4pIHsgIGRlc3Ryb3koX19yZXN1bHQsIF9fY3VyKSA7IHRo cm93OyB9IDsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0 ZXIsIGNsYXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfY29weShf SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg ICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsIF9UcCopCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlw ZV90cmFpdHM8X1RwPjo6aXNfUE9EX3R5cGUgX0lzX1BPRDsKICByZXR1cm4gX191bmluaXRpYWxp emVkX2NvcHlfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9Jc19QT0QoKSk7Cn0KCnRl bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBfRm9y d2FyZEl0ZXIKICB1bmluaXRpYWxpemVkX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KQp7 CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZSggX19yZXN1bHQgKSAp Owp9CgppbmxpbmUgY2hhciogdW5pbml0aWFsaXplZF9jb3B5KGNvbnN0IGNoYXIqIF9fZmlyc3Qs IGNvbnN0IGNoYXIqIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy KiBfX3Jlc3VsdCkgewogIG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIF9fbGFzdCAtIF9fZmly c3QpOwogIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKaW5saW5lIHdj aGFyX3QqIAp1bmluaXRpYWxpemVkX2NvcHkoY29uc3Qgd2NoYXJfdCogX19maXJzdCwgY29uc3Qg d2NoYXJfdCogX19sYXN0LAogICAgICAgICAgICAgICAgICAgd2NoYXJfdCogX19yZXN1bHQpCnsK ICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBzaXplb2Yod2NoYXJfdCkgKiAoX19sYXN0IC0g X19maXJzdCkpOwogIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKIAoK dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0 ZXI+CnBhaXI8X0lucHV0SXRlciwgX0ZvcndhcmRJdGVyPgpfX3VuaW5pdGlhbGl6ZWRfY29weV9u KF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgICAgICAgICAgICAg ICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRl cmF0b3JfdGFnKQp7CiAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19yZXN1bHQ7CiAgdHJ5ICB7CiAg ICBmb3IgKCA7IF9fY291bnQgPiAwIDsgLS1fX2NvdW50LCArK19fZmlyc3QsICsrX19jdXIpIAog ICAgICBjb25zdHJ1Y3QoJipfX2N1ciwgKl9fZmlyc3QpOwogICAgcmV0dXJuIHBhaXI8X0lucHV0 SXRlciwgX0ZvcndhcmRJdGVyPihfX2ZpcnN0LCBfX2N1cik7CiAgfQogIGNhdGNoKC4uLikgeyAg ZGVzdHJveShfX3Jlc3VsdCwgX19jdXIpIDsgdGhyb3c7IH0gOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGlu ZSBwYWlyPF9SYW5kb21BY2Nlc3NJdGVyLCBfRm9yd2FyZEl0ZXI+Cl9fdW5pbml0aWFsaXplZF9j b3B5X24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAg ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg ICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpIHsKICBfUmFuZG9tQWNjZXNzSXRlciBfX2xh c3QgPSBfX2ZpcnN0ICsgX19jb3VudDsKICByZXR1cm4gcGFpcjxfUmFuZG9tQWNjZXNzSXRlciwg X0ZvcndhcmRJdGVyPigKICAgICAgICAgICAgICAgICBfX2xhc3QsCiAgICAgICAgICAgICAgICAg dW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpKTsKfQoKdGVtcGxh dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+Cmlu bGluZSBwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4KX191bmluaXRpYWxpemVkX2NvcHlf bihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgICAgICAgICAgICAg IF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkgewogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weV9u KF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIHBhaXI8 X0lucHV0SXRlciwgX0ZvcndhcmRJdGVyPgp1bmluaXRpYWxpemVkX2NvcHlfbihfSW5wdXRJdGVy IF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRl ciBfX3Jlc3VsdCkgewogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9fZmlyc3QsIF9f Y291bnQsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0 b3JfY2F0ZWdvcnkoIF9fZmlyc3QgKSApOwp9CgogCiAKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk SXRlciwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZApfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0Zv cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIAogICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQp7CiAgZmlsbChfX2ZpcnN0LCBf X2xhc3QsIF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4K dm9pZApfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3 YXJkSXRlciBfX2xhc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gs IF9fZmFsc2VfdHlwZSkKewogIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fZmlyc3Q7CiAgdHJ5ICB7 CiAgICBmb3IgKCA7IF9fY3VyICE9IF9fbGFzdDsgKytfX2N1cikKICAgICAgY29uc3RydWN0KCYq X19jdXIsIF9feCk7CiAgfQogIGNhdGNoKC4uLikgeyAgZGVzdHJveShfX2ZpcnN0LCBfX2N1cikg OyB0aHJvdzsgfSA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwg Y2xhc3MgX1RwMT4KaW5saW5lIHZvaWQgX191bmluaXRpYWxpemVkX2ZpbGwoX0ZvcndhcmRJdGVy IF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIg X19sYXN0LCBjb25zdCBfVHAmIF9feCwgX1RwMSopCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlw ZV90cmFpdHM8X1RwMT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgX191bmluaXRpYWxpemVkX2Zp bGxfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX194LCBfSXNfUE9EKCkpOwogICAgICAgICAgICAgICAg ICAgCn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZv aWQgdW5pbml0aWFsaXplZF9maWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwgCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCkKewogIF9fdW5pbml0aWFsaXplZF9maWxsKF9f Zmlyc3QsIF9fbGFzdCwgX194LCBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSApOwp9CgogCiAKdGVt cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4KaW5saW5l IF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19m aXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9f eCwgX190cnVlX3R5cGUpCnsKICByZXR1cm4gZmlsbF9uKF9fZmlyc3QsIF9fbiwgX194KTsKfQoK dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4KX0Zv cndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0 LCBfU2l6ZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBf X2ZhbHNlX3R5cGUpCnsKICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogIHRyeSAgewog ICAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2N1cikKICAgICAgY29uc3RydWN0KCYqX19j dXIsIF9feCk7CiAgICByZXR1cm4gX19jdXI7CiAgfQogIGNhdGNoKC4uLikgeyAgZGVzdHJveShf X2ZpcnN0LCBfX2N1cikgOyB0aHJvdzsgfSA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0 ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHAsIGNsYXNzIF9UcDE+CmlubGluZSBfRm9yd2FyZEl0 ZXIgCl9fdW5pbml0aWFsaXplZF9maWxsX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9f biwgY29uc3QgX1RwJiBfX3gsIF9UcDEqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJh aXRzPF9UcDE+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRf ZmlsbF9uX2F1eChfX2ZpcnN0LCBfX24sIF9feCwgX0lzX1BPRCgpKTsKfQoKdGVtcGxhdGUgPGNs YXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJk SXRlciAKdW5pbml0aWFsaXplZF9maWxsX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9f biwgY29uc3QgX1RwJiBfX3gpCnsKICByZXR1cm4gX191bmluaXRpYWxpemVkX2ZpbGxfbihfX2Zp cnN0LCBfX24sIF9feCwgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKIAogCgogCiAKIAog Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBf Rm9yd2FyZEl0ZXI+CmlubGluZSBfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2NvcHlfY29w eShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAg ICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwK ICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpCnsKICBfRm9y d2FyZEl0ZXIgX19taWQgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9f cmVzdWx0KTsKICB0cnkgIHsKICAgIHJldHVybiB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDIs IF9fbGFzdDIsIF9fbWlkKTsKICB9CiAgY2F0Y2goLi4uKSB7ICBkZXN0cm95KF9fcmVzdWx0LCBf X21pZCkgOyB0aHJvdzsgfSA7Cn0KCiAKIAogCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs IGNsYXNzIF9UcCwgY2xhc3MgX0lucHV0SXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRlciAKX191bmlu aXRpYWxpemVkX2ZpbGxfY29weShfRm9yd2FyZEl0ZXIgX19yZXN1bHQsIF9Gb3J3YXJkSXRlciBf X21pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwKICAgICAgICAg ICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0KQp7 CiAgdW5pbml0aWFsaXplZF9maWxsKF9fcmVzdWx0LCBfX21pZCwgX194KTsKICB0cnkgIHsKICAg IHJldHVybiB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX21pZCk7CiAgfQog IGNhdGNoKC4uLikgeyAgZGVzdHJveShfX3Jlc3VsdCwgX19taWQpIDsgdGhyb3c7IH0gOwp9Cgog CiAKIAp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFz cyBfVHA+CmlubGluZSB2b2lkCl9fdW5pbml0aWFsaXplZF9jb3B5X2ZpbGwoX0lucHV0SXRlciBf X2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9G b3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gpCnsKICBfRm9yd2FyZEl0ZXIgX19taWQyID0gdW5p bml0aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0Mik7CiAgdHJ5ICB7CiAg ICB1bmluaXRpYWxpemVkX2ZpbGwoX19taWQyLCBfX2xhc3QyLCBfX3gpOwogIH0KICBjYXRjaCgu Li4pIHsgIGRlc3Ryb3koX19maXJzdDIsIF9fbWlkMikgOyB0aHJvdzsgfSA7Cn0KCiAKCgoKIAog CiAKIyAzMyAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45 NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvdmVjdG9yIiAyIDMKCiMgMSAiL29wdC9tdnBs b2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2lu Y2x1ZGUvZysrLTMvc3RsX3ZlY3Rvci5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK IAoKCgoKCgogIAoKCgoKCgogCiAKIAogCiAKCgoKIAp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz cyBfQWxsb2NhdG9yLCBib29sIF9Jc1N0YXRpYz4KY2xhc3MgX1ZlY3Rvcl9hbGxvY19iYXNlIHsK cHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+ OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5 cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yOyB9Cgog IF9WZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgOiBfTV9k YXRhX2FsbG9jYXRvcihfX2EpLCBfTV9zdGFydCgwKSwgX01fZmluaXNoKDApLCBfTV9lbmRfb2Zf c3RvcmFnZSgwKSAKICB7fQogIApwcm90ZWN0ZWQ6CiAgYWxsb2NhdG9yX3R5cGUgX01fZGF0YV9h bGxvY2F0b3I7CiAgX1RwKiBfTV9zdGFydDsKICBfVHAqIF9NX2ZpbmlzaDsKICBfVHAqIF9NX2Vu ZF9vZl9zdG9yYWdlOwoKICBfVHAqIF9NX2FsbG9jYXRlKHNpemVfdCBfX24pCiAgICB7IHJldHVy biBfTV9kYXRhX2FsbG9jYXRvci5hbGxvY2F0ZShfX24pOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRl KF9UcCogX19wLCBzaXplX3QgX19uKQogICAgeyBpZiAoX19wKSBfTV9kYXRhX2FsbG9jYXRvci5k ZWFsbG9jYXRlKF9fcCwgX19uKTsgfQp9OwoKIAogCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz IF9BbGxvY2F0b3I+CmNsYXNzIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxvY2F0b3IsIHRy dWU+IHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxv Y2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2Nh dG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7 IH0KCiAgX1ZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikKICAgIDogX01f c3RhcnQoMCksIF9NX2ZpbmlzaCgwKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkgCiAge30KICAKcHJv dGVjdGVkOgogIF9UcCogX01fc3RhcnQ7CiAgX1RwKiBfTV9maW5pc2g7CiAgX1RwKiBfTV9lbmRf b2Zfc3RvcmFnZTsKCiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9j YXRvcj46Ol9BbGxvY190eXBlIF9BbGxvY190eXBlOwogIF9UcCogX01fYWxsb2NhdGUoc2l6ZV90 IF9fbikKICAgIHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZShfX24pOyB9CiAgdm9pZCBf TV9kZWFsbG9jYXRlKF9UcCogX19wLCBzaXplX3QgX19uKQogICAgeyBfQWxsb2NfdHlwZTo6ZGVh bGxvY2F0ZShfX3AsIF9fbik7fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j PgpzdHJ1Y3QgX1ZlY3Rvcl9iYXNlCiAgOiBwdWJsaWMgX1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwg X0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwg X0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgp7CiAgdHlwZWRlZiBfVmVjdG9yX2FsbG9jX2Jhc2U8 X1RwLCBfQWxsb2MsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8 X1RwLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CiAgICAgICAgICBfQmFzZTsKICB0eXBlZGVm IHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgX1ZlY3Rv cl9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7fQogIF9WZWN0 b3JfYmFzZShzaXplX3QgX19uLCBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9f YSkgewogICAgX01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgX01fZmluaXNoID0gX01f c3RhcnQ7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwogIH0KCiAgfl9W ZWN0b3JfYmFzZSgpIHsgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2Ug LSBfTV9zdGFydCk7IH0KfTsgICAgCgojIDE1MCAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9z cGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3Zl Y3Rvci5oIiAzCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9y PCBfVHAgPiAgPgpjbGFzcyB2ZWN0b3IgOiBwcm90ZWN0ZWQgX1ZlY3Rvcl9iYXNlPF9UcCwgX0Fs bG9jPiAKewpwcml2YXRlOgogIHR5cGVkZWYgX1ZlY3Rvcl9iYXNlPF9UcCwgX0FsbG9jPiBfQmFz ZTsKcHVibGljOgogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2YWx1ZV90eXBl KiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29uc3RfcG9pbnRlcjsKICB0 eXBlZGVmIHZhbHVlX3R5cGUqIGl0ZXJhdG9yOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSog Y29uc3RfaXRlcmF0b3I7CiAgdHlwZWRlZiB2YWx1ZV90eXBlJiByZWZlcmVuY2U7CiAgdHlwZWRl ZiBjb25zdCB2YWx1ZV90eXBlJiBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBzaXplX3Qgc2l6 ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKCiAgdHlwZWRlZiB0 eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9y X3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9CYXNlOjpnZXRfYWxsb2NhdG9y KCk7IH0KCgogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3Rf cmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJl dmVyc2VfaXRlcmF0b3I7CgoKCgoKCgpwcm90ZWN0ZWQ6CgogIHVzaW5nIF9CYXNlOjpfTV9hbGxv Y2F0ZTsKICB1c2luZyBfQmFzZTo6X01fZGVhbGxvY2F0ZTsKICB1c2luZyBfQmFzZTo6X01fc3Rh cnQ7CiAgdXNpbmcgX0Jhc2U6Ol9NX2ZpbmlzaDsKICB1c2luZyBfQmFzZTo6X01fZW5kX29mX3N0 b3JhZ2U7CgoKcHJvdGVjdGVkOgogIHZvaWQgX01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0 aW9uLCBjb25zdCBfVHAmIF9feCk7CiAgdm9pZCBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9z aXRpb24pOwoKcHVibGljOgogIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gX01fc3RhcnQ7IH0K ICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3N0YXJ0OyB9CiAgaXRl cmF0b3IgZW5kKCkgeyByZXR1cm4gX01fZmluaXNoOyB9CiAgY29uc3RfaXRlcmF0b3IgZW5kKCkg Y29uc3QgeyByZXR1cm4gX01fZmluaXNoOyB9CgogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkK ICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CiAgY29uc3RfcmV2ZXJzZV9p dGVyYXRvciByYmVnaW4oKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRv cihlbmQoKSk7IH0KICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKQogICAgeyByZXR1cm4gcmV2ZXJz ZV9pdGVyYXRvcihiZWdpbigpKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNv bnN0CiAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CgogIHNp emVfdHlwZSBzaXplKCkgY29uc3QKICAgIHsgcmV0dXJuIHNpemVfdHlwZShlbmQoKSAtIGJlZ2lu KCkpOyB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QKICAgIHsgcmV0dXJuIHNpemVfdHlw ZSgtMSkgLyBzaXplb2YoX1RwKTsgfQogIHNpemVfdHlwZSBjYXBhY2l0eSgpIGNvbnN0CiAgICB7 IHJldHVybiBzaXplX3R5cGUoX01fZW5kX29mX3N0b3JhZ2UgLSBiZWdpbigpKTsgfQogIGJvb2wg ZW1wdHkoKSBjb25zdAogICAgeyByZXR1cm4gYmVnaW4oKSA9PSBlbmQoKTsgfQoKICByZWZlcmVu Y2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKSB7IHJldHVybiAqKGJlZ2luKCkgKyBfX24pOyB9 CiAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgY29uc3QgeyByZXR1 cm4gKihiZWdpbigpICsgX19uKTsgfQoKICBleHBsaWNpdCB2ZWN0b3IoY29uc3QgYWxsb2NhdG9y X3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9CYXNlKF9fYSkge30KCiAgdmVj dG9yKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSwKICAgICAgICAgY29uc3QgYWxs b2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpIAogICAgOiBfQmFzZShfX24sIF9f YSkKICAgIHsgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwg X192YWx1ZSk7IH0KCiAgZXhwbGljaXQgdmVjdG9yKHNpemVfdHlwZSBfX24pCiAgICA6IF9CYXNl KF9fbiwgYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9m aWxsX24oX01fc3RhcnQsIF9fbiwgX1RwKCkpOyB9CgogIHZlY3Rvcihjb25zdCB2ZWN0b3I8X1Rw LCBfQWxsb2M+JiBfX3gpIAogICAgOiBfQmFzZShfX3guc2l6ZSgpLCBfX3guZ2V0X2FsbG9jYXRv cigpKQogICAgeyBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCksIF9f eC5lbmQoKSwgX01fc3RhcnQpOyB9CgoKICAgCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh dG9yPgogIHZlY3RvcihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xh c3QsCiAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgp KSA6IF9CYXNlKF9fYSkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJ dGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICBfTV9pbml0aWFsaXplX2F1eChfX2Zp cnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdl cj4KICB2b2lkIF9NX2luaXRpYWxpemVfYXV4KF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWx1 ZSwgX190cnVlX3R5cGUpIHsKICAgIF9NX3N0YXJ0ID0gX01fYWxsb2NhdGUoX19uKTsKICAgIF9N X2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX247IAogICAgX01fZmluaXNoID0gdW5pbml0 aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX192YWx1ZSk7CiAgfQoKICB0ZW1wbGF0ZSA8 Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9pbml0aWFsaXplX2F1eChfSW5wdXRJdGVy YXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICBfX2ZhbHNlX3R5cGUpIHsKICAgIF9NX3JhbmdlX2luaXRpYWxpemUoX19maXJzdCwgX19s YXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBfX2ZpcnN0ICkgKTsKICB9CgoKCgoKCgoKICB+dmVj dG9yKCkgeyBkZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOyB9CgogIHZlY3RvcjxfVHAsIF9B bGxvYz4mIG9wZXJhdG9yPShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpOwogIHZvaWQg cmVzZXJ2ZShzaXplX3R5cGUgX19uKSB7CiAgICBpZiAoY2FwYWNpdHkoKSA8IF9fbikgewogICAg ICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAgICAgaXRlcmF0b3IgX190 bXAgPSBfTV9hbGxvY2F0ZV9hbmRfY29weShfX24sIF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAg ICBkZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0 YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgICAgX01fc3RhcnQgPSBfX3Rt cDsKICAgICAgX01fZmluaXNoID0gX190bXAgKyBfX29sZF9zaXplOwogICAgICBfTV9lbmRfb2Zf c3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwogICAgfQogIH0KCiAgIAogICAKICAgCiAgIAoKICB2 b2lkIGFzc2lnbihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsKTsKCgogIAogIHRlbXBs YXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGFzc2lnbihfSW5wdXRJdGVyYXRvciBf X2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lz X2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgX01fYXNz aWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogIH0KCiAgdGVtcGxh dGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnRlZ2VyIF9f biwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQogICAgeyBhc3NpZ24oKHNpemVfdHlwZSkg X19uLCAoX1RwKSBfX3ZhbCk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CiAgdm9p ZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFz dCwgX19mYWxzZV90eXBlKQogICAgeyBfTV9hc3NpZ25fYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19p dGVyYXRvcl9jYXRlZ29yeSggX19maXJzdCApICk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1 dEl0ZXJhdG9yPgogIHZvaWQgX01fYXNzaWduX2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf SW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9y X3RhZyk7CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fYXNz aWduX2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7IAoKCgogIHJlZmVy ZW5jZSBmcm9udCgpIHsgcmV0dXJuICpiZWdpbigpOyB9CiAgY29uc3RfcmVmZXJlbmNlIGZyb250 KCkgY29uc3QgeyByZXR1cm4gKmJlZ2luKCk7IH0KICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJu ICooZW5kKCkgLSAxKTsgfQogIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3QgeyByZXR1cm4g KihlbmQoKSAtIDEpOyB9CgogIHZvaWQgcHVzaF9iYWNrKGNvbnN0IF9UcCYgX194KSB7CiAgICBp ZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICAgIGNvbnN0cnVjdChfTV9m aW5pc2gsIF9feCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9p bnNlcnRfYXV4KGVuZCgpLCBfX3gpOwogIH0KICB2b2lkIHB1c2hfYmFjaygpIHsKICAgIGlmIChf TV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsKICAgICAgY29uc3RydWN0KF9NX2Zpbmlz aCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4 KGVuZCgpKTsKICB9CiAgdm9pZCBzd2FwKHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCkgewogICAg IDo6c3dhcChfTV9zdGFydCwgX194Ll9NX3N0YXJ0KTsKICAgICA6OnN3YXAoX01fZmluaXNoLCBf X3guX01fZmluaXNoKTsKICAgICA6OnN3YXAoX01fZW5kX29mX3N0b3JhZ2UsIF9feC5fTV9lbmRf b2Zfc3RvcmFnZSk7CiAgfQoKICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwg Y29uc3QgX1RwJiBfX3gpIHsKICAgIHNpemVfdHlwZSBfX24gPSBfX3Bvc2l0aW9uIC0gYmVnaW4o KTsKICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UgJiYgX19wb3NpdGlvbiA9 PSBlbmQoKSkgewogICAgICBjb25zdHJ1Y3QoX01fZmluaXNoLCBfX3gpOwogICAgICArK19NX2Zp bmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChfX3Bvc2l0aW9uLCBfX3gp OwogICAgcmV0dXJuIGJlZ2luKCkgKyBfX247CiAgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRv ciBfX3Bvc2l0aW9uKSB7CiAgICBzaXplX3R5cGUgX19uID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7 CiAgICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRpb24gPT0g ZW5kKCkpIHsKICAgICAgY29uc3RydWN0KF9NX2ZpbmlzaCk7CiAgICAgICsrX01fZmluaXNoOwog ICAgfQogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KF9fcG9zaXRpb24pOwogICAgcmV0dXJu IGJlZ2luKCkgKyBfX247CiAgfQoKICAgCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y PgogIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf SW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8 X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgX01faW5zZXJ0X2Rpc3Bh dGNoKF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICB9CgogIHRlbXBsYXRl IDxjbGFzcyBfSW50ZWdlcj4KICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3Bv cywgX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAg ICBfX3RydWVfdHlwZSkgewogICAgaW5zZXJ0KF9fcG9zLCAoc2l6ZV90eXBlKSBfX24sIChfVHAp IF9fdmFsKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9N X2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAg ICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAgICBfTV9yYW5nZV9pbnNlcnQoX19w b3MsIF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeSggX19maXJzdCApICk7CiAg fQoKCgoKCiAgdm9pZCBpbnNlcnQgKGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25z dCBfVHAmIF9feCk7CgogIHZvaWQgcG9wX2JhY2soKSB7CiAgICAtLV9NX2ZpbmlzaDsKICAgIGRl c3Ryb3koX01fZmluaXNoKTsKICB9CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlv bikgewogICAgaWYgKF9fcG9zaXRpb24gKyAxICE9IGVuZCgpKQogICAgICBjb3B5KF9fcG9zaXRp b24gKyAxLCBfTV9maW5pc2gsIF9fcG9zaXRpb24pOwogICAgLS1fTV9maW5pc2g7CiAgICBkZXN0 cm95KF9NX2ZpbmlzaCk7CiAgICByZXR1cm4gX19wb3NpdGlvbjsKICB9CiAgaXRlcmF0b3IgZXJh c2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KSB7CiAgICBpdGVyYXRvciBfX2kg PSBjb3B5KF9fbGFzdCwgX01fZmluaXNoLCBfX2ZpcnN0KTsKICAgIGRlc3Ryb3koX19pLCBfTV9m aW5pc2gpOwogICAgX01fZmluaXNoID0gX01fZmluaXNoIC0gKF9fbGFzdCAtIF9fZmlyc3QpOwog ICAgcmV0dXJuIF9fZmlyc3Q7CiAgfQoKICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6 ZSwgY29uc3QgX1RwJiBfX3gpIHsKICAgIGlmIChfX25ld19zaXplIDwgc2l6ZSgpKSAKICAgICAg ZXJhc2UoYmVnaW4oKSArIF9fbmV3X3NpemUsIGVuZCgpKTsKICAgIGVsc2UKICAgICAgaW5zZXJ0 KGVuZCgpLCBfX25ld19zaXplIC0gc2l6ZSgpLCBfX3gpOwogIH0KICB2b2lkIHJlc2l6ZShzaXpl X3R5cGUgX19uZXdfc2l6ZSkgeyByZXNpemUoX19uZXdfc2l6ZSwgX1RwKCkpOyB9CiAgdm9pZCBj bGVhcigpIHsgZXJhc2UoYmVnaW4oKSwgZW5kKCkpOyB9Cgpwcm90ZWN0ZWQ6CgoKICB0ZW1wbGF0 ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICBpdGVyYXRvciBfTV9hbGxvY2F0ZV9hbmRfY29w eShzaXplX3R5cGUgX19uLCBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0 KQp7CiAgICBpdGVyYXRvciBfX3Jlc3VsdCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICB0cnkgIHsK ICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwogICAg ICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiAgICBjYXRjaCguLi4pIHsgIF9NX2RlYWxsb2NhdGUo X19yZXN1bHQsIF9fbikgOyB0aHJvdzsgfSA7CiAgfQojIDQ0MCAiL29wdC9tdnBsb2NhbC9saWIv Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr LTMvc3RsX3ZlY3Rvci5oIiAzCgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4K ICB2b2lkIF9NX3JhbmdlX2luaXRpYWxpemUoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgIAogICAg ICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIGlucHV0X2l0ZXJh dG9yX3RhZykKICB7CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAg ICAgIHB1c2hfYmFjaygqX19maXJzdCk7CiAgfQoKICAgCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3 YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbml0aWFsaXplKF9Gb3J3YXJkSXRlcmF0b3Ig X19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xh c3QsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogIHsKICAgIHNpemVfdHlwZSBfX24gPSAwOwogICAg ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX24pOwogICAgX01fc3RhcnQgPSBfTV9hbGxvY2F0 ZShfX24pOwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsKICAgIF9NX2Zp bmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9NX3N0YXJ0KTsKICB9 CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luc2Vy dChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBf X2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgaW5w dXRfaXRlcmF0b3JfdGFnKTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAg dm9pZCBfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAg ICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7CgoKfTsKCnRlbXBsYXRl IDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgCm9wZXJhdG9yPT0oY29uc3Qg dmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kp CnsKICByZXR1cm4gX194LnNpemUoKSA9PSBfX3kuc2l6ZSgpICYmCiAgICAgICAgIGVxdWFsKF9f eC5iZWdpbigpLCBfX3guZW5kKCksIF9feS5iZWdpbigpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9U cCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCAKb3BlcmF0b3I8KGNvbnN0IHZlY3RvcjxfVHAs IF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KQp7CiAgcmV0dXJu IGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksIAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3kuYmVnaW4oKSwgX195LmVuZCgpKTsKfQoKCgp0 ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSB2b2lkIHN3YXAodmVjdG9y PF9UcCwgX0FsbG9jPiYgX194LCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICBfX3guc3dh cChfX3kpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KdmVjdG9yPF9U cCxfQWxsb2M+JiAKdmVjdG9yPF9UcCxfQWxsb2M+OjpvcGVyYXRvcj0oY29uc3QgdmVjdG9yPF9U cCwgX0FsbG9jPiYgX194KQp7CiAgaWYgKCZfX3ggIT0gdGhpcykgewogICAgY29uc3Qgc2l6ZV90 eXBlIF9feGxlbiA9IF9feC5zaXplKCk7CiAgICBpZiAoX194bGVuID4gY2FwYWNpdHkoKSkgewog ICAgICBpdGVyYXRvciBfX3RtcCA9IF9NX2FsbG9jYXRlX2FuZF9jb3B5KF9feGxlbiwgX194LmJl Z2luKCksIF9feC5lbmQoKSk7CiAgICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAg ICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQp OwogICAgICBfTV9zdGFydCA9IF9fdG1wOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0 YXJ0ICsgX194bGVuOwogICAgfQogICAgZWxzZSBpZiAoc2l6ZSgpID49IF9feGxlbikgewogICAg ICBpdGVyYXRvciBfX2kgPSBjb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCksIGJlZ2luKCkpOwog ICAgICBkZXN0cm95KF9faSwgX01fZmluaXNoKTsKICAgIH0KICAgIGVsc2UgewogICAgICBjb3B5 KF9feC5iZWdpbigpLCBfX3guYmVnaW4oKSArIHNpemUoKSwgX01fc3RhcnQpOwogICAgICB1bmlu aXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCkgKyBzaXplKCksIF9feC5lbmQoKSwgX01fZmluaXNo KTsKICAgIH0KICAgIF9NX2ZpbmlzaCA9IF9NX3N0YXJ0ICsgX194bGVuOwogIH0KICByZXR1cm4g KnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCB2ZWN0b3I8 X1RwLCBfQWxsb2M+Ojphc3NpZ24oc2l6ZV90IF9fbiwgY29uc3QgdmFsdWVfdHlwZSYgX192YWwp IHsKICBpZiAoX19uID4gY2FwYWNpdHkoKSkgewogICAgdmVjdG9yPF9UcCwgX0FsbG9jPiBfX3Rt cChfX24sIF9fdmFsLCBnZXRfYWxsb2NhdG9yKCkpOwogICAgX190bXAuc3dhcCgqdGhpcyk7CiAg fQogIGVsc2UgaWYgKF9fbiA+IHNpemUoKSkgewogICAgZmlsbChiZWdpbigpLCBlbmQoKSwgX192 YWwpOwogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fZmluaXNoLCBfX24g LSBzaXplKCksIF9fdmFsKTsKICB9CiAgZWxzZQogICAgZXJhc2UoZmlsbF9uKGJlZ2luKCksIF9f biwgX192YWwpLCBlbmQoKSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j PiB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4Kdm9pZCB2ZWN0b3I8X1RwLCBfQWxsb2M+Ojpf TV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsK ICBpdGVyYXRvciBfX2N1ciA9IGJlZ2luKCk7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAm JiBfX2N1ciAhPSBlbmQoKTsgKytfX2N1ciwgKytfX2ZpcnN0KQogICAgKl9fY3VyID0gKl9fZmly c3Q7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgZXJhc2UoX19jdXIsIGVuZCgpKTsKICBl bHNlCiAgICBpbnNlcnQoZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4Kdm9pZAp2 ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9hc3NpZ25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf Rm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv cndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgc2l6ZV90eXBlIF9fbGVuID0gMDsKICBkaXN0YW5jZShf X2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsKCiAgaWYgKF9fbGVuID4gY2FwYWNpdHkoKSkgewogICAg aXRlcmF0b3IgX190bXAgPSBfTV9hbGxvY2F0ZV9hbmRfY29weShfX2xlbiwgX19maXJzdCwgX19s YXN0KTsKICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICBfTV9kZWFsbG9jYXRl KF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgIF9NX3N0YXJ0ID0g X190bXA7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX2ZpbmlzaCA9IF9NX3N0YXJ0ICsgX19s ZW47CiAgfQogIGVsc2UgaWYgKHNpemUoKSA+PSBfX2xlbikgewogICAgaXRlcmF0b3IgX19uZXdf ZmluaXNoID0gY29weShfX2ZpcnN0LCBfX2xhc3QsIF9NX3N0YXJ0KTsKICAgIGRlc3Ryb3koX19u ZXdfZmluaXNoLCBfTV9maW5pc2gpOwogICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoOwogIH0K ICBlbHNlIHsKICAgIF9Gb3J3YXJkSXRlciBfX21pZCA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9f bWlkLCBzaXplKCkpOwogICAgY29weShfX2ZpcnN0LCBfX21pZCwgX01fc3RhcnQpOwogICAgX01f ZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9fbWlkLCBfX2xhc3QsIF9NX2ZpbmlzaCk7CiAg fQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCAKdmVjdG9yPF9U cCwgX0FsbG9jPjo6X01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAm IF9feCkKewogIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsKICAgIGNvbnN0 cnVjdChfTV9maW5pc2gsICooX01fZmluaXNoIC0gMSkpOwogICAgKytfTV9maW5pc2g7CiAgICBf VHAgX194X2NvcHkgPSBfX3g7CiAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9NX2Zpbmlz aCAtIDIsIF9NX2ZpbmlzaCAtIDEpOwogICAgKl9fcG9zaXRpb24gPSBfX3hfY29weTsKICB9CiAg ZWxzZSB7CiAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAgIGNvbnN0 IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgIT0gMCA/IDIgKiBfX29sZF9zaXplIDogMTsK ICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fYWxsb2NhdGUoX19sZW4pOwogICAgaXRlcmF0 b3IgX19uZXdfZmluaXNoID0gX19uZXdfc3RhcnQ7CiAgICB0cnkgIHsKICAgICAgX19uZXdfZmlu aXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9NX3N0YXJ0LCBfX3Bvc2l0aW9uLCBfX25ld19zdGFy dCk7CiAgICAgIGNvbnN0cnVjdChfX25ld19maW5pc2gsIF9feCk7CiAgICAgICsrX19uZXdfZmlu aXNoOwogICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwg X01fZmluaXNoLCBfX25ld19maW5pc2gpOwogICAgfQogICAgY2F0Y2goLi4uKSB7ICAoZGVzdHJv eShfX25ld19zdGFydCxfX25ld19maW5pc2gpLCAKICAgICAgICAgICAgICAgICAgX01fZGVhbGxv Y2F0ZShfX25ld19zdGFydCxfX2xlbikpIDsgdGhyb3c7IH0gOwogICAgZGVzdHJveShiZWdpbigp LCBlbmQoKSk7CiAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAt IF9NX3N0YXJ0KTsKICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQ7CiAgICBfTV9maW5pc2ggPSBf X25ld19maW5pc2g7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0ICsgX19sZW47 CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgCnZlY3Rvcjxf VHAsIF9BbGxvYz46Ol9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbikKewogIGlmIChf TV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsKICAgIGNvbnN0cnVjdChfTV9maW5pc2gs ICooX01fZmluaXNoIC0gMSkpOwogICAgKytfTV9maW5pc2g7CiAgICBjb3B5X2JhY2t3YXJkKF9f cG9zaXRpb24sIF9NX2ZpbmlzaCAtIDIsIF9NX2ZpbmlzaCAtIDEpOwogICAgKl9fcG9zaXRpb24g PSBfVHAoKTsKICB9CiAgZWxzZSB7CiAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNp emUoKTsKICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgIT0gMCA/IDIgKiBf X29sZF9zaXplIDogMTsKICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fYWxsb2NhdGUoX19s ZW4pOwogICAgaXRlcmF0b3IgX19uZXdfZmluaXNoID0gX19uZXdfc3RhcnQ7CiAgICB0cnkgIHsK ICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9NX3N0YXJ0LCBfX3Bvc2l0 aW9uLCBfX25ld19zdGFydCk7CiAgICAgIGNvbnN0cnVjdChfX25ld19maW5pc2gpOwogICAgICAr K19fbmV3X2ZpbmlzaDsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9f cG9zaXRpb24sIF9NX2ZpbmlzaCwgX19uZXdfZmluaXNoKTsKICAgIH0KICAgIGNhdGNoKC4uLikg eyAgKGRlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKSwgCiAgICAgICAgICAgICAgICAg IF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQsX19sZW4pKSA7IHRocm93OyB9IDsKICAgIGRlc3Ry b3koYmVnaW4oKSwgZW5kKCkpOwogICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29m X3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0OwogICAgX01f ZmluaXNoID0gX19uZXdfZmluaXNoOwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFy dCArIF9fbGVuOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lk IHZlY3RvcjxfVHAsIF9BbGxvYz46Omluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5 cGUgX19uLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gp CnsKICBpZiAoX19uICE9IDApIHsKICAgIGlmIChzaXplX3R5cGUoX01fZW5kX29mX3N0b3JhZ2Ug LSBfTV9maW5pc2gpID49IF9fbikgewogICAgICBfVHAgX194X2NvcHkgPSBfX3g7CiAgICAgIGNv bnN0IHNpemVfdHlwZSBfX2VsZW1zX2FmdGVyID0gX01fZmluaXNoIC0gX19wb3NpdGlvbjsKICAg ICAgaXRlcmF0b3IgX19vbGRfZmluaXNoID0gX01fZmluaXNoOwogICAgICBpZiAoX19lbGVtc19h ZnRlciA+IF9fbikgewogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfTV9maW5pc2ggLSBfX24s IF9NX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uOwogICAgICAg IGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5p c2gpOwogICAgICAgIGZpbGwoX19wb3NpdGlvbiwgX19wb3NpdGlvbiArIF9fbiwgX194X2NvcHkp OwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2Zp bmlzaCwgX19uIC0gX19lbGVtc19hZnRlciwgX194X2NvcHkpOwogICAgICAgIF9NX2ZpbmlzaCAr PSBfX24gLSBfX2VsZW1zX2FmdGVyOwogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0 aW9uLCBfX29sZF9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fZWxl bXNfYWZ0ZXI7CiAgICAgICAgZmlsbChfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9feF9jb3B5 KTsKICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9z aXplID0gc2l6ZSgpOyAgICAgICAgCiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xk X3NpemUgKyBtYXgoX19vbGRfc2l6ZSwgX19uKTsKICAgICAgaXRlcmF0b3IgX19uZXdfc3RhcnQg PSBfTV9hbGxvY2F0ZShfX2xlbik7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaCA9IF9fbmV3 X3N0YXJ0OwogICAgICB0cnkgIHsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVk X2NvcHkoX01fc3RhcnQsIF9fcG9zaXRpb24sIF9fbmV3X3N0YXJ0KTsKICAgICAgICBfX25ld19m aW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfX25ld19maW5pc2gsIF9fbiwgX194KTsKICAg ICAgICBfX25ld19maW5pc2gKICAgICAgICAgID0gdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRp b24sIF9NX2ZpbmlzaCwgX19uZXdfZmluaXNoKTsKICAgICAgfQogICAgICBjYXRjaCguLi4pIHsg IChkZXN0cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCksIAogICAgICAgICAgICAgICAgICAg IF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQsX19sZW4pKSA7IHRocm93OyB9IDsKICAgICAgZGVz dHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwg X01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3Rh cnQ7CiAgICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgICAgX01fZW5kX29mX3N0b3Jh Z2UgPSBfX25ld19zdGFydCArIF9fbGVuOwogICAgfQogIH0KfQoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4Kdm9pZCAK dmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCAKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3Qs IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3Jf dGFnKQp7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KSB7CiAgICBfX3Bv cyA9IGluc2VydChfX3BvcywgKl9fZmlyc3QpOwogICAgKytfX3BvczsKICB9Cn0KCnRlbXBsYXRl IDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0 b3I+CnZvaWQgCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX3JhbmdlX2luc2VydChpdGVyYXRvciBf X3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJ dGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zv cndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKewogIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAg c2l6ZV90eXBlIF9fbiA9IDA7CiAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbik7CiAg ICBpZiAoc2l6ZV90eXBlKF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fZmluaXNoKSA+PSBfX24pIHsK ICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fZWxlbXNfYWZ0ZXIgPSBfTV9maW5pc2ggLSBfX3Bvc2l0 aW9uOwogICAgICBpdGVyYXRvciBfX29sZF9maW5pc2ggPSBfTV9maW5pc2g7CiAgICAgIGlmIChf X2VsZW1zX2FmdGVyID4gX19uKSB7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9NX2Zpbmlz aCAtIF9fbiwgX01fZmluaXNoLCBfTV9maW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX247 CiAgICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2ggLSBfX24sIF9f b2xkX2ZpbmlzaCk7CiAgICAgICAgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcG9zaXRpb24pOwog ICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2Zp cnN0OwogICAgICAgIGFkdmFuY2UoX19taWQsIF9fZWxlbXNfYWZ0ZXIpOwogICAgICAgIHVuaW5p dGlhbGl6ZWRfY29weShfX21pZCwgX19sYXN0LCBfTV9maW5pc2gpOwogICAgICAgIF9NX2Zpbmlz aCArPSBfX24gLSBfX2VsZW1zX2FmdGVyOwogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3Bv c2l0aW9uLCBfX29sZF9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9f ZWxlbXNfYWZ0ZXI7CiAgICAgICAgY29weShfX2ZpcnN0LCBfX21pZCwgX19wb3NpdGlvbik7CiAg ICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9 IHNpemUoKTsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19vbGRfc2l6ZSArIG1heChf X29sZF9zaXplLCBfX24pOwogICAgICBpdGVyYXRvciBfX25ld19zdGFydCA9IF9NX2FsbG9jYXRl KF9fbGVuKTsKICAgICAgaXRlcmF0b3IgX19uZXdfZmluaXNoID0gX19uZXdfc3RhcnQ7CiAgICAg IHRyeSAgewogICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfTV9zdGFy dCwgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQpOwogICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5p dGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fbmV3X2ZpbmlzaCk7CiAgICAgICAgX19u ZXdfZmluaXNoCiAgICAgICAgICA9IHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfTV9m aW5pc2gsIF9fbmV3X2ZpbmlzaCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKSB7ICAoZGVzdHJv eShfX25ld19zdGFydCxfX25ld19maW5pc2gpLCAKICAgICAgICAgICAgICAgICAgICBfTV9kZWFs bG9jYXRlKF9fbmV3X3N0YXJ0LF9fbGVuKSkgOyB0aHJvdzsgfSA7CiAgICAgIGRlc3Ryb3koX01f c3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9v Zl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0OwogICAg ICBfTV9maW5pc2ggPSBfX25ld19maW5pc2g7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19u ZXdfc3RhcnQgKyBfX2xlbjsKICAgIH0KICB9Cn0KCiMgODEwICIvb3B0L212cGxvY2FsL2xpYi9n Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKyst My9zdGxfdmVjdG9yLmgiIDMKCgoKCgoKCiAgCgoKCiAKIAogCiMgMzQgIi9vcHQvbXZwbG9jYWwv bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl L2crKy0zL3ZlY3RvciIgMiAzCgojIDEgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMt c3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9idmVjdG9y LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAgCgpzdGF0aWMgY29u c3QgaW50IF9fV09SRF9CSVQgPSBpbnQoOCAqc2l6ZW9mKHVuc2lnbmVkIGludCkpOwoKCgoKCgpz dHJ1Y3QgX0JpdF9yZWZlcmVuY2UgewogIHVuc2lnbmVkIGludCogX01fcDsKICB1bnNpZ25lZCBp bnQgX01fbWFzazsKICBfQml0X3JlZmVyZW5jZSh1bnNpZ25lZCBpbnQqIF9feCwgdW5zaWduZWQg aW50IF9feSkgCiAgICA6IF9NX3AoX194KSwgX01fbWFzayhfX3kpIHt9CgpwdWJsaWM6CiAgX0Jp dF9yZWZlcmVuY2UoKSA6IF9NX3AoMCksIF9NX21hc2soMCkge30KICBvcGVyYXRvciBib29sKCkg Y29uc3QgeyByZXR1cm4gISghKCpfTV9wICYgX01fbWFzaykpOyB9CiAgX0JpdF9yZWZlcmVuY2Um IG9wZXJhdG9yPShib29sIF9feCkKICB7CiAgICBpZiAoX194KSAgKl9NX3AgfD0gX01fbWFzazsK ICAgIGVsc2UgICAgICAqX01fcCAmPSB+X01fbWFzazsKICAgIHJldHVybiAqdGhpczsKICB9CiAg X0JpdF9yZWZlcmVuY2UmIG9wZXJhdG9yPShjb25zdCBfQml0X3JlZmVyZW5jZSYgX194KSAKICAg IHsgcmV0dXJuICp0aGlzID0gYm9vbChfX3gpOyB9CiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9C aXRfcmVmZXJlbmNlJiBfX3gpIGNvbnN0CiAgICB7IHJldHVybiBib29sKCp0aGlzKSA9PSBib29s KF9feCk7IH0KICBib29sIG9wZXJhdG9yPChjb25zdCBfQml0X3JlZmVyZW5jZSYgX194KSBjb25z dCB7CiAgICByZXR1cm4gIWJvb2woKnRoaXMpICYmIGJvb2woX194KTsKICB9CiAgdm9pZCBmbGlw KCkgeyAqX01fcCBePSBfTV9tYXNrOyB9Cn07CgppbmxpbmUgdm9pZCBzd2FwKF9CaXRfcmVmZXJl bmNlIF9feCwgX0JpdF9yZWZlcmVuY2UgX195KQp7CiAgYm9vbCBfX3RtcCA9IF9feDsKICBfX3gg PSBfX3k7CiAgX195ID0gX190bXA7Cn0KCnN0cnVjdCBfQml0X2l0ZXJhdG9yIDogcHVibGljIHJh bmRvbV9hY2Nlc3NfaXRlcmF0b3I8Ym9vbCwgcHRyZGlmZl90PiB7CiAgdHlwZWRlZiBfQml0X3Jl ZmVyZW5jZSAgcmVmZXJlbmNlOwogIHR5cGVkZWYgX0JpdF9yZWZlcmVuY2UqIHBvaW50ZXI7CiAg dHlwZWRlZiBfQml0X2l0ZXJhdG9yICAgaXRlcmF0b3I7CgogIHVuc2lnbmVkIGludCogX01fcDsK ICB1bnNpZ25lZCBpbnQgX01fb2Zmc2V0OwogIHZvaWQgYnVtcF91cCgpIHsKICAgIGlmIChfTV9v ZmZzZXQrKyA9PSBfX1dPUkRfQklUIC0gMSkgewogICAgICBfTV9vZmZzZXQgPSAwOwogICAgICAr K19NX3A7CiAgICB9CiAgfQogIHZvaWQgYnVtcF9kb3duKCkgewogICAgaWYgKF9NX29mZnNldC0t ID09IDApIHsKICAgICAgX01fb2Zmc2V0ID0gX19XT1JEX0JJVCAtIDE7CiAgICAgIC0tX01fcDsK ICAgIH0KICB9CgogIF9CaXRfaXRlcmF0b3IoKSA6IF9NX3AoMCksIF9NX29mZnNldCgwKSB7fQog IF9CaXRfaXRlcmF0b3IodW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpIAogICAg OiBfTV9wKF9feCksIF9NX29mZnNldChfX3kpIHt9CiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNv bnN0IHsgcmV0dXJuIHJlZmVyZW5jZShfTV9wLCAxVSA8PCBfTV9vZmZzZXQpOyB9CiAgaXRlcmF0 b3ImIG9wZXJhdG9yKysoKSB7CiAgICBidW1wX3VwKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQog IGl0ZXJhdG9yIG9wZXJhdG9yKysoaW50KSB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwog ICAgYnVtcF91cCgpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRvciYgb3BlcmF0b3It LSgpIHsKICAgIGJ1bXBfZG93bigpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpdGVyYXRvciBv cGVyYXRvci0tKGludCkgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIGJ1bXBfZG93 bigpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRvciYgb3BlcmF0b3IrPShkaWZmZXJl bmNlX3R5cGUgX19pKSB7CiAgICBkaWZmZXJlbmNlX3R5cGUgX19uID0gX19pICsgX01fb2Zmc2V0 OwogICAgX01fcCArPSBfX24gLyBfX1dPUkRfQklUOwogICAgX19uID0gX19uICUgX19XT1JEX0JJ VDsKICAgIGlmIChfX24gPCAwKSB7CiAgICAgIF9NX29mZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9f biArIF9fV09SRF9CSVQ7CiAgICAgIC0tX01fcDsKICAgIH0gZWxzZQogICAgICBfTV9vZmZzZXQg PSAodW5zaWduZWQgaW50KSBfX247CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yJiBv cGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgICp0aGlzICs9IC1fX2k7CiAgICBy ZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19p KSBjb25zdCB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wICs9 IF9faTsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0 IHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgLT0gX19pOwog IH0KICBkaWZmZXJlbmNlX3R5cGUgb3BlcmF0b3ItKGl0ZXJhdG9yIF9feCkgY29uc3QgewogICAg cmV0dXJuIF9fV09SRF9CSVQgKiAoX01fcCAtIF9feC5fTV9wKSArIF9NX29mZnNldCAtIF9feC5f TV9vZmZzZXQ7CiAgfQogIHJlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX2kp IHsgcmV0dXJuICooKnRoaXMgKyBfX2kpOyB9CiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJh dG9yJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV9wID09IF9feC5fTV9wICYmIF9NX29mZnNl dCA9PSBfX3guX01fb2Zmc2V0OwogIH0KICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3Im IF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3AgIT0gX194Ll9NX3AgfHwgX01fb2Zmc2V0ICE9 IF9feC5fTV9vZmZzZXQ7CiAgfQogIGJvb2wgb3BlcmF0b3I8KGl0ZXJhdG9yIF9feCkgY29uc3Qg ewogICAgcmV0dXJuIF9NX3AgPCBfX3guX01fcCB8fCAoX01fcCA9PSBfX3guX01fcCAmJiBfTV9v ZmZzZXQgPCBfX3guX01fb2Zmc2V0KTsKICB9Cn07CgpzdHJ1Y3QgX0JpdF9jb25zdF9pdGVyYXRv cgogIDogcHVibGljIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3I8Ym9vbCwgcHRyZGlmZl90Pgp7CiAg dHlwZWRlZiBib29sICAgICAgICAgICAgICAgICByZWZlcmVuY2U7CiAgdHlwZWRlZiBib29sICAg ICAgICAgICAgICAgICBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBib29sKiAgICAg ICAgICBwb2ludGVyOwogIHR5cGVkZWYgX0JpdF9jb25zdF9pdGVyYXRvciAgY29uc3RfaXRlcmF0 b3I7CgogIHVuc2lnbmVkIGludCogX01fcDsKICB1bnNpZ25lZCBpbnQgX01fb2Zmc2V0OwogIHZv aWQgYnVtcF91cCgpIHsKICAgIGlmIChfTV9vZmZzZXQrKyA9PSBfX1dPUkRfQklUIC0gMSkgewog ICAgICBfTV9vZmZzZXQgPSAwOwogICAgICArK19NX3A7CiAgICB9CiAgfQogIHZvaWQgYnVtcF9k b3duKCkgewogICAgaWYgKF9NX29mZnNldC0tID09IDApIHsKICAgICAgX01fb2Zmc2V0ID0gX19X T1JEX0JJVCAtIDE7CiAgICAgIC0tX01fcDsKICAgIH0KICB9CgogIF9CaXRfY29uc3RfaXRlcmF0 b3IoKSA6IF9NX3AoMCksIF9NX29mZnNldCgwKSB7fQogIF9CaXRfY29uc3RfaXRlcmF0b3IodW5z aWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpIAogICAgOiBfTV9wKF9feCksIF9NX29m ZnNldChfX3kpIHt9CiAgX0JpdF9jb25zdF9pdGVyYXRvcihjb25zdCBfQml0X2l0ZXJhdG9yJiBf X3gpIAogICAgOiBfTV9wKF9feC5fTV9wKSwgX01fb2Zmc2V0KF9feC5fTV9vZmZzZXQpIHt9CiAg Y29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsKICAgIHJldHVybiBfQml0X3JlZmVy ZW5jZShfTV9wLCAxVSA8PCBfTV9vZmZzZXQpOwogIH0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0 b3IrKygpIHsKICAgIGJ1bXBfdXAoKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgY29uc3RfaXRl cmF0b3Igb3BlcmF0b3IrKyhpbnQpIHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7 CiAgICBidW1wX3VwKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGNvbnN0X2l0ZXJhdG9yJiBv cGVyYXRvci0tKCkgewogICAgYnVtcF9kb3duKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGNv bnN0X2l0ZXJhdG9yIG9wZXJhdG9yLS0oaW50KSB7CiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9 ICp0aGlzOwogICAgYnVtcF9kb3duKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGNvbnN0X2l0 ZXJhdG9yJiBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgIGRpZmZlcmVuY2Vf dHlwZSBfX24gPSBfX2kgKyBfTV9vZmZzZXQ7CiAgICBfTV9wICs9IF9fbiAvIF9fV09SRF9CSVQ7 CiAgICBfX24gPSBfX24gJSBfX1dPUkRfQklUOwogICAgaWYgKF9fbiA8IDApIHsKICAgICAgX01f b2Zmc2V0ID0gKHVuc2lnbmVkIGludCkgX19uICsgX19XT1JEX0JJVDsKICAgICAgLS1fTV9wOwog ICAgfSBlbHNlCiAgICAgIF9NX29mZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9fbjsKICAgIHJldHVy biAqdGhpczsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBl IF9faSkgewogICAgKnRoaXMgKz0gLV9faTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgY29uc3Rf aXRlcmF0b3Igb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsKICAgIGNvbnN0 X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgKz0gX19pOwogIH0KICBj b25zdF9pdGVyYXRvciBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9faSkgY29uc3QgewogICAg Y29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIHJldHVybiBfX3RtcCAtPSBfX2k7CiAg fQogIGRpZmZlcmVuY2VfdHlwZSBvcGVyYXRvci0oY29uc3RfaXRlcmF0b3IgX194KSBjb25zdCB7 CiAgICByZXR1cm4gX19XT1JEX0JJVCAqIChfTV9wIC0gX194Ll9NX3ApICsgX01fb2Zmc2V0IC0g X194Ll9NX29mZnNldDsKICB9CiAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5j ZV90eXBlIF9faSkgeyAKICAgIHJldHVybiAqKCp0aGlzICsgX19pKTsgCiAgfQogIGJvb2wgb3Bl cmF0b3I9PShjb25zdCBjb25zdF9pdGVyYXRvciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01f cCA9PSBfX3guX01fcCAmJiBfTV9vZmZzZXQgPT0gX194Ll9NX29mZnNldDsKICB9CiAgYm9vbCBv cGVyYXRvciE9KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBf TV9wICE9IF9feC5fTV9wIHx8IF9NX29mZnNldCAhPSBfX3guX01fb2Zmc2V0OwogIH0KICBib29s IG9wZXJhdG9yPChjb25zdF9pdGVyYXRvciBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV9wIDwg X194Ll9NX3AgfHwgKF9NX3AgPT0gX194Ll9NX3AgJiYgX01fb2Zmc2V0IDwgX194Ll9NX29mZnNl dCk7CiAgfQp9OwoKIAogCgoKCiAKdGVtcGxhdGUgPGNsYXNzIF9BbGxvY2F0b3IsIGJvb2wgX19p c19zdGF0aWM+CmNsYXNzIF9CdmVjdG9yX2FsbG9jX2Jhc2UgewpwdWJsaWM6CiAgdHlwZWRlZiB0 eXBlbmFtZSBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQog ICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigp IGNvbnN0IHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yOyB9CgogIF9CdmVjdG9yX2FsbG9jX2Jh c2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgIDogX01fZGF0YV9hbGxvY2F0b3IoX19h KSwgX01fc3RhcnQoKSwgX01fZmluaXNoKCksIF9NX2VuZF9vZl9zdG9yYWdlKDApIHt9Cgpwcm90 ZWN0ZWQ6CiAgdW5zaWduZWQgaW50KiBfTV9iaXRfYWxsb2Moc2l6ZV90IF9fbikgCiAgICB7IHJl dHVybiBfTV9kYXRhX2FsbG9jYXRvci5hbGxvY2F0ZSgoX19uICsgX19XT1JEX0JJVCAtIDEpL19f V09SRF9CSVQpOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlKCkgewogICAgaWYgKF9NX3N0YXJ0Ll9N X3ApCiAgICAgIF9NX2RhdGFfYWxsb2NhdG9yLmRlYWxsb2NhdGUoX01fc3RhcnQuX01fcCwgCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9z dGFydC5fTV9wKTsKICB9ICAKCiAgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czx1bnNpZ25lZCBpbnQs IF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZSAKICAgICAgICAgIF9NX2RhdGFfYWxsb2NhdG9y OwogIF9CaXRfaXRlcmF0b3IgX01fc3RhcnQ7CiAgX0JpdF9pdGVyYXRvciBfTV9maW5pc2g7CiAg dW5zaWduZWQgaW50KiBfTV9lbmRfb2Zfc3RvcmFnZTsKfTsKCiAKdGVtcGxhdGUgPGNsYXNzIF9B bGxvY2F0b3I+CmNsYXNzIF9CdmVjdG9yX2FsbG9jX2Jhc2U8X0FsbG9jYXRvciwgdHJ1ZT4gewpw dWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvY2F0b3I+ OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5 cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0KCiAg X0J2ZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYpCiAgICA6IF9NX3N0YXJ0 KCksIF9NX2ZpbmlzaCgpLCBfTV9lbmRfb2Zfc3RvcmFnZSgwKSB7fQoKcHJvdGVjdGVkOgogIHR5 cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czx1bnNpZ25lZCBpbnQsIF9BbGxvY2F0b3I+Ojpf QWxsb2NfdHlwZQogICAgICAgICAgX0FsbG9jX3R5cGU7CiAgICAgICAgICAKICB1bnNpZ25lZCBp bnQqIF9NX2JpdF9hbGxvYyhzaXplX3QgX19uKSAKICAgIHsgcmV0dXJuIF9BbGxvY190eXBlOjph bGxvY2F0ZSgoX19uICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQpOyB9CiAgdm9pZCBfTV9k ZWFsbG9jYXRlKCkgewogICAgaWYgKF9NX3N0YXJ0Ll9NX3ApCiAgICAgIF9BbGxvY190eXBlOjpk ZWFsbG9jYXRlKF9NX3N0YXJ0Ll9NX3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9N X2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQuX01fcCk7CiAgfSAgCgogIF9CaXRfaXRlcmF0b3Ig X01fc3RhcnQ7CiAgX0JpdF9pdGVyYXRvciBfTV9maW5pc2g7CiAgdW5zaWduZWQgaW50KiBfTV9l bmRfb2Zfc3RvcmFnZTsKfTsgIAoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KY2xhc3MgX0J2ZWN0 b3JfYmFzZQogIDogcHVibGljIF9CdmVjdG9yX2FsbG9jX2Jhc2U8X0FsbG9jLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2M+OjpfU19pbnN0 YW5jZWxlc3M+CnsKICB0eXBlZGVmIF9CdmVjdG9yX2FsbG9jX2Jhc2U8X0FsbG9jLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvYz46Ol9TX2lu c3RhbmNlbGVzcz4KICAgICAgICAgIF9CYXNlOwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBf QmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgogIF9CdmVjdG9yX2Jhc2UoY29u c3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkgOiBfQmFzZShfX2EpIHt9CiAgfl9CdmVjdG9yX2Jhc2Uo KSB7IF9CYXNlOjpfTV9kZWFsbG9jYXRlKCk7IH0KfTsKCiMgMzQ4ICIvb3B0L212cGxvY2FsL2xp Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9n KystMy9zdGxfYnZlY3Rvci5oIiAzCgoKIAogCiAKIAoKCgoKCgoKCgoKICAgICAgICAKCiAgICAg ICAgCnRlbXBsYXRlPGNsYXNzIF9BbGxvYz4gY2xhc3MgdmVjdG9yPGJvb2wsX0FsbG9jPgogIDog cHVibGljIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPgoKCgoKewoKICB0eXBlZGVmIF9CdmVjdG9yX2Jh c2U8X0FsbG9jPiBfQmFzZTsKCgoKcHVibGljOgogIHR5cGVkZWYgYm9vbCB2YWx1ZV90eXBlOwog IHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNl X3R5cGU7IAogIHR5cGVkZWYgX0JpdF9yZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5cGVkZWYgYm9v bCBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSogcG9pbnRlcjsKICB0 eXBlZGVmIGNvbnN0IGJvb2wqIGNvbnN0X3BvaW50ZXI7CgogIHR5cGVkZWYgX0JpdF9pdGVyYXRv ciAgICAgICAgICAgICAgICBpdGVyYXRvcjsKICB0eXBlZGVmIF9CaXRfY29uc3RfaXRlcmF0b3Ig ICAgICAgICAgY29uc3RfaXRlcmF0b3I7CgoKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29u c3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiByZXZlcnNlX2l0 ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwoKCgoKCgoKICB0eXBlZGVmIHR5cGVu YW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlw ZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX0Jhc2U6OmdldF9hbGxvY2F0b3IoKTsg fQoKcHJvdGVjdGVkOgoKCgoKCgoKCnByb3RlY3RlZDoKICB2b2lkIF9NX2luaXRpYWxpemUoc2l6 ZV90eXBlIF9fbikgewogICAgdW5zaWduZWQgaW50KiBfX3EgPSBfTV9iaXRfYWxsb2MoX19uKTsK ICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbiArIF9fV09SRF9CSVQgLSAxKS9fX1dP UkRfQklUOwogICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAgX01fZmluaXNoID0g X01fc3RhcnQgKyBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICB9CiAgdm9pZCBfTV9pbnNlcnRfYXV4 KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGJvb2wgX194KSB7CiAgICBpZiAoX01fZmluaXNoLl9NX3Ag IT0gX01fZW5kX29mX3N0b3JhZ2UpIHsKICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBf TV9maW5pc2gsIF9NX2ZpbmlzaCArIDEpOwogICAgICAqX19wb3NpdGlvbiA9IF9feDsKICAgICAg KytfTV9maW5pc2g7CiAgICB9CiAgICBlbHNlIHsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gc2l6 ZSgpID8gMiAqIHNpemUoKSA6IF9fV09SRF9CSVQ7CiAgICAgIHVuc2lnbmVkIGludCogX19xID0g X01fYml0X2FsbG9jKF9fbGVuKTsKICAgICAgaXRlcmF0b3IgX19pID0gY29weShiZWdpbigpLCBf X3Bvc2l0aW9uLCBpdGVyYXRvcihfX3EsIDApKTsKICAgICAgKl9faSsrID0gX194OwogICAgICBf TV9maW5pc2ggPSBjb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX2kpOwogICAgICBfTV9kZWFsbG9j YXRlKCk7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbGVuICsgX19XT1JEX0JJ VCAtIDEpL19fV09SRF9CSVQ7CiAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAg IH0KICB9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9pbml0 aWFsaXplX3JhbmdlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFz dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgICBf TV9zdGFydCA9IGl0ZXJhdG9yKCk7CiAgICBfTV9maW5pc2ggPSBpdGVyYXRvcigpOwogICAgX01f ZW5kX29mX3N0b3JhZ2UgPSAwOwogICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2Zp cnN0KSAKICAgICAgcHVzaF9iYWNrKCpfX2ZpcnN0KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBf Rm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01faW5pdGlhbGl6ZV9yYW5nZShfRm9yd2FyZEl0ZXJh dG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgc2l6ZV90eXBlIF9fbiA9IDA7CiAg ICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbik7CiAgICBfTV9pbml0aWFsaXplKF9fbik7 CiAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01fc3RhcnQpOwogIH0KCiAgdGVtcGxhdGUgPGNs YXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01faW5zZXJ0X3JhbmdlKGl0ZXJhdG9yIF9fcG9z LAogICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0 ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcp IHsKICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkgewogICAgICBfX3Bv cyA9IGluc2VydChfX3BvcywgKl9fZmlyc3QpOwogICAgICArK19fcG9zOwogICAgfQogIH0KCiAg dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9pbnNlcnRfcmFuZ2Uo aXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJh dG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAg ICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsK ICAgICAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwg X19uKTsKICAgICAgaWYgKGNhcGFjaXR5KCkgLSBzaXplKCkgPj0gX19uKSB7CiAgICAgICAgY29w eV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBlbmQoKSwgX01fZmluaXNoICsgZGlmZmVyZW5jZV90eXBl KF9fbikpOwogICAgICAgIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Bvc2l0aW9uKTsKICAgICAg ICBfTV9maW5pc2ggKz0gZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgICAgIH0KICAgICAgZWxzZSB7 CiAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgpICsgbWF4KHNpemUoKSwgX19uKTsKICAg ICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7CiAgICAgICAgaXRl cmF0b3IgX19pID0gY29weShiZWdpbigpLCBfX3Bvc2l0aW9uLCBpdGVyYXRvcihfX3EsIDApKTsK ICAgICAgICBfX2kgPSBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19pKTsKICAgICAgICBfTV9maW5p c2ggPSBjb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX2kpOwogICAgICAgIF9NX2RlYWxsb2NhdGUo KTsKICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9fV09SRF9CSVQg LSAxKS9fX1dPUkRfQklUOwogICAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAg ICAgfQogICAgfQogIH0gICAgICAKCgoKcHVibGljOgogIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1 cm4gX01fc3RhcnQ7IH0KICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9N X3N0YXJ0OyB9CiAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gX01fZmluaXNoOyB9CiAgY29uc3Rf aXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fZmluaXNoOyB9CgogIHJldmVyc2VfaXRl cmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KICBjb25z dF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0IHsgCiAgICByZXR1cm4gY29uc3RfcmV2 ZXJzZV9pdGVyYXRvcihlbmQoKSk7IAogIH0KICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSB7IHJl dHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRv ciByZW5kKCkgY29uc3QgeyAKICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2lu KCkpOyAKICB9CgogIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKGVu ZCgpIC0gYmVnaW4oKSk7IH0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBz aXplX3R5cGUoLTEpOyB9CiAgc2l6ZV90eXBlIGNhcGFjaXR5KCkgY29uc3QgewogICAgcmV0dXJu IHNpemVfdHlwZShjb25zdF9pdGVyYXRvcihfTV9lbmRfb2Zfc3RvcmFnZSwgMCkgLSBiZWdpbigp KTsKICB9CiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGJlZ2luKCkgPT0gZW5kKCk7IH0K ICByZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKSB7CiAgICByZXR1cm4gKihiZWdp bigpICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOwogIH0KICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0 b3JbXShzaXplX3R5cGUgX19uKSBjb25zdCB7CiAgICByZXR1cm4gKihiZWdpbigpICsgZGlmZmVy ZW5jZV90eXBlKF9fbikpOwogIH0KCiAgZXhwbGljaXQgdmVjdG9yIChjb25zdCBhbGxvY2F0b3Jf dHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2UoX19hKSB7fQoKICB2ZWN0 b3IgKHNpemVfdHlwZSBfX24sIGJvb2wgX192YWx1ZSwKICAgICAgICAgICAgY29uc3QgYWxsb2Nh dG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9CYXNlKF9fYSkKICB7CiAg ICBfTV9pbml0aWFsaXplKF9fbik7CiAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9z dG9yYWdlLCBfX3ZhbHVlID8gfjAgOiAwKTsKICB9CgogIGV4cGxpY2l0IHZlY3RvciAoc2l6ZV90 eXBlIF9fbikKICAgIDogX0Jhc2UoYWxsb2NhdG9yX3R5cGUoKSkKICB7CiAgICBfTV9pbml0aWFs aXplKF9fbik7CiAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCAwKTsK ICB9CgogIHZlY3RvciAoY29uc3QgdmVjdG9yICYgX194KSA6IF9CYXNlKF9feC5nZXRfYWxsb2Nh dG9yKCkpIHsKICAgIF9NX2luaXRpYWxpemUoX194LnNpemUoKSk7CiAgICBjb3B5KF9feC5iZWdp bigpLCBfX3guZW5kKCksIF9NX3N0YXJ0KTsKICB9CgoKICAgCiAgdGVtcGxhdGUgPGNsYXNzIF9J bnB1dEl0ZXJhdG9yPgogIHZlY3RvciAoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRl cmF0b3IgX19sYXN0LAogICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxs b2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2UoX19hKQogIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUg X0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgX01f aW5pdGlhbGl6ZV9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICB9CiAg ICAKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9pbml0aWFsaXplX2Rpc3Bh dGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX194LCBfX3RydWVfdHlwZSkgewogICAgX01faW5p dGlhbGl6ZShfX24pOwogICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwg X194ID8gfjAgOiAwKTsKICB9CiAgICAKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+ CiAgdm9pZCBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J bnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxz ZV90eXBlKSB7CiAgICBfTV9pbml0aWFsaXplX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVy YXRvcl9jYXRlZ29yeSggX19maXJzdCApICk7CiAgfQojIDU4NyAiL29wdC9tdnBsb2NhbC9saWIv Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr LTMvc3RsX2J2ZWN0b3IuaCIgMwoKCiAgfnZlY3RvciAoKSB7IH0KCiAgdmVjdG9yICYgb3BlcmF0 b3I9KGNvbnN0IHZlY3RvciAmIF9feCkgewogICAgaWYgKCZfX3ggPT0gdGhpcykgcmV0dXJuICp0 aGlzOwogICAgaWYgKF9feC5zaXplKCkgPiBjYXBhY2l0eSgpKSB7CiAgICAgIF9NX2RlYWxsb2Nh dGUoKTsKICAgICAgX01faW5pdGlhbGl6ZShfX3guc2l6ZSgpKTsKICAgIH0KICAgIGNvcHkoX194 LmJlZ2luKCksIF9feC5lbmQoKSwgYmVnaW4oKSk7CiAgICBfTV9maW5pc2ggPSBiZWdpbigpICsg ZGlmZmVyZW5jZV90eXBlKF9feC5zaXplKCkpOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgIAog ICAKICAgCiAgIAoKICB2b2lkIGFzc2lnbihzaXplX3QgX19uLCBib29sIF9feCkgewogICAgaWYg KF9fbiA+IHNpemUoKSkgewogICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9y YWdlLCBfX3ggPyB+MCA6IDApOwogICAgICBpbnNlcnQoZW5kKCksIF9fbiAtIHNpemUoKSwgX194 KTsKICAgIH0KICAgIGVsc2UgewogICAgICBlcmFzZShiZWdpbigpICsgX19uLCBlbmQoKSk7CiAg ICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7 CiAgICB9CiAgfQoKCgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGFz c2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAg IHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwg X0ludGVncmFsOwogICAgX01fYXNzaWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVn cmFsKCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZvaWQgX01fYXNzaWdu X2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQogICAg eyBhc3NpZ24oKHNpemVfdCkgX19uLCAoYm9vbCkgX192YWwpOyB9CgogIHRlbXBsYXRlIDxjbGFz cyBfSW5wdXRJdGVyPgogIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXIgX19maXJz dCwgX0lucHV0SXRlciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAgIHsgX01fYXNzaWduX2F1eChf X2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3QgKSApOyB9CgogIHRl bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0lucHV0 SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAg ICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICAgIGl0ZXJhdG9yIF9fY3VyID0gYmVnaW4oKTsK ICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7ICsrX19jdXIs ICsrX19maXJzdCkKICAgICAgKl9fY3VyID0gKl9fZmlyc3Q7CiAgICBpZiAoX19maXJzdCA9PSBf X2xhc3QpCiAgICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7CiAgICBlbHNlCiAgICAgIGluc2VydChl bmQoKSwgX19maXJzdCwgX19sYXN0KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0 ZXJhdG9yPgogIHZvaWQgX01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9G b3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJh dG9yX3RhZykgewogICAgc2l6ZV90eXBlIF9fbGVuID0gMDsKICAgIGRpc3RhbmNlKF9fZmlyc3Qs IF9fbGFzdCwgX19sZW4pOwogICAgaWYgKF9fbGVuIDwgc2l6ZSgpKQogICAgICBlcmFzZShjb3B5 KF9fZmlyc3QsIF9fbGFzdCwgYmVnaW4oKSksIGVuZCgpKTsKICAgIGVsc2UgewogICAgICBfRm9y d2FyZEl0ZXJhdG9yIF9fbWlkID0gX19maXJzdDsKICAgICAgYWR2YW5jZShfX21pZCwgc2l6ZSgp KTsKICAgICAgY29weShfX2ZpcnN0LCBfX21pZCwgYmVnaW4oKSk7CiAgICAgIGluc2VydChlbmQo KSwgX19taWQsIF9fbGFzdCk7CiAgICB9CiAgfSAgICAKCgoKICB2b2lkIHJlc2VydmUoc2l6ZV90 eXBlIF9fbikgewogICAgaWYgKGNhcGFjaXR5KCkgPCBfX24pIHsKICAgICAgdW5zaWduZWQgaW50 KiBfX3EgPSBfTV9iaXRfYWxsb2MoX19uKTsKICAgICAgX01fZmluaXNoID0gY29weShiZWdpbigp LCBlbmQoKSwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAg X01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9f cSArIChfX24gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVDsKICAgIH0KICB9CgogIHJlZmVy ZW5jZSBmcm9udCgpIHsgcmV0dXJuICpiZWdpbigpOyB9CiAgY29uc3RfcmVmZXJlbmNlIGZyb250 KCkgY29uc3QgeyByZXR1cm4gKmJlZ2luKCk7IH0KICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJu ICooZW5kKCkgLSAxKTsgfQogIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3QgeyByZXR1cm4g KihlbmQoKSAtIDEpOyB9CiAgdm9pZCBwdXNoX2JhY2soYm9vbCBfX3gpIHsKICAgIGlmIChfTV9m aW5pc2guX01fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkKICAgICAgKl9NX2ZpbmlzaCsrID0gX194 OwogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpLCBfX3gpOwogIH0KICB2b2lkIHN3 YXAodmVjdG9yICYgX194KSB7CiAgICAgOjpzd2FwKF9NX3N0YXJ0LCBfX3guX01fc3RhcnQpOwog ICAgIDo6c3dhcChfTV9maW5pc2gsIF9feC5fTV9maW5pc2gpOwogICAgIDo6c3dhcChfTV9lbmRf b2Zfc3RvcmFnZSwgX194Ll9NX2VuZF9vZl9zdG9yYWdlKTsKICB9CiAgaXRlcmF0b3IgaW5zZXJ0 KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGJvb2wgX194ID0gYm9vbCgpKSB7CiAgICBkaWZmZXJlbmNl X3R5cGUgX19uID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7CiAgICBpZiAoX01fZmluaXNoLl9NX3Ag IT0gX01fZW5kX29mX3N0b3JhZ2UgJiYgX19wb3NpdGlvbiA9PSBlbmQoKSkKICAgICAgKl9NX2Zp bmlzaCsrID0gX194OwogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KF9fcG9zaXRpb24sIF9f eCk7CiAgICByZXR1cm4gYmVnaW4oKSArIF9fbjsKICB9CgoKICAgCiAgdGVtcGxhdGUgPGNsYXNz IF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sCiAgICAg ICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7 CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVn cmFsIF9JbnRlZ3JhbDsKICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3Bvc2l0aW9uLCBfX2ZpcnN0 LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4K ICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywgX0ludGVnZXIgX19uLCBf SW50ZWdlciBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpIHsKICAg IGluc2VydChfX3BvcywgKHNpemVfdHlwZSkgX19uLCAoYm9vbCkgX194KTsKICB9CgogIHRlbXBs YXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVy YXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2Zp cnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19m YWxzZV90eXBlKSB7CiAgICBfTV9pbnNlcnRfcmFuZ2UoX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwg X19pdGVyYXRvcl9jYXRlZ29yeSggX19maXJzdCApICk7CiAgfQojIDc2MSAiL29wdC9tdnBsb2Nh bC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1 ZGUvZysrLTMvc3RsX2J2ZWN0b3IuaCIgMwoKICAKICB2b2lkIGluc2VydChpdGVyYXRvciBfX3Bv c2l0aW9uLCBzaXplX3R5cGUgX19uLCBib29sIF9feCkgewogICAgaWYgKF9fbiA9PSAwKSByZXR1 cm47CiAgICBpZiAoY2FwYWNpdHkoKSAtIHNpemUoKSA+PSBfX24pIHsKICAgICAgY29weV9iYWNr d2FyZChfX3Bvc2l0aW9uLCBlbmQoKSwgX01fZmluaXNoICsgZGlmZmVyZW5jZV90eXBlKF9fbikp OwogICAgICBmaWxsKF9fcG9zaXRpb24sIF9fcG9zaXRpb24gKyBkaWZmZXJlbmNlX3R5cGUoX19u KSwgX194KTsKICAgICAgX01fZmluaXNoICs9IGRpZmZlcmVuY2VfdHlwZShfX24pOwogICAgfQog ICAgZWxzZSB7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHNpemUoKSArIG1heChzaXplKCksIF9f bik7CiAgICAgIHVuc2lnbmVkIGludCogX19xID0gX01fYml0X2FsbG9jKF9fbGVuKTsKICAgICAg aXRlcmF0b3IgX19pID0gY29weShiZWdpbigpLCBfX3Bvc2l0aW9uLCBpdGVyYXRvcihfX3EsIDAp KTsKICAgICAgZmlsbF9uKF9faSwgX19uLCBfX3gpOwogICAgICBfTV9maW5pc2ggPSBjb3B5KF9f cG9zaXRpb24sIGVuZCgpLCBfX2kgKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgICAgIF9NX2Rl YWxsb2NhdGUoKTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19sZW4gKyBfX1dP UkRfQklUIC0gMSkvX19XT1JEX0JJVDsKICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDAp OwogICAgfQogIH0KCiAgdm9pZCBwb3BfYmFjaygpIHsgLS1fTV9maW5pc2g7IH0KICBpdGVyYXRv ciBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7CiAgICBpZiAoX19wb3NpdGlvbiArIDEgIT0g ZW5kKCkpCiAgICAgIGNvcHkoX19wb3NpdGlvbiArIDEsIGVuZCgpLCBfX3Bvc2l0aW9uKTsKICAg ICAgLS1fTV9maW5pc2g7CiAgICByZXR1cm4gX19wb3NpdGlvbjsKICB9CiAgaXRlcmF0b3IgZXJh c2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KSB7CiAgICBfTV9maW5pc2ggPSBj b3B5KF9fbGFzdCwgZW5kKCksIF9fZmlyc3QpOwogICAgcmV0dXJuIF9fZmlyc3Q7CiAgfQogIHZv aWQgcmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplLCBib29sIF9feCA9IGJvb2woKSkgewogICAg aWYgKF9fbmV3X3NpemUgPCBzaXplKCkpIAogICAgICBlcmFzZShiZWdpbigpICsgZGlmZmVyZW5j ZV90eXBlKF9fbmV3X3NpemUpLCBlbmQoKSk7CiAgICBlbHNlCiAgICAgIGluc2VydChlbmQoKSwg X19uZXdfc2l6ZSAtIHNpemUoKSwgX194KTsKICB9CiAgdm9pZCBjbGVhcigpIHsgZXJhc2UoYmVn aW4oKSwgZW5kKCkpOyB9Cn07CgoKCnR5cGVkZWYgdmVjdG9yPGJvb2wsIGFsbG9jPiBiaXRfdmVj dG9yOwoKIyA4MjIgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9idmVjdG9yLmgiIDMKCgoKCgoK CgoKCiAgCgoKCiAKIAogCiMgMzUgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3Vu LXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3ZlY3RvciIgMiAzCgoK CgogCiAKIAojIDEyICIuLi8uLi9pbmNsdWRlL2xpYmluYy9saWJkcmF3aW5nLmgiIDIKCgp1c2lu ZyBzdGQ6OnZlY3RvcjsKdXNpbmcgc3RkOjpzdHJpbmc7CgogCiAKIyAxICIvdXNyL2R0L2luY2x1 ZGUvWG0vWG0uaCIgMQogCgoKCgoKIAogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3Iv b3Blbndpbi9pbmNsdWRlL1gxMS9TaGVsbC5oIiAxCiAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3Ivb3Blbndpbi9pbmNsdWRlL1gx MS9TTS9TTWxpYi5oIiAxCiAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiMg MSAiL3Vzci9vcGVud2luL2luY2x1ZGUvWDExL1NNL1NNLmgiIDEKIAoKIAoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoKCgoKCgoKIAoKCgoKCgoKCiAKCgoKCgoKCiAKCgoKCgoK CgogCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCiMgMzcgIi91c3Ivb3Blbndpbi9pbmNsdWRlL1gxMS9TTS9TTWxpYi5oIiAyCgoj IDEgIi91c3Ivb3Blbndpbi9pbmNsdWRlL1gxMS9JQ0UvSUNFbGliLmgiIDEKIAogCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL29wZW53aW4vaW5jbHVkZS9YMTEvSUNFL0lDRS5o IiAxCiAKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCiAKCgoKCgoK CiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCiAKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoK CiMgMjkgIi91c3Ivb3Blbndpbi9pbmNsdWRlL1gxMS9JQ0UvSUNFbGliLmgiIDIKCgoKCgoKCgoK dHlwZWRlZiB2b2lkICpJY2VQb2ludGVyOwoKCgoKdHlwZWRlZiBlbnVtIHsKICAgIEljZVBvQXV0 aEhhdmVSZXBseSwKICAgIEljZVBvQXV0aFJlamVjdGVkLAogICAgSWNlUG9BdXRoRmFpbGVkLAog ICAgSWNlUG9BdXRoRG9uZUNsZWFudXAKfSBJY2VQb0F1dGhTdGF0dXM7Cgp0eXBlZGVmIGVudW0g ewogICAgSWNlUGFBdXRoQ29udGludWUsCiAgICBJY2VQYUF1dGhBY2NlcHRlZCwKICAgIEljZVBh QXV0aFJlamVjdGVkLAogICAgSWNlUGFBdXRoRmFpbGVkCn0gSWNlUGFBdXRoU3RhdHVzOwoKdHlw ZWRlZiBlbnVtIHsKICAgIEljZUNvbm5lY3RQZW5kaW5nLAogICAgSWNlQ29ubmVjdEFjY2VwdGVk LAogICAgSWNlQ29ubmVjdFJlamVjdGVkLAogICAgSWNlQ29ubmVjdElPRXJyb3IKfSBJY2VDb25u ZWN0U3RhdHVzOwoKdHlwZWRlZiBlbnVtIHsKICAgIEljZVByb3RvY29sU2V0dXBTdWNjZXNzLAog ICAgSWNlUHJvdG9jb2xTZXR1cEZhaWx1cmUsCiAgICBJY2VQcm90b2NvbFNldHVwSU9FcnJvciwK ICAgIEljZVByb3RvY29sQWxyZWFkeUFjdGl2ZQp9IEljZVByb3RvY29sU2V0dXBTdGF0dXM7Cgp0 eXBlZGVmIGVudW0gewogICAgSWNlQWNjZXB0U3VjY2VzcywKICAgIEljZUFjY2VwdEZhaWx1cmUs CiAgICBJY2VBY2NlcHRCYWRNYWxsb2MKfSBJY2VBY2NlcHRTdGF0dXM7Cgp0eXBlZGVmIGVudW0g ewogICAgSWNlQ2xvc2VkTm93LAogICAgSWNlQ2xvc2VkQVNBUCwKICAgIEljZUNvbm5lY3Rpb25J blVzZSwKICAgIEljZVN0YXJ0ZWRTaHV0ZG93bk5lZ290aWF0aW9uCn0gSWNlQ2xvc2VTdGF0dXM7 Cgp0eXBlZGVmIGVudW0gewogICAgSWNlUHJvY2Vzc01lc3NhZ2VzU3VjY2VzcywKICAgIEljZVBy b2Nlc3NNZXNzYWdlc0lPRXJyb3IsCiAgICBJY2VQcm9jZXNzTWVzc2FnZXNDb25uZWN0aW9uQ2xv c2VkCn0gSWNlUHJvY2Vzc01lc3NhZ2VzU3RhdHVzOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgdW5z aWduZWQgbG9uZwlzZXF1ZW5jZV9vZl9yZXF1ZXN0OwogICAgaW50CQkJbWFqb3Jfb3Bjb2RlX29m X3JlcXVlc3Q7CiAgICBpbnQJCQltaW5vcl9vcGNvZGVfb2ZfcmVxdWVzdDsKICAgIEljZVBvaW50 ZXIJCXJlcGx5Owp9IEljZVJlcGx5V2FpdEluZm87Cgp0eXBlZGVmIHN0cnVjdCBfSWNlQ29ubiAq SWNlQ29ubjsKdHlwZWRlZiBzdHJ1Y3QgX0ljZUxpc3Rlbk9iaiAqSWNlTGlzdGVuT2JqOwoKdHlw ZWRlZiB2b2lkICgqSWNlV2F0Y2hQcm9jKSAoCgogICAgSWNlQ29ubgkJICwKICAgIEljZVBvaW50 ZXIJCSAsCiAgICBpbnQgCQkgLAogICAgSWNlUG9pbnRlciAqCSAKCik7Cgp0eXBlZGVmIHZvaWQg KCpJY2VQb1Byb2Nlc3NNc2dQcm9jKSAoCgogICAgSWNlQ29ubiAJCSAsCiAgICBJY2VQb2ludGVy CQkgLAogICAgaW50CQkJICwKICAgIHVuc2lnbmVkIGxvbmcJICwKICAgIGludCAJCSAsCiAgICBJ Y2VSZXBseVdhaXRJbmZvICogICAsCiAgICBpbnQgICoJCSAKCik7Cgp0eXBlZGVmIHZvaWQgKCpJ Y2VQYVByb2Nlc3NNc2dQcm9jKSAoCgogICAgSWNlQ29ubiAJCSAsCiAgICBJY2VQb2ludGVyCQkg LAogICAgaW50CQkJICwKICAgIHVuc2lnbmVkIGxvbmcJICwKICAgIGludCAJCSAKCik7Cgp0eXBl ZGVmIHN0cnVjdCB7CiAgICBpbnQJCQkgbWFqb3JfdmVyc2lvbjsKICAgIGludAkJCSBtaW5vcl92 ZXJzaW9uOwogICAgSWNlUG9Qcm9jZXNzTXNnUHJvYyAgcHJvY2Vzc19tc2dfcHJvYzsKfSBJY2VQ b1ZlcnNpb25SZWM7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBpbnQJCQkgbWFqb3JfdmVyc2lvbjsK ICAgIGludAkJCSBtaW5vcl92ZXJzaW9uOwogICAgSWNlUGFQcm9jZXNzTXNnUHJvYyAgcHJvY2Vz c19tc2dfcHJvYzsKfSBJY2VQYVZlcnNpb25SZWM7Cgp0eXBlZGVmIEljZVBvQXV0aFN0YXR1cyAo KkljZVBvQXV0aFByb2MpICgKCiAgICBJY2VDb25uCQkgLAogICAgSWNlUG9pbnRlciAqCSAsCiAg ICBpbnQgCQkgLAogICAgaW50IAkJICwKICAgIGludAkJCSAsCiAgICBJY2VQb2ludGVyCQkgLAog ICAgaW50ICoJCSAsCiAgICBJY2VQb2ludGVyICoJICwKICAgIGNoYXIgKioJCSAKCik7Cgp0eXBl ZGVmIEljZVBhQXV0aFN0YXR1cyAoKkljZVBhQXV0aFByb2MpICgKCiAgICBJY2VDb25uCQkgLAog ICAgSWNlUG9pbnRlciAqCSAsCiAgICBpbnQgCQkgLAogICAgaW50CQkJICwKICAgIEljZVBvaW50 ZXIJCSAsCiAgICBpbnQgKgkJICwKICAgIEljZVBvaW50ZXIgKgkgLAogICAgY2hhciAqKgkJIAoK KTsKCnR5cGVkZWYgaW50ICAoKkljZUhvc3RCYXNlZEF1dGhQcm9jKSAoCgogICAgY2hhciAqCQkg CgopOwoKdHlwZWRlZiBpbnQgICgqSWNlUHJvdG9jb2xTZXR1cFByb2MpICgKCiAgICBJY2VDb25u IAkJICwKICAgIGludAkJCSAsCiAgICBpbnQJCQkgLAogICAgY2hhciAqCQkgLAogICAgY2hhciAq CQkgLAogICAgSWNlUG9pbnRlciAqCSAsCiAgICBjaGFyICoqCQkgCgopOwoKdHlwZWRlZiB2b2lk ICgqSWNlUHJvdG9jb2xBY3RpdmF0ZVByb2MpICgKCiAgICBJY2VDb25uIAkJICwKICAgIEljZVBv aW50ZXIJCSAKCik7Cgp0eXBlZGVmIHZvaWQgKCpJY2VJT0Vycm9yUHJvYykgKAoKICAgIEljZUNv bm4gCQkgCgopOwoKdHlwZWRlZiB2b2lkICgqSWNlUGluZ1JlcGx5UHJvYykgKAoKICAgIEljZUNv bm4gCQkgLAogICAgSWNlUG9pbnRlcgkJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKkljZUVycm9ySGFu ZGxlcikgKAoKICAgIEljZUNvbm4gCQkgLAogICAgaW50IAkJICwKICAgIGludAkJCSAsCiAgICB1 bnNpZ25lZCBsb25nIAkgLAogICAgaW50IAkJICwKICAgIGludAkJCSAsCiAgICBJY2VQb2ludGVy CQkgCgopOwoKdHlwZWRlZiB2b2lkICgqSWNlSU9FcnJvckhhbmRsZXIpICgKCiAgICBJY2VDb25u IAkJIAoKKTsKCgogCgoKCmV4dGVybiAiQyIgeyAKCmV4dGVybiBpbnQgSWNlUmVnaXN0ZXJGb3JQ cm90b2NvbFNldHVwICgKCiAgICBjaGFyICoJCQkgLAogICAgY2hhciAqCQkJICwKICAgIGNoYXIg KgkJCSAsCiAgICBpbnQJCQkJICwKICAgIEljZVBvVmVyc2lvblJlYyAqCQkgLAogICAgaW50CQkJ CSAsCiAgICBjaGFyICoqCQkJICwKICAgIEljZVBvQXV0aFByb2MgKgkJICwKICAgIEljZUlPRXJy b3JQcm9jCQkgCgopOwoKZXh0ZXJuIGludCBJY2VSZWdpc3RlckZvclByb3RvY29sUmVwbHkgKAoK ICAgIGNoYXIgKgkJCSAsCiAgICBjaGFyICoJCQkgLAogICAgY2hhciAqCQkJICwKICAgIGludAkJ CQkgLAogICAgSWNlUGFWZXJzaW9uUmVjICoJCSAsCiAgICBpbnQJCQkJICwKICAgIGNoYXIgKioJ CQkgLAogICAgSWNlUGFBdXRoUHJvYyAqCQkgLAogICAgSWNlSG9zdEJhc2VkQXV0aFByb2MJICwK ICAgIEljZVByb3RvY29sU2V0dXBQcm9jCSAsCiAgICBJY2VQcm90b2NvbEFjdGl2YXRlUHJvYwkg LAogICAgSWNlSU9FcnJvclByb2MJCSAKCik7CgpleHRlcm4gSWNlQ29ubiBJY2VPcGVuQ29ubmVj dGlvbiAoCgogICAgY2hhciAqCQkgLAogICAgSWNlUG9pbnRlcgkJICwKICAgIGludCAJCSAsCiAg ICBpbnQJCQkgLAogICAgaW50CQkJICwKICAgIGNoYXIgKgkJIAoKKTsKCmV4dGVybiBJY2VQb2lu dGVyIEljZUdldENvbm5lY3Rpb25Db250ZXh0ICgKCiAgICBJY2VDb25uCQkgCgopOwoKZXh0ZXJu IGludCAgSWNlTGlzdGVuRm9yQ29ubmVjdGlvbnMgKAoKICAgIGludCAqCQkgLAogICAgSWNlTGlz dGVuT2JqICoqCSAsCiAgICBpbnQJCQkgLAogICAgY2hhciAqCQkgCgopOwoKZXh0ZXJuIGludCAg SWNlTGlzdGVuRm9yV2VsbEtub3duQ29ubmVjdGlvbnMgKAoKICAgIGNoYXIgKgkJICwKICAgIGlu dCAqCQkgLAogICAgSWNlTGlzdGVuT2JqICoqCSAsCiAgICBpbnQJCQkgLAogICAgY2hhciAqCQkg CgopOwoKZXh0ZXJuIGludCBJY2VHZXRMaXN0ZW5Db25uZWN0aW9uTnVtYmVyICgKCiAgICBJY2VM aXN0ZW5PYmoJIAoKKTsKCmV4dGVybiBjaGFyICpJY2VHZXRMaXN0ZW5Db25uZWN0aW9uU3RyaW5n ICgKCiAgICBJY2VMaXN0ZW5PYmoJIAoKKTsKCmV4dGVybiBjaGFyICpJY2VDb21wb3NlTmV0d29y a0lkTGlzdCAoCgogICAgaW50CQkJICwKICAgIEljZUxpc3Rlbk9iaiAqCSAKCik7CgpleHRlcm4g dm9pZCBJY2VGcmVlTGlzdGVuT2JqcyAoCgogICAgaW50CQkJICwKICAgIEljZUxpc3Rlbk9iaiAq CSAKCik7CgpleHRlcm4gdm9pZCBJY2VTZXRIb3N0QmFzZWRBdXRoUHJvYyAoCgogICAgSWNlTGlz dGVuT2JqCQkgLAogICAgSWNlSG9zdEJhc2VkQXV0aFByb2MgICAJIAoKKTsKCmV4dGVybiBJY2VD b25uIEljZUFjY2VwdENvbm5lY3Rpb24gKAoKICAgIEljZUxpc3Rlbk9iagkgLAogICAgSWNlQWNj ZXB0U3RhdHVzICoJIAoKKTsKCmV4dGVybiB2b2lkIEljZVNldFNodXRkb3duTmVnb3RpYXRpb24g KAoKICAgIEljZUNvbm4JCSAsCiAgICBpbnQgCQkgCgopOwoKZXh0ZXJuIGludCAgSWNlQ2hlY2tT aHV0ZG93bk5lZ290aWF0aW9uICgKCiAgICBJY2VDb25uCQkgCgopOwoKZXh0ZXJuIEljZUNsb3Nl U3RhdHVzIEljZUNsb3NlQ29ubmVjdGlvbiAoCgogICAgSWNlQ29ubgkJIAoKKTsKCmV4dGVybiBp bnQgIEljZUFkZENvbm5lY3Rpb25XYXRjaCAoCgogICAgSWNlV2F0Y2hQcm9jCQkgLAogICAgSWNl UG9pbnRlcgkJCSAKCik7CgpleHRlcm4gdm9pZCBJY2VSZW1vdmVDb25uZWN0aW9uV2F0Y2ggKAoK ICAgIEljZVdhdGNoUHJvYwkJICwKICAgIEljZVBvaW50ZXIJCQkgCgopOwoKZXh0ZXJuIEljZVBy b3RvY29sU2V0dXBTdGF0dXMgSWNlUHJvdG9jb2xTZXR1cCAoCgogICAgSWNlQ29ubgkJICwKICAg IGludCAJCSAsCiAgICBJY2VQb2ludGVyCQkgLAogICAgaW50IAkJICwKICAgIGludAkqCQkgLAog ICAgaW50CSoJCSAsCiAgICBjaGFyICoqCQkgLAogICAgY2hhciAqKgkJICwKICAgIGludAkJCSAs CiAgICBjaGFyICoJCSAKCik7CgpleHRlcm4gaW50ICBJY2VQcm90b2NvbFNodXRkb3duICgKCiAg ICBJY2VDb25uCQkgLAogICAgaW50CQkJIAoKKTsKCmV4dGVybiBJY2VQcm9jZXNzTWVzc2FnZXNT dGF0dXMgSWNlUHJvY2Vzc01lc3NhZ2VzICgKCiAgICBJY2VDb25uCQkgLAogICAgSWNlUmVwbHlX YWl0SW5mbyAqCSAsCiAgICBpbnQgICoJCSAKCik7CgpleHRlcm4gaW50ICBJY2VQaW5nICgKCiAg IEljZUNvbm4JCSAsCiAgIEljZVBpbmdSZXBseVByb2MJICwKICAgSWNlUG9pbnRlcgkJIAoKKTsK CmV4dGVybiBjaGFyICpJY2VBbGxvY1NjcmF0Y2ggKAoKICAgSWNlQ29ubgkJICwKICAgdW5zaWdu ZWQgbG9uZwkgCgopOwoKZXh0ZXJuIGludCBJY2VGbHVzaCAoCgogICBJY2VDb25uCQkgCgopOwoK ZXh0ZXJuIGludCBJY2VHZXRPdXRCdWZTaXplICgKCiAgIEljZUNvbm4JCSAKCik7CgpleHRlcm4g aW50IEljZUdldEluQnVmU2l6ZSAoCgogICBJY2VDb25uCQkgCgopOwoKZXh0ZXJuIEljZUNvbm5l Y3RTdGF0dXMgSWNlQ29ubmVjdGlvblN0YXR1cyAoCgogICAgSWNlQ29ubgkJIAoKKTsKCmV4dGVy biBjaGFyICpJY2VWZW5kb3IgKAoKICAgIEljZUNvbm4JCSAKCik7CgpleHRlcm4gY2hhciAqSWNl UmVsZWFzZSAoCgogICAgSWNlQ29ubgkJIAoKKTsKCmV4dGVybiBpbnQgSWNlUHJvdG9jb2xWZXJz aW9uICgKCiAgICBJY2VDb25uCQkgCgopOwoKZXh0ZXJuIGludCBJY2VQcm90b2NvbFJldmlzaW9u ICgKCiAgICBJY2VDb25uCQkgCgopOwoKZXh0ZXJuIGludCBJY2VDb25uZWN0aW9uTnVtYmVyICgK CiAgICBJY2VDb25uCQkgCgopOwoKZXh0ZXJuIGNoYXIgKkljZUNvbm5lY3Rpb25TdHJpbmcgKAoK ICAgIEljZUNvbm4JCSAKCik7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBJY2VMYXN0U2VudFNlcXVl bmNlTnVtYmVyICgKCiAgICBJY2VDb25uCQkgCgopOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgSWNl TGFzdFJlY2VpdmVkU2VxdWVuY2VOdW1iZXIgKAoKICAgIEljZUNvbm4JCSAKCik7CgpleHRlcm4g aW50ICBJY2VTd2FwcGluZyAoCgogICAgSWNlQ29ubgkJIAoKKTsKCmV4dGVybiBJY2VFcnJvckhh bmRsZXIgSWNlU2V0RXJyb3JIYW5kbGVyICgKCiAgICBJY2VFcnJvckhhbmRsZXIgCSAKCik7Cgpl eHRlcm4gSWNlSU9FcnJvckhhbmRsZXIgSWNlU2V0SU9FcnJvckhhbmRsZXIgKAoKICAgIEljZUlP RXJyb3JIYW5kbGVyIAkgCgopOwoKCiAKCgoKZXh0ZXJuIGludCAgSWNlSW5pdFRocmVhZHMgKAoK ICAgIHZvaWQKCik7CgpleHRlcm4gdm9pZCBJY2VBcHBMb2NrQ29ubiAoCgogICAgSWNlQ29ubgkJ IAoKKTsKCmV4dGVybiB2b2lkIEljZUFwcFVubG9ja0Nvbm4gKAoKICAgIEljZUNvbm4JCSAKCik7 Cgp9IAoKCiMgMzggIi91c3Ivb3Blbndpbi9pbmNsdWRlL1gxMS9TTS9TTWxpYi5oIiAyCgoKCiAK CgoKdHlwZWRlZiBJY2VQb2ludGVyIFNtUG9pbnRlcjsKCgogCgoKCnR5cGVkZWYgc3RydWN0IF9T bWNDb25uICpTbWNDb25uOwp0eXBlZGVmIHN0cnVjdCBfU21zQ29ubiAqU21zQ29ubjsKCgogCgoK CnR5cGVkZWYgc3RydWN0IHsKICAgIGludAkJbGVuZ3RoOwkJIAogICAgU21Qb2ludGVyICAgdmFs dWU7CQkgCn0gU21Qcm9wVmFsdWU7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBjaGFyCSpuYW1lOwkJ IAogICAgY2hhcgkqdHlwZTsJCSAKICAgIGludAkJbnVtX3ZhbHM7CSAKICAgIFNtUHJvcFZhbHVl ICp2YWxzOwkJIAp9IFNtUHJvcDsKCgoMCiAKCgoKdHlwZWRlZiBlbnVtIHsKICAgIFNtY0Nsb3Nl ZE5vdywKICAgIFNtY0Nsb3NlZEFTQVAsCiAgICBTbWNDb25uZWN0aW9uSW5Vc2UKfSBTbWNDbG9z ZVN0YXR1czsKCgoMCiAKCgoKdHlwZWRlZiB2b2lkICgqU21jU2F2ZVlvdXJzZWxmUHJvYykgKAoK ICAgIFNtY0Nvbm4JCSAsCiAgICBTbVBvaW50ZXIJCSAsCiAgICBpbnQgIAkJICwKICAgIGludCAJ CSAsCiAgICBpbnQJCQkgLAogICAgaW50IAkJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKlNtY1NhdmVZ b3Vyc2VsZlBoYXNlMlByb2MpICgKCiAgICBTbWNDb25uCQkgLAogICAgU21Qb2ludGVyCQkgCgop OwoKdHlwZWRlZiB2b2lkICgqU21jSW50ZXJhY3RQcm9jKSAoCgogICAgU21jQ29ubgkJICwKICAg IFNtUG9pbnRlcgkJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKlNtY0RpZVByb2MpICgKCiAgICBTbWND b25uCQkgLAogICAgU21Qb2ludGVyCQkgCgopOwoKdHlwZWRlZiB2b2lkICgqU21jU2h1dGRvd25D YW5jZWxsZWRQcm9jKSAoCgogICAgU21jQ29ubgkJICwKICAgIFNtUG9pbnRlcgkJIAoKKTsKCnR5 cGVkZWYgdm9pZCAoKlNtY1NhdmVDb21wbGV0ZVByb2MpICgKCiAgICBTbWNDb25uCQkgLAogICAg U21Qb2ludGVyCQkgCgopOwoKdHlwZWRlZiB2b2lkICgqU21jUHJvcFJlcGx5UHJvYykgKAoKICAg IFNtY0Nvbm4JCSAsCiAgICBTbVBvaW50ZXIJCSAsCiAgICBpbnQJCQkgLAogICAgU21Qcm9wICoq CQkgCgopOwoKCiAKCgoKdHlwZWRlZiBzdHJ1Y3QgewoKICAgIHN0cnVjdCB7CglTbWNTYXZlWW91 cnNlbGZQcm9jCSBjYWxsYmFjazsKCVNtUG9pbnRlcgkJIGNsaWVudF9kYXRhOwogICAgfSBzYXZl X3lvdXJzZWxmOwoKICAgIHN0cnVjdCB7CglTbWNEaWVQcm9jCQkgY2FsbGJhY2s7CglTbVBvaW50 ZXIJCSBjbGllbnRfZGF0YTsKICAgIH0gZGllOwoKICAgIHN0cnVjdCB7CglTbWNTYXZlQ29tcGxl dGVQcm9jCSBjYWxsYmFjazsKCVNtUG9pbnRlcgkJIGNsaWVudF9kYXRhOwogICAgfSBzYXZlX2Nv bXBsZXRlOwoKICAgIHN0cnVjdCB7CglTbWNTaHV0ZG93bkNhbmNlbGxlZFByb2MgY2FsbGJhY2s7 CglTbVBvaW50ZXIJCSBjbGllbnRfZGF0YTsKICAgIH0gc2h1dGRvd25fY2FuY2VsbGVkOwoKfSBT bWNDYWxsYmFja3M7CgoKCgoKCgoMCiAKCgoKdHlwZWRlZiBpbnQgICgqU21zUmVnaXN0ZXJDbGll bnRQcm9jKSAoCgogICAgU21zQ29ubiAJCSAsCiAgICBTbVBvaW50ZXIJCSAsCiAgICBjaGFyICoJ CSAJCQkJICAgICAKCik7Cgp0eXBlZGVmIHZvaWQgKCpTbXNJbnRlcmFjdFJlcXVlc3RQcm9jKSAo CgogICAgU21zQ29ubgkJICwKICAgIFNtUG9pbnRlcgkJICwKICAgIGludAkJCSAKCik7Cgp0eXBl ZGVmIHZvaWQgKCpTbXNJbnRlcmFjdERvbmVQcm9jKSAoCgogICAgU21zQ29ubgkJICwKICAgIFNt UG9pbnRlcgkJICwKICAgIGludCAJCSAKCik7Cgp0eXBlZGVmIHZvaWQgKCpTbXNTYXZlWW91cnNl bGZSZXF1ZXN0UHJvYykgKAoKICAgIFNtc0Nvbm4JCSAsCiAgICBTbVBvaW50ZXIJCSAsCiAgICBp bnQgIAkJICwKICAgIGludCAJCSAsCiAgICBpbnQJCQkgLAogICAgaW50IAkJICwKICAgIGludCAJ CSAKCik7Cgp0eXBlZGVmIHZvaWQgKCpTbXNTYXZlWW91cnNlbGZQaGFzZTJSZXF1ZXN0UHJvYykg KAoKICAgIFNtc0Nvbm4JCSAsCiAgICBTbVBvaW50ZXIJCSAKCik7Cgp0eXBlZGVmIHZvaWQgKCpT bXNTYXZlWW91cnNlbGZEb25lUHJvYykgKAoKICAgIFNtc0Nvbm4JCSAsCiAgICBTbVBvaW50ZXIJ CSAsCiAgICBpbnQgCQkgCgopOwoKdHlwZWRlZiB2b2lkICgqU21zQ2xvc2VDb25uZWN0aW9uUHJv YykgKAoKICAgIFNtc0Nvbm4JCSAsCiAgICBTbVBvaW50ZXIJCSAsCiAgICBpbnQJCQkgLAogICAg Y2hhciAqKgkJIAoKKTsKCnR5cGVkZWYgdm9pZCAoKlNtc1NldFByb3BlcnRpZXNQcm9jKSAoCgog ICAgU21zQ29ubgkJICwKICAgIFNtUG9pbnRlcgkJICwKICAgIGludAkJCSAsCiAgICBTbVByb3Ag KioJCSAKCik7Cgp0eXBlZGVmIHZvaWQgKCpTbXNEZWxldGVQcm9wZXJ0aWVzUHJvYykgKAoKICAg IFNtc0Nvbm4JCSAsCiAgICBTbVBvaW50ZXIJCSAsCiAgICBpbnQJCQkgLAogICAgY2hhciAqKgkJ IAoKKTsKCnR5cGVkZWYgdm9pZCAoKlNtc0dldFByb3BlcnRpZXNQcm9jKSAoCgogICAgU21zQ29u bgkJICwKICAgIFNtUG9pbnRlcgkJIAoKKTsKCgogCgoKCnR5cGVkZWYgc3RydWN0IHsKCiAgICBz dHJ1Y3QgewoJU21zUmVnaXN0ZXJDbGllbnRQcm9jCWNhbGxiYWNrOwoJU21Qb2ludGVyCQltYW5h Z2VyX2RhdGE7CiAgICB9IHJlZ2lzdGVyX2NsaWVudDsKCiAgICBzdHJ1Y3QgewoJU21zSW50ZXJh Y3RSZXF1ZXN0UHJvYwljYWxsYmFjazsKCVNtUG9pbnRlcgkJbWFuYWdlcl9kYXRhOwogICAgfSBp bnRlcmFjdF9yZXF1ZXN0OwoKICAgIHN0cnVjdCB7CglTbXNJbnRlcmFjdERvbmVQcm9jCWNhbGxi YWNrOwoJU21Qb2ludGVyCQltYW5hZ2VyX2RhdGE7CiAgICB9IGludGVyYWN0X2RvbmU7CgogICAg c3RydWN0IHsKCVNtc1NhdmVZb3Vyc2VsZlJlcXVlc3RQcm9jCWNhbGxiYWNrOwoJU21Qb2ludGVy CQkJbWFuYWdlcl9kYXRhOwogICAgfSBzYXZlX3lvdXJzZWxmX3JlcXVlc3Q7CgogICAgc3RydWN0 IHsKCVNtc1NhdmVZb3Vyc2VsZlBoYXNlMlJlcXVlc3RQcm9jCWNhbGxiYWNrOwoJU21Qb2ludGVy CQkJCW1hbmFnZXJfZGF0YTsKICAgIH0gc2F2ZV95b3Vyc2VsZl9waGFzZTJfcmVxdWVzdDsKCiAg ICBzdHJ1Y3QgewoJU21zU2F2ZVlvdXJzZWxmRG9uZVByb2MJY2FsbGJhY2s7CglTbVBvaW50ZXIJ CW1hbmFnZXJfZGF0YTsKICAgIH0gc2F2ZV95b3Vyc2VsZl9kb25lOwoKICAgIHN0cnVjdCB7CglT bXNDbG9zZUNvbm5lY3Rpb25Qcm9jCWNhbGxiYWNrOwoJU21Qb2ludGVyCQltYW5hZ2VyX2RhdGE7 CiAgICB9IGNsb3NlX2Nvbm5lY3Rpb247CgogICAgc3RydWN0IHsKCVNtc1NldFByb3BlcnRpZXNQ cm9jCWNhbGxiYWNrOwoJU21Qb2ludGVyCQltYW5hZ2VyX2RhdGE7CiAgICB9IHNldF9wcm9wZXJ0 aWVzOwoKICAgIHN0cnVjdCB7CglTbXNEZWxldGVQcm9wZXJ0aWVzUHJvYwljYWxsYmFjazsKCVNt UG9pbnRlcgkJbWFuYWdlcl9kYXRhOwogICAgfSBkZWxldGVfcHJvcGVydGllczsKCiAgICBzdHJ1 Y3QgewoJU21zR2V0UHJvcGVydGllc1Byb2MJY2FsbGJhY2s7CglTbVBvaW50ZXIJCW1hbmFnZXJf ZGF0YTsKICAgIH0gZ2V0X3Byb3BlcnRpZXM7Cgp9IFNtc0NhbGxiYWNrczsKCgoKCgoKCgoKCgoK CgoKdHlwZWRlZiBpbnQgICgqU21zTmV3Q2xpZW50UHJvYykgKAoKICAgIFNtc0Nvbm4gCQkgLAog ICAgU21Qb2ludGVyCQkgLAogICAgdW5zaWduZWQgbG9uZyAqCSAsCiAgICBTbXNDYWxsYmFja3Mg KgkgLAogICAgY2hhciAqKgkJIAoKKTsKCgoMCiAKCgoKdHlwZWRlZiB2b2lkICgqU21jRXJyb3JI YW5kbGVyKSAoCgogICAgU21jQ29ubgkJICwKICAgIGludCAJCSAsCiAgICBpbnQJCQkgLAogICAg dW5zaWduZWQgbG9uZyAJICwKICAgIGludCAJCSAsCiAgICBpbnQJCQkgLAogICAgU21Qb2ludGVy CQkgCgopOwoKdHlwZWRlZiB2b2lkICgqU21zRXJyb3JIYW5kbGVyKSAoCgogICAgU21zQ29ubgkJ ICwKICAgIGludCAJCSAsCiAgICBpbnQJCQkgLAogICAgdW5zaWduZWQgbG9uZyAJICwKICAgIGlu dCAJCSAsCiAgICBpbnQJCQkgLAogICAgU21Qb2ludGVyCQkgCgopOwoKCgwKIAoKCgpleHRlcm4g IkMiIHsgCgpleHRlcm4gU21jQ29ubiBTbWNPcGVuQ29ubmVjdGlvbiAoCgogICAgY2hhciAqCQkg LAogICAgU21Qb2ludGVyCQkgLAogICAgaW50CQkJICwKICAgIGludAkJCSAsCiAgICB1bnNpZ25l ZCBsb25nCSAsCiAgICBTbWNDYWxsYmFja3MgKgkgLAogICAgY2hhciAqCQkgLAogICAgY2hhciAq KgkJICwKICAgIGludAkJCSAsCiAgICBjaGFyICoJCSAKCik7CgpleHRlcm4gU21jQ2xvc2VTdGF0 dXMgU21jQ2xvc2VDb25uZWN0aW9uICgKCiAgICBTbWNDb25uCQkgLAogICAgaW50CQkJICwKICAg IGNoYXIgKioJCSAKCik7CgpleHRlcm4gdm9pZCBTbWNNb2RpZnlDYWxsYmFja3MgKAoKICAgIFNt Y0Nvbm4JCSAsCiAgICB1bnNpZ25lZCBsb25nCSAsCiAgICBTbWNDYWxsYmFja3MgKgkgCgopOwoK ZXh0ZXJuIHZvaWQgU21jU2V0UHJvcGVydGllcyAoCgogICAgU21jQ29ubgkJICwKICAgIGludCAg ICAgIAkgICAgICAgICAsCiAgICBTbVByb3AgKioJCSAKCik7CgpleHRlcm4gdm9pZCBTbWNEZWxl dGVQcm9wZXJ0aWVzICgKCiAgICBTbWNDb25uCQkgLAogICAgaW50ICAgICAgCSAgICAgICAgICwK ICAgIGNoYXIgKioJCSAKCik7CgpleHRlcm4gaW50ICBTbWNHZXRQcm9wZXJ0aWVzICgKCiAgICBT bWNDb25uCQkgLAogICAgU21jUHJvcFJlcGx5UHJvYwkgLAogICAgU21Qb2ludGVyCQkgCgopOwoK ZXh0ZXJuIGludCAgU21jSW50ZXJhY3RSZXF1ZXN0ICgKCiAgICBTbWNDb25uCQkgLAogICAgaW50 CQkJICwKICAgIFNtY0ludGVyYWN0UHJvYwkgLAogICAgU21Qb2ludGVyCQkgCgopOwoKZXh0ZXJu IHZvaWQgU21jSW50ZXJhY3REb25lICgKCiAgICBTbWNDb25uCQkgLAogICAgaW50ICAJCSAKCik7 CgpleHRlcm4gdm9pZCBTbWNSZXF1ZXN0U2F2ZVlvdXJzZWxmICgKCiAgICBTbWNDb25uCQkgLAog ICAgaW50CQkJICwKICAgIGludCAgCQkgLAogICAgaW50CQkJICwKICAgIGludCAJCSAsCiAgICBp bnQgCQkgCgopOwoKZXh0ZXJuIGludCAgU21jUmVxdWVzdFNhdmVZb3Vyc2VsZlBoYXNlMiAoCgog ICAgU21jQ29ubgkJCSAsCiAgICBTbWNTYXZlWW91cnNlbGZQaGFzZTJQcm9jCSAsCiAgICBTbVBv aW50ZXIJCQkgCgopOwoKZXh0ZXJuIHZvaWQgU21jU2F2ZVlvdXJzZWxmRG9uZSAoCgogICAgU21j Q29ubgkJICwKICAgIGludCAJCSAKCik7CgpleHRlcm4gaW50IFNtY1Byb3RvY29sVmVyc2lvbiAo CgogICAgU21jQ29ubgkJIAoKKTsKCmV4dGVybiBpbnQgU21jUHJvdG9jb2xSZXZpc2lvbiAoCgog ICAgU21jQ29ubgkJIAoKKTsKCmV4dGVybiBjaGFyICpTbWNWZW5kb3IgKAoKICAgIFNtY0Nvbm4J CSAKCik7CgpleHRlcm4gY2hhciAqU21jUmVsZWFzZSAoCgogICAgU21jQ29ubgkJIAoKKTsKCmV4 dGVybiBjaGFyICpTbWNDbGllbnRJRCAoCgogICAgU21jQ29ubgkJIAoKKTsKCmV4dGVybiBJY2VD b25uIFNtY0dldEljZUNvbm5lY3Rpb24gKAoKICAgIFNtY0Nvbm4JCSAKCik7CgpleHRlcm4gaW50 ICBTbXNJbml0aWFsaXplICgKCiAgICBjaGFyICoJCQkgLAogICAgY2hhciAqCQkJICwKICAgIFNt c05ld0NsaWVudFByb2MJCSAsCiAgICBTbVBvaW50ZXIJCQkgLAogICAgSWNlSG9zdEJhc2VkQXV0 aFByb2MJICwKICAgIGludAkJCQkgLAogICAgY2hhciAqCQkJIAoKKTsKCmV4dGVybiBjaGFyICpT bXNDbGllbnRIb3N0TmFtZSAoCgogICAgU21zQ29ubgkJIAoKKTsKCmV4dGVybiBjaGFyICpTbXNH ZW5lcmF0ZUNsaWVudElEICgKCiAgICBTbXNDb25uCQkgCgopOwoKZXh0ZXJuIGludCAgU21zUmVn aXN0ZXJDbGllbnRSZXBseSAoCgogICAgU21zQ29ubgkJICwKICAgIGNoYXIgKgkJIAoKKTsKCmV4 dGVybiB2b2lkIFNtc1NhdmVZb3Vyc2VsZiAoCgogICAgU21zQ29ubgkJICwKICAgIGludAkJCSAs CiAgICBpbnQgIAkJICwKICAgIGludAkJCSAsCiAgICBpbnQgCQkgCgopOwoKZXh0ZXJuIHZvaWQg U21zU2F2ZVlvdXJzZWxmUGhhc2UyICgKCiAgICBTbXNDb25uCQkgCgopOwoKZXh0ZXJuIHZvaWQg U21zSW50ZXJhY3QgKAoKICAgIFNtc0Nvbm4JCSAKCik7CgpleHRlcm4gdm9pZCBTbXNEaWUgKAoK ICAgIFNtc0Nvbm4JCSAKCik7CgpleHRlcm4gdm9pZCBTbXNTYXZlQ29tcGxldGUgKAoKICAgIFNt c0Nvbm4JCSAKCik7CgpleHRlcm4gdm9pZCBTbXNTaHV0ZG93bkNhbmNlbGxlZCAoCgogICAgU21z Q29ubgkJIAoKKTsKCmV4dGVybiB2b2lkIFNtc1JldHVyblByb3BlcnRpZXMgKAoKICAgIFNtc0Nv bm4JCSAsCiAgICBpbnQJCQkgLAogICAgU21Qcm9wICoqCQkgCgopOwoKZXh0ZXJuIHZvaWQgU21z Q2xlYW5VcCAoCgogICAgU21zQ29ubgkJIAoKKTsKCmV4dGVybiBpbnQgU21zUHJvdG9jb2xWZXJz aW9uICgKCiAgICBTbXNDb25uCQkgCgopOwoKZXh0ZXJuIGludCBTbXNQcm90b2NvbFJldmlzaW9u ICgKCiAgICBTbXNDb25uCQkgCgopOwoKZXh0ZXJuIGNoYXIgKlNtc0NsaWVudElEICgKCiAgICBT bXNDb25uCQkgCgopOwoKZXh0ZXJuIEljZUNvbm4gU21zR2V0SWNlQ29ubmVjdGlvbiAoCgogICAg U21zQ29ubgkJIAoKKTsKCmV4dGVybiBTbWNFcnJvckhhbmRsZXIgU21jU2V0RXJyb3JIYW5kbGVy ICgKCiAgICBTbWNFcnJvckhhbmRsZXIgCSAKCik7CgpleHRlcm4gU21zRXJyb3JIYW5kbGVyIFNt c1NldEVycm9ySGFuZGxlciAoCgogICAgU21zRXJyb3JIYW5kbGVyIAkgCgopOwoKZXh0ZXJuIHZv aWQgU21GcmVlUHJvcGVydHkgKAoKICAgIFNtUHJvcCAqCQkgCgopOwoKZXh0ZXJuIHZvaWQgU21G cmVlUmVhc29ucyAoCgogICAgaW50CQkJICwKICAgIGNoYXIgKioJCSAKCik7Cgp9IAoKCiMgNTQg Ii91c3Ivb3Blbndpbi9pbmNsdWRlL1gxMS9TaGVsbC5oIiAyCgoKIAoKCgoKIAoKCgogCiAKCiMg MTg0ICIvdXNyL29wZW53aW4vaW5jbHVkZS9YMTEvU2hlbGwuaCIKCgoKCgoKZXh0ZXJuIGNvbnN0 ICBjaGFyIFh0U2hlbGxTdHJpbmdzW107CmV4dGVybiBjb25zdCAgY2hhciBYdFI2U2hlbGxTdHJp bmdzW107CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgogCgp0eXBlZGVmIHN0cnVjdCBfU2hlbGxDbGFzc1JlYyAqU2hlbGxXaWRn ZXRDbGFzczsKdHlwZWRlZiBzdHJ1Y3QgX092ZXJyaWRlU2hlbGxDbGFzc1JlYyAqT3ZlcnJpZGVT aGVsbFdpZGdldENsYXNzOwp0eXBlZGVmIHN0cnVjdCBfV01TaGVsbENsYXNzUmVjICpXTVNoZWxs V2lkZ2V0Q2xhc3M7CnR5cGVkZWYgc3RydWN0IF9UcmFuc2llbnRTaGVsbENsYXNzUmVjICpUcmFu c2llbnRTaGVsbFdpZGdldENsYXNzOwp0eXBlZGVmIHN0cnVjdCBfVG9wTGV2ZWxTaGVsbENsYXNz UmVjICpUb3BMZXZlbFNoZWxsV2lkZ2V0Q2xhc3M7CnR5cGVkZWYgc3RydWN0IF9BcHBsaWNhdGlv blNoZWxsQ2xhc3NSZWMgKkFwcGxpY2F0aW9uU2hlbGxXaWRnZXRDbGFzczsKdHlwZWRlZiBzdHJ1 Y3QgX1Nlc3Npb25TaGVsbENsYXNzUmVjICpTZXNzaW9uU2hlbGxXaWRnZXRDbGFzczsKCgpleHRl cm4gIFdpZGdldENsYXNzIHNoZWxsV2lkZ2V0Q2xhc3M7CmV4dGVybiAgV2lkZ2V0Q2xhc3Mgb3Zl cnJpZGVTaGVsbFdpZGdldENsYXNzOwpleHRlcm4gIFdpZGdldENsYXNzIHdtU2hlbGxXaWRnZXRD bGFzczsKZXh0ZXJuICBXaWRnZXRDbGFzcyB0cmFuc2llbnRTaGVsbFdpZGdldENsYXNzOwpleHRl cm4gIFdpZGdldENsYXNzIHRvcExldmVsU2hlbGxXaWRnZXRDbGFzczsKZXh0ZXJuICBXaWRnZXRD bGFzcyBhcHBsaWNhdGlvblNoZWxsV2lkZ2V0Q2xhc3M7CmV4dGVybiAgV2lkZ2V0Q2xhc3Mgc2Vz c2lvblNoZWxsV2lkZ2V0Q2xhc3M7CgoKCiAKIyAzMSAiL3Vzci9kdC9pbmNsdWRlL1htL1htLmgi IDIKCiMgMSAiL3Vzci9vcGVud2luL2luY2x1ZGUvWDExL1hhdG9tLmgiIDEKCgoKIAoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgojIDMyICIvdXNyL2R0L2luY2x1ZGUvWG0vWG0uaCIgMgoKIAogCgoKIyAxICIv dXNyL2R0L2luY2x1ZGUvWG0vWG1TdHJEZWZzLmgiIDEKCgoKCgoKCgpleHRlcm4gIkMiIHsKCgog CiAKIAogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgNTQyNSAi L3Vzci9kdC9pbmNsdWRlL1htL1htU3RyRGVmcy5oIgoKCgp9ICAgCgoKIyAxICIvdXNyL29wZW53 aW4vaW5jbHVkZS9YMTEvU3RyaW5nRGVmcy5oIiAxCiAKIAogCgoKCiMgMjYyICIvdXNyL29wZW53 aW4vaW5jbHVkZS9YMTEvU3RyaW5nRGVmcy5oIgoKCgoKCgpleHRlcm4gY29uc3QgIGNoYXIgWHRT dHJpbmdzW107CmV4dGVybiBjb25zdCAgY2hhciBYdFI2U3RyaW5nc1tdOwoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKIyA1NDMxICIvdXNyL2R0L2luY2x1ZGUvWG0vWG1TdHJEZWZzLmgiIDIKCgoK ZXh0ZXJuICJDIiB7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp9ICAgCgoKCiMgMzcgIi91c3IvZHQvaW5jbHVk ZS9YbS9YbS5oIiAyCgojIDEgIi91c3IvZHQvaW5jbHVkZS9YbS9WaXJ0S2V5cy5oIiAxCiAKCgoK CgogCiAKCiAKIAogCgoKCgojIDEgIi91c3IvZHQvaW5jbHVkZS9YbS9YbS5oIiAxCiAKCgoKCgog CiAKCgoKCgoKCgoKCiMgMzQ4MCAiL3Vzci9kdC9pbmNsdWRlL1htL1htLmgiCgogIAojIDE3ICIv dXNyL2R0L2luY2x1ZGUvWG0vVmlydEtleXMuaCIgMgoKCgpleHRlcm4gIkMiIHsKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgpleHRlcm4g dm9pZCBYbVRyYW5zbGF0ZUtleSggCiAgICAgICAgICAgICAgICAgICAgICAgIERpc3BsYXkgKmRw eSwKCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXljb2RlLAoKCgogICAg ICAgICAgICAgICAgICAgICAgICBNb2RpZmllcnMgbW9kaWZpZXJzLAogICAgICAgICAgICAgICAg ICAgICAgICBNb2RpZmllcnMgKm1vZGlmaWVyc19yZXR1cm4sCiAgICAgICAgICAgICAgICAgICAg ICAgIEtleVN5bSAqa2V5c3ltX3JldHVybikgOwoKIAoKCgp9ICAgCgoKCiMgMzggIi91c3IvZHQv aW5jbHVkZS9YbS9YbS5oIiAyCgojIDEgIi91c3IvZHQvaW5jbHVkZS9YbS9UcmFuc2Zlci5oIiAx CiAKIAoKCgoKCgogCgoKCgoKCiMgMSAiL3Vzci9kdC9pbmNsdWRlL1htL0RyYWdEcm9wLmgiIDEK IAoKCgoKCiAKIAoKIAogCiAKCgoKCiMgMSAiL3Vzci9kdC9pbmNsdWRlL1htL0RyYWdDLmgiIDEK IAoKCgoKCiAKIAoKIAogCiAKCiAKCgoKCiMgMSAiL3Vzci9kdC9pbmNsdWRlL1htL1htLmgiIDEK IAoKCgoKCiAKIAoKCgoKCgoKCgoKIyAzNDgwICIvdXNyL2R0L2luY2x1ZGUvWG0vWG0uaCIKCiAg CiMgMTkgIi91c3IvZHQvaW5jbHVkZS9YbS9EcmFnQy5oIiAyCgojIDEgIi91c3IvZHQvaW5jbHVk ZS9YbS9EaXNwbGF5LmgiIDEKIAoKCgoKCiAKIAoKIAogCiAKCgoKCgojIDEgIi91c3IvZHQvaW5j bHVkZS9YbS9YbS5oIiAxCiAKCgoKCgogCiAKCgoKCgoKCgoKCiMgMzQ4MCAiL3Vzci9kdC9pbmNs dWRlL1htL1htLmgiCgogIAojIDE4ICIvdXNyL2R0L2luY2x1ZGUvWG0vRGlzcGxheS5oIiAyCgoK IyAxICIvdXNyL2R0L2luY2x1ZGUvWG0vRHJhZ0MuaCIgMQogCgoKCgoKIAogCgogCiAKIAoKIAoK IyAyMjYgIi91c3IvZHQvaW5jbHVkZS9YbS9EcmFnQy5oIgoKIAojIDIwICIvdXNyL2R0L2luY2x1 ZGUvWG0vRGlzcGxheS5oIiAyCgojIDEgIi91c3IvZHQvaW5jbHVkZS9YbS9Ecm9wU01nci5oIiAx CiAKCgoKCgogCiAKCiAKIAogCgoKCgojIDEgIi91c3IvZHQvaW5jbHVkZS9YbS9YbS5oIiAxCiAK CgoKCgogCiAKCgoKCgoKCgoKCiMgMzQ4MCAiL3Vzci9kdC9pbmNsdWRlL1htL1htLmgiCgogIAoj IDE3ICIvdXNyL2R0L2luY2x1ZGUvWG0vRHJvcFNNZ3IuaCIgMgoKIyAxICIvdXNyL2R0L2luY2x1 ZGUvWG0vRHJhZ0MuaCIgMQogCgoKCgoKIAogCgogCiAKIAoKIAoKIyAyMjYgIi91c3IvZHQvaW5j bHVkZS9YbS9EcmFnQy5oIgoKIAojIDE4ICIvdXNyL2R0L2luY2x1ZGUvWG0vRHJvcFNNZ3IuaCIg MgoKCgpleHRlcm4gIkMiIHsKCgoKCgoKCgoKCgoKIAogCgoKCgoKCgoKIAoKZW51bSB7IFhtRFJB R19VTkRFUl9OT05FLCBYbURSQUdfVU5ERVJfUElYTUFQLAogICAgWG1EUkFHX1VOREVSX1NIQURP V19JTiwgWG1EUkFHX1VOREVSX1NIQURPV19PVVQsCiAgICBYbURSQUdfVU5ERVJfSElHSExJR0hU IH07CgplbnVtIHsgWG1EUk9QX1NJVEVfU0lNUExFLCBYbURST1BfU0lURV9DT01QT1NJVEUsCiAg ICBYbURST1BfU0lURV9TSU1QTEVfQ0xJUF9PTkxZID0gMTI4LAogICAgWG1EUk9QX1NJVEVfQ09N UE9TSVRFX0NMSVBfT05MWSB9OwoKZW51bSB7IFhtQUJPVkUsIFhtQkVMT1cgfTsKCmVudW0geyBY bURST1BfU0lURV9BQ1RJVkUsIFhtRFJPUF9TSVRFX0lOQUNUSVZFLCBYbURST1BfU0lURV9JR05P UkUgfTsKCnR5cGVkZWYgc3RydWN0IF9YbURyYWdQcm9jQ2FsbGJhY2tTdHJ1Y3QgewogICAgaW50 CQkJCXJlYXNvbjsKICAgIFhFdmVudCAqCQlldmVudDsKICAgIFRpbWUJCQl0aW1lU3RhbXA7CglX aWRnZXQJCQlkcmFnQ29udGV4dDsKICAgIFBvc2l0aW9uCQl4LCB5OwogICAgdW5zaWduZWQgY2hh cglkcm9wU2l0ZVN0YXR1czsKICAgIHVuc2lnbmVkIGNoYXIJb3BlcmF0aW9uOwogICAgdW5zaWdu ZWQgY2hhcglvcGVyYXRpb25zOwoJQm9vbGVhbgkJCWFuaW1hdGU7Cn0gWG1EcmFnUHJvY0NhbGxi YWNrU3RydWN0LCAqIFhtRHJhZ1Byb2NDYWxsYmFjazsKCnR5cGVkZWYgc3RydWN0IF9YbURyb3BQ cm9jQ2FsbGJhY2tTdHJ1Y3QgewogICAgaW50CQkJCXJlYXNvbjsKICAgIFhFdmVudCAqCQlldmVu dDsKICAgIFRpbWUJCQl0aW1lU3RhbXA7CglXaWRnZXQJCQlkcmFnQ29udGV4dDsKICAgIFBvc2l0 aW9uCQl4LCB5OwogICAgdW5zaWduZWQgY2hhcglkcm9wU2l0ZVN0YXR1czsKICAgIHVuc2lnbmVk IGNoYXIJb3BlcmF0aW9uOwogICAgdW5zaWduZWQgY2hhcglvcGVyYXRpb25zOwoJdW5zaWduZWQg Y2hhcglkcm9wQWN0aW9uOwp9IFhtRHJvcFByb2NDYWxsYmFja1N0cnVjdCwgKiBYbURyb3BQcm9j Q2FsbGJhY2s7CgoKdHlwZWRlZiBzdHJ1Y3QgX1htRHJvcFNpdGVWaXN1YWxzUmVjIHsKCVBpeGVs CWJhY2tncm91bmQ7CglQaXhlbAlmb3JlZ3JvdW5kOwoJUGl4ZWwJdG9wU2hhZG93Q29sb3I7CglQ aXhtYXAJdG9wU2hhZG93UGl4bWFwOwoJUGl4ZWwJYm90dG9tU2hhZG93Q29sb3I7CglQaXhtYXAJ Ym90dG9tU2hhZG93UGl4bWFwOwoJRGltZW5zaW9uCXNoYWRvd1RoaWNrbmVzczsKCVBpeGVsCWhp Z2hsaWdodENvbG9yOwoJUGl4bWFwCWhpZ2hsaWdodFBpeG1hcDsKCURpbWVuc2lvbgloaWdobGln aHRUaGlja25lc3M7CglEaW1lbnNpb24JYm9yZGVyV2lkdGg7Cn0gWG1Ecm9wU2l0ZVZpc3VhbHNS ZWMsICogWG1Ecm9wU2l0ZVZpc3VhbHM7CgoKIAoKZXh0ZXJuICBXaWRnZXRDbGFzcyB4bURyb3BT aXRlTWFuYWdlck9iamVjdENsYXNzOwoKdHlwZWRlZiBzdHJ1Y3QgX1htRHJvcFNpdGVNYW5hZ2Vy Q2xhc3NSZWMgKlhtRHJvcFNpdGVNYW5hZ2VyT2JqZWN0Q2xhc3M7CnR5cGVkZWYgc3RydWN0IF9Y bURyb3BTaXRlTWFuYWdlclJlYyAqWG1Ecm9wU2l0ZU1hbmFnZXJPYmplY3Q7CgoKCgoKIAoKZXh0 ZXJuIHZvaWQgWG1Ecm9wU2l0ZVJlZ2lzdGVyKCAKICAgICAgICAgICAgICAgICAgICAgICAgV2lk Z2V0IHdpZGdldCwKICAgICAgICAgICAgICAgICAgICAgICAgQXJnTGlzdCBhcmdzLAogICAgICAg ICAgICAgICAgICAgICAgICBDYXJkaW5hbCBhcmdDb3VudCkgOwpleHRlcm4gdm9pZCBYbURyb3BT aXRlVW5yZWdpc3RlciggCiAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldCB3aWRnZXQpIDsK ZXh0ZXJuIEJvb2xlYW4gWG1Ecm9wU2l0ZVJlZ2lzdGVyZWQoCiAgICAgICAgICAgICAgICAgICAg ICAgICAgV2lkZ2V0IHdpZGdldCkgOwpleHRlcm4gdm9pZCBYbURyb3BTaXRlU3RhcnRVcGRhdGUo IAogICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQgcmVmV2lkZ2V0KSA7CmV4dGVybiB2b2lk IFhtRHJvcFNpdGVVcGRhdGUoIAogICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQgZW5jbG9z aW5nV2lkZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICBBcmdMaXN0IGFyZ3MsCiAgICAgICAg ICAgICAgICAgICAgICAgIENhcmRpbmFsIGFyZ0NvdW50KSA7CmV4dGVybiB2b2lkIFhtRHJvcFNp dGVFbmRVcGRhdGUoIAogICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQgcmVmV2lkZ2V0KSA7 CmV4dGVybiB2b2lkIFhtRHJvcFNpdGVSZXRyaWV2ZSggCiAgICAgICAgICAgICAgICAgICAgICAg IFdpZGdldCBlbmNsb3NpbmdXaWRnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgIEFyZ0xpc3Qg YXJncywKICAgICAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgYXJnQ291bnQpIDsKZXh0ZXJu IGludCBYbURyb3BTaXRlUXVlcnlTdGFja2luZ09yZGVyKCAKICAgICAgICAgICAgICAgICAgICAg ICAgV2lkZ2V0IHdpZGdldCwKICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0ICpwYXJlbnRf cnRuLAogICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQgKipjaGlsZHJlbl9ydG4sCiAgICAg ICAgICAgICAgICAgICAgICAgIENhcmRpbmFsICpudW1fY2hpbGRyZW5fcnRuKSA7CmV4dGVybiB2 b2lkIFhtRHJvcFNpdGVDb25maWd1cmVTdGFja2luZ09yZGVyKCAKICAgICAgICAgICAgICAgICAg ICAgICAgV2lkZ2V0IHdpZGdldCwKICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0IHNpYmxp bmcsCiAgICAgICAgICAgICAgICAgICAgICAgIENhcmRpbmFsIHN0YWNrX21vZGUpIDsKZXh0ZXJu IFhtRHJvcFNpdGVWaXN1YWxzIFhtRHJvcFNpdGVHZXRBY3RpdmVWaXN1YWxzKCAKICAgICAgICAg ICAgICAgICAgICAgICAgV2lkZ2V0IHdpZGdldCkgOwoKIAoKCn0gICAKCgoKIAojIDIxICIvdXNy L2R0L2luY2x1ZGUvWG0vRGlzcGxheS5oIiAyCgoKCmV4dGVybiAiQyIgewoKCgoKCgplbnVtIHsK CVhtRFJBR19OT05FLAoJWG1EUkFHX0RST1BfT05MWSwKCVhtRFJBR19QUkVGRVJfUFJFUkVHSVNU RVIsCglYbURSQUdfUFJFUkVHSVNURVIsCglYbURSQUdfUFJFRkVSX0RZTkFNSUMsCglYbURSQUdf RFlOQU1JQywKCVhtRFJBR19QUkVGRVJfUkVDRUlWRVIKfTsKCiAKCnR5cGVkZWYgc3RydWN0IF9Y bURpc3BsYXlSZWMgKlhtRGlzcGxheTsKdHlwZWRlZiBzdHJ1Y3QgX1htRGlzcGxheUNsYXNzUmVj ICpYbURpc3BsYXlDbGFzczsKZXh0ZXJuICAJV2lkZ2V0Q2xhc3MgeG1EaXNwbGF5Q2xhc3M7CgoK CiAKCmV4dGVybiBXaWRnZXQgWG1HZXREcmFnQ29udGV4dCggCiAgICAgICAgICAgICAgICAgICAg ICAgIFdpZGdldCB3LAogICAgICAgICAgICAgICAgICAgICAgICBUaW1lIHRpbWUpIDsKZXh0ZXJu IFdpZGdldCBYbUdldFhtRGlzcGxheSggCiAgICAgICAgICAgICAgICAgICAgICAgIERpc3BsYXkg KmRpc3BsYXkpIDsKCiAKCgp9ICAgCgoKCgoKIyAyMCAiL3Vzci9kdC9pbmNsdWRlL1htL0RyYWdD LmgiIDIKCgoKZXh0ZXJuICJDIiB7CgoKCiAKCgoKIAoKCnR5cGVkZWYgdW5zaWduZWQgaW50CVht SUQ7CgogCgoKCgoKCgoKCgoKCgoKCgogCgplbnVtewlYbVRPUF9MRVZFTF9FTlRFUiwJCVhtVE9Q X0xFVkVMX0xFQVZFLAoJWG1EUkFHX01PVElPTiwJCQlYbURST1BfU0lURV9FTlRFUiwKCVhtRFJP UF9TSVRFX0xFQVZFLAkJWG1EUk9QX1NUQVJULAoJWG1EUk9QX0ZJTklTSCwJCQlYbURSQUdfRFJP UF9GSU5JU0gsCglYbU9QRVJBVElPTl9DSEFOR0VECgl9IDsKCiAKZW51bXsJWG1EUk9QLAkJCQlY bURST1BfSEVMUCwKCVhtRFJPUF9DQU5DRUwsCQkJWG1EUk9QX0lOVEVSUlVQVAoJfSA7CgogCgoK CgoKZW51bXsJWG1CTEVORF9BTEwsCQkJWG1CTEVORF9TVEFURV9TT1VSQ0UsCglYbUJMRU5EX0pV U1RfU09VUkNFLAkJWG1CTEVORF9OT05FCgl9IDsKCmVudW17ICAJWG1EUk9QX0ZBSUxVUkUsCQkJ WG1EUk9QX1NVQ0NFU1MKCX0gOwoKCiAKCmVudW17CVhtQ1JfVE9QX0xFVkVMX0VOVEVSLAkJWG1D Ul9UT1BfTEVWRUxfTEVBVkUsCglYbUNSX0RSQUdfTU9USU9OLAkJWG1DUl9EUk9QX1NJVEVfRU5U RVIsCglYbUNSX0RST1BfU0lURV9MRUFWRSwJCVhtQ1JfRFJPUF9TVEFSVCwKCVhtQ1JfRFJPUF9G SU5JU0gsCQlYbUNSX0RSQUdfRFJPUF9GSU5JU0gsCglYbUNSX09QRVJBVElPTl9DSEFOR0VELAoK CV9YbU5VTUJFUl9ETkRfQ0JfUkVBU09OUwoJfSA7CgoKIAp0eXBlZGVmIHN0cnVjdCBfWG1EcmFn Q29udGV4dENsYXNzUmVjCSpYbURyYWdDb250ZXh0Q2xhc3M7CnR5cGVkZWYgc3RydWN0IF9YbURy YWdDb250ZXh0UmVjCSpYbURyYWdDb250ZXh0OwpleHRlcm4gIFdpZGdldENsYXNzIHhtRHJhZ0Nv bnRleHRDbGFzczsKCnR5cGVkZWYgc3RydWN0IF9YbUFueUlDQ0NhbGxiYWNrU3RydWN0ewogICAg aW50ICAgICAgICAgIAlyZWFzb247CiAgICBYRXZlbnQgICAgICAgICAgCSpldmVudDsKICAgIFRp bWUgICAgICAgICAgICAJdGltZVN0YW1wOwp9WG1BbnlJQ0NDYWxsYmFja1N0cnVjdCwgKlhtQW55 SUNDQ2FsbGJhY2s7Cgp0eXBlZGVmIHN0cnVjdCBfWG1Ub3BMZXZlbEVudGVyQ2FsbGJhY2tTdHJ1 Y3R7CiAgICBpbnQgICAgICAgICAgCXJlYXNvbjsKICAgIFhFdmVudCAgICAgICAgICAJKmV2ZW50 OwogICAgVGltZSAgICAgICAgICAgIAl0aW1lU3RhbXA7CiAgICBTY3JlZW4JCSpzY3JlZW47CiAg ICAgCgoKCiAgICBXaW5kb3cJCXdpbmRvdzsKICAgIFBvc2l0aW9uCQl4LCB5OwogICAgdW5zaWdu ZWQgY2hhcglkcmFnUHJvdG9jb2xTdHlsZTsKICAgIEF0b20JCWljY0hhbmRsZTsKfVhtVG9wTGV2 ZWxFbnRlckNhbGxiYWNrU3RydWN0LCAqWG1Ub3BMZXZlbEVudGVyQ2FsbGJhY2s7Cgp0eXBlZGVm IHN0cnVjdCBfWG1Ub3BMZXZlbExlYXZlQ2FsbGJhY2tTdHJ1Y3R7CiAgICBpbnQgICAgICAgICAg CXJlYXNvbjsKICAgIFhFdmVudCAgICAgICAgICAJKmV2ZW50OwogICAgVGltZSAgICAgICAgICAg IAl0aW1lU3RhbXA7CiAgICBTY3JlZW4JCSpzY3JlZW47CiAgICBXaW5kb3cJCXdpbmRvdzsKfVht VG9wTGV2ZWxMZWF2ZUNhbGxiYWNrU3RydWN0LCAqWG1Ub3BMZXZlbExlYXZlQ2FsbGJhY2s7Cgog CgoKCgp0eXBlZGVmIHN0cnVjdCBfWG1Ecm9wU2l0ZUVudGVyQ2FsbGJhY2tTdHJ1Y3R7CiAgICBp bnQgICAgICAgICAgCXJlYXNvbjsKICAgIFhFdmVudCAgICAgICAgICAJKmV2ZW50OwogICAgVGlt ZSAgICAgICAgICAgIAl0aW1lU3RhbXA7CiAgICB1bnNpZ25lZCBjaGFyCW9wZXJhdGlvbjsKICAg IHVuc2lnbmVkIGNoYXIJb3BlcmF0aW9uczsKICAgIHVuc2lnbmVkIGNoYXIJZHJvcFNpdGVTdGF0 dXM7CiAgICBQb3NpdGlvbgkJeCwgeTsKfVhtRHJvcFNpdGVFbnRlckNhbGxiYWNrU3RydWN0LCAq WG1Ecm9wU2l0ZUVudGVyQ2FsbGJhY2s7CgogCgoKCgp0eXBlZGVmIHN0cnVjdCBfWG1Ecm9wU2l0 ZUxlYXZlQ2FsbGJhY2tTdHJ1Y3R7CiAgICBpbnQgICAgICAgICAgCXJlYXNvbjsKICAgIFhFdmVu dCAgICAgICAgICAJKmV2ZW50OwogICAgVGltZSAgICAgICAgICAgIAl0aW1lU3RhbXA7Cn1YbURy b3BTaXRlTGVhdmVDYWxsYmFja1N0cnVjdCwgKlhtRHJvcFNpdGVMZWF2ZUNhbGxiYWNrOwoKdHlw ZWRlZiBzdHJ1Y3QgX1htRHJhZ01vdGlvbkNhbGxiYWNrU3RydWN0ewogICAgaW50ICAgICAgICAg IAlyZWFzb247CiAgICBYRXZlbnQgICAgICAgICAgCSpldmVudDsKICAgIFRpbWUgICAgICAgICAg ICAJdGltZVN0YW1wOwogICAgdW5zaWduZWQgY2hhcglvcGVyYXRpb247CiAgICB1bnNpZ25lZCBj aGFyCW9wZXJhdGlvbnM7CiAgICB1bnNpZ25lZCBjaGFyCWRyb3BTaXRlU3RhdHVzOwogICAgUG9z aXRpb24JCXgsIHk7Cn1YbURyYWdNb3Rpb25DYWxsYmFja1N0cnVjdCwgKlhtRHJhZ01vdGlvbkNh bGxiYWNrOwoKdHlwZWRlZiBzdHJ1Y3QgX1htT3BlcmF0aW9uQ2hhbmdlZENhbGxiYWNrU3RydWN0 ewogICAgaW50ICAgICAgICAgIAlyZWFzb247CiAgICBYRXZlbnQgICAgICAgICAgCSpldmVudDsK ICAgIFRpbWUgICAgICAgICAgICAJdGltZVN0YW1wOwogICAgdW5zaWduZWQgY2hhcglvcGVyYXRp b247CiAgICB1bnNpZ25lZCBjaGFyCW9wZXJhdGlvbnM7CiAgICB1bnNpZ25lZCBjaGFyCWRyb3BT aXRlU3RhdHVzOwp9WG1PcGVyYXRpb25DaGFuZ2VkQ2FsbGJhY2tTdHJ1Y3QsICpYbU9wZXJhdGlv bkNoYW5nZWRDYWxsYmFjazsKCnR5cGVkZWYgc3RydWN0IF9YbURyb3BTdGFydENhbGxiYWNrU3Ry dWN0ewogICAgaW50ICAgICAgICAgIAlyZWFzb247CiAgICBYRXZlbnQgICAgICAgICAgCSpldmVu dDsKICAgIFRpbWUgICAgICAgICAgICAJdGltZVN0YW1wOwogICAgdW5zaWduZWQgY2hhcglvcGVy YXRpb247CiAgICB1bnNpZ25lZCBjaGFyCW9wZXJhdGlvbnM7CiAgICB1bnNpZ25lZCBjaGFyCWRy b3BTaXRlU3RhdHVzOwogICAgdW5zaWduZWQgY2hhcglkcm9wQWN0aW9uOwogICAgUG9zaXRpb24J CXgsIHk7CiAgICBXaW5kb3cJCXdpbmRvdzsKICAgIEF0b20JCWljY0hhbmRsZTsKfVhtRHJvcFN0 YXJ0Q2FsbGJhY2tTdHJ1Y3QsICpYbURyb3BTdGFydENhbGxiYWNrOwoKdHlwZWRlZiBzdHJ1Y3Qg X1htRHJvcEZpbmlzaENhbGxiYWNrU3RydWN0ewogICAgaW50ICAgICAgICAgIAlyZWFzb247CiAg ICBYRXZlbnQgICAgICAgICAgCSpldmVudDsKICAgIFRpbWUgICAgICAgICAgICAJdGltZVN0YW1w OwogICAgdW5zaWduZWQgY2hhcglvcGVyYXRpb247CiAgICB1bnNpZ25lZCBjaGFyCW9wZXJhdGlv bnM7CiAgICB1bnNpZ25lZCBjaGFyCWRyb3BTaXRlU3RhdHVzOwogICAgdW5zaWduZWQgY2hhcglk cm9wQWN0aW9uOwogICAgdW5zaWduZWQgY2hhcgljb21wbGV0aW9uU3RhdHVzOwp9WG1Ecm9wRmlu aXNoQ2FsbGJhY2tTdHJ1Y3QsICpYbURyb3BGaW5pc2hDYWxsYmFjazsKCnR5cGVkZWYgc3RydWN0 IF9YbURyYWdEcm9wRmluaXNoQ2FsbGJhY2tTdHJ1Y3R7CiAgICBpbnQgICAgICAgICAgCXJlYXNv bjsKICAgIFhFdmVudCAgICAgICAgICAJKmV2ZW50OwogICAgVGltZSAgICAgICAgICAgIAl0aW1l U3RhbXA7Cn1YbURyYWdEcm9wRmluaXNoQ2FsbGJhY2tTdHJ1Y3QsICpYbURyYWdEcm9wRmluaXNo Q2FsbGJhY2s7CgoKIAoKZXh0ZXJuIFdpZGdldCBYbURyYWdTdGFydCggCiAgICAgICAgICAgICAg ICAgICAgICAgIFdpZGdldCB3LAogICAgICAgICAgICAgICAgICAgICAgICBYRXZlbnQgKmV2ZW50 LAogICAgICAgICAgICAgICAgICAgICAgICBBcmdMaXN0IGFyZ3MsCiAgICAgICAgICAgICAgICAg ICAgICAgIENhcmRpbmFsIG51bUFyZ3MpIDsKZXh0ZXJuIHZvaWQgWG1EcmFnQ2FuY2VsKCAKICAg ICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0IGRyYWdDb250ZXh0KSA7CmV4dGVybiBCb29sZWFu IFhtVGFyZ2V0c0FyZUNvbXBhdGlibGUoIAogICAgICAgICAgICAgICAgICAgICAgICBEaXNwbGF5 ICpkcHksCiAgICAgICAgICAgICAgICAgICAgICAgIEF0b20gKmV4cG9ydFRhcmdldHMsCiAgICAg ICAgICAgICAgICAgICAgICAgIENhcmRpbmFsIG51bUV4cG9ydFRhcmdldHMsCiAgICAgICAgICAg ICAgICAgICAgICAgIEF0b20gKmltcG9ydFRhcmdldHMsCiAgICAgICAgICAgICAgICAgICAgICAg IENhcmRpbmFsIG51bUltcG9ydFRhcmdldHMpIDsKCiAKCgoKfSAgIAoKCgogCiMgMTcgIi91c3Iv ZHQvaW5jbHVkZS9YbS9EcmFnRHJvcC5oIiAyCgojIDEgIi91c3IvZHQvaW5jbHVkZS9YbS9EcmFn SWNvbi5oIiAxCiAKCgoKCgogCiAKCiAKIAogCgoKCgojIDEgIi91c3IvZHQvaW5jbHVkZS9YbS9Y bS5oIiAxCiAKCgoKCgogCiAKCgoKCgoKCgoKCiMgMzQ4MCAiL3Vzci9kdC9pbmNsdWRlL1htL1ht LmgiCgogIAojIDE3ICIvdXNyL2R0L2luY2x1ZGUvWG0vRHJhZ0ljb24uaCIgMgoKCgpleHRlcm4g IkMiIHsKCgoKCgplbnVtIHsKCVhtQVRUQUNIX05PUlRIX1dFU1QsCglYbUFUVEFDSF9OT1JUSCwK CVhtQVRUQUNIX05PUlRIX0VBU1QsCglYbUFUVEFDSF9FQVNULAoJWG1BVFRBQ0hfU09VVEhfRUFT VCwKCVhtQVRUQUNIX1NPVVRILAoJWG1BVFRBQ0hfU09VVEhfV0VTVCwKCVhtQVRUQUNIX1dFU1Qs CglYbUFUVEFDSF9DRU5URVIsCglYbUFUVEFDSF9IT1QKfTsKCnR5cGVkZWYgc3RydWN0IF9YbURy YWdJY29uUmVjICpYbURyYWdJY29uT2JqZWN0Owp0eXBlZGVmIHN0cnVjdCBfWG1EcmFnSWNvbkNs YXNzUmVjICpYbURyYWdJY29uT2JqZWN0Q2xhc3M7CmV4dGVybiAgV2lkZ2V0Q2xhc3MgeG1EcmFn SWNvbk9iamVjdENsYXNzOwoKCiAKCmV4dGVybiBXaWRnZXQgWG1DcmVhdGVEcmFnSWNvbiggCiAg ICAgICAgICAgICAgICAgICAgICAgIFdpZGdldCBwYXJlbnQsCiAgICAgICAgICAgICAgICAgICAg ICAgIFN0cmluZyBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBBcmdMaXN0IGFyZ0xpc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgIENhcmRpbmFsIGFyZ0NvdW50KSA7CgogCgoKCn0gICAK CgoKIyAxOCAiL3Vzci9kdC9pbmNsdWRlL1htL0RyYWdEcm9wLmgiIDIKCiMgMSAiL3Vzci9kdC9p bmNsdWRlL1htL0Ryb3BUcmFucy5oIiAxCiAKCgoKCgogCiAKCiAKIAogCgoKCgoKIyAxICIvdXNy L2R0L2luY2x1ZGUvWG0vWG0uaCIgMQogCgoKCgoKIAogCgoKCgoKCgoKCgojIDM0ODAgIi91c3Iv ZHQvaW5jbHVkZS9YbS9YbS5oIgoKICAKIyAxOCAiL3Vzci9kdC9pbmNsdWRlL1htL0Ryb3BUcmFu cy5oIiAyCgoKCmV4dGVybiAiQyIgewoKCgoKCmV4dGVybiAgV2lkZ2V0Q2xhc3MgeG1Ecm9wVHJh bnNmZXJPYmplY3RDbGFzczsKCnR5cGVkZWYgc3RydWN0IF9YbURyb3BUcmFuc2ZlckNsYXNzUmVj ICogWG1Ecm9wVHJhbnNmZXJPYmplY3RDbGFzczsKdHlwZWRlZiBzdHJ1Y3QgX1htRHJvcFRyYW5z ZmVyUmVjICAgICAgKiBYbURyb3BUcmFuc2Zlck9iamVjdDsKCgoKCgoKdHlwZWRlZiBzdHJ1Y3Qg X1htRHJvcFRyYW5zZmVyRW50cnlSZWMgewoJWHRQb2ludGVyCWNsaWVudF9kYXRhOwoJQXRvbQkJ dGFyZ2V0Owp9IFhtRHJvcFRyYW5zZmVyRW50cnlSZWMsICogWG1Ecm9wVHJhbnNmZXJFbnRyeTsK CiAKCmV4dGVybiBXaWRnZXQgWG1Ecm9wVHJhbnNmZXJTdGFydCggCiAgICAgICAgICAgICAgICAg ICAgICAgIFdpZGdldCByZWZXaWRnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgIEFyZ0xpc3Qg YXJncywKICAgICAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgYXJnQ291bnQpIDsKZXh0ZXJu IHZvaWQgWG1Ecm9wVHJhbnNmZXJBZGQoIAogICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQg d2lkZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICBYbURyb3BUcmFuc2ZlckVudHJ5IHRyYW5z ZmVycywKICAgICAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgbnVtX3RyYW5zZmVycykgOwoK IAoKCgp9ICAgCgoKCiAKIyAxOSAiL3Vzci9kdC9pbmNsdWRlL1htL0RyYWdEcm9wLmgiIDIKCiMg MSAiL3Vzci9kdC9pbmNsdWRlL1htL0RyYWdPdmVyUy5oIiAxCiAKCgoKCgogCiAKCiAKIAogCgoK CgojIDEgIi91c3IvZHQvaW5jbHVkZS9YbS9YbS5oIiAxCiAKCgoKCgogCiAKCgoKCgoKCgoKCiMg MzQ4MCAiL3Vzci9kdC9pbmNsdWRlL1htL1htLmgiCgogIAojIDE3ICIvdXNyL2R0L2luY2x1ZGUv WG0vRHJhZ092ZXJTLmgiIDIKCgoKCgpleHRlcm4gIkMiIHsKCgoKIAoKCgoKCiAKCnR5cGVkZWYg c3RydWN0IF9YbURyYWdPdmVyU2hlbGxSZWMgCSpYbURyYWdPdmVyU2hlbGxXaWRnZXQ7CnR5cGVk ZWYgc3RydWN0IF9YbURyYWdPdmVyU2hlbGxDbGFzc1JlYyAJKlhtRHJhZ092ZXJTaGVsbFdpZGdl dENsYXNzOwoKZXh0ZXJuICBXaWRnZXRDbGFzcwl4bURyYWdPdmVyU2hlbGxXaWRnZXRDbGFzczsK Cgp9ICAgCgoKCiAKCiMgMjAgIi91c3IvZHQvaW5jbHVkZS9YbS9EcmFnRHJvcC5oIiAyCgoKCgoj IDE2ICIvdXNyL2R0L2luY2x1ZGUvWG0vVHJhbnNmZXIuaCIgMgoKCgpleHRlcm4gIkMiIHsKCgog CgoKCgoKCgogCgp0eXBlZGVmIGVudW0geyBYbVRSQU5TRkVSX0RPTkVfU1VDQ0VFRCA9IDAsIFht VFJBTlNGRVJfRE9ORV9GQUlMLCAKCSAgICAgICBYbVRSQU5TRkVSX0RPTkVfQ09OVElOVUUsIFht VFJBTlNGRVJfRE9ORV9ERUZBVUxUIAoJICAgICB9IFhtVHJhbnNmZXJTdGF0dXM7CgogCmVudW0g eyBYbU1PVkUgPSAoMUwgPDwgMCksIFhtQ09QWSA9ICgxTCA8PCAxKSwgCiAgICAgICBYbUxJTksg PSAoMUwgPDwgMiksIFhtT1RIRVIgfTsKCmVudW0geyBYbVNFTEVDVElPTl9ERUZBVUxUID0gMCwg WG1TRUxFQ1RJT05fSU5DUkVNRU5UQUwsCiAgICAgICBYbVNFTEVDVElPTl9QRVJTSVNULCBYbVNF TEVDVElPTl9TTkFQU0hPVCwKICAgICAgIFhtU0VMRUNUSU9OX1RSQU5TQUNUIH07CgplbnVtIHsg WG1DT05WRVJUSU5HX05PTkUgPSAwLCAKICAgICAgIFhtQ09OVkVSVElOR19TQU1FID0gMSwgCiAg ICAgICBYbUNPTlZFUlRJTkdfVFJBTlNBQ1QgPSAyLAogICAgICAgWG1DT05WRVJUSU5HX1BBUlRJ QUwgPSA0IH07CgplbnVtIHsgWG1DT05WRVJUX0RFRkFVTFQgPSAwLCBYbUNPTlZFUlRfTU9SRSwg CiAgICAgICBYbUNPTlZFUlRfTUVSR0UsIFhtQ09OVkVSVF9SRUZVU0UsIFhtQ09OVkVSVF9ET05F IH07CgogCgp0eXBlZGVmIHN0cnVjdCB7CglpbnQJCXJlYXNvbjsKCVhFdmVudAkJKmV2ZW50OwoJ QXRvbQkJc2VsZWN0aW9uOwoJQXRvbQkJdGFyZ2V0OwoJWHRQb2ludGVyCXNvdXJjZV9kYXRhOwoJ WHRQb2ludGVyCWxvY2F0aW9uX2RhdGE7CglpbnQJCWZsYWdzOwoJWHRQb2ludGVyCXBhcm07Cglp bnQJCXBhcm1fZm9ybWF0OwoJdW5zaWduZWQgbG9uZwlwYXJtX2xlbmd0aDsKCUF0b20JCXBhcm1f dHlwZTsKCWludAkJc3RhdHVzOwoJWHRQb2ludGVyCXZhbHVlOwoJQXRvbQkJdHlwZTsKCWludAkJ Zm9ybWF0OwoJdW5zaWduZWQgbG9uZwlsZW5ndGg7Cn0gWG1Db252ZXJ0Q2FsbGJhY2tTdHJ1Y3Q7 Cgp0eXBlZGVmIHN0cnVjdCB7CglpbnQJCXJlYXNvbjsKICAJWEV2ZW50CQkqZXZlbnQ7CglBdG9t CQlzZWxlY3Rpb247CglYdEVudW0JCW9wZXJhdGlvbjsJCglpbnQJCWZsYWdzOwoJWHRQb2ludGVy CXRyYW5zZmVyX2lkOwoJWHRQb2ludGVyCWRlc3RpbmF0aW9uX2RhdGE7CglYdFBvaW50ZXIJbG9j YXRpb25fZGF0YTsKCVRpbWUJCXRpbWU7Cn0gWG1EZXN0aW5hdGlvbkNhbGxiYWNrU3RydWN0OwoK dHlwZWRlZiBzdHJ1Y3QgewoJaW50CQlyZWFzb247CiAgCVhFdmVudAkJKmV2ZW50OwoJQXRvbQkJ c2VsZWN0aW9uOwoJQXRvbQkJdGFyZ2V0OwoJQXRvbQkJdHlwZTsKCVh0UG9pbnRlcgl0cmFuc2Zl cl9pZDsKCWludAkJZmxhZ3M7CglpbnQJCXJlbWFpbmluZzsKCVh0UG9pbnRlcgl2YWx1ZTsKCXVu c2lnbmVkIGxvbmcJbGVuZ3RoOwoJaW50CQlmb3JtYXQ7Cn0gWG1TZWxlY3Rpb25DYWxsYmFja1N0 cnVjdDsKCnR5cGVkZWYgc3RydWN0IHsKCWludAkJcmVhc29uOwogIAlYRXZlbnQJCSpldmVudDsK CUF0b20JCXNlbGVjdGlvbjsKCVh0UG9pbnRlcgl0cmFuc2Zlcl9pZDsKCVhtVHJhbnNmZXJTdGF0 dXMJc3RhdHVzOwoJWHRQb2ludGVyCWNsaWVudF9kYXRhOwp9IFhtVHJhbnNmZXJEb25lQ2FsbGJh Y2tTdHJ1Y3Q7Cgp0eXBlZGVmIHZvaWQgKCpYbVNlbGVjdGlvbkZpbmlzaGVkUHJvYykoV2lkZ2V0 LCBYdEVudW0sCgkJCQkJWG1UcmFuc2ZlckRvbmVDYWxsYmFja1N0cnVjdCopOwoKdm9pZCBYbVRy YW5zZmVyRG9uZShYdFBvaW50ZXIsIFhtVHJhbnNmZXJTdGF0dXMpOwp2b2lkIFhtVHJhbnNmZXJW YWx1ZShYdFBvaW50ZXIsIEF0b20sIFh0Q2FsbGJhY2tQcm9jLAoJCSAgICAgWHRQb2ludGVyLAlU aW1lKTsKdm9pZCBYbVRyYW5zZmVyU2V0UGFyYW1ldGVycyhYdFBvaW50ZXIsIFh0UG9pbnRlciwg aW50LAl1bnNpZ25lZCBsb25nLCBBdG9tKTsKdm9pZCBYbVRyYW5zZmVyU3RhcnRSZXF1ZXN0KFh0 UG9pbnRlcik7CnZvaWQgWG1UcmFuc2ZlclNlbmRSZXF1ZXN0KFh0UG9pbnRlciwgVGltZSk7CgoK fSAgIAoKCgojIDM5ICIvdXNyL2R0L2luY2x1ZGUvWG0vWG0uaCIgMgoKIyAxICIvdXNyL2R0L2lu Y2x1ZGUvWG0vUHJpbWl0aXZlLmgiIDEKIAogCgoKCgoKCiAKCgoKCgojIDEgIi91c3IvZHQvaW5j bHVkZS9YbS9YbS5oIiAxCiAKCgoKCgogCiAKCgoKCgoKCgoKCiMgMzQ4MCAiL3Vzci9kdC9pbmNs dWRlL1htL1htLmgiCgogIAojIDE1ICIvdXNyL2R0L2luY2x1ZGUvWG0vUHJpbWl0aXZlLmgiIDIK CgoKZXh0ZXJuICJDIiB7CgoKCgoKCmV4dGVybiAgV2lkZ2V0Q2xhc3MgeG1QcmltaXRpdmVXaWRn ZXRDbGFzczsKCnR5cGVkZWYgc3RydWN0IF9YbVByaW1pdGl2ZUNsYXNzUmVjICogWG1QcmltaXRp dmVXaWRnZXRDbGFzczsKdHlwZWRlZiBzdHJ1Y3QgX1htUHJpbWl0aXZlUmVjICAgICAgKiBYbVBy aW1pdGl2ZVdpZGdldDsKCgogCgoKIAoKCgp9ICAgCgoKCiAKIyA0MCAiL3Vzci9kdC9pbmNsdWRl L1htL1htLmgiIDIKCiMgMSAiL3Vzci9kdC9pbmNsdWRlL1htL01hbmFnZXIuaCIgMQogCiAKCgoK CgoKIAoKCgoKCiMgMSAiL3Vzci9kdC9pbmNsdWRlL1htL1htLmgiIDEKIAoKCgoKCiAKIAoKCgoK CgoKCgoKIyAzNDgwICIvdXNyL2R0L2luY2x1ZGUvWG0vWG0uaCIKCiAgCiMgMTUgIi91c3IvZHQv aW5jbHVkZS9YbS9NYW5hZ2VyLmgiIDIKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCmV4dGVybiAgV2lk Z2V0Q2xhc3MgeG1NYW5hZ2VyV2lkZ2V0Q2xhc3M7Cgp0eXBlZGVmIHN0cnVjdCBfWG1NYW5hZ2Vy Q2xhc3NSZWMgKiBYbU1hbmFnZXJXaWRnZXRDbGFzczsKdHlwZWRlZiBzdHJ1Y3QgX1htTWFuYWdl clJlYyAgICAgICogWG1NYW5hZ2VyV2lkZ2V0OwoKCiAKCgogCgoKCn0gICAKCgoKIAojIDQxICIv dXNyL2R0L2luY2x1ZGUvWG0vWG0uaCIgMgoKIyAxICIvdXNyL2R0L2luY2x1ZGUvWG0vR2FkZ2V0 LmgiIDEKIAogCgoKCgoKCiAKCgoKCgojIDEgIi91c3IvZHQvaW5jbHVkZS9YbS9YbS5oIiAxCiAK CgoKCgogCiAKCgoKCgoKCgoKCiMgMzQ4MCAiL3Vzci9kdC9pbmNsdWRlL1htL1htLmgiCgogIAoj IDE1ICIvdXNyL2R0L2luY2x1ZGUvWG0vR2FkZ2V0LmgiIDIKCgoKZXh0ZXJuICJDIiB7CgoKCgoK CmV4dGVybiAgV2lkZ2V0Q2xhc3MgeG1HYWRnZXRDbGFzczsKCnR5cGVkZWYgc3RydWN0IF9YbUdh ZGdldENsYXNzUmVjICogWG1HYWRnZXRDbGFzczsKdHlwZWRlZiBzdHJ1Y3QgX1htR2FkZ2V0UmVj ICAgICAgKiBYbUdhZGdldDsKCgogCgoKIAoKCgp9ICAgCgoKCiAKIyA0MiAiL3Vzci9kdC9pbmNs dWRlL1htL1htLmgiIDIKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCgoKZXh0ZXJuICBpbnQgeG1Vc2VW ZXJzaW9uOwoKCiAKCgoKIAoKCgogCgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuICAgY2hhciAgICBf WG1TREVGQVVMVF9GT05UW107ICAgICAgICAgICAgIApleHRlcm4gICBjaGFyICAgIF9YbVNERUZB VUxUX0JBQ0tHUk9VTkRbXTsgICAgICAgCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIJWG1EaXJlY3Rp b247CgoKCgoKCgoKCgoKCgplbnVtIHsKICBYbVJJR0hUX1RPX0xFRlRfVE9QX1RPX0JPVFRPTSA9 IAogICAgICAweDAxICB8IDB4MDQgIHwgMHg0MCAsCiAgWG1MRUZUX1RPX1JJR0hUX1RPUF9UT19C T1RUT00gPSAKICAgICAgMHgwMiAgfCAweDA0ICB8IDB4NDAgLAogIFhtUklHSFRfVE9fTEVGVF9C T1RUT01fVE9fVE9QID0gCiAgICAgIDB4MDEgIHwgMHgwOCAgfCAweDQwICwKICBYbUxFRlRfVE9f UklHSFRfQk9UVE9NX1RPX1RPUCA9IAogICAgICAweDAyICB8IDB4MDggIHwgMHg0MCAsCiAgWG1U T1BfVE9fQk9UVE9NX1JJR0hUX1RPX0xFRlQgPSAKICAgICAgMHgwMSAgfCAweDA0ICB8IDB4ODAg LAogIFhtVE9QX1RPX0JPVFRPTV9MRUZUX1RPX1JJR0hUID0gCiAgICAgIDB4MDIgIHwgMHgwNCAg fCAweDgwICwKICBYbUJPVFRPTV9UT19UT1BfUklHSFRfVE9fTEVGVCA9IAogICAgICAweDAxICB8 IDB4MDggIHwgMHg4MCAsCiAgWG1CT1RUT01fVE9fVE9QX0xFRlRfVE9fUklHSFQgPSAKICAgICAg MHgwMiAgfCAweDA4ICB8IDB4ODAgLAogIFhtVE9QX1RPX0JPVFRPTSA9IAogICAgICAweDA0ICB8 IDB4MDMgIHwgMHhjMCAsCiAgWG1CT1RUT01fVE9fVE9QID0gCiAgICAgIDB4MDggIHwgMHgwMyAg fCAweGMwICwKICBYbVJJR0hUX1RPX0xFRlQgPSAKICAgICAgMHgwMSAgfCAweDBjICB8IDB4YzAg LAogIFhtTEVGVF9UT19SSUdIVCA9IAogICAgICAweDAyICB8IDB4MGMgIHwgMHhjMCAsCiAgWG1E RUZBVUxUX0RJUkVDVElPTiA9IDB4ZmYKICB9OwoKCmV4dGVybiBCb29sZWFuIFhtRGlyZWN0aW9u TWF0Y2goWG1EaXJlY3Rpb24gZDEsIAoJCQkJWG1EaXJlY3Rpb24gZDIpOwpleHRlcm4gQm9vbGVh biBYbURpcmVjdGlvbk1hdGNoUGFydGlhbChYbURpcmVjdGlvbiBkMSwgCgkJCQkgICAgICAgWG1E aXJlY3Rpb24gZDIsIAoJCQkJICAgICAgIFhtRGlyZWN0aW9uIGRtYXNrKTsKCiAKCgoKCgp0eXBl ZGVmIGVudW17IFhtRk9OVF9JU19GT05ULCBYbUZPTlRfSVNfRk9OVFNFVAoKCgoJICAgICAgfSBY bUZvbnRUeXBlOwoKZW51bSB7IFhtU1RSSU5HX0RJUkVDVElPTl9MX1RPX1IsCiAgICAgICBYbVNU UklOR19ESVJFQ1RJT05fUl9UT19MLAogICAgICAgWG1TVFJJTkdfRElSRUNUSU9OX1VOU0VUID0g MywKICAgICAgIFhtU1RSSU5HX0RJUkVDVElPTl9ERUZBVUxUID0gWG1ERUZBVUxUX0RJUkVDVElP TgogICAgICAgfTsKCnR5cGVkZWYgdW5zaWduZWQgY2hhciAJWG1TdHJpbmdEaXJlY3Rpb247CnR5 cGVkZWYgdW5pb24gX19YbVN0cmluZ1JlYwkqWG1TdHJpbmc7CQkgCnR5cGVkZWYgWG1TdHJpbmcg KglYbVN0cmluZ1RhYmxlOwkJIAp0eXBlZGVmIGNoYXIgKgkJWG1TdHJpbmdDaGFyU2V0OwkgCnR5 cGVkZWYgY2hhciAqCQlYbVN0cmluZ1RhZzsJCSAKdHlwZWRlZiB1bnNpZ25lZCBjaGFyCVhtU3Ry aW5nQ29tcG9uZW50VHlwZTsJIAoKdHlwZWRlZiBzdHJ1Y3QgX19YbVJlbmRpdGlvblJlYwkgICAg ICoqWG1Gb250TGlzdEVudHJ5OyAgCnR5cGVkZWYgc3RydWN0IF9fWG1SZW5kZXJUYWJsZVJlYyAg ICAqKlhtRm9udExpc3Q7ICAgICAgIAp0eXBlZGVmIHN0cnVjdCBfWG1Gb250TGlzdENvbnRleHRS ZWMgKlhtRm9udENvbnRleHQ7ICAgIAoKdHlwZWRlZiBzdHJ1Y3QgX19YbVN0cmluZ0NvbnRleHRS ZWMgKl9YbVN0cmluZ0NvbnRleHQ7ICAKdHlwZWRlZiB1bmlvbiBfX1htU3RyaW5nUmVjICAgICAg ICAqX1htU3RyaW5nOyAgICAgICAgIAp0eXBlZGVmIHN0cnVjdCBfX1htU3RyaW5nQ29udGV4dFJl YyAqWG1TdHJpbmdDb250ZXh0OyAgIAoKZW51bXsJWG1TVFJJTkdfQ09NUE9ORU5UX1VOS05PV04s CSAgWG1TVFJJTkdfQ09NUE9ORU5UX0NIQVJTRVQsCglYbVNUUklOR19DT01QT05FTlRfVEVYVCwJ ICBYbVNUUklOR19DT01QT05FTlRfRElSRUNUSU9OLAogICAgICAgIFhtU1RSSU5HX0NPTVBPTkVO VF9TRVBBUkFUT1IsICAgICBYbVNUUklOR19DT01QT05FTlRfTE9DQUxFX1RFWFQsCglYbVNUUklO R19DT01QT05FTlRfTE9DQUxFLCAgICAgICAgWG1TVFJJTkdfQ09NUE9ORU5UX1dJREVDSEFSX1RF WFQsCglYbVNUUklOR19DT01QT05FTlRfTEFZT1VUX1BVU0gsICAgWG1TVFJJTkdfQ09NUE9ORU5U X0xBWU9VVF9QT1AsCglYbVNUUklOR19DT01QT05FTlRfUkVORElUSU9OX0JFR0lOLCBYbVNUUklO R19DT01QT05FTlRfUkVORElUSU9OX0VORCwKCVhtU1RSSU5HX0NPTVBPTkVOVF9UQUIKCSAKCX0g OwoKCgoKCgoKCgkJCSAKCgp0eXBlZGVmIGVudW0gewogICAgWG1DSEFSU0VUX1RFWFQsCQkJWG1N VUxUSUJZVEVfVEVYVCwKICAgIFhtV0lERUNIQVJfVEVYVCwgICAgICAgICAgICAgICAgICAgIFht Tk9fVEVYVAogICAgfSBYbVRleHRUeXBlOwoKdHlwZWRlZiBlbnVtIHsKICAgIFhtT1VUUFVUX0FM TCwJCQlYbU9VVFBVVF9CRVRXRUVOLAogICAgWG1PVVRQVVRfQkVHSU5OSU5HLAkJCVhtT1VUUFVU X0VORCwKICAgIFhtT1VUUFVUX0JPVEgKICAgIH0gWG1QYXJzZU1vZGVsOwoKdHlwZWRlZiB1bnNp Z25lZCBjaGFyIFhtSW5jbHVkZVN0YXR1czsKZW51bSB7CiAgWG1JTlNFUlQsCVhtVEVSTUlOQVRF LAlYbUlOVk9LRQogIH07CgogCgoKCnR5cGVkZWYgZW51bSB7CiAgICBYbVNUWUxFX1NUUklORyA9 IFhTdHJpbmdTdHlsZSwKICAgIFhtU1RZTEVfQ09NUE9VTkRfVEVYVCA9IFhDb21wb3VuZFRleHRT dHlsZSwKICAgIFhtU1RZTEVfVEVYVCA9IFhUZXh0U3R5bGUsCiAgICBYbVNUWUxFX1NUQU5EQVJE X0lDQ19URVhUID0gWFN0ZElDQ1RleHRTdHlsZSwKICAgIFhtU1RZTEVfTE9DQUxFID0gMzIsCiAg ICBYbVNUWUxFX0NPTVBPVU5EX1NUUklORwogICAgfSBYbUlDQ0VuY29kaW5nU3R5bGU7CgogCgoK CgoKCnR5cGVkZWYgc3RydWN0IF9fWG1QYXJzZU1hcHBpbmdSZWMgKlhtUGFyc2VNYXBwaW5nOwkg CnR5cGVkZWYgWG1QYXJzZU1hcHBpbmcgICAgICAgICAgICAgKlhtUGFyc2VUYWJsZTsKCiAKCgoK dHlwZWRlZiBYbUluY2x1ZGVTdGF0dXMgKCpYbVBhcnNlUHJvYykgKFh0UG9pbnRlciAgICAgKmlu X291dCwKCQkJCQlYdFBvaW50ZXIgICAgICB0ZXh0X2VuZCwKCQkJCQlYbVRleHRUeXBlICAgICB0 eXBlLAoJCQkJCVhtU3RyaW5nVGFnICAgIGxvY2FsZV90YWcsCgkJCQkJWG1QYXJzZU1hcHBpbmcg ZW50cnksCgkJCQkJaW50ICAgICAgICAgICAgcGF0dGVybl9sZW5ndGgsCgkJCQkJWG1TdHJpbmcg ICAgICAqc3RyX2luY2x1ZGUsCgkJCQkJWHRQb2ludGVyICAgICAgY2FsbF9kYXRhKTsKCgogCgoK CgoKdHlwZWRlZiBlbnVtIHsgCiAgWG1BQlNPTFVURSwJCVhtUkVMQVRJVkUKICB9IFhtT2Zmc2V0 TW9kZWw7Cgp0eXBlZGVmIHN0cnVjdCBfX1htVGFiUmVjCSpYbVRhYjsJCSAgIAp0eXBlZGVmIHN0 cnVjdCBfX1htVGFiTGlzdFJlYwkqWG1UYWJMaXN0OwkgICAKCgogCgoKCgoKIAp0eXBlZGVmIHN0 cnVjdCBfX1htUmVuZGl0aW9uUmVjCQkqKlhtUmVuZGl0aW9uOyAgICAKdHlwZWRlZiBzdHJ1Y3Qg X19YbVJlbmRlclRhYmxlUmVjCSoqWG1SZW5kZXJUYWJsZTsgIAoKdHlwZWRlZiBlbnVtIHsgCiAg WG1TS0lQLAkJWG1NRVJHRV9SRVBMQUNFLAogIFhtTUVSR0VfT0xELAkJWG1NRVJHRV9ORVcsIAog IFhtRFVQTElDQVRFCSAKICB9IFhtTWVyZ2VNb2RlOyAKCgoKCgoKCgoKZW51bSB7IFhtVU5TUEVD SUZJRURfTE9BRF9NT0RFTCwgWG1MT0FEX0RFRkVSUkVELCBYbUxPQURfSU1NRURJQVRFIH07IAoK CgoKCgoKCgoKCgoKCgoKIAoKCgogCgplbnVtewlYbUNIQU5HRV9BTEwsCQkJWG1DSEFOR0VfTk9O RSwKCVhtQ0hBTkdFX1dJRFRILAkJCVhtQ0hBTkdFX0hFSUdIVAoJfSA7CgogCgplbnVtewlYbVBJ WEVMUywJCQlYbTEwMFRIX01JTExJTUVURVJTLAoJWG0xMDAwVEhfSU5DSEVTLAkJWG0xMDBUSF9Q T0lOVFMsCglYbTEwMFRIX0ZPTlRfVU5JVFMsCQlYbUlOQ0hFUywKICAgICAgICBYbUNFTlRJTUVU RVJTLCAgICAgICAgICAgICAgICAgIFhtTUlMTElNRVRFUlMsCiAgICAgICAgWG1QT0lOVFMsICAg ICAgICAgICAgICAgICAgICAgICBYbUZPTlRfVU5JVFMKCX0gOwoKIAoKZW51bXsJWG1ERVNUUk9Z LAkJCVhtVU5NQVAsCglYbURPX05PVEhJTkcKCX0gOwplbnVtewlYbUVYUExJQ0lULAkJCVhtUE9J TlRFUgoJfSA7CiAKCgoKZW51bXsJWG1OT05FLAkJCQlYbVRBQl9HUk9VUCwKCVhtU1RJQ0tZX1RB Ql9HUk9VUCwJCVhtRVhDTFVTSVZFX1RBQl9HUk9VUAoJfSA7CgoKCiAKCgoKZW51bXsJIAkJCVht QkVMTCA9IDEKCX0gOwoKIAoKCgplbnVtIHsKICAgICAgICBYbVBFUl9TSEVMTCwJCQlYbVBFUl9X SURHRVQsCiAgICAgICAgWG1JTkhFUklUX1BPTElDWSA9IDI1NQoJfSA7Cgp0eXBlZGVmIHVuc2ln bmVkIGNoYXIgWG1JbnB1dFBvbGljeTsKCiAKCgoKZW51bXsJWG1OT19PUklFTlRBVElPTiwJCVht VkVSVElDQUwsCglYbUhPUklaT05UQUwKCX0gOwplbnVtewlYbVdPUktfQVJFQSwJCQlYbU1FTlVf QkFSLAoJWG1NRU5VX1BVTExET1dOLAkJWG1NRU5VX1BPUFVQLAoJWG1NRU5VX09QVElPTgoJfSA7 CmVudW17CVhtTk9fUEFDS0lORywJCQlYbVBBQ0tfVElHSFQsCglYbVBBQ0tfQ09MVU1OLAkJCVht UEFDS19OT05FCgl9IDsKZW51bXsgCglYbUFMSUdOTUVOVF9DT05URU5UU19UT1AgPSAzLAoJWG1B TElHTk1FTlRfQ09OVEVOVFNfQk9UVE9NCgl9IDsKZW51bXsJWG1URUFSX09GRl9FTkFCTEVELAkJ WG1URUFSX09GRl9ESVNBQkxFRAoJfSA7CmVudW17CVhtVU5QT1NULAkJIAlYbVVOUE9TVF9BTkRf UkVQTEFZCgl9IDsKZW51bXsgICBYbUxBU1RfUE9TSVRJT04gPSAtMSwgICAgICAgICAgIFhtRklS U1RfUE9TSVRJT04KCX0gOwplbnVtewlYbVBPUFVQX0RJU0FCTEVEID0gMCwJWG1QT1BVUF9LRVlC T0FSRCA9IDEsCglYbVBPUFVQX0FVVE9NQVRJQywJWG1QT1BVUF9BVVRPTUFUSUNfUkVDVVJTSVZF IH07CgogCgoKCmVudW17CVhtQ09NQk9fQk9YPTAsCQlYbURST1BfRE9XTl9DT01CT19CT1gsCglY bURST1BfRE9XTl9MSVNUCgl9IDsKCmVudW17CSAgWG1RVUlDS19OQVZJR0FURSA9IDEsIFhtSU5W QUxJRF9NQVRDSF9CRUhBVklPUgoJfSA7CgplbnVteyAgIFhtWkVST19CQVNFRCwJCVhtT05FX0JB U0VECiAgICAgICAgfSA7CgoKCiAKCgoKZW51bXsJWG1BTElHTk1FTlRfQkVHSU5OSU5HLAkJWG1B TElHTk1FTlRfQ0VOVEVSLAoJWG1BTElHTk1FTlRfRU5ECgl9IDsKZW51bXsgICBYbUFMSUdOTUVO VF9CQVNFTElORV9UT1AsICAgICAKCVhtQUxJR05NRU5UX0JBU0VMSU5FX0JPVFRPTSA9IDIsIFht QUxJR05NRU5UX1dJREdFVF9UT1AsCglYbUFMSUdOTUVOVF9XSURHRVRfQk9UVE9NCiAgIAl9IDsK IAoKCgoKIAoKCgplbnVtewlYbUZSQU1FX0dFTkVSSUNfQ0hJTEQsICAgICAgICAgIFhtRlJBTUVf V09SS0FSRUFfQ0hJTEQsCiAgICAgICAgWG1GUkFNRV9USVRMRV9DSElMRAoJfSA7CiAKCgoKZW51 bXsJWG1OX09GX01BTlkgPSAxLAkJWG1PTkVfT0ZfTUFOWSwKCVhtT05FX09GX01BTllfUk9VTkQs CQlYbU9ORV9PRl9NQU5ZX0RJQU1PTkQKCX0gOwogCgoKCmVudW17CVhtQVRUQUNIX05PTkUsCQkJ WG1BVFRBQ0hfRk9STSwKCVhtQVRUQUNIX09QUE9TSVRFX0ZPUk0sCQlYbUFUVEFDSF9XSURHRVQs CglYbUFUVEFDSF9PUFBPU0lURV9XSURHRVQsCVhtQVRUQUNIX1BPU0lUSU9OLAoJWG1BVFRBQ0hf U0VMRgoJfSA7CmVudW17CVhtUkVTSVpFX05PTkUsCQkJWG1SRVNJWkVfR1JPVywKCVhtUkVTSVpF X0FOWQoJfSA7CgogCgoKCmVudW17CVhtQ1JfTk9ORSwJCQlYbUNSX0hFTFAsCglYbUNSX1ZBTFVF X0NIQU5HRUQsCQlYbUNSX0lOQ1JFTUVOVCwKCVhtQ1JfREVDUkVNRU5ULAkJCVhtQ1JfUEFHRV9J TkNSRU1FTlQsCglYbUNSX1BBR0VfREVDUkVNRU5ULAkJWG1DUl9UT19UT1AsCglYbUNSX1RPX0JP VFRPTSwJCQlYbUNSX0RSQUcsCglYbUNSX0FDVElWQVRFLAkJCVhtQ1JfQVJNLAoJWG1DUl9ESVNB Uk0sCQkJWG1DUl9NQVAgPSAxNiwKCVhtQ1JfVU5NQVAsCQkJWG1DUl9GT0NVUywKCVhtQ1JfTE9T SU5HX0ZPQ1VTLAkJWG1DUl9NT0RJRllJTkdfVEVYVF9WQUxVRSwKCVhtQ1JfTU9WSU5HX0lOU0VS VF9DVVJTT1IsCVhtQ1JfRVhFQ1VURSwKCVhtQ1JfU0lOR0xFX1NFTEVDVCwJCVhtQ1JfTVVMVElQ TEVfU0VMRUNULAoJWG1DUl9FWFRFTkRFRF9TRUxFQ1QsCQlYbUNSX0JST1dTRV9TRUxFQ1QsCglY bUNSX0RFRkFVTFRfQUNUSU9OLAkJWG1DUl9DTElQQk9BUkRfREFUQV9SRVFVRVNULAoJWG1DUl9D TElQQk9BUkRfREFUQV9ERUxFVEUsCVhtQ1JfQ0FTQ0FESU5HLAoJWG1DUl9PSywJCQlYbUNSX0NB TkNFTCwKCVhtQ1JfQVBQTFkgPSAzNCwJCVhtQ1JfTk9fTUFUQ0gsCglYbUNSX0NPTU1BTkRfRU5U RVJFRCwJCVhtQ1JfQ09NTUFORF9DSEFOR0VELAoJWG1DUl9FWFBPU0UsCQkJWG1DUl9SRVNJWkUs CglYbUNSX0lOUFVULAkJCVhtQ1JfR0FJTl9QUklNQVJZLAoJWG1DUl9MT1NFX1BSSU1BUlksCQlY bUNSX0NSRUFURSwKCVhtQ1JfVEVBUl9PRkZfQUNUSVZBVEUsCQlYbUNSX1RFQVJfT0ZGX0RFQUNU SVZBVEUsCglYbUNSX09CU0NVUkVEX1RSQVZFUlNBTCwJWG1DUl9GT0NVU19NT1ZFRCwKCVhtQ1Jf UkVQT1NUID0gNTQsCQlYbUNSX0NPTExBUFNFRCwKCVhtQ1JfRVhQQU5ERUQsCQkJWG1DUl9TRUxF Q1QsCglYbUNSX0RSQUdfU1RBUlQsCQlYbUNSX05PX0ZPTlQsCglYbUNSX05PX1JFTkRJVElPTiwJ CVhtQ1JfUE9TVCwKCVhtQ1JfU1BJTl9ORVhULAkJCVhtQ1JfU1BJTl9QUklPUiwKCVhtQ1JfU1BJ Tl9GSVJTVCwJCVhtQ1JfU1BJTl9MQVNULAoJWG1DUl9QQUdFX1NDUk9MTEVSX0lOQ1JFTUVOVCwg ICBYbUNSX1BBR0VfU0NST0xMRVJfREVDUkVNRU5ULAoJWG1DUl9NQUpPUl9UQUIsICAgICAgICAg ICAgICAgICBYbUNSX01JTk9SX1RBQiwKCVhtQ1JfU1RBUlRfSk9CLAkJCVhtQ1JfRU5EX0pPQiwK CVhtQ1JfUEFHRV9TRVRVUCwJCVhtQ1JfUERNX05PTkUsCglYbUNSX1BETV9VUCwJCQlYbUNSX1BE TV9TVEFSVF9FUlJPUiwKCVhtQ1JfUERNX1NUQVJUX1ZYQVVUSCwJCVhtQ1JfUERNX1NUQVJUX1BY QVVUSCwgCglYbUNSX1BETV9PSywJCQlYbUNSX1BETV9DQU5DRUwsCglYbUNSX1BETV9FWElUX0VS Uk9SLAkJWG1DUl9ISUdITElHSFRfMV9TRUxFQ1RFRCwKICAgICAgICBYbUNSX0hJR0hMSUdIVF8y X1NFTEVDVEVELAlYbUNSX0hJR0hMSUdIVF9QUklNQVJZX1NFTEVDVEVELAogICAgICAgIFhtQ1Jf SElHSExJR0hUX1NFQ09OREFSWV9TRUxFQ1RFRCwKCVhtQ1JfUFJPVE9DT0xTID0gNjY2NiAgCgl9 IDsKCiAKCgoKZW51bXsJIAkJWG1FQUNIX1NJREUgPSAxLAoJWG1NQVhfU0lERSwgICAgICAgICAg ICAgWG1NSU5fU0lERQoJfSA7CgoKIAoKCgplbnVtewlYbVNMSURFUiwJCVhtVEhFUk1PTUVURVJ9 IDsKCgogCgoKCmVudW17CVhtQkFDS0dST1VORF9DT0xPUiwgICAgIFhtRk9SRUdST1VORF9DT0xP UiwgCiAgICAgICAgWG1UUk9VR0hfQ09MT1IsICAgICAgICAgWG1TSEFET1dFRF9CQUNLR1JPVU5E fSA7CgoKIAoKCgplbnVtewkgICAgICAgICAgICBYbUVUQ0hFRF9MSU5FID0gMSwgCiAgICAgICAg WG1USFVNQl9NQVJLLCAgICAgWG1ST1VORF9NQVJLIH0gOwoKCiAKCgoKZW51bXsJIAkJWG1ORUFS X1NMSURFUiA9IDEsCglYbU5FQVJfQk9SREVSCgl9IDsKCgogCgoKCiAKZW51bXsJICAKICAgICAg ICBYbUhPUl9TQ1JPTExCQVIgPSAyLCAKCVhtVkVSVF9TQ1JPTExCQVIsCglYbUNPTU1BTkRfV0lO RE9XLCAKICAgICAgICAgCiAgICAgICAgWG1NRVNTQUdFX1dJTkRPVyA9IDYsCiAgICAgICAgWG1T Q1JPTExfSE9SLCBYbVNDUk9MTF9WRVJULCBYbU5PX1NDUk9MTCwKCVhtQ0xJUF9XSU5ET1csIFht R0VORVJJQ19DSElMRAoJfSA7CgogCgoKCmVudW17CVhtQVVUT19EUkFHX0VOQUJMRUQsCQlYbUFV VE9fRFJBR19ESVNBQkxFRAoJfSA7CgogCgoKCmVudW17CVhtRU5BQkxFX1dBUlBfT04sCQlYbUVO QUJMRV9XQVJQX09GRgoJfSA7CgogCgoKCmVudW17ICAgWG1PRkYsCQkJCVhtQlVUVE9OMl9BREpV U1QsCglYbUJVVFRPTjJfVFJBTlNGRVIgfTsKCiAKCgoKZW51bXsgICBYbUFVVE9fVU5TRVQsICAg ICAgICAgICAgICAgICAgIFhtQVVUT19CRUdJTiwKICAgICAgICBYbUFVVE9fTU9USU9OLCAgICAg ICAgICAgICAgICAgIFhtQVVUT19DQU5DRUwsCiAgICAgICAgWG1BVVRPX05PX0NIQU5HRSwgICAg ICAgICAgICAgICBYbUFVVE9fQ0hBTkdFCiAgICAgICAgfTsKCiAKCgoKdHlwZWRlZiBzdHJ1Y3QK ewogICAgaW50ICAgICByZWFzb247CiAgICBYRXZlbnQgICpldmVudDsKfSBYbUFueUNhbGxiYWNr U3RydWN0OwoKdHlwZWRlZiBzdHJ1Y3QKewogICAgaW50ICAgICByZWFzb247CiAgICBYRXZlbnQg ICpldmVudDsKICAgIGludAkgICAgY2xpY2tfY291bnQ7Cn0gWG1BcnJvd0J1dHRvbkNhbGxiYWNr U3RydWN0OwoKdHlwZWRlZiBzdHJ1Y3QgX1htRHJhZ1N0YXJ0Q2FsbGJhY2tTdHJ1Y3QgewogICAg aW50ICAgICAgICAgICAgICAgICByZWFzb247CiAgICBYRXZlbnQgICAgICAgICAgICAgICpldmVu dDsKICAgIFdpZGdldCAgICAgICAgICAgICAgd2lkZ2V0OwogICAgQm9vbGVhbiAgICAgICAgICAg ICBkb2l0Owp9IFhtRHJhZ1N0YXJ0Q2FsbGJhY2tTdHJ1Y3QsICpYbURyYWdTdGFydENhbGxiYWNr OwoKdHlwZWRlZiBzdHJ1Y3QKewogICAgaW50ICAgICByZWFzb247CiAgICBYRXZlbnQgICpldmVu dDsKICAgIFhtU3RyaW5nIGl0ZW1fb3JfdGV4dDsKICAgIGludCAgICAgaXRlbV9wb3NpdGlvbjsK fSBYbUNvbWJvQm94Q2FsbGJhY2tTdHJ1Y3Q7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgICBpbnQgICAg IHJlYXNvbjsKICAgIFhFdmVudCAgKmV2ZW50OwogICAgV2luZG93ICB3aW5kb3c7Cn0gWG1EcmF3 aW5nQXJlYUNhbGxiYWNrU3RydWN0OwoKdHlwZWRlZiBzdHJ1Y3QKewogICAgaW50ICAgICByZWFz b247CiAgICBYRXZlbnQgICpldmVudDsKICAgIFdpbmRvdyAgd2luZG93OwogICAgaW50CSAgICBj bGlja19jb3VudDsKfSBYbURyYXduQnV0dG9uQ2FsbGJhY2tTdHJ1Y3Q7Cgp0eXBlZGVmIHN0cnVj dAp7CiAgICBpbnQgICAgIHJlYXNvbjsKICAgIFhFdmVudCAgKmV2ZW50OwogICAgaW50CSAgICBj bGlja19jb3VudDsKfSBYbVB1c2hCdXR0b25DYWxsYmFja1N0cnVjdDsKCnR5cGVkZWYgc3RydWN0 CnsKICAgIGludCAgICAgcmVhc29uOwogICAgWEV2ZW50ICAqZXZlbnQ7CiAgICBXaWRnZXQgIHdp ZGdldDsKICAgIGNoYXIgICAgKmRhdGE7CiAgICBjaGFyICAgICpjYWxsYmFja3N0cnVjdDsKfSBY bVJvd0NvbHVtbkNhbGxiYWNrU3RydWN0OwoKdHlwZWRlZiBzdHJ1Y3QKewogICBpbnQgcmVhc29u OwogICBYRXZlbnQgKiBldmVudDsKICAgaW50IHZhbHVlOwogICBpbnQgcGl4ZWw7Cn0gWG1TY3Jv bGxCYXJDYWxsYmFja1N0cnVjdDsKCnR5cGVkZWYgc3RydWN0CnsKICAgaW50IHJlYXNvbjsKICAg WEV2ZW50ICogZXZlbnQ7CiAgIGludCBzZXQ7Cn0gWG1Ub2dnbGVCdXR0b25DYWxsYmFja1N0cnVj dDsKCnR5cGVkZWYgc3RydWN0CnsKICAgaW50IAkgICAgIHJlYXNvbjsKICAgWEV2ZW50ICAgICpl dmVudDsKICAgWG1TdHJpbmcgIGl0ZW07CiAgIGludCAgICAgICBpdGVtX2xlbmd0aDsKICAgaW50 ICAgICAgIGl0ZW1fcG9zaXRpb247CiAgIFhtU3RyaW5nICAqc2VsZWN0ZWRfaXRlbXM7CiAgIGlu dCAgICAgICBzZWxlY3RlZF9pdGVtX2NvdW50OwogICBpbnQgICAgICAgKnNlbGVjdGVkX2l0ZW1f cG9zaXRpb25zOwogICBjaGFyICAgICAgc2VsZWN0aW9uX3R5cGU7CiAgIGNoYXIJICAgICBhdXRv X3NlbGVjdGlvbl90eXBlOwp9IFhtTGlzdENhbGxiYWNrU3RydWN0OwoKdHlwZWRlZiBzdHJ1Y3QK ewogICAgaW50IHJlYXNvbjsKICAgIFhFdmVudAkqZXZlbnQ7CiAgICBYbVN0cmluZwl2YWx1ZTsK ICAgIGludAkJbGVuZ3RoOwp9IFhtU2VsZWN0aW9uQm94Q2FsbGJhY2tTdHJ1Y3Q7Cgp0eXBlZGVm IHN0cnVjdAp7CiAgICBpbnQgcmVhc29uOwogICAgWEV2ZW50CSpldmVudDsKICAgIFhtU3RyaW5n CXZhbHVlOwogICAgaW50CQlsZW5ndGg7Cn0gWG1Db21tYW5kQ2FsbGJhY2tTdHJ1Y3Q7Cgp0eXBl ZGVmIHN0cnVjdAp7CiAgICBpbnQgCXJlYXNvbjsKICAgIFhFdmVudAkqZXZlbnQ7CiAgICBYbVN0 cmluZwl2YWx1ZTsKICAgIGludAkJbGVuZ3RoOwogICAgWG1TdHJpbmcJbWFzazsKICAgIGludAkJ bWFza19sZW5ndGg7CiAgICBYbVN0cmluZwlkaXIgOwogICAgaW50CQlkaXJfbGVuZ3RoIDsKICAg IFhtU3RyaW5nICAgIHBhdHRlcm4gOwogICAgaW50CQlwYXR0ZXJuX2xlbmd0aCA7Cn0gWG1GaWxl U2VsZWN0aW9uQm94Q2FsbGJhY2tTdHJ1Y3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgCnsKICAgaW50IHJl YXNvbjsKICAgWEV2ZW50ICogZXZlbnQ7CiAgIGludCB2YWx1ZTsKfSBYbVNjYWxlQ2FsbGJhY2tT dHJ1Y3Q7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50ICAgICAgcmVhc29uOwogIFhFdmVudCAgICpl dmVudDsKICBXaWRnZXQgICBtZW51VG9Qb3N0OwogIEJvb2xlYW4gIHBvc3RJdDsKICBXaWRnZXQg ICB0YXJnZXQ7Cn0gWG1Qb3B1cEhhbmRsZXJDYWxsYmFja1N0cnVjdDsKCnR5cGVkZWYgc3RydWN0 CnsKICBpbnQgICAgICAgICByZWFzb247CiAgWEV2ZW50ICAgICAgKmV2ZW50OwogIFdpZGdldCAg ICAgIGl0ZW07CiAgdW5zaWduZWQgY2hhciAgICAgICBuZXdfb3V0bGluZV9zdGF0ZTsKfSBYbUNv bnRhaW5lck91dGxpbmVDYWxsYmFja1N0cnVjdDsKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgICAg ICAgICAgICAgcmVhc29uOwogIFhFdmVudCAgICAgICAgICAqZXZlbnQ7CiAgV2lkZ2V0TGlzdCAg ICAgIHNlbGVjdGVkX2l0ZW1zOwogIGludCAgICAgICAgICAgICBzZWxlY3RlZF9pdGVtX2NvdW50 OwogIHVuc2lnbmVkIGNoYXIgICBhdXRvX3NlbGVjdGlvbl90eXBlOwp9IFhtQ29udGFpbmVyU2Vs ZWN0Q2FsbGJhY2tTdHJ1Y3Q7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50ICAgICAgICAgcmVhc29u OwogIFhFdmVudCAgICAgICpldmVudDsKICBpbnQgICAgICAgICBwYWdlX251bWJlcjsKICBXaWRn ZXQgICAgICBwYWdlX3dpZGdldDsKICBpbnQgICAgICAgICBwcmV2X3BhZ2VfbnVtYmVyOwogIFdp ZGdldCAgICAgIHByZXZfcGFnZV93aWRnZXQ7Cn0gWG1Ob3RlYm9va0NhbGxiYWNrU3RydWN0OwoK dHlwZWRlZiBzdHJ1Y3QKewogICAgaW50ICAgICAJCXJlYXNvbjsKICAgIFhFdmVudCAgCQkqZXZl bnQ7CiAgICBYbVJlbmRpdGlvbgkJcmVuZGl0aW9uOwogICAgY2hhcgkJKmZvbnRfbmFtZTsKICAg IFhtUmVuZGVyVGFibGUJcmVuZGVyX3RhYmxlOwogICAgWG1TdHJpbmdUYWcJCXRhZzsKfSBYbURp c3BsYXlDYWxsYmFja1N0cnVjdDsKCiAKIAoKCgoKCgoKCgoKCiAKCgoKZW51bXsJWG1NVUxUSUNM SUNLX0RJU0NBUkQsCQlYbU1VTFRJQ0xJQ0tfS0VFUAoJfSA7CiAKCgoKZW51bXsJWG1TSEFET1df SU4gPSA3LAkJWG1TSEFET1dfT1VUCgl9IDsKIAoKCgplbnVtewlYbUFSUk9XX1VQLAkJCVhtQVJS T1dfRE9XTiwKCVhtQVJST1dfTEVGVCwJCQlYbUFSUk9XX1JJR0hUCgl9IDsKIAoKCgoKZW51bXsJ WG1OT19MSU5FLAkJCVhtU0lOR0xFX0xJTkUsCglYbURPVUJMRV9MSU5FLAkJCVhtU0lOR0xFX0RB U0hFRF9MSU5FLAoJWG1ET1VCTEVfREFTSEVEX0xJTkUsCQlYbVNIQURPV19FVENIRURfSU4sCglY bVNIQURPV19FVENIRURfT1VULAkJWG1TSEFET1dfRVRDSEVEX0lOX0RBU0gsCglYbVNIQURPV19F VENIRURfT1VUX0RBU0gsCVhtSU5WQUxJRF9TRVBBUkFUT1JfVFlQRQoJfSA7CgplbnVtewlYbVBJ WE1BUCA9IDEsCQkJWG1TVFJJTkcKCX0gOwoKIAoKCgplbnVtewlYbVdJTkRPVywJCSAgICAgIAoJ WG1DVVJTT1IgPSAyLAkJICAgICBYbURSQUdfV0lORE9XID0gMwoJfSA7CgogCgoKCmVudW17CVht TUFYX09OX1RPUCwJCQlYbU1BWF9PTl9CT1RUT00sCglYbU1BWF9PTl9MRUZULAkJCVhtTUFYX09O X1JJR0hUCgl9IDsKIAoKCgoKCmVudW17CVhtU0lOR0xFX1NFTEVDVCwJCVhtTVVMVElQTEVfU0VM RUNULAoJWG1FWFRFTkRFRF9TRUxFQ1QsCQlYbUJST1dTRV9TRUxFQ1QKCX0gOwplbnVtewlYbVNU QVRJQywJCQlYbURZTkFNSUMKCX0gOwplbnVteyBYbU5PUk1BTF9NT0RFLAkJCVhtQUREX01PREUK ICAgICAgICB9IDsKIAoKCgoKCiAgICAgICAgIAplbnVtIHsgIFhtTk9fQVVUT19TRUxFQ1QsCiAg ICAgICAgWG1BVVRPX1NFTEVDVAogICAgICAgIH07CgogICAgICAgICAKZW51bSB7ICAgCiAgICAg ICAgWG1TSU5HTEUgPSAxCiAgICAgICAgfTsKCiAgICAgICAgIAplbnVtIHsgICAKICAgICAgICAg CiAgICAgICAgWG1BTllfSUNPTiA9IDIKICAgICAgICB9OwoKICAgICAgICAgCmVudW0geyAgWG1B UFBFTkQsCiAgICAgICAgWG1DTE9TRVNULAogICAgICAgIFhtRklSU1RfRklUCiAgICAgICAgfTsK CiAgICAgICAgIAplbnVtIHsgIFhtT1VUTElORSwKICAgICAgICBYbVNQQVRJQUwsCglYbURFVEFJ TAogICAgICAgIH07CgoJIAplbnVtIHsJWG1PVVRMSU5FX0JVVFRPTl9QUkVTRU5ULAoJWG1PVVRM SU5FX0JVVFRPTl9BQlNFTlQKCX07CgogICAgICAgICAKZW51bSB7ICAgCglYbUdSSUQgPSAxLAoJ WG1DRUxMUwogICAgICAgIH07CgoJIAplbnVtIHsJWG1PV05fTkVWRVIsCglYbU9XTl9BTFdBWVMs CglYbU9XTl9NVUxUSVBMRSwKCVhtT1dOX1BPU1NJQkxFX01VTFRJUExFCgl9OwoKICAgICAgICAg CmVudW0geyAgWG1HUk9XX01JTk9SLAoJWG1HUk9XX01BSk9SLAogICAgICAgIFhtR1JPV19CQUxB TkNFRAogICAgICAgIH07CgogICAgICAgICAKZW51bSB7ICBYbU1BUlFVRUUsCiAgICAgICAgWG1N QVJRVUVFX0VYVEVORF9TVEFSVCwKICAgICAgICBYbU1BUlFVRUVfRVhURU5EX0JPVEgsCiAgICAg ICAgWG1UT1VDSF9PTkxZLAogICAgICAgIFhtVE9VQ0hfT1ZFUgogICAgICAgIH07CgogICAgICAg ICAKZW51bSB7ICAgCiAgICAgICAgWG1TTkFQX1RPX0dSSUQgPSAxLAogICAgICAgIFhtQ0VOVEVS CiAgICAgICAgfTsKCiAgICAgICAgIAplbnVtIHsgIFhtQ09MTEFQU0VELAogICAgICAgIFhtRVhQ QU5ERUQKICAgICAgICB9OwoKIAoKCgoKCiAgICAgICAgIAplbnVtIHsgIFhtTEFSR0VfSUNPTiwK ICAgICAgICBYbVNNQUxMX0lDT04KICAgICAgICB9OwoKICAgICAgICAgCmVudW0geyAgWG1TRUxF Q1RFRCwKICAgICAgICBYbU5PVF9TRUxFQ1RFRAogICAgICAgIH07CgogCgoKCgoKCgogICAgICAg ICAKZW51bSB7ICAgCiAgICAgICAgIAogICAgICAgIFhtU09MSUQgPSAyLAogICAgICAgIFhtU1BJ UkFMLAogICAgICAgIFhtUElYTUFQX09WRVJMQVBfT05MWQogICAgICAgIH07CgogICAgICAgICAK ZW51bSB7ICAgCiAgICAgICAgWG1QQUdFID0gMSwKICAgICAgICBYbU1BSk9SX1RBQiwKICAgICAg ICBYbU1JTk9SX1RBQiwKICAgICAgICBYbVNUQVRVU19BUkVBLAogICAgICAgIFhtUEFHRV9TQ1JP TExFUgogICAgICAgIH07CgogCgoKCgoKIAplbnVtCnsKICAgIFhtQVJST1dTX1ZFUlRJQ0FMLAog ICAgWG1BUlJPV1NfSE9SSVpPTlRBTAp9OwoKIAplbnVtCnsKICAgIFhtQVJST1dTX0VORCwKICAg IFhtQVJST1dTX0JFR0lOTklORywKICAgIFhtQVJST1dTX1NQTElULAogICAgWG1BUlJPV1NfRkxB VF9FTkQsCiAgICBYbUFSUk9XU19GTEFUX0JFR0lOTklORwp9OwoKIAogCgplbnVtCnsKICAgIFht QVJST1dTX0lOU0VOU0lUSVZFLAogICAgWG1BUlJPV1NfSU5DUkVNRU5UX1NFTlNJVElWRSwKICAg IFhtQVJST1dTX0RFQ1JFTUVOVF9TRU5TSVRJVkUsCiAgICBYbUFSUk9XU19TRU5TSVRJVkUsCiAg ICBYbUFSUk9XU19ERUZBVUxUX1NFTlNJVElWSVRZCn07CgogCmVudW0KewogICAgWG1QT1NJVElP Tl9JTkRFWCwKICAgIFhtUE9TSVRJT05fVkFMVUUKfTsKCiAKZW51bQp7CiAgICAgCiAgICAgCiAg ICBYbU5VTUVSSUMgPSAzCn07CgogCmVudW0KewogICAgWG1WQUxJRF9WQUxVRSwKICAgIFhtQ1VS UkVOVF9WQUxVRSwKICAgIFhtTUFYSU1VTV9WQUxVRSwKICAgIFhtTUlOSU1VTV9WQUxVRSwKICAg IFhtSU5DUkVNRU5UX1ZBTFVFCn07Cgp0eXBlZGVmIHN0cnVjdAp7CiAgICBpbnQJCXJlYXNvbjsK ICAgIFhFdmVudAkqZXZlbnQ7CiAgICBXaWRnZXQgICAgICB3aWRnZXQ7CiAgICBCb29sZWFuICAg ICBkb2l0OwogICAgaW50CQlwb3NpdGlvbjsKICAgIFhtU3RyaW5nCXZhbHVlOwogICAgQm9vbGVh bgljcm9zc2VkX2JvdW5kYXJ5Owp9IFhtU3BpbkJveENhbGxiYWNrU3RydWN0OwoKCiAKCgoKCgpl bnVtewlYbVZBUklBQkxFLAkJCVhtQ09OU1RBTlQsCglYbVJFU0laRV9JRl9QT1NTSUJMRQoJfSA7 CmVudW17CVhtQVVUT01BVElDLAkJCVhtQVBQTElDQVRJT05fREVGSU5FRAoJfSA7CmVudW17CSAJ CQlYbUFTX05FRURFRCA9IDEKCX0gOwoKCgoKCgoKCgoKCiAKCgoKCgplbnVtewlYbUNPTU1BTkRf QUJPVkVfV09SS1NQQUNFLAlYbUNPTU1BTkRfQkVMT1dfV09SS1NQQUNFCgl9IDsKIAoKCgoKCmVu dW17CVhtTVVMVElfTElORV9FRElULAkJWG1TSU5HTEVfTElORV9FRElUCgl9IDsKCnR5cGVkZWYg ZW51bXsKCVhtVEVYVF9GT1JXQVJELAoJWG1URVhUX0JBQ0tXQVJECgl9IFhtVGV4dERpcmVjdGlv bjsKCnR5cGVkZWYgbG9uZyBYbVRleHRQb3NpdGlvbjsKdHlwZWRlZiBBdG9tIFhtVGV4dEZvcm1h dDsKCgoKCgoKCnR5cGVkZWYgZW51bXsKCVhtU0VMRUNUX1BPU0lUSU9OLAkJWG1TRUxFQ1RfV0hJ VEVTUEFDRSwKCVhtU0VMRUNUX1dPUkQsCQkJWG1TRUxFQ1RfTElORSwKCgoKCVhtU0VMRUNUX0FM TCwJCQlYbVNFTEVDVF9QQVJBR1JBUEgsCglYbVNFTEVDVF9PVVRfTElORQoJfSBYbVRleHRTY2Fu VHlwZSA7Cgp0eXBlZGVmIGVudW17CglYbUhJR0hMSUdIVF9OT1JNQUwsCQlYbUhJR0hMSUdIVF9T RUxFQ1RFRCwKCVhtSElHSExJR0hUX1NFQ09OREFSWV9TRUxFQ1RFRCwJWG1TRUVfREVUQUlMLAoJ WG1ISUdITElHSFRfQ09MT1JfMSwJCVhtSElHSExJR0hUX0NPTE9SXzIKCX0gWG1IaWdobGlnaHRN b2RlIDsKCgoKCgoKCgogCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBjaGFyICpwdHI7ICAgICAgICAg ICAgICAgICAgIAogICAgaW50IGxlbmd0aDsgICAgICAgICAgICAgICAgICAKICAgIFhtVGV4dEZv cm1hdCBmb3JtYXQ7ICAgICAgICAKfSBYbVRleHRCbG9ja1JlYywgKlhtVGV4dEJsb2NrOwoKdHlw ZWRlZiBzdHJ1Y3QKewogICAgaW50IHJlYXNvbjsKICAgIFhFdmVudCAgKmV2ZW50OwogICAgQm9v bGVhbiBkb2l0OwogICAgbG9uZyBjdXJySW5zZXJ0LCBuZXdJbnNlcnQ7CiAgICBsb25nIHN0YXJ0 UG9zLCBlbmRQb3M7CiAgICBYbVRleHRCbG9jayB0ZXh0Owp9IFhtVGV4dFZlcmlmeUNhbGxiYWNr U3RydWN0LCAqWG1UZXh0VmVyaWZ5UHRyOwoKIAoKCnR5cGVkZWYgc3RydWN0IHsKICAgIHdjaGFy X3QgKndjc3B0cjsgICAgICAgICAgICAgCiAgICBpbnQgbGVuZ3RoOyAgICAgICAgICAgICAgICAg IAp9IFhtVGV4dEJsb2NrUmVjV2NzLCAqWG1UZXh0QmxvY2tXY3M7Cgp0eXBlZGVmIHN0cnVjdAp7 CiAgICBpbnQgcmVhc29uOwogICAgWEV2ZW50ICAqZXZlbnQ7CiAgICBCb29sZWFuIGRvaXQ7CiAg ICBsb25nIGN1cnJJbnNlcnQsIG5ld0luc2VydDsKICAgIGxvbmcgc3RhcnRQb3MsIGVuZFBvczsK ICAgIFhtVGV4dEJsb2NrV2NzIHRleHQ7Cn0gWG1UZXh0VmVyaWZ5Q2FsbGJhY2tTdHJ1Y3RXY3Ms ICpYbVRleHRWZXJpZnlQdHJXY3M7CgogCgoKCgoKCgogCgoKCgoKCiAKCmVudW17CVhtRElBTE9H X05PTkUsCQkJWG1ESUFMT0dfQVBQTFlfQlVUVE9OLAoJWG1ESUFMT0dfQ0FOQ0VMX0JVVFRPTiwJ CVhtRElBTE9HX0RFRkFVTFRfQlVUVE9OLAoJWG1ESUFMT0dfT0tfQlVUVE9OLAkJWG1ESUFMT0df RklMVEVSX0xBQkVMLAoJWG1ESUFMT0dfRklMVEVSX1RFWFQsCQlYbURJQUxPR19IRUxQX0JVVFRP TiwKCVhtRElBTE9HX0xJU1QsCQkJWG1ESUFMT0dfTElTVF9MQUJFTCwKCVhtRElBTE9HX01FU1NB R0VfTEFCRUwsCQlYbURJQUxPR19TRUxFQ1RJT05fTEFCRUwsCglYbURJQUxPR19TWU1CT0xfTEFC RUwsCQlYbURJQUxPR19URVhULAoJWG1ESUFMT0dfU0VQQVJBVE9SLAkJWG1ESUFMT0dfRElSX0xJ U1QsCglYbURJQUxPR19ESVJfTElTVF9MQUJFTAoJfSA7CgoKCgoKCgoKIAoKZW51bXsJWG1ESUFM T0dfTU9ERUxFU1MsCQlYbURJQUxPR19QUklNQVJZX0FQUExJQ0FUSU9OX01PREFMLAoJWG1ESUFM T0dfRlVMTF9BUFBMSUNBVElPTl9NT0RBTCxYbURJQUxPR19TWVNURU1fTU9EQUwKCX0gOwoKIAoK CgogCgoKCiAKCmVudW17CVhtUExBQ0VfVE9QLAkJCVhtUExBQ0VfQUJPVkVfU0VMRUNUSU9OLAoJ WG1QTEFDRV9CRUxPV19TRUxFQ1RJT04KCX0gOwoKIAoKCgoKCiAKCmVudW17CVhtRElBTE9HX1dP UktfQVJFQSwJCVhtRElBTE9HX1BST01QVCwKCVhtRElBTE9HX1NFTEVDVElPTiwJCVhtRElBTE9H X0NPTU1BTkQsCglYbURJQUxPR19GSUxFX1NFTEVDVElPTgoJfSA7CgogCgoKCiAKCmVudW17CVht RElBTE9HX1RFTVBMQVRFLAkJWG1ESUFMT0dfRVJST1IsCglYbURJQUxPR19JTkZPUk1BVElPTiwJ CVhtRElBTE9HX01FU1NBR0UsCglYbURJQUxPR19RVUVTVElPTiwJCVhtRElBTE9HX1dBUk5JTkcs CglYbURJQUxPR19XT1JLSU5HCgl9IDsKCiAKCnR5cGVkZWYgZW51bXsKCVhtVklTSUJJTElUWV9V Tk9CU0NVUkVELAlYbVZJU0lCSUxJVFlfUEFSVElBTExZX09CU0NVUkVELAoJWG1WSVNJQklMSVRZ X0ZVTExZX09CU0NVUkVECgl9IFhtVmlzaWJpbGl0eSA7CgoKdHlwZWRlZiBlbnVtewoJWG1UUkFW RVJTRV9DVVJSRU5ULAkJWG1UUkFWRVJTRV9ORVhULAoJWG1UUkFWRVJTRV9QUkVWLAkJWG1UUkFW RVJTRV9IT01FLAoJWG1UUkFWRVJTRV9ORVhUX1RBQl9HUk9VUCwJWG1UUkFWRVJTRV9QUkVWX1RB Ql9HUk9VUCwKCVhtVFJBVkVSU0VfVVAsCQkJWG1UUkFWRVJTRV9ET1dOLAoJWG1UUkFWRVJTRV9M RUZULAkJWG1UUkFWRVJTRV9SSUdIVCwKCVhtVFJBVkVSU0VfR0xPQkFMTFlfRk9SV0FSRCwJWG1U UkFWRVJTRV9HTE9CQUxMWV9CQUNLV0FSRAoJfSBYbVRyYXZlcnNhbERpcmVjdGlvbiA7Cgp0eXBl ZGVmIHN0cnVjdCBfWG1UcmF2ZXJzZU9ic2N1cmVkQ2FsbGJhY2tTdHJ1Y3QKewlpbnQJCQlyZWFz b24gOwoJWEV2ZW50ICoJCWV2ZW50IDsKCVdpZGdldAkJCXRyYXZlcnNhbF9kZXN0aW5hdGlvbiA7 CglYbVRyYXZlcnNhbERpcmVjdGlvbglkaXJlY3Rpb24gOwoJfSBYbVRyYXZlcnNlT2JzY3VyZWRD YWxsYmFja1N0cnVjdCA7Cgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICBYbU5hdmlnYXRpb25UeXBl OwoKCiAKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgWG1CdXR0b25UeXBlOwp0eXBlZGVmIFht QnV0dG9uVHlwZSAqIFhtQnV0dG9uVHlwZVRhYmxlOwp0eXBlZGVmIEtleVN5bSAqIFhtS2V5U3lt VGFibGU7CnR5cGVkZWYgWG1TdHJpbmdDaGFyU2V0ICogWG1TdHJpbmdDaGFyU2V0VGFibGU7Cgpl bnVtewlYbVBVU0hCVVRUT04gPSAxLAkJWG1UT0dHTEVCVVRUT04sCglYbVJBRElPQlVUVE9OLAkJ CVhtQ0FTQ0FERUJVVFRPTiwKCVhtU0VQQVJBVE9SLAkJCVhtRE9VQkxFX1NFUEFSQVRPUiwKCVht VElUTEUKCX0gOwoKCgogCgoKCgoKZW51bXsJWG1NQVRDSF9ERVBUSCwgWG1EWU5BTUlDX0RFUFRI IH0gOwoKCiAKCgoKZW51bSB7IFhtUERNX05PVElGWV9GQUlMLCBYbVBETV9OT1RJRllfU1VDQ0VT UyB9IDsKCgogCgojIDEgIi91c3IvZHQvaW5jbHVkZS9YbS9UeHRQcm9wQ3YuaCIgMQogCiAKCgoK CgoKIAoKCgoKCgoKZXh0ZXJuICJDIiB7CgoKIAoKZXh0ZXJuIGludCBYbUN2dFhtU3RyaW5nVGFi bGVUb1RleHRQcm9wZXJ0eShEaXNwbGF5ICpkaXNwbGF5LAoJCQkJIFhtU3RyaW5nVGFibGUgc3Ry aW5nX3RhYmxlLAoJCQkJIGludCBjb3VudCwKCQkJCSBYbUlDQ0VuY29kaW5nU3R5bGUgc3R5bGUs CgkJCQkgWFRleHRQcm9wZXJ0eSAqdGV4dF9wcm9wX3JldHVybik7CgpleHRlcm4gaW50IFhtQ3Z0 VGV4dFByb3BlcnR5VG9YbVN0cmluZ1RhYmxlKERpc3BsYXkgKmRpc3BsYXksCgkJCQkgWFRleHRQ cm9wZXJ0eSAqdGV4dF9wcm9wLAoJCQkJIFhtU3RyaW5nVGFibGUgKnN0cmluZ190YWJsZV9yZXR1 cm4sCgkJCQkgaW50ICpjb3VudF9yZXR1cm4pOwoKIAoKCn0gICAKCgoKIAojIDEyNjYgIi91c3Iv ZHQvaW5jbHVkZS9YbS9YbS5oIiAyCgoKCiAKdHlwZWRlZiBYdFBvaW50ZXIJKCpYbVJlc291cmNl QmFzZVByb2MpKCBXaWRnZXQsIFh0UG9pbnRlcikgOwoKdHlwZWRlZiBzdHJ1Y3QgX1htU2Vjb25k YXJ5UmVzb3VyY2VEYXRhUmVjewogICAgWG1SZXNvdXJjZUJhc2VQcm9jCWJhc2VfcHJvYzsKICAg IFh0UG9pbnRlcgkJY2xpZW50X2RhdGE7CiAgICBTdHJpbmcJCW5hbWU7CiAgICBTdHJpbmcJCXJl c19jbGFzczsKICAgIFh0UmVzb3VyY2VMaXN0CXJlc291cmNlczsKICAgIENhcmRpbmFsCQludW1f cmVzb3VyY2VzOwp9WG1TZWNvbmRhcnlSZXNvdXJjZURhdGFSZWMsICpYbVNlY29uZGFyeVJlc291 cmNlRGF0YTsKCiAKCmV4dGVybiBDYXJkaW5hbCBYbUdldFNlY29uZGFyeVJlc291cmNlRGF0YSgg CiAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldENsYXNzIHdfY2xhc3MsCiAgICAgICAgICAg ICAgICAgICAgICAgIFhtU2Vjb25kYXJ5UmVzb3VyY2VEYXRhICoqc2Vjb25kYXJ5RGF0YVJ0bikg OwoKIAoKIAoKZXh0ZXJuIEJvb2xlYW4gWG0yMUluc3RhbGxJbWFnZSggCiAgICAgICAgICAgICAg ICAgICAgICAgIFhJbWFnZSAqaW1hZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmlt YWdlX25hbWUpIDsKZXh0ZXJuIEJvb2xlYW4gWG0yMVVuaW5zdGFsbEltYWdlKCAKICAgICAgICAg ICAgICAgICAgICAgICAgWEltYWdlICppbWFnZSkgOwpleHRlcm4gUGl4bWFwIFhtMjFHZXRQaXht YXAoIAogICAgICAgICAgICAgICAgICAgICAgICBTY3JlZW4gKnNjcmVlbiwKICAgICAgICAgICAg ICAgICAgICAgICAgY2hhciAqaW1hZ2VfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgUGl4 ZWwgZm9yZWdyb3VuZCwKICAgICAgICAgICAgICAgICAgICAgICAgUGl4ZWwgYmFja2dyb3VuZCkg OwpleHRlcm4gUGl4bWFwIFhtMjFHZXRQaXhtYXBCeURlcHRoKCAKICAgICAgICAgICAgICAgICAg ICAgICAgU2NyZWVuICpzY3JlZW4sCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmltYWdl X25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIFBpeGVsIGZvcmVncm91bmQsCiAgICAgICAg ICAgICAgICAgICAgICAgIFBpeGVsIGJhY2tncm91bmQsCgkJCWludCBkZXB0aCkgOwpleHRlcm4g Qm9vbGVhbiBYbTIxRGVzdHJveVBpeG1hcCggCiAgICAgICAgICAgICAgICAgICAgICAgIFNjcmVl biAqc2NyZWVuLAogICAgICAgICAgICAgICAgICAgICAgICBQaXhtYXAgcGl4bWFwKSA7CgogCgpl eHRlcm4gQm9vbGVhbiBYbUluc3RhbGxJbWFnZSgKICAgICAgICAgICAgICAgICAgICAgICAgWElt YWdlICppbWFnZSwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaW1hZ2VfbmFtZSkgOwpl eHRlcm4gQm9vbGVhbiBYbVVuaW5zdGFsbEltYWdlKAogICAgICAgICAgICAgICAgICAgICAgICBY SW1hZ2UgKmltYWdlKSA7CmV4dGVybiBQaXhtYXAgWG1HZXRQaXhtYXAoCiAgICAgICAgICAgICAg ICAgICAgICAgIFNjcmVlbiAqc2NyZWVuLAogICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpp bWFnZV9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBQaXhlbCBmb3JlZ3JvdW5kLAogICAg ICAgICAgICAgICAgICAgICAgICBQaXhlbCBiYWNrZ3JvdW5kKSA7CmV4dGVybiBQaXhtYXAgWG1H ZXRQaXhtYXBCeURlcHRoKAogICAgICAgICAgICAgICAgICAgICAgICBTY3JlZW4gKnNjcmVlbiwK ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaW1hZ2VfbmFtZSwKICAgICAgICAgICAgICAg ICAgICAgICAgUGl4ZWwgZm9yZWdyb3VuZCwKICAgICAgICAgICAgICAgICAgICAgICAgUGl4ZWwg YmFja2dyb3VuZCwKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlcHRoKSA7CmV4dGVybiBC b29sZWFuIFhtRGVzdHJveVBpeG1hcCgKICAgICAgICAgICAgICAgICAgICAgICAgU2NyZWVuICpz Y3JlZW4sCiAgICAgICAgICAgICAgICAgICAgICAgIFBpeG1hcCBwaXhtYXApIDsKCiAKCiAKIAoK Cgp0eXBlZGVmIGxvbmcgWG1PZmZzZXQ7CnR5cGVkZWYgWG1PZmZzZXQgKlhtT2Zmc2V0UHRyOwoK CgpleHRlcm4gdm9pZCBYbVJlc29sdmVBbGxQYXJ0T2Zmc2V0cyggCiAgICAgICAgICAgICAgICAg ICAgICAgIFdpZGdldENsYXNzIHdfY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgIFhtT2Zm c2V0UHRyICpvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgIFhtT2Zmc2V0UHRyICpjb25z dHJhaW50X29mZnNldCkgOwpleHRlcm4gdm9pZCBYbVJlc29sdmVQYXJ0T2Zmc2V0cyggCiAgICAg ICAgICAgICAgICAgICAgICAgIFdpZGdldENsYXNzIHdfY2xhc3MsCiAgICAgICAgICAgICAgICAg ICAgICAgIFhtT2Zmc2V0UHRyICpvZmZzZXQpIDsKCiAKCgoKIAoKCmV4dGVybiB2b2lkIFhtVXBk YXRlRGlzcGxheSggCiAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldCB3KSA7CmV4dGVybiBX aWRnZXQgWG1PYmplY3RBdFBvaW50KAoJCQlXaWRnZXQgd2lkLAoJCQlQb3NpdGlvbiB4LAoJCQlQ b3NpdGlvbiB5ICkgOwoKZXh0ZXJuIEJvb2xlYW4gWG1XaWRnZXRHZXRCYXNlbGluZXMoCiAgICAg ICAgICAgICAgICAgICAgICAgIFdpZGdldCB3aWQsCiAgICAgICAgICAgICAgICAgICAgICAgIERp bWVuc2lvbiAqKmJhc2VsaW5lcywKICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpsaW5lX2Nv dW50KTsKZXh0ZXJuIEJvb2xlYW4gWG1XaWRnZXRHZXREaXNwbGF5UmVjdCgKICAgICAgICAgICAg ICAgICAgICAgICAgV2lkZ2V0IHdpZCwKICAgICAgICAgICAgICAgICAgICAgICAgWFJlY3Rhbmds ZSAqZGlzcGxheXJlY3QpOwoKIAoKCgogCgogCgogCgogCgogCmV4dGVybiB2b2lkIFhtUmVnaXN0 ZXJDb252ZXJ0ZXJzKCB2b2lkICk7CgpleHRlcm4gdm9pZCBYbUN2dFN0cmluZ1RvVW5pdFR5cGUo IAogICAgICAgICAgICAgICAgICAgICAgICBYcm1WYWx1ZVB0ciBhcmdzLAogICAgICAgICAgICAg ICAgICAgICAgICBDYXJkaW5hbCAqbnVtX2FyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgIFhy bVZhbHVlICpmcm9tX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgWHJtVmFsdWUgKnRvX3Zh bCkgOwpleHRlcm4gY2hhciAqIFhtUmVnaXN0ZXJTZWdtZW50RW5jb2RpbmcoIAogICAgICAgICAg ICAgICAgICAgICAgICBjaGFyICpmb250bGlzdF90YWcsCiAgICAgICAgICAgICAgICAgICAgICAg IGNoYXIgKmN0X2VuY29kaW5nKSA7CmV4dGVybiBjaGFyICogWG1NYXBTZWdtZW50RW5jb2Rpbmco IAogICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpmb250bGlzdF90YWcpIDsKZXh0ZXJuIFht U3RyaW5nIFhtQ3Z0Q1RUb1htU3RyaW5nKCAKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq dGV4dCkgOwpleHRlcm4gQm9vbGVhbiBYbUN2dFRleHRUb1htU3RyaW5nKCAKICAgICAgICAgICAg ICAgICAgICAgICAgRGlzcGxheSAqZGlzcGxheSwKICAgICAgICAgICAgICAgICAgICAgICAgWHJt VmFsdWVQdHIgYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgKm51bV9hcmdz LAogICAgICAgICAgICAgICAgICAgICAgICBYcm1WYWx1ZSAqZnJvbV92YWwsCiAgICAgICAgICAg ICAgICAgICAgICAgIFhybVZhbHVlICp0b192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgIFh0 UG9pbnRlciAqY29udmVydGVyX2RhdGEpIDsKZXh0ZXJuIGNoYXIgKiBYbUN2dFhtU3RyaW5nVG9D VCggCiAgICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nIHN0cmluZykgOwpleHRlcm4gQm9v bGVhbiBYbUN2dFhtU3RyaW5nVG9UZXh0KCAKICAgICAgICAgICAgICAgICAgICAgICAgRGlzcGxh eSAqZGlzcGxheSwKICAgICAgICAgICAgICAgICAgICAgICAgWHJtVmFsdWVQdHIgYXJncywKICAg ICAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgKm51bV9hcmdzLAogICAgICAgICAgICAgICAg ICAgICAgICBYcm1WYWx1ZSAqZnJvbV92YWwsCiAgICAgICAgICAgICAgICAgICAgICAgIFhybVZh bHVlICp0b192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgIFh0UG9pbnRlciAqY29udmVydGVy X2RhdGEpIDsKCiAKCiAKCmV4dGVybiBpbnQgWG1Db252ZXJ0U3RyaW5nVG9Vbml0cygKCQkJCSAg U2NyZWVuICpzY3JlZW4sIAoJCQkJICBTdHJpbmcgc3BlYywKCQkJCSAgaW50IG9yaWVudGF0aW9u LAoJCQkJICBpbnQgdG9fdHlwZSwKCQkJCSAgWHRFbnVtICpwYXJzZV9lcnJvcik7CmV4dGVybiBp bnQgWG1Db252ZXJ0VW5pdHMoIAogICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQgd2lkZ2V0 LAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGltZW5zaW9uLAogICAgICAgICAgICAgICAg ICAgICAgICByZWdpc3RlciBpbnQgZnJvbV90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICBy ZWdpc3RlciBpbnQgZnJvbV92YWwsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGlu dCB0b190eXBlKSA7CmV4dGVybiBpbnQgWG1DdnRUb0hvcml6b250YWxQaXhlbHMoIAogICAgICAg ICAgICAgICAgICAgICAgICBTY3JlZW4gKnNjcmVlbiwKICAgICAgICAgICAgICAgICAgICAgICAg cmVnaXN0ZXIgaW50IGZyb21fdmFsLAogICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlciBp bnQgZnJvbV90eXBlKSA7CmV4dGVybiBpbnQgWG1DdnRUb1ZlcnRpY2FsUGl4ZWxzKCAKICAgICAg ICAgICAgICAgICAgICAgICAgU2NyZWVuICpzY3JlZW4sCiAgICAgICAgICAgICAgICAgICAgICAg IHJlZ2lzdGVyIGludCBmcm9tX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIg aW50IGZyb21fdHlwZSkgOwpleHRlcm4gaW50IFhtQ3Z0RnJvbUhvcml6b250YWxQaXhlbHMoIAog ICAgICAgICAgICAgICAgICAgICAgICBTY3JlZW4gKnNjcmVlbiwKICAgICAgICAgICAgICAgICAg ICAgICAgcmVnaXN0ZXIgaW50IGZyb21fdmFsLAogICAgICAgICAgICAgICAgICAgICAgICByZWdp c3RlciBpbnQgdG9fdHlwZSkgOwpleHRlcm4gaW50IFhtQ3Z0RnJvbVZlcnRpY2FsUGl4ZWxzKCAK ICAgICAgICAgICAgICAgICAgICAgICAgU2NyZWVuICpzY3JlZW4sCiAgICAgICAgICAgICAgICAg ICAgICAgIHJlZ2lzdGVyIGludCBmcm9tX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgcmVn aXN0ZXIgaW50IHRvX3R5cGUpIDsKZXh0ZXJuIHZvaWQgWG1TZXRGb250VW5pdHMoIAogICAgICAg ICAgICAgICAgICAgICAgICBEaXNwbGF5ICpkaXNwbGF5LAogICAgICAgICAgICAgICAgICAgICAg ICBpbnQgaF92YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZfdmFsdWUpIDsKZXh0 ZXJuIHZvaWQgWG1TZXRGb250VW5pdCggCiAgICAgICAgICAgICAgICAgICAgICAgIERpc3BsYXkg KmRpc3BsYXksCiAgICAgICAgICAgICAgICAgICAgICAgIGludCB2YWx1ZSkgOwoKIAoKIAoKZXh0 ZXJuIHZvaWQgWG1TZXRNZW51Q3Vyc29yKCAKICAgICAgICAgICAgICAgICAgICAgICAgRGlzcGxh eSAqZGlzcGxheSwKICAgICAgICAgICAgICAgICAgICAgICAgQ3Vyc29yIGN1cnNvcklkKSA7CmV4 dGVybiBDdXJzb3IgWG1HZXRNZW51Q3Vyc29yKCAKICAgICAgICAgICAgICAgICAgICAgICAgRGlz cGxheSAqZGlzcGxheSkgOwoKIAoKIAoKZXh0ZXJuIFdpZGdldCBYbUNyZWF0ZVNpbXBsZU1lbnVC YXIoIAogICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQgcGFyZW50LAogICAgICAgICAgICAg ICAgICAgICAgICBTdHJpbmcgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgQXJnTGlzdCBh cmdzLAogICAgICAgICAgICAgICAgICAgICAgICBDYXJkaW5hbCBhcmdfY291bnQpIDsKZXh0ZXJu IFdpZGdldCBYbUNyZWF0ZVNpbXBsZVBvcHVwTWVudSggCiAgICAgICAgICAgICAgICAgICAgICAg IFdpZGdldCBwYXJlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lLAogICAg ICAgICAgICAgICAgICAgICAgICBBcmdMaXN0IGFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAg IENhcmRpbmFsIGFyZ19jb3VudCkgOwpleHRlcm4gV2lkZ2V0IFhtQ3JlYXRlU2ltcGxlUHVsbGRv d25NZW51KCAKICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0IHBhcmVudCwKICAgICAgICAg ICAgICAgICAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIEFyZ0xp c3QgYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgQ2FyZGluYWwgYXJnX2NvdW50KSA7CmV4 dGVybiBXaWRnZXQgWG1DcmVhdGVTaW1wbGVPcHRpb25NZW51KCAKICAgICAgICAgICAgICAgICAg ICAgICAgV2lkZ2V0IHBhcmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG5hbWUs CiAgICAgICAgICAgICAgICAgICAgICAgIEFyZ0xpc3QgYXJncywKICAgICAgICAgICAgICAgICAg ICAgICAgQ2FyZGluYWwgYXJnX2NvdW50KSA7CmV4dGVybiBXaWRnZXQgWG1DcmVhdGVTaW1wbGVS YWRpb0JveCggCiAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldCBwYXJlbnQsCiAgICAgICAg ICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBBcmdM aXN0IGFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgIENhcmRpbmFsIGFyZ19jb3VudCkgOwpl eHRlcm4gV2lkZ2V0IFhtQ3JlYXRlU2ltcGxlQ2hlY2tCb3goIAogICAgICAgICAgICAgICAgICAg ICAgICBXaWRnZXQgcGFyZW50LAogICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZSwK ICAgICAgICAgICAgICAgICAgICAgICAgQXJnTGlzdCBhcmdzLAogICAgICAgICAgICAgICAgICAg ICAgICBDYXJkaW5hbCBhcmdfY291bnQpIDsKCiAKCiAKZXh0ZXJuIFdpZGdldCBYbVZhQ3JlYXRl U2ltcGxlTWVudUJhciggCgkJCVdpZGdldCBwYXJlbnQsCgkJCVN0cmluZyBuYW1lLAoJCQkuLi4p IDsKZXh0ZXJuIFdpZGdldCBYbVZhQ3JlYXRlU2ltcGxlUG9wdXBNZW51KAoJCQlXaWRnZXQgcGFy ZW50LAoJCQlTdHJpbmcgbmFtZSwKCQkJWHRDYWxsYmFja1Byb2MgY2FsbGJhY2ssCgkJCS4uLikg OwpleHRlcm4gV2lkZ2V0IFhtVmFDcmVhdGVTaW1wbGVQdWxsZG93bk1lbnUoIAoJCQlXaWRnZXQg cGFyZW50LAoJCQlTdHJpbmcgbmFtZSwKCQkJaW50IHBvc3RfZnJvbV9idXR0b24sCgkJCVh0Q2Fs bGJhY2tQcm9jIGNhbGxiYWNrLAoJCQkuLi4pIDsKZXh0ZXJuIFdpZGdldCBYbVZhQ3JlYXRlU2lt cGxlT3B0aW9uTWVudSgKCQkJV2lkZ2V0IHBhcmVudCwKCQkJU3RyaW5nIG5hbWUsCiAgICAgICAg ICAgICAgICAgICAgICAgIFhtU3RyaW5nIG9wdGlvbl9sYWJlbCwKICAgICAgICAgICAgICAgICAg ICAgICAgS2V5U3ltIG9wdGlvbl9tbmVtb25pYywKICAgICAgICAgICAgICAgICAgICAgICAgaW50 IGJ1dHRvbl9zZXQsCiAgICAgICAgICAgICAgICAgICAgICAgIFh0Q2FsbGJhY2tQcm9jIGNhbGxi YWNrLAoJCQkuLi4pIDsKZXh0ZXJuIFdpZGdldCBYbVZhQ3JlYXRlU2ltcGxlUmFkaW9Cb3goIAoJ CQlXaWRnZXQgcGFyZW50LAoJCQlTdHJpbmcgbmFtZSwKCQkJaW50IGJ1dHRvbl9zZXQsCgkJCVh0 Q2FsbGJhY2tQcm9jIGNhbGxiYWNrLAoJCQkuLi4pIDsKZXh0ZXJuIFdpZGdldCBYbVZhQ3JlYXRl U2ltcGxlQ2hlY2tCb3goIAoJCQlXaWRnZXQgcGFyZW50LAoJCQlTdHJpbmcgbmFtZSwKCQkJWHRD YWxsYmFja1Byb2MgY2FsbGJhY2ssCgkJCS4uLikgOwogCgogCgpleHRlcm4gV2lkZ2V0IFhtVHJh Y2tpbmdFdmVudCggCiAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldCB3aWRnZXQsCiAgICAg ICAgICAgICAgICAgICAgICAgIEN1cnNvciBjdXJzb3IsCgogICAgICAgICAgICAgICAgICAgICAg ICBpbnQgY29uZmluZVRvLAoKCgogICAgICAgICAgICAgICAgICAgICAgICBYRXZlbnQgKnBldikg OwpleHRlcm4gV2lkZ2V0IFhtVHJhY2tpbmdMb2NhdGUoIAogICAgICAgICAgICAgICAgICAgICAg ICBXaWRnZXQgd2lkZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICBDdXJzb3IgY3Vyc29yLAoK ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbmZpbmVUbykgOwoKCgoKIAoKIAp0eXBlZGVm IHZvaWQgKCpYbUNvbG9yUHJvYykgKFhDb2xvciAqYmdfY29sb3IsIFhDb2xvciAqZmdfY29sb3Is CglYQ29sb3IgKnNlbF9jb2xvciwgWENvbG9yICp0c19jb2xvciwgWENvbG9yICpic19jb2xvcik7 CgogCgpleHRlcm4gWG1Db2xvclByb2MgWG1TZXRDb2xvckNhbGN1bGF0aW9uKCAKICAgICAgICAg ICAgICAgICAgICAgICAgWG1Db2xvclByb2MgcHJvYykgOwpleHRlcm4gWG1Db2xvclByb2MgWG1H ZXRDb2xvckNhbGN1bGF0aW9uKCB2b2lkICkgOwpleHRlcm4gdm9pZCBYbUdldENvbG9ycyggCiAg ICAgICAgICAgICAgICAgICAgICAgIFNjcmVlbiAqc2NyZWVuLAogICAgICAgICAgICAgICAgICAg ICAgICBDb2xvcm1hcCBjb2xvcl9tYXAsCiAgICAgICAgICAgICAgICAgICAgICAgIFBpeGVsIGJh Y2tncm91bmQsCiAgICAgICAgICAgICAgICAgICAgICAgIFBpeGVsICpmb3JlZ3JvdW5kX3JldCwK ICAgICAgICAgICAgICAgICAgICAgICAgUGl4ZWwgKnRvcF9zaGFkb3dfcmV0LAogICAgICAgICAg ICAgICAgICAgICAgICBQaXhlbCAqYm90dG9tX3NoYWRvd19yZXQsCiAgICAgICAgICAgICAgICAg ICAgICAgIFBpeGVsICpzZWxlY3RfcmV0KSA7CmV4dGVybiB2b2lkIFhtQ2hhbmdlQ29sb3IoCiAg ICAgICAgICAgICAgICAgICAgICAgIFdpZGdldCB3aWRnZXQsCiAgICAgICAgICAgICAgICAgICAg ICAgIFBpeGVsIGJhY2tncm91bmQpIDsKCiAKCiAKCmV4dGVybiBYbVN0cmluZyBYbVN0cmluZ0Ny ZWF0ZSggCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnRleHQsCiAgICAgICAgICAgICAg ICAgICAgICAgIFhtU3RyaW5nQ2hhclNldCBjaGFyc2V0KSA7CmV4dGVybiBYbVN0cmluZyBYbVN0 cmluZ0NyZWF0ZVNpbXBsZSggCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnRleHQpIDsK ZXh0ZXJuIFhtU3RyaW5nIFhtU3RyaW5nQ3JlYXRlTG9jYWxpemVkKCAKICAgICAgICAgICAgICAg ICAgICAgICAgU3RyaW5nIHRleHQpIDsKZXh0ZXJuIFhtU3RyaW5nIFhtU3RyaW5nRGlyZWN0aW9u Q3JlYXRlKCAKCiAgICAgICAgICAgICAgICAgICAgICAgIGludCBkaXJlY3Rpb24pIDsKCgoKZXh0 ZXJuIFhtU3RyaW5nIFhtU3RyaW5nU2VwYXJhdG9yQ3JlYXRlKCB2b2lkICkgOwpleHRlcm4gWG1T dHJpbmcgWG1TdHJpbmdTZWdtZW50Q3JlYXRlKCAKICAgICAgICAgICAgICAgICAgICAgICAgY2hh ciAqdGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmdDaGFyU2V0IGNoYXJzZXQs CgogICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGlyZWN0aW9uLAogICAgICAgICAgICAgICAg ICAgICAgICBpbnQgc2VwYXJhdG9yKSA7CgoKCgpleHRlcm4gWG1TdHJpbmcgWG1TdHJpbmdMdG9S Q3JlYXRlKCAKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqdGV4dCwKICAgICAgICAgICAg ICAgICAgICAgICAgWG1TdHJpbmdDaGFyU2V0IGNoYXJzZXQpIDsKZXh0ZXJuIFhtU3RyaW5nIFht U3RyaW5nQ3JlYXRlTHRvUiggCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnRleHQsCiAg ICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nQ2hhclNldCBjaGFyc2V0KSA7CmV4dGVybiBC b29sZWFuIFhtU3RyaW5nSW5pdENvbnRleHQoIAogICAgICAgICAgICAgICAgICAgICAgICBYbVN0 cmluZ0NvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nIHN0 cmluZykgOwpleHRlcm4gdm9pZCBYbVN0cmluZ0ZyZWVDb250ZXh0KCAKICAgICAgICAgICAgICAg ICAgICAgICAgWG1TdHJpbmdDb250ZXh0IGNvbnRleHQpIDsKZXh0ZXJuIFhtU3RyaW5nQ29tcG9u ZW50VHlwZSBYbVN0cmluZ0dldE5leHRDb21wb25lbnQoIAogICAgICAgICAgICAgICAgICAgICAg ICBYbVN0cmluZ0NvbnRleHQgY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq KnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nQ2hhclNldCAqY2hhcnNldCwK ICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmdEaXJlY3Rpb24gKmRpcmVjdGlvbiwKICAg ICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmdDb21wb25lbnRUeXBlICp1bmtub3duX3RhZywK ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgKnVua25vd25fbGVuZ3RoLAog ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqdW5rbm93bl92YWx1ZSkgOwpl eHRlcm4gWG1TdHJpbmdDb21wb25lbnRUeXBlIFhtU3RyaW5nUGVla05leHRDb21wb25lbnQoIAog ICAgICAgICAgICAgICAgICAgICAgICBYbVN0cmluZ0NvbnRleHQgY29udGV4dCkgOwpleHRlcm4g Qm9vbGVhbiBYbVN0cmluZ0dldE5leHRTZWdtZW50KCAKICAgICAgICAgICAgICAgICAgICAgICAg WG1TdHJpbmdDb250ZXh0IGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKip0 ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICBYbVN0cmluZ0NoYXJTZXQgKmNoYXJzZXQsCiAg ICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nRGlyZWN0aW9uICpkaXJlY3Rpb24sCiAgICAg ICAgICAgICAgICAgICAgICAgIEJvb2xlYW4gKnNlcGFyYXRvcikgOwpleHRlcm4gQm9vbGVhbiBY bVN0cmluZ0dldEx0b1IoIAogICAgICAgICAgICAgICAgICAgICAgICBYbVN0cmluZyBzdHJpbmcs CiAgICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nQ2hhclNldCBjaGFyc2V0LAogICAgICAg ICAgICAgICAgICAgICAgICBjaGFyICoqdGV4dCkgOwpleHRlcm4gWG1Gb250TGlzdEVudHJ5IFht Rm9udExpc3RFbnRyeUNyZWF0ZSggCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnRhZywK ICAgICAgICAgICAgICAgICAgICAgICAgWG1Gb250VHlwZSB0eXBlLAogICAgICAgICAgICAgICAg ICAgICAgICBYdFBvaW50ZXIgZm9udCkgOwpleHRlcm4gWG1Gb250TGlzdEVudHJ5IFhtRm9udExp c3RFbnRyeUNyZWF0ZV9yKAogICAgICAgICAgICAgICAgICAgICAgICBjaGFyICp0YWcsCiAgICAg ICAgICAgICAgICAgICAgICAgIFhtRm9udFR5cGUgdHlwZSwKICAgICAgICAgICAgICAgICAgICAg ICAgWHRQb2ludGVyIGZvbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldCB3aWQpIDsK ZXh0ZXJuIHZvaWQgWG1Gb250TGlzdEVudHJ5RnJlZSggCiAgICAgICAgICAgICAgICAgICAgICAg IFhtRm9udExpc3RFbnRyeSAqZW50cnkpIDsKZXh0ZXJuIFh0UG9pbnRlciBYbUZvbnRMaXN0RW50 cnlHZXRGb250KCAKICAgICAgICAgICAgICAgICAgICAgICAgWG1Gb250TGlzdEVudHJ5IGVudHJ5 LAogICAgICAgICAgICAgICAgICAgICAgICBYbUZvbnRUeXBlICp0eXBlUmV0dXJuKSA7CmV4dGVy biBjaGFyICogWG1Gb250TGlzdEVudHJ5R2V0VGFnKCAKICAgICAgICAgICAgICAgICAgICAgICAg WG1Gb250TGlzdEVudHJ5IGVudHJ5KSA7CmV4dGVybiBYbUZvbnRMaXN0IFhtRm9udExpc3RBcHBl bmRFbnRyeSggCiAgICAgICAgICAgICAgICAgICAgICAgIFhtRm9udExpc3Qgb2xkLAogICAgICAg ICAgICAgICAgICAgICAgICBYbUZvbnRMaXN0RW50cnkgZW50cnkpIDsKZXh0ZXJuIFhtRm9udExp c3RFbnRyeSBYbUZvbnRMaXN0TmV4dEVudHJ5KCAKICAgICAgICAgICAgICAgICAgICAgICAgWG1G b250Q29udGV4dCBjb250ZXh0KSA7CmV4dGVybiBYbUZvbnRMaXN0IFhtRm9udExpc3RSZW1vdmVF bnRyeSggCiAgICAgICAgICAgICAgICAgICAgICAgIFhtRm9udExpc3Qgb2xkLAogICAgICAgICAg ICAgICAgICAgICAgICBYbUZvbnRMaXN0RW50cnkgZW50cnkpIDsKZXh0ZXJuIFhtRm9udExpc3RF bnRyeSBYbUZvbnRMaXN0RW50cnlMb2FkKCAKICAgICAgICAgICAgICAgICAgICAgICAgRGlzcGxh eSAqZGlzcGxheSwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZm9udE5hbWUsCiAgICAg ICAgICAgICAgICAgICAgICAgIFhtRm9udFR5cGUgdHlwZSwKICAgICAgICAgICAgICAgICAgICAg ICAgY2hhciAqdGFnKSA7CmV4dGVybiBYbUZvbnRMaXN0IFhtRm9udExpc3RDcmVhdGUoIAogICAg ICAgICAgICAgICAgICAgICAgICBYRm9udFN0cnVjdCAqZm9udCwKICAgICAgICAgICAgICAgICAg ICAgICAgWG1TdHJpbmdDaGFyU2V0IGNoYXJzZXQpIDsKZXh0ZXJuIFhtRm9udExpc3QgWG1Gb250 TGlzdENyZWF0ZV9yKAogICAgICAgICAgICAgICAgICAgICAgICBYRm9udFN0cnVjdCAqZm9udCwK ICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmdDaGFyU2V0IGNoYXJzZXQsCiAgICAgICAg ICAgICAgICAgICAgICAgIFdpZGdldCB3aWQpIDsKZXh0ZXJuIFhtRm9udExpc3QgWG1TdHJpbmdD cmVhdGVGb250TGlzdCggCiAgICAgICAgICAgICAgICAgICAgICAgIFhGb250U3RydWN0ICpmb250 LAogICAgICAgICAgICAgICAgICAgICAgICBYbVN0cmluZ0NoYXJTZXQgY2hhcnNldCkgOwpleHRl cm4gWG1Gb250TGlzdCBYbVN0cmluZ0NyZWF0ZUZvbnRMaXN0X3IoCiAgICAgICAgICAgICAgICAg ICAgICAgIFhGb250U3RydWN0ICpmb250LAogICAgICAgICAgICAgICAgICAgICAgICBYbVN0cmlu Z0NoYXJTZXQgY2hhcnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0IHdpZCkgOwpl eHRlcm4gdm9pZCBYbUZvbnRMaXN0RnJlZSggCiAgICAgICAgICAgICAgICAgICAgICAgIFhtRm9u dExpc3QgZm9udGxpc3QpIDsKZXh0ZXJuIFhtRm9udExpc3QgWG1Gb250TGlzdEFkZCggCiAgICAg ICAgICAgICAgICAgICAgICAgIFhtRm9udExpc3Qgb2xkLAogICAgICAgICAgICAgICAgICAgICAg ICBYRm9udFN0cnVjdCAqZm9udCwKICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmdDaGFy U2V0IGNoYXJzZXQpIDsKZXh0ZXJuIFhtRm9udExpc3QgWG1Gb250TGlzdENvcHkoIAogICAgICAg ICAgICAgICAgICAgICAgICBYbUZvbnRMaXN0IGZvbnRsaXN0KSA7CmV4dGVybiBCb29sZWFuIFht Rm9udExpc3RJbml0Rm9udENvbnRleHQoIAogICAgICAgICAgICAgICAgICAgICAgICBYbUZvbnRD b250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICBYbUZvbnRMaXN0IGZvbnRs aXN0KSA7CmV4dGVybiBCb29sZWFuIFhtRm9udExpc3RHZXROZXh0Rm9udCggCiAgICAgICAgICAg ICAgICAgICAgICAgIFhtRm9udENvbnRleHQgY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAg ICAgWG1TdHJpbmdDaGFyU2V0ICpjaGFyc2V0LAogICAgICAgICAgICAgICAgICAgICAgICBYRm9u dFN0cnVjdCAqKmZvbnQpIDsKZXh0ZXJuIHZvaWQgWG1Gb250TGlzdEZyZWVGb250Q29udGV4dCgg CiAgICAgICAgICAgICAgICAgICAgICAgIFhtRm9udENvbnRleHQgY29udGV4dCkgOwpleHRlcm4g WG1TdHJpbmcgWG1TdHJpbmdDb25jYXQoIAogICAgICAgICAgICAgICAgICAgICAgICBYbVN0cmlu ZyBhLAogICAgICAgICAgICAgICAgICAgICAgICBYbVN0cmluZyBiKSA7CmV4dGVybiBYbVN0cmlu ZyBYbVN0cmluZ0NvbmNhdEFuZEZyZWUoCgkJCVhtU3RyaW5nIGEsIAoJCQlYbVN0cmluZyBiKSA7 CmV4dGVybiBYbVN0cmluZyBYbVN0cmluZ05Db25jYXQoIAogICAgICAgICAgICAgICAgICAgICAg ICBYbVN0cmluZyBmaXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmcgc2Vjb25k LAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgbikgOwpleHRlcm4gWG1TdHJpbmcgWG1TdHJp bmdDb3B5KCAKICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmcgc3RyaW5nKSA7CmV4dGVy biBYbVN0cmluZyBYbVN0cmluZ05Db3B5KCAKICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJp bmcgc3RyLAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgbikgOwpleHRlcm4gQm9vbGVhbiBY bVN0cmluZ0J5dGVDb21wYXJlKCAKICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmcgYTEs CiAgICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nIGIxKSA7CmV4dGVybiBCb29sZWFuIFht U3RyaW5nQ29tcGFyZSggCiAgICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nIGEsCiAgICAg ICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nIGIpIDsKZXh0ZXJuIGludCBYbVN0cmluZ0xlbmd0 aCggCiAgICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nIHN0cmluZykgOwpleHRlcm4gQm9v bGVhbiBYbVN0cmluZ0VtcHR5KCAKICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmcgc3Ry aW5nKSA7CmV4dGVybiBCb29sZWFuIFhtU3RyaW5nSXNWb2lkKFhtU3RyaW5nIHN0cmluZyk7IApl eHRlcm4gQm9vbGVhbiBYbVN0cmluZ0hhc1N1YnN0cmluZyggCiAgICAgICAgICAgICAgICAgICAg ICAgIFhtU3RyaW5nIHN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmcgc3Vi c3RyaW5nKSA7CmV4dGVybiB2b2lkIFhtU3RyaW5nRnJlZSggCiAgICAgICAgICAgICAgICAgICAg ICAgIFhtU3RyaW5nIHN0cmluZykgOwpleHRlcm4gRGltZW5zaW9uIFhtU3RyaW5nQmFzZWxpbmUo IAogICAgICAgICAgICAgICAgICAgICAgICBYbUZvbnRMaXN0IGZvbnRsaXN0LAogICAgICAgICAg ICAgICAgICAgICAgICBYbVN0cmluZyBzdHJpbmcpIDsKZXh0ZXJuIERpbWVuc2lvbiBYbVN0cmlu Z1dpZHRoKCAKICAgICAgICAgICAgICAgICAgICAgICAgWG1Gb250TGlzdCBmb250bGlzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmcgc3RyaW5nKSA7CmV4dGVybiBEaW1lbnNpb24g WG1TdHJpbmdIZWlnaHQoIAogICAgICAgICAgICAgICAgICAgICAgICBYbUZvbnRMaXN0IGZvbnRs aXN0LAogICAgICAgICAgICAgICAgICAgICAgICBYbVN0cmluZyBzdHJpbmcpIDsKZXh0ZXJuIHZv aWQgWG1TdHJpbmdFeHRlbnQoIAogICAgICAgICAgICAgICAgICAgICAgICBYbUZvbnRMaXN0IGZv bnRsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICBYbVN0cmluZyBzdHJpbmcsCiAgICAgICAg ICAgICAgICAgICAgICAgIERpbWVuc2lvbiAqd2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICAg IERpbWVuc2lvbiAqaGVpZ2h0KSA7CmV4dGVybiBpbnQgWG1TdHJpbmdMaW5lQ291bnQoIAogICAg ICAgICAgICAgICAgICAgICAgICBYbVN0cmluZyBzdHJpbmcpIDsKZXh0ZXJuIHZvaWQgWG1TdHJp bmdEcmF3KCAKICAgICAgICAgICAgICAgICAgICAgICAgRGlzcGxheSAqZCwKICAgICAgICAgICAg ICAgICAgICAgICAgV2luZG93IHcsCiAgICAgICAgICAgICAgICAgICAgICAgIFhtRm9udExpc3Qg Zm9udGxpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nIHN0cmluZywKICAgICAg ICAgICAgICAgICAgICAgICAgR0MgZ2MsCgogICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwK ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHksCiAgICAgICAgICAgICAgICAgICAgICAgIGlu dCB3aWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGFsaWduLAogICAg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGF5X2RpciwKCgoKCgoKCiAgICAgICAg ICAgICAgICAgICAgICAgIFhSZWN0YW5nbGUgKmNsaXApIDsKZXh0ZXJuIHZvaWQgWG1TdHJpbmdE cmF3SW1hZ2UoIAogICAgICAgICAgICAgICAgICAgICAgICBEaXNwbGF5ICpkLAogICAgICAgICAg ICAgICAgICAgICAgICBXaW5kb3cgdywKICAgICAgICAgICAgICAgICAgICAgICAgWG1Gb250TGlz dCBmb250bGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgWG1TdHJpbmcgc3RyaW5nLAogICAg ICAgICAgICAgICAgICAgICAgICBHQyBnYywKCiAgICAgICAgICAgICAgICAgICAgICAgIGludCB4 LAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgeSwKICAgICAgICAgICAgICAgICAgICAgICAg aW50IHdpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYWxpZ24sCiAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsYXlfZGlyLAoKCgoKCgoKICAgICAg ICAgICAgICAgICAgICAgICAgWFJlY3RhbmdsZSAqY2xpcCkgOwpleHRlcm4gdm9pZCBYbVN0cmlu Z0RyYXdVbmRlcmxpbmUoIAogICAgICAgICAgICAgICAgICAgICAgICBEaXNwbGF5ICpkLAogICAg ICAgICAgICAgICAgICAgICAgICBXaW5kb3cgdywKICAgICAgICAgICAgICAgICAgICAgICAgWG1G b250TGlzdCBmbnRsc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIFhtU3RyaW5nIHN0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgR0MgZ2MsCgogICAgICAgICAgICAgICAgICAgICAgICBpbnQg eCwKICAgICAgICAgICAgICAgICAgICAgICAgaW50IHksCiAgICAgICAgICAgICAgICAgICAgICAg IGludCB3aWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGFsaWduLAog ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGF5X2RpciwKCgoKCgoKCiAgICAg ICAgICAgICAgICAgICAgICAgIFhSZWN0YW5nbGUgKmNsaXAsCiAgICAgICAgICAgICAgICAgICAg ICAgIFhtU3RyaW5nIHVuZGVyKSA7CmV4dGVybiB1bnNpZ25lZCBpbnQgWG1DdnRYbVN0cmluZ1Rv Qnl0ZVN0cmVhbSgKCQkJWG1TdHJpbmcgc3RyaW5nLAogICAgICAgIAkgICAgICAgIHVuc2lnbmVk IGNoYXIgKipwcm9wX3JldHVybik7CmV4dGVybiBYbVN0cmluZyBYbUN2dEJ5dGVTdHJlYW1Ub1ht U3RyaW5nKAogICAgICAgIAkgICAgICAgIHVuc2lnbmVkIGNoYXIgKnByb3BlcnR5KTsKZXh0ZXJu IHVuc2lnbmVkIGludCBYbVN0cmluZ0J5dGVTdHJlYW1MZW5ndGgodW5zaWduZWQgY2hhciAqc3Ry aW5nKTsKZXh0ZXJuIFhtU3RyaW5nQ29tcG9uZW50VHlwZSBYbVN0cmluZ1BlZWtOZXh0VHJpcGxl KFhtU3RyaW5nQ29udGV4dCBjb250ZXh0KTsKZXh0ZXJuIFhtU3RyaW5nQ29tcG9uZW50VHlwZSBY bVN0cmluZ0dldE5leHRUcmlwbGUoWG1TdHJpbmdDb250ZXh0IGNvbnRleHQsCgkJCQkJCSAgIHVu c2lnbmVkIGludCAqbGVuZ3RoLAoJCQkJCQkgICBYdFBvaW50ZXIgKnZhbHVlKTsKZXh0ZXJuIFht U3RyaW5nIFhtU3RyaW5nQ29tcG9uZW50Q3JlYXRlKFhtU3RyaW5nQ29tcG9uZW50VHlwZSB0YWcs CgkJCQkJdW5zaWduZWQgaW50IGxlbmd0aCwKCQkJCQlYdFBvaW50ZXIgdmFsdWUpOwpleHRlcm4g WHRQb2ludGVyIFhtU3RyaW5nVW5wYXJzZShYbVN0cmluZyBzdHJpbmcsCgkJCQkgWG1TdHJpbmdU YWcgdGFnLAoJCQkJIFhtVGV4dFR5cGUgdGFnX3R5cGUsCgkJCQkgWG1UZXh0VHlwZSBvdXRwdXRf dHlwZSwKCQkJCSBYbVBhcnNlVGFibGUgcGFyc2VfdGFibGUsCgkJCQkgQ2FyZGluYWwgcGFyc2Vf Y291bnQsCgkJCQkgWG1QYXJzZU1vZGVsIHBhcnNlX21vZGVsKTsKZXh0ZXJuIFhtU3RyaW5nIFht U3RyaW5nUGFyc2VUZXh0KFh0UG9pbnRlciB0ZXh0LAoJCQkJICBYdFBvaW50ZXIgKnRleHRfZW5k LAoJCQkJICBYbVN0cmluZ1RhZyB0YWcsCgkJCQkgIFhtVGV4dFR5cGUgdHlwZSwKCQkJCSAgWG1Q YXJzZVRhYmxlIHBhcnNlX3RhYmxlLAoJCQkJICBDYXJkaW5hbCBwYXJzZV9jb3VudCwKCQkJCSAg WHRQb2ludGVyIGNhbGxfZGF0YSk7CmV4dGVybiBDYXJkaW5hbCBYbVN0cmluZ1RvWG1TdHJpbmdU YWJsZShYbVN0cmluZyBzdHJpbmcsCgkJCQkJWG1TdHJpbmcgYnJlYWtfY29tcCwKCQkJCQlYbVN0 cmluZ1RhYmxlICp0YWJsZSk7CmV4dGVybiBYbVN0cmluZyBYbVN0cmluZ1RhYmxlVG9YbVN0cmlu ZyhYbVN0cmluZ1RhYmxlIHRhYmxlLAoJCQkJCUNhcmRpbmFsIGNvdW50LAoJCQkJCVhtU3RyaW5n IGJyZWFrX2NvbXBvbmVudCk7CmV4dGVybiBYdFBvaW50ZXIgKlhtU3RyaW5nVGFibGVVbnBhcnNl KFhtU3RyaW5nVGFibGUgdGFibGUsCgkJCQkgICAgICAgQ2FyZGluYWwgY291bnQsCgkJCQkgICAg ICAgWG1TdHJpbmdUYWcgdGFnLAoJCQkJICAgICAgIFhtVGV4dFR5cGUgdGFnX3R5cGUsCgkJCQkg ICAgICAgWG1UZXh0VHlwZSBvdXRwdXRfdHlwZSwKCQkJCSAgICAgICBYbVBhcnNlVGFibGUgcGFy c2UsCgkJCQkgICAgICAgQ2FyZGluYWwgcGFyc2VfY291bnQsCgkJCQkgICAgICAgWG1QYXJzZU1v ZGVsIHBhcnNlX21vZGVsKTsKZXh0ZXJuIFhtU3RyaW5nVGFibGUgWG1TdHJpbmdUYWJsZVBhcnNl U3RyaW5nQXJyYXkoWHRQb2ludGVyICpzdHJpbmdzLAoJCQkJCQkgICBDYXJkaW5hbCBjb3VudCwK CQkJCQkJICAgWG1TdHJpbmdUYWcgdGFnLAoJCQkJCQkgICBYbVRleHRUeXBlIHR5cGUsCgkJCQkJ CSAgIFhtUGFyc2VUYWJsZSBwYXJzZSwKCQkJCQkJICAgQ2FyZGluYWwgcGFyc2VfY291bnQsCgkJ CQkJCSAgIFh0UG9pbnRlciBjYWxsX2RhdGEpOwoKZXh0ZXJuIFhtU3RyaW5nRGlyZWN0aW9uIFht RGlyZWN0aW9uVG9TdHJpbmdEaXJlY3Rpb24oWG1EaXJlY3Rpb24gZGlyKTsKZXh0ZXJuIFhtRGly ZWN0aW9uIFhtU3RyaW5nRGlyZWN0aW9uVG9EaXJlY3Rpb24oWG1TdHJpbmdEaXJlY3Rpb24gZGly KTsKCmV4dGVybiBYbVN0cmluZyBYbVN0cmluZ0dlbmVyYXRlKFh0UG9pbnRlciAgIHRleHQsCgkJ CQkgWG1TdHJpbmdUYWcgdGFnLAoJCQkJIFhtVGV4dFR5cGUgIHR5cGUsCgkJCQkgWG1TdHJpbmdU YWcgcmVuZGl0aW9uKTsKZXh0ZXJuIFhtU3RyaW5nIFhtU3RyaW5nUHV0UmVuZGl0aW9uKFhtU3Ry aW5nIHN0cmluZywKCQkJCSAgICAgWG1TdHJpbmdUYWcgcmVuZGl0aW9uKTsgCgpleHRlcm4gWG1Q YXJzZU1hcHBpbmcgWG1QYXJzZU1hcHBpbmdDcmVhdGUoQXJnTGlzdCAgYXJnX2xpc3QsCgkJCQkJ ICAgQ2FyZGluYWwgYXJnX2NvdW50KTsKZXh0ZXJuIHZvaWQgWG1QYXJzZU1hcHBpbmdTZXRWYWx1 ZXMoWG1QYXJzZU1hcHBpbmcgcGFyc2VfbWFwcGluZywKCQkJCSAgICBBcmdMaXN0ICAgICAgICBh cmdfbGlzdCwKCQkJCSAgICBDYXJkaW5hbCAgICAgICBhcmdfY291bnQpOwpleHRlcm4gdm9pZCBY bVBhcnNlTWFwcGluZ0dldFZhbHVlcyhYbVBhcnNlTWFwcGluZyBwYXJzZV9tYXBwaW5nLAoJCQkJ ICAgIEFyZ0xpc3QgICAgICAgIGFyZ19saXN0LAoJCQkJICAgIENhcmRpbmFsICAgICAgIGFyZ19j b3VudCk7CmV4dGVybiB2b2lkIFhtUGFyc2VNYXBwaW5nRnJlZShYbVBhcnNlTWFwcGluZyBwYXJz ZV9tYXBwaW5nKTsKZXh0ZXJuIHZvaWQgWG1QYXJzZVRhYmxlRnJlZShYbVBhcnNlVGFibGUgcGFy c2VfdGFibGUsCgkJCSAgICAgQ2FyZGluYWwgICAgIHBhcnNlX2NvdW50KTsKCiAKCiAKCmV4dGVy biBYbVRhYkxpc3QgCiAgWG1TdHJpbmdUYWJsZVByb3Bvc2VUYWJsaXN0KFhtU3RyaW5nVGFibGUg c3RyaW5ncywgCgkJCSAgICAgIENhcmRpbmFsIG51bV9zdHJpbmdzLAoJCQkgICAgICBXaWRnZXQg d2lkZ2V0LAoJCQkgICAgICBmbG9hdCBwYWRfdmFsdWUsCgkJCSAgICAgIFhtT2Zmc2V0TW9kZWwg b2Zmc2V0X21vZGVsKTsKZXh0ZXJuIHZvaWQgWG1UYWJTZXRWYWx1ZShYbVRhYiB0YWIsIGZsb2F0 IHZhbHVlKTsKZXh0ZXJuIGZsb2F0IAogIFhtVGFiR2V0VmFsdWVzKFhtVGFiIHRhYiwgCgkJIHVu c2lnbmVkIGNoYXIgKnVuaXRzLCAKCQkgWG1PZmZzZXRNb2RlbCAqb2Zmc2V0LCAKCQkgdW5zaWdu ZWQgY2hhciAqYWxpZ25tZW50LCAKCQkgY2hhciAqKmRlY2ltYWwpOwpleHRlcm4gdm9pZCBYbVRh YkZyZWUoWG1UYWIgdGFiKTsKZXh0ZXJuIFhtVGFiIFhtVGFiQ3JlYXRlKGZsb2F0IHZhbHVlLCAK CQkJIHVuc2lnbmVkIGNoYXIgdW5pdHMsIAoJCQkgWG1PZmZzZXRNb2RlbCBvZmZzZXRfbW9kZWws IAoJCQkgdW5zaWduZWQgY2hhciBhbGlnbm1lbnQsIAoJCQkgY2hhciAqZGVjaW1hbCk7CmV4dGVy biBYbVRhYkxpc3QgCiAgWG1UYWJMaXN0UmVtb3ZlVGFicyhYbVRhYkxpc3Qgb2xkbGlzdCwgCgkJ ICAgICAgQ2FyZGluYWwgKnBvc2l0aW9uX2xpc3QsIAoJCSAgICAgIENhcmRpbmFsIHBvc2l0aW9u X2NvdW50KTsKZXh0ZXJuIFhtVGFiTGlzdCAKICBYbVRhYkxpc3RSZXBsYWNlUG9zaXRpb25zKFht VGFiTGlzdCBvbGRsaXN0LCAKCQkJICAgIENhcmRpbmFsICpwb3NpdGlvbl9saXN0LCAKCQkJICAg IFhtVGFiICp0YWJzLCAKCQkJICAgIENhcmRpbmFsIHRhYl9jb3VudCk7CmV4dGVybiBYbVRhYiBY bVRhYkxpc3RHZXRUYWIoWG1UYWJMaXN0IHRhYmxpc3QsIENhcmRpbmFsIHBvc2l0aW9uKTsKZXh0 ZXJuIENhcmRpbmFsIFhtVGFiTGlzdFRhYkNvdW50KFhtVGFiTGlzdCB0YWJsaXN0KTsKZXh0ZXJu IFhtVGFiTGlzdCBYbVRhYkxpc3RDb3B5KFhtVGFiTGlzdCB0YWJsaXN0LCBpbnQgb2Zmc2V0LCBD YXJkaW5hbCBjb3VudCk7CmV4dGVybiB2b2lkIFhtVGFiTGlzdEZyZWUoWG1UYWJMaXN0IHRhYmxp c3QpOwpleHRlcm4gWG1UYWJMaXN0IFhtVGFiTGlzdEluc2VydFRhYnMoWG1UYWJMaXN0IG9sZGxp c3QsCgkJCQkgICAgIFhtVGFiICp0YWJzLCAKCQkJCSAgICAgQ2FyZGluYWwgdGFiX2NvdW50LCAK CQkJCSAgICAgaW50IHBvc2l0aW9uKTsKIAoKIAoKZXh0ZXJuIFhtUmVuZGVyVGFibGUgWG1SZW5k ZXJUYWJsZUN2dEZyb21Qcm9wKFdpZGdldCwgY2hhciAqcHJvcCwgdW5zaWduZWQgaW50IGxlbik7 CmV4dGVybiB1bnNpZ25lZCBpbnQgWG1SZW5kZXJUYWJsZUN2dFRvUHJvcChXaWRnZXQsIFhtUmVu ZGVyVGFibGUgdGFibGUsIGNoYXIgKipwcm9wX3JldHVybik7CmV4dGVybiB2b2lkIFhtUmVuZGl0 aW9uVXBkYXRlKFhtUmVuZGl0aW9uIHJlbmRpdGlvbiwgQXJnTGlzdCBhcmdsaXN0LCBDYXJkaW5h bCBhcmdjb3VudCk7CmV4dGVybiB2b2lkIFhtUmVuZGl0aW9uUmV0cmlldmUoWG1SZW5kaXRpb24g cmVuZGl0aW9uLCAKCQkJCUFyZ0xpc3QgYXJnbGlzdCwKCQkJCUNhcmRpbmFsIGFyZ2NvdW50KTsK ZXh0ZXJuIHZvaWQgWG1SZW5kaXRpb25GcmVlKFhtUmVuZGl0aW9uIHJlbmRpdGlvbik7CmV4dGVy biBYbVJlbmRpdGlvbiBYbVJlbmRpdGlvbkNyZWF0ZShXaWRnZXQgd2lkZ2V0LAoJCQkJICAgICBY bVN0cmluZ1RhZyB0YWcsCgkJCQkgICAgIEFyZ0xpc3QgYXJnbGlzdCwKCQkJCSAgICAgQ2FyZGlu YWwgYXJnY291bnQpOwpleHRlcm4gWG1SZW5kaXRpb24gCiAgKlhtUmVuZGVyVGFibGVHZXRSZW5k aXRpb25zKFhtUmVuZGVyVGFibGUgdGFibGUsIAoJCQkgICAgICBYbVN0cmluZ1RhZyAqdGFncywK CQkJICAgICAgQ2FyZGluYWwgdGFnX2NvdW50KTsKZXh0ZXJuIFhtUmVuZGl0aW9uIFhtUmVuZGVy VGFibGVHZXRSZW5kaXRpb24oWG1SZW5kZXJUYWJsZSB0YWJsZSwKCQkJCQkgICAgIFhtU3RyaW5n VGFnIHRhZyk7CmV4dGVybiBpbnQgWG1SZW5kZXJUYWJsZUdldFRhZ3MoWG1SZW5kZXJUYWJsZSB0 YWJsZSwKCQkJCVhtU3RyaW5nVGFnICoqdGFnX2xpc3QpOwpleHRlcm4gdm9pZCBYbVJlbmRlclRh YmxlRnJlZShYbVJlbmRlclRhYmxlIHRhYmxlKTsKZXh0ZXJuIFhtUmVuZGVyVGFibGUgWG1SZW5k ZXJUYWJsZUNvcHkoWG1SZW5kZXJUYWJsZSB0YWJsZSwKCQkJCSAgICAgICBYbVN0cmluZ1RhZyAq dGFncywgCgkJCQkgICAgICAgaW50IHRhZ19jb3VudCk7CmV4dGVybiBYbVJlbmRlclRhYmxlIAog IFhtUmVuZGVyVGFibGVSZW1vdmVSZW5kaXRpb25zKFhtUmVuZGVyVGFibGUgb2xkdGFibGUsCgkJ CQlYbVN0cmluZ1RhZyAqdGFncywgCgkJCQlpbnQgdGFnX2NvdW50KTsKZXh0ZXJuIFhtUmVuZGVy VGFibGUgCiAgWG1SZW5kZXJUYWJsZUFkZFJlbmRpdGlvbnMoWG1SZW5kZXJUYWJsZSBvbGR0YWJs ZSwgCgkJCSAgICAgWG1SZW5kaXRpb24gKnJlbmRpdGlvbnMsIAoJCQkgICAgIENhcmRpbmFsIHJl bmRpdGlvbl9jb3VudCwgCgkJCSAgICAgWG1NZXJnZU1vZGUgbWVyZ2VfbW9kZSk7CgogCgogCgpl eHRlcm4gV2lkZ2V0IFhtR2V0RGVzdGluYXRpb24oIAogICAgICAgICAgICAgICAgICAgICAgICBE aXNwbGF5ICpkaXNwbGF5KSA7CgogCgogCgpleHRlcm4gQm9vbGVhbiBYbUlzVHJhdmVyc2FibGUo IAogICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQgd2lkKSA7CmV4dGVybiBYbVZpc2liaWxp dHkgWG1HZXRWaXNpYmlsaXR5KCAKICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0IHdpZCkg OwpleHRlcm4gV2lkZ2V0IFhtR2V0VGFiR3JvdXAoIAogICAgICAgICAgICAgICAgICAgICAgICBX aWRnZXQgd2lkKSA7CmV4dGVybiBXaWRnZXQgWG1HZXRGb2N1c1dpZGdldCggCiAgICAgICAgICAg ICAgICAgICAgICAgIFdpZGdldCB3aWQpIDsKZXh0ZXJuIEJvb2xlYW4gWG1Qcm9jZXNzVHJhdmVy c2FsKCAKICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0IHcsCiAgICAgICAgICAgICAgICAg ICAgICAgIFhtVHJhdmVyc2FsRGlyZWN0aW9uIGRpcikgOwpleHRlcm4gdm9pZCBYbUFkZFRhYkdy b3VwKCAKICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0IHRhYkdyb3VwKSA7CmV4dGVybiB2 b2lkIFhtUmVtb3ZlVGFiR3JvdXAoIAogICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQgdykg OwoKIAoKIAoKCn0gICAKCgogCgoKCiMgMSAiL3Vzci9kdC9pbmNsdWRlL1htL1ZlbmRvclMuaCIg MQogCgoKCgoKIAogCgogCiAKIAoKIAoKIAoKIAoKCgoKIyAxICIvdXNyL2R0L2luY2x1ZGUvWG0v WG0uaCIgMQogCgoKCgoKIAogCgoKCgoKCgoKCgojIDM0ODAgIi91c3IvZHQvaW5jbHVkZS9YbS9Y bS5oIgoKICAKIyAyMyAiL3Vzci9kdC9pbmNsdWRlL1htL1ZlbmRvclMuaCIgMgoKCgpleHRlcm4g IkMiIHsKCgoKCgoKCnR5cGVkZWYgc3RydWN0IF9YbVZlbmRvclNoZWxsUmVjICpYbVZlbmRvclNo ZWxsV2lkZ2V0Owp0eXBlZGVmIHN0cnVjdCBfWG1WZW5kb3JTaGVsbENsYXNzUmVjICpYbVZlbmRv clNoZWxsV2lkZ2V0Q2xhc3M7CmV4dGVybiAgV2lkZ2V0Q2xhc3MgdmVuZG9yU2hlbGxXaWRnZXRD bGFzczsKCgogCgpleHRlcm4gQm9vbGVhbiBYbUlzTW90aWZXTVJ1bm5pbmcoIAogICAgICAgICAg ICAgICAgICAgICAgICBXaWRnZXQgc2hlbGwpIDsKCiAKCgoKfSAgIAoKCgogCiMgMjAwMCAiL3Vz ci9kdC9pbmNsdWRlL1htL1htLmgiIDIKCiMgMSAiL3Vzci9kdC9pbmNsdWRlL1htL1htSW0uaCIg MQogCiAKCgoKCgogCiAKCiAKCgoKIyAxICIvdXNyL2R0L2luY2x1ZGUvWG0vWG0uaCIgMQogCgoK CgoKIAogCgoKCgoKCgoKCgojIDM0ODAgIi91c3IvZHQvaW5jbHVkZS9YbS9YbS5oIgoKICAKIyAx NSAiL3Vzci9kdC9pbmNsdWRlL1htL1htSW0uaCIgMgoKCgpleHRlcm4gIkMiIHsKCgogCgpleHRl cm4gdm9pZCBYbUltUmVnaXN0ZXIoIAogICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQgdywK CQkJdW5zaWduZWQgaW50IHJlc2VydmVkKSA7CmV4dGVybiB2b2lkIFhtSW1VbnJlZ2lzdGVyKCAK ICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0IHcpIDsKZXh0ZXJuIHZvaWQgWG1JbVNldEZv Y3VzVmFsdWVzKCAKICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0IHcsCiAgICAgICAgICAg ICAgICAgICAgICAgIEFyZ0xpc3QgYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgQ2FyZGlu YWwgbnVtX2FyZ3MpIDsKZXh0ZXJuIHZvaWQgWG1JbVNldFZhbHVlcyggCiAgICAgICAgICAgICAg ICAgICAgICAgIFdpZGdldCB3LAogICAgICAgICAgICAgICAgICAgICAgICBBcmdMaXN0IGFyZ3Ms CiAgICAgICAgICAgICAgICAgICAgICAgIENhcmRpbmFsIG51bV9hcmdzKSA7CmV4dGVybiB2b2lk IFhtSW1VbnNldEZvY3VzKCAKICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0IHcpIDsKZXh0 ZXJuIFhJTSBYbUltR2V0WElNKCAKICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0IHcpIDsK ZXh0ZXJuIHZvaWQgWG1JbUNsb3NlWElNKAogICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQg dykgOwoKZXh0ZXJuIGludCBYbUltTWJMb29rdXBTdHJpbmcoIAogICAgICAgICAgICAgICAgICAg ICAgICBXaWRnZXQgdywKICAgICAgICAgICAgICAgICAgICAgICAgWEtleVByZXNzZWRFdmVudCAq ZXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZiwKICAgICAgICAgICAgICAg ICAgICAgICAgaW50IG5ieXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgS2V5U3ltICprZXlz eW0sCiAgICAgICAgICAgICAgICAgICAgICAgIGludCAqc3RhdHVzKSA7CmV4dGVybiB2b2lkIFht SW1WYVNldEZvY3VzVmFsdWVzKCAKICAgICAgICAgICAgICAgICAgICAgICAgV2lkZ2V0IHcsCiAg ICAgICAgICAgICAgICAgICAgICAgIC4uLikgOwpleHRlcm4gdm9pZCBYbUltVmFTZXRWYWx1ZXMo IAogICAgICAgICAgICAgICAgICAgICAgICBXaWRnZXQgdywKICAgICAgICAgICAgICAgICAgICAg ICAgLi4uKSA7CmV4dGVybiBYSUMgWG1JbUdldFhJQygKCQkgICAgICAgIFdpZGdldCAJCXcsCgoJ CSAgICAgICAgdW5zaWduZWQgaW50IAlpbnB1dF9wb2xpY3ksCgoKCgkJICAgICAgICBBcmdMaXN0 CQlhcmdzLAoJCSAgICAgICAgQ2FyZGluYWwJbnVtX2FyZ3MpIDsKZXh0ZXJuIFhJQyBYbUltU2V0 WElDKAoJCQlXaWRnZXQgdywKCQkJWElDICAgIGlucHV0X2NvbnRleHQpIDsKZXh0ZXJuIHZvaWQg WG1JbUZyZWVYSUMoCgkJCVdpZGdldCB3LAoJCQlYSUMgICAgaW5wdXRfY29udGV4dCkgOwoKZXh0 ZXJuIHZvaWQgWG1JbU1iUmVzZXRJQygKCQkJV2lkZ2V0IHcsCgkJCWNoYXIgKiptYik7CgogCgoK fSAgIAoKCgogCiMgMjAwMSAiL3Vzci9kdC9pbmNsdWRlL1htL1htLmgiIDIKCgoKCgoKCmVudW0g ewogIFhtSU5ESUNBVE9SX05PTkUgICAgICA9IDAsIAogIFhtSU5ESUNBVE9SX0ZJTEwgICAgICA9 IDEsCSAKICBYbUlORElDQVRPUl9CT1gJPSAyNTUsCSAKICBYbUlORElDQVRPUl9DSEVDSyAgICAg PSAweDEwICwKICBYbUlORElDQVRPUl9DSEVDS19CT1ggPSAweDEwICArIDB4MDEgLAogIFhtSU5E SUNBVE9SX0NST1NTICAgICA9IDB4MjAgLAogIFhtSU5ESUNBVE9SX0NST1NTX0JPWCA9IDB4MjAg ICsgMHgwMSAKfTsKCmVudW0geyBYbVVOU0VULCBYbVNFVCwgWG1JTkRFVEVSTUlOQVRFIH07CmVu dW0geyBYbVRPR0dMRV9CT09MRUFOLCBYbVRPR0dMRV9JTkRFVEVSTUlOQVRFIH07CnR5cGVkZWYg dW5zaWduZWQgY2hhciBYbVRvZ2dsZUJ1dHRvblN0YXRlOwoKIAp0eXBlZGVmIGVudW0geyBFZGl0 RG9uZSwgRWRpdEVycm9yLCBFZGl0UmVqZWN0IH0gWG1UZXh0U3RhdHVzOwoKIAplbnVtIHsgWG1F WFRFUk5BTF9ISUdITElHSFQsIFhtSU5URVJOQUxfSElHSExJR0hUIH07CgogCgoKZW51bSB7IFht UEFUSF9NT0RFX0ZVTEwsIFhtUEFUSF9NT0RFX1JFTEFUSVZFIH07CmVudW0geyBYbUZJTFRFUl9O T05FLCBYbUZJTFRFUl9ISURERU5fRklMRVN9IDsKICAKIyAzNDc4ICIvdXNyL2R0L2luY2x1ZGUv WG0vWG0uaCIKCgoKICAKIyAxOSAiLi4vLi4vaW5jbHVkZS9saWJpbmMvbGliZHJhd2luZy5oIiAy CgoKCgpjbGFzcwlXaW5kOwpjbGFzcwlGdW5uZWw7CmNsYXNzCUdyb3VwOwpjbGFzcwlJdGVtOwpj bGFzcwlTeW5jOwpjbGFzcwlTbmFwOwpjbGFzcyAgIEFsaWduOwpjbGFzcwlTY3JlZW5EYXRhOwpj bGFzcwlCb2FyZERhdGE7CmNsYXNzCUNsb3NlRGF0YTsKY2xhc3MJU2NyZWVuRHJhd2luZzsKY2xh c3MJRHJhd2luZ1N0cmluZzsJCSAKY2xhc3MJY29uZmlndXJhdGlvbjsKY2xhc3MJVUk7CmNsYXNz CVNpZGVudjsKY2xhc3MJTW91c2U7CmNsYXNzCU1vdG9yOwpjbGFzcwlNb3ZlY2FtOwpjbGFzcwlT aG93U25hcDsKY2xhc3MJV2luZG93TGlzdDsKY2xhc3MJSW1hZ2VCdWY7CgpleHRlcm4gU2NyZWVu RHJhd2luZyAgICpnRHJhd2luZzsKZXh0ZXJuIFVJICAgICAgICAgICAgICAqZ1VpOwpleHRlcm4g TW91c2UgICAgICAgICAgICptb3VzZTsKZXh0ZXJuIE1vdG9yICAgICAgICAgICAqZ01vdG9yOwpl eHRlcm4gTW92ZWNhbSAgICAgICAgICptb3ZlY2FtOwpleHRlcm4gY29uZmlndXJhdGlvbiAgICpn Q2ZnOwpleHRlcm4gU2hvd1NuYXAgICAgICAgICpnU2hvd1NuYXA7CgoKIAoKCgoKCgoKIAoKCgoK Y29uc3QJaW50CWtCeUxldmVsT25lCT0gMHgxOwpjb25zdAlpbnQJa0J5TGV2ZWxUd28JPSAweDI7 CmNvbnN0CWludAlrQnlOYW1lCQk9IDB4NDsKY29uc3QJaW50CWtBbGdvRWRpdAk9IDB4ODsKY29u c3QJaW50CWtBbGdvUnVsZXMJPSAweDEwOwpjb25zdAlpbnQJa0ZpbmRTdHlsZQk9IGtBbGdvUnVs ZXMgfCBrQWxnb0VkaXQgfAoJCQkJCSAgICBrQnlOYW1lIHwga0J5TGV2ZWxUd28gfCBrQnlMZXZl bE9uZTsKY29uc3QJaW50CWtEb250Rm9sbG93CT0gMHgyMDsKCgogCgoKCgoKCgpzdGF0aWMgY29u c3QgaW50IGtNaW5Jd2luV2lkdGggPSA1OwpzdGF0aWMgY29uc3QgaW50IGtNaW5Jd2luSGVpZ2h0 ID0gNTsKCgoKCnRlbXBsYXRlPGNsYXNzIFQ+CmlubGluZSB2b2lkCndhaXRfZm9yKFQgKndoYXQs IGludCBpbml0KQp7CiAgICAqd2hhdCA9IHN0YXRpY19jYXN0PFQ+KGluaXQpOwogICAgZG8gewoJ WHRBcHBQcm9jZXNzRXZlbnQoZ0RyYXdpbmctPmFwcF9jb250ZXh0KCksICgxICB8IDIgIHwgNCAg fCA4ICkgKTsKICAgIH0gd2hpbGUgKCp3aGF0ID09IHN0YXRpY19jYXN0PFQ+KGluaXQpKTsKfQoK ZXh0ZXJuIFdpZGdldCBjcmVhdGVfYnV0dG9uX3RvcCAoV2lkZ2V0IHBhcmVudCk7CgoKCiAKCmV4 dGVybiB2b2lkIHdhaXRfZm9yKFdpZGdldCBzaGVsbCk7CmV4dGVybiBsb25nIG1pbm1heChsb25n IG1pbl92YWwsIGxvbmcgdmFsLCBsb25nIG1heF92YWwpOwpleHRlcm4gdm9pZCB1cGRhdGVfY3Vy cmVudF9kYXRhYmFzZV9uYW1lKGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKZXh0ZXJuIHZvaWQgcGFu aWMoY29uc3QgY2hhciAqbXNnKTsKZXh0ZXJuIHZvaWQgcGFuaWMoY29uc3Qgc3RyaW5nJiBtc2cp OwpleHRlcm4gdm9pZCBkb19wdXRtZXMoY29uc3Qgc3RyaW5nJiBtc2cpOwpleHRlcm4gdm9pZCBk b19wdXRtZXMoY29uc3QgY2hhciAqbXNnKTsKZXh0ZXJuIHZvaWQgYXBwZW5kX21lcyhjb25zdCBj aGFyICptc2cpOwpleHRlcm4gdm9pZCBtY29tX2Z4X3BhcnQoKTsKZXh0ZXJuIHZvaWQgc2V0dXBf WHNjcmVlbih2b2lkKTsKZXh0ZXJuIHZvaWQgZHJhd19yZXNpemVfY2IoV2lkZ2V0IHcsIFh0UG9p bnRlciBudWxkYXRhLCBYdFBvaW50ZXIgY2FsbGJhY2tfZGF0YSk7CmV4dGVybiB2b2lkIGNoZWNr X2V4aXQoWEV2ZW50ICogZXZlbnQpOwpleHRlcm4gdm9pZCBmaXhzZWcoY29vcl90ICpwMSwgY29v cl90ICpwMiwgaW50IHIxLCBpbnQgcjIpOwpleHRlcm4gdm9pZCBkb19jc25hcChib29sIGRvX3Vw ZGF0ZSk7CmV4dGVybiB2b2lkIHN0X3NpZGUoKTsKZXh0ZXJuIHZvaWQgY3JlYXRlX2NvbW1vbl9z aGVsbHMoV2lkZ2V0IHBhcmVudCk7CmV4dGVybiB2b2lkIGdldF9kYndpbihjb25zdCBXaW5kICpT bmFwV2luZG93LCBXaW5kICp3aW4sIEl0ZW0gKkRpKTsKZXh0ZXJuIHZvaWQgQUJDaW5pdCgpOwpl eHRlcm4gU2NyZWVuRGF0YSAqIGZpbmRfdGlsZShpbnQgeCwgaW50IHkpOwpleHRlcm4gdm9pZCBi b2FyZF9mbGlwX2NiIChXaWRnZXQgdywgWHRQb2ludGVyIGNsaWVudF9kYXRhLCBYdFBvaW50ZXIg eHRfY2FsbF9kYXRhICk7CmV4dGVybiB2b2lkIGRvX3JvdGF0ZV9jYihXaWRnZXQgdywgWHRQb2lu dGVyIGFuZ3AsIFh0UG9pbnRlciB4dF9jYWxsX2RhdGEpOwpleHRlcm4gdm9pZCBidXR0b25fc2V0 X2J1dHRvbl9jYiAoV2lkZ2V0IHcsIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgWHRQb2ludGVyIHh0 X2NhbGxfZGF0YSk7CmV4dGVybiB2b2lkIGJ1dHRvbl9zaGVsbF91cCgpOwpleHRlcm4gYm9vbCBi dXR0b25fc2hlbGxfZG93bigpOwpleHRlcm4gdm9pZCBzZXRfc3RhZ2VfYnV0dG9uX2xhYmVscyhj aGFyICpsZWZ0LCBjaGFyICptaWRkbGUsIGNoYXIgKnJpZ2h0KTsKZXh0ZXJuIHZvaWQgc2V0X2J1 dHRvbl9zaGVsbF9sYWJlbHMoY2hhciAqbGVmdCwgY2hhciAqbWlkZGxlLCBjaGFyICpyaWdodCk7 CmV4dGVybiB2b2lkIGNyZWF0ZV9zdGFnZV9tb3ZlKFdpZGdldCBwYXJlbnQpOwpleHRlcm4gdm9p ZCBzZXRfbXVsdGlwbGllcl90ZXh0KHZvaWQpOwpleHRlcm4gdm9pZCBidXR0b25fc2V0X3NjYWxl X2NiKFdpZGdldCB3LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIFh0UG9pbnRlciB4dF9jYWxsX2Rh dGEpOwpleHRlcm4gdm9pZCBidXR0b25fc3RvcF9jb250aW5pb3VzX21vdmVfY2IgKFdpZGdldCB3 LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIFh0UG9pbnRlciB4dF9jYWxsX2RhdGEgKTsKZXh0ZXJu IHZvaWQgYnV0dG9uX3NldHVwX2NvbnRpbmlvdXNfbW92ZV9jYihXaWRnZXQgdywgWHRQb2ludGVy IGNsaWVudF9kYXRhLCBYdFBvaW50ZXIgeHRfY2FsbF9kYXRhKTsKZXh0ZXJuIHZvaWQgc2V0X2J1 dHRvbl9tb3ZlYnlfbGFiZWxzKCk7CmV4dGVybiB2b2lkIGNsZWFyX2tleXModm9pZCk7CmV4dGVy biB2b2lkIHByb2Nlc3Nfa2V5cmVsZWFzZShYRXZlbnQgKmV2ZW50KTsKZXh0ZXJuIHZvaWQgcHJv Y2Vzc19rZXlwcmVzcyhYRXZlbnQgKmV2ZW50KTsKZXh0ZXJuIHZvaWQgc2V0X2hvbWVfbGFiZWwo Y29uZmlndXJhdGlvbiYgY2ZnKTsKZXh0ZXJuIHZvaWQgYnV0dG9uX3NldF9zY2FsZV9sYWJlbF9j YihXaWRnZXQgdywgWHRQb2ludGVyIHUsIFh0UG9pbnRlciB4KTsKZXh0ZXJuIHZvaWQgY29uZmly bV95ZXNub19jYiAoV2lkZ2V0IHcsIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgWHRQb2ludGVyIHh0 X2NhbGxfZGF0YSApOwpleHRlcm4gaW50IGdldG5veWVzKGNvbnN0IGNoYXIgKm1zZyk7CmV4dGVy biBpbnQgZ2V0eWVzbm8oY29uc3Qgc3RyaW5nJiBtc2cpOwpleHRlcm4gaW50IGdldHllc25vKGNv bnN0IGNoYXIgKm1zZyk7CmV4dGVybiB2b2lkIGRvX3Njcm9sbChYdFBvaW50ZXIgd2luX2RhdGEs IFh0SW50ZXJ2YWxJZCAqaWQpOwpleHRlcm4gdm9pZCBjYW5jZWxfbXZwKHZvaWQpOwpleHRlcm4g dm9pZCBkb19tdnAodm9pZCk7CmV4dGVybiB2b2lkIGZpeF9leHRlbnNpb24oc3RyaW5nJiBmbiwg aW50IGxvYWRfdHlwZSk7CmV4dGVybiB2b2lkIGZpeF9leHRlbnNpb24oY2hhciAqZm4sIGludCBs b2FkX3R5cGUpOwpleHRlcm4gaW50IGZzX3NhdmVfZmlsZShpbnQgc2F2aW5nX2ZpbGVfdHlwZSwg Y29uc3QgY2hhciAqZm4pOwpleHRlcm4gdm9pZCBkaXJlY3RvcnlfcmV0dXJuX251bGxfY2IoV2lk Z2V0LCBYdFBvaW50ZXIsIFh0UG9pbnRlcik7CmV4dGVybiB2b2lkIGRpcmVjdG9yeV9oZWxwX2Ni KFdpZGdldCB3LCBYdFBvaW50ZXIsIFh0UG9pbnRlcik7CmV4dGVybiB2b2lkIGRpcmVjdG9yeV9y ZXR1cm5fc2VsZWN0aW9uX2NiKFdpZGdldCwgWHRQb2ludGVyLCBYdFBvaW50ZXIpOwpleHRlcm4g dm9pZCBkaXJlY3Rvcnlfbm9tYXRjaF9jYihXaWRnZXQgdywgWHRQb2ludGVyLCBYdFBvaW50ZXIp OwpleHRlcm4gdm9pZCBmaWxlX3NlYXJjaF9wcm9jKFdpZGdldCBmc2IsIFhtRmlsZVNlbGVjdGlv bkJveENhbGxiYWNrU3RydWN0ICp4KTsKZXh0ZXJuIGNvbnN0IGNoYXIgKiBkb19kaXJlY3Rvcnko Y29uc3QgY2hhciAqZmlsdGVyLCBjb25zdCBjaGFyICpsYWJlbCwgbG9uZyBsb2FkX3NhdmVfdHlw ZSwgY29uc3QgY2hhciAqY3VyX3NlbGVjdGlvbiwgY29uc3QgY2hhciAqaGVscCwgYm9vbCAmc2F2 ZV9hc19mbGcpOwpleHRlcm4gdm9pZCBkcmF3X2lucHV0X2NiKFdpZGdldCB3LCBYdFBvaW50ZXIg bnVsZGF0YSwgWEV2ZW50ICogZXZlbnQsIEJvb2xlYW4gKiBjb250aW51ZV90b19kaXNwYXRjaCk7 CmV4dGVybiB2b2lkIGVycm9yX2FkZF9lcnJvcl9jYWxsYmFja3Modm9pZCAoKmVycm9yKShXaWRn ZXQsIFh0UG9pbnRlciwgWHRQb2ludGVyKSwgdm9pZCAoKmNhbmNlbCkoV2lkZ2V0LCBYdFBvaW50 ZXIsIFh0UG9pbnRlciksIHZvaWQgKCpzdGFydHVwKSh2b2lkKSk7CmV4dGVybiB2b2lkIGVycm9y X3JlbW92ZV9lcnJvcl9jYWxsYmFja3Modm9pZCAoKmVycm9yKShXaWRnZXQsIFh0UG9pbnRlciwg WHRQb2ludGVyKSwgdm9pZCAoKmNhbmNlbCkoV2lkZ2V0LCBYdFBvaW50ZXIsIFh0UG9pbnRlcikp OwpleHRlcm4gdm9pZCBlcnJvcl9oZWxwX2NiIChXaWRnZXQgdywgWHRQb2ludGVyIGNsaWVudF9k YXRhLCBYdFBvaW50ZXIgeHRfY2FsbF9kYXRhICk7CmV4dGVybiB2b2lkIG1vdDJzbndpbihjb25z dCBTaWRlbnYgKnNpZGVudiwgY29uc3QgU3luYyAqRHN5LCBXaW5kICpTbmFwV2luZG93KTsKZXh0 ZXJuIHZvaWQgYWRkX3N0cmluZ190b193aW5kb3coY29uc3QgY2hhciAqYnVmKTsKZXh0ZXJuIHZv aWQgZnBfYWRkX2l0ZW0oY29uc3QgR3JvdXAgKkJnLCBjb25zdCBjaGFyICpzdHIpOwpleHRlcm4g dm9pZCBmcF9hcHBseV9jYiAoV2lkZ2V0IHcsIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgWHRQb2lu dGVyIHh0X2NhbGxfZGF0YSk7CmV4dGVybiB2b2lkIGZwX2NhbmNlbF9jYiAoV2lkZ2V0IHcsIFh0 UG9pbnRlciBjbGllbnRfZGF0YSwgWHRQb2ludGVyIHh0X2NhbGxfZGF0YSApOwpleHRlcm4gdm9p ZCBmcF9va19jYiAoV2lkZ2V0IHcsIFh0UG9pbnRlciBjbGllbnRfZGF0YSwgWHRQb2ludGVyIHh0 X2NhbGxfZGF0YSApOwpleHRlcm4gdm9pZCBmcF9maWxsX3dpbmRvd19jYiAoV2lkZ2V0IHcsIFh0 UG9pbnRlciBjbGllbnRfZGF0YSwgWHRQb2ludGVyIHh0X2NhbGxfZGF0YSApOwpleHRlcm4gdm9p ZCBmcF9zaG93X2FsbF9lbnRyaWVzX2NiKFdpZGdldCB3LCBYdFBvaW50ZXIgdV9kYXRhLCBYdFBv aW50ZXIgeF9kYXRhKTsKZXh0ZXJuIHZvaWQgSF9jb252X2ltYWdlX2J1ZmZlciggSW1hZ2VCdWYg KiBidWYgKTsKZXh0ZXJuIGludCBIX2NvbnYzKGJvb2wgdXNlX2NvbW1vbl9mcmFtZSk7CmV4dGVy biBpbnQgSF9jb252NShib29sIHVzZV9jb21tb25fZnJhbWUpOwpleHRlcm4gdm9pZCBoX2NvbnYo aW50IG9mZnMpOwpleHRlcm4gaW50IHJlYWRzbmFwKGludCBzbmFwbm8sIGludCBmaWR1KTsKZXh0 ZXJuIGludCBkb19tb3RpZl9rZXlicmQoY2hhciAqZGF0YSwgaW50IGxlbmcsIGNvbnN0IGNoYXIg KmxhYmVsLCBjaGFyICpoZWxwX2ZpbGUpOwpleHRlcm4gYm9vbCBtYXRjaChjb25zdCBjaGFyICps aW5lLCBjb25zdCBjaGFyICpwYXQpOwpleHRlcm4gdm9pZCBwcm9jZXNzX2V2ZW50cyh2b2lkKTsK ZXh0ZXJuIHZvaWQgbW91c2VfYnV0dG9uX2NiKFdpZGdldCB3LCBYdFBvaW50ZXIgbnVsZGF0YSwg WEV2ZW50ICogZXZlbnQsIEJvb2xlYW4gKiBjb250aW51ZV90b19kaXNwYXRjaCk7CmV4dGVybiB2 b2lkIG1vdXNlX21vdGlvbl9jYihXaWRnZXQgdywgWHRQb2ludGVyIG51bGRhdGEsIFhFdmVudCAq IGV2ZW50LCBCb29sZWFuICogY29udGludWVfdG9fZGlzcGF0Y2gpOwpleHRlcm4gdm9pZCBmaXhf b3JpZW50KCk7CmV4dGVybiB2b2lkIHN0X3BpbnModmVjdG9yIDxJdGVtICo+ICZwaW5zLCBHcm91 cCAqRGcpOwpleHRlcm4gdm9pZCBjbHJfcG5hbWUodm9pZCk7CmV4dGVybiB2b2lkIGN1c3RvbV9k cmF3aW5nX3Jlc291cmNlcyhXaWRnZXQgcGFyZW50KTsKZXh0ZXJuIGludCBzYXZlX2NoYW5nZXMo Ym9vbCBjYW5fY2FuY2VsID0gdHJ1ZSk7CmV4dGVybiB2b2lkIHNoX2ZsaXAoV2luZCAqd2luLCBi b29sIGRyYXcpOwpleHRlcm4gdm9pZCB2YWxpZGF0ZV95bl9jYiAoV2lkZ2V0IHcsIFh0UG9pbnRl ciBjbGllbnRfZGF0YSwgWHRQb2ludGVyIHh0X2NhbGxfZGF0YSApOwpleHRlcm4gdm9pZCB2YWxp ZGF0ZV9udW1iZXJfY2IgKFdpZGdldCB3LCBYdFBvaW50ZXIgY2xpZW50X2RhdGEsIFh0UG9pbnRl ciB4dF9jYWxsX2RhdGEgKTsKZXh0ZXJuIHZvaWQgdmFsaWRhdGVfb3JpZW50X2NiIChXaWRnZXQg dywgWHRQb2ludGVyIGNsaWVudF9kYXRhLCBYdFBvaW50ZXIgeHRfY2FsbF9kYXRhICk7CmV4dGVy biB2b2lkIHZhbGlkYXRlX3Zpc2libGVfY2IgKFdpZGdldCB3LCBYdFBvaW50ZXIgY2xpZW50X2Rh dGEsIFh0UG9pbnRlciB4dF9jYWxsX2RhdGEgKTsKZXh0ZXJuIGJvb2wgd19kaXNqb2ludChjb25z dCBXaW5kICp3MSwgY29uc3QgV2luZCAqdzIpOwpleHRlcm4gdm9pZCBjbGlwX3dpbmRvdyhXaW5k ICp3aG8sIGNvbnN0IFdpbmQgKnBhcmVudCk7CmV4dGVybiB2b2lkIGNoZWNrX3hfZXZlbnRzKCk7 CgojIDEyICJzYXZlX3NuYXAuYyIgMgoKIyAxICIuLi8uLi9pbmNsdWRlL2xpYmluYy9YR3JhcGhp Y3MuSCIgMQoKCgogCgoKCgoKCgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCgoKCiMgMSAiLi4vLi4v aW5jbHVkZS9sb2NhbGluYy9XaW5kLkgiIDEKCgoKCgoKIAogCiAKCgoKCgoKIAoKCgogCgoKCgoK CiAKCgoKCgogCgoKCgoKIApzdHJ1Y3Qgc3dpbmQgewogICAgY29vcl90IHVwLCBsZiwgZG4sIHJ0 Owp9OwoKIApzdHJ1Y3QgY3dpbmQgewogICAgY29vcl90IHgsIHksIGR4LCBkeTsKfTsKCmNsYXNz IFdpbmQgewpwdWJsaWM6CiAgICBXaW5kKCkge30KICAgIFdpbmQoaW50KTsKICAgIFdpbmQoY29u c3QgV2luZCYpOwogICAgV2luZChpbnQgdXAsIGludCBsZiwgaW50IGRuLCBpbnQgcnQpOwoKICAg IHVuaW9uIHsKCXN0cnVjdCBzd2luZCBzdzsKCXN0cnVjdCBjd2luZCBjdzsKICAgIH0gX1dpbjsK CiAgICBXaW5kJiBvcGVyYXRvciA9IChjb25zdCBXaW5kJiByaWdodCk7CiAgICBib29sICBvcGVy YXRvciAhPSAoY29uc3QgV2luZCYgcmlnaHQpOwoKICAgIHZvaWQgczJjKCk7CiAgICB2b2lkIGMy cygpOwogICAgdm9pZCBzMmMoV2luZCAqKSBjb25zdDsKICAgIHZvaWQgYzJzKFdpbmQgKikgY29u c3Q7CgogICAgYm9vbCBwX2luc2lkZShjb29yX3QsIGNvb3JfdCkgY29uc3Q7CiAgICBib29sIHdf aW5zaWRlKGNvbnN0IFdpbmQgKikgY29uc3Q7CiAgICBib29sIG92ZXJsYXAoY29uc3QgV2luZCAq KSBjb25zdDsKICAgIGJvb2wgd19vbnRvcChXaW5kICopIGNvbnN0OwoKICAgIHZvaWQgbGltaXQo Y29uc3QgV2luZCAqKTsKCiAgICB2b2lkIHJvdGF0ZShpbnQpOwoKICAgIHZvaWQgZ3Jvdyhjb29y X3QgZHgsIGNvb3JfdCBkeSk7CgogICAgdm9pZCBjb21wZW5zYXRlKCk7CiAgICB2b2lkIHVuX2Nv bXBlbnNhdGUoKTsKCiAgICB2b2lkIHJvdGF0ZV9zZXRfc2NhbGUoKTsKICAgIHZvaWQgZml4dXBf cm90YXRlX3dpbigpOwoKICAgIHZvaWQgZmluZF9ib2FyZF9zaXplKCk7CgogICAgdm9pZCBkdW1w KGNvbnN0IGNoYXIgKnMgPSAiZHVtcDoiKSBjb25zdDsKCgoKfTsKCmlubGluZSBXaW5kOjpXaW5k KGludCkKewogICAgX1dpbi5jdy54ID0gX1dpbi5jdy55ID0gX1dpbi5jdy5keCA9IF9XaW4uY3cu ZHkgPSAwOwp9CgppbmxpbmUgV2luZDo6V2luZChjb25zdCBXaW5kJiBvcmlnKQp7CiAgICBfV2lu LnN3LnVwID0gb3JpZy5fV2luLnN3LnVwOwogICAgX1dpbi5zdy5sZiA9IG9yaWcuX1dpbi5zdy5s ZjsKICAgIF9XaW4uc3cuZG4gPSBvcmlnLl9XaW4uc3cuZG47CiAgICBfV2luLnN3LnJ0ID0gb3Jp Zy5fV2luLnN3LnJ0Owp9CgppbmxpbmUgV2luZDo6V2luZChpbnQgdXAsIGludCBsZiwgaW50IGRu LCBpbnQgcnQpCnsKICAgIF9XaW4uc3cudXAgPSB1cDsKICAgIF9XaW4uc3cubGYgPSBsZjsKICAg IF9XaW4uc3cuZG4gPSBkbjsKICAgIF9XaW4uc3cucnQgPSBydDsKfQoKaW5saW5lIFdpbmQmIFdp bmQ6Om9wZXJhdG9yID0gKGNvbnN0IFdpbmQmIHJpZ2h0KQp7CiAgICBpZiAodGhpcyA9PSAmcmln aHQpCglyZXR1cm4oKnRoaXMpOwogICAgCiAgICBfV2luLnN3LnVwID0gcmlnaHQuX1dpbi5zdy51 cDsKICAgIF9XaW4uc3cubGYgPSByaWdodC5fV2luLnN3LmxmOwogICAgX1dpbi5zdy5kbiA9IHJp Z2h0Ll9XaW4uc3cuZG47CiAgICBfV2luLnN3LnJ0ID0gcmlnaHQuX1dpbi5zdy5ydDsKICAgIHJl dHVybigqdGhpcyk7Cn0KCmlubGluZSB2b2lkCldpbmQ6OnMyYygpCnsKICAgIFdpbmQgdzIoKChs b25nKSBfV2luLnN3LmRuICArIChsb25nKSBfV2luLnN3LnVwICkgLyAyLAoJICAgICgobG9uZykg X1dpbi5zdy5ydCAgKyAobG9uZykgX1dpbi5zdy5sZiApIC8gMiwKCQlfV2luLnN3LmRuICAtIF9X aW4uc3cudXAgLAoJCV9XaW4uc3cucnQgIC0gX1dpbi5zdy5sZiApOwogICAgKnRoaXMgPSB3MjsK fQoKaW5saW5lIHZvaWQKV2luZDo6YzJzKCkKewogICAgV2luZCB3MjsKICAgIHcyLiBfV2luLnN3 LnVwICA9IF9XaW4uY3cueCAgLSAoX1dpbi5jdy5keCAgLyAyKTsKICAgIHcyLiBfV2luLnN3Lmxm ICA9IF9XaW4uY3cueSAgLSAoX1dpbi5jdy5keSAgLyAyKTsKICAgIHcyLiBfV2luLnN3LmRuICA9 IHcyLiBfV2luLnN3LnVwICArIF9XaW4uY3cuZHggOwogICAgdzIuIF9XaW4uc3cucnQgID0gdzIu IF9XaW4uc3cubGYgICsgX1dpbi5jdy5keSA7CiAgICAqdGhpcyA9IHcyOwp9CgppbmxpbmUgdm9p ZApXaW5kOjpzMmMoV2luZCAqcmV0KSBjb25zdAp7CiAgICByZXQtPiBfV2luLmN3LnggID0gKChs b25nKSBfV2luLnN3LmRuICArIChsb25nKSBfV2luLnN3LnVwICkgLyAyOwogICAgcmV0LT4gX1dp bi5jdy55ICA9ICgobG9uZykgX1dpbi5zdy5ydCAgKyAobG9uZykgX1dpbi5zdy5sZiApIC8gMjsK ICAgIHJldC0+IF9XaW4uY3cuZHggID0gX1dpbi5zdy5kbiAgLSBfV2luLnN3LnVwIDsKICAgIHJl dC0+IF9XaW4uY3cuZHkgID0gX1dpbi5zdy5ydCAgLSBfV2luLnN3LmxmIDsKfQoKaW5saW5lIHZv aWQKV2luZDo6YzJzKFdpbmQgKnJldCkgY29uc3QKewogICAgcmV0LT4gX1dpbi5zdy51cCAgPSBf V2luLmN3LnggIC0gKF9XaW4uY3cuZHggIC8gMik7CiAgICByZXQtPiBfV2luLnN3LmxmICA9IF9X aW4uY3cueSAgLSAoX1dpbi5jdy5keSAgLyAyKTsKICAgIHJldC0+IF9XaW4uc3cuZG4gID0gcmV0 LT4gX1dpbi5zdy51cCAgKyBfV2luLmN3LmR4IDsKICAgIHJldC0+IF9XaW4uc3cucnQgID0gcmV0 LT4gX1dpbi5zdy5sZiAgKyBfV2luLmN3LmR5IDsKfQoKaW5saW5lIHZvaWQKV2luZDo6bGltaXQo Y29uc3QgV2luZCAqcGFyZW50KQp7CiAgICBpZiAoX1dpbi5zdy5ydCAgPiBwYXJlbnQtPiBfV2lu LnN3LnJ0ICkKCV9XaW4uc3cucnQgID0gcGFyZW50LT4gX1dpbi5zdy5ydCA7CiAgICBpZiAoX1dp bi5zdy5sZiAgPCBwYXJlbnQtPiBfV2luLnN3LmxmICkKCV9XaW4uc3cubGYgID0gcGFyZW50LT4g X1dpbi5zdy5sZiA7CiAgICBpZiAoX1dpbi5zdy5kbiAgPiBwYXJlbnQtPiBfV2luLnN3LmRuICkK CV9XaW4uc3cuZG4gID0gcGFyZW50LT4gX1dpbi5zdy5kbiA7CiAgICBpZiAoX1dpbi5zdy51cCAg PCBwYXJlbnQtPiBfV2luLnN3LnVwICkKCV9XaW4uc3cudXAgID0gcGFyZW50LT4gX1dpbi5zdy51 cCA7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZApsaW1pdF93aW5kKFdpbmQgKm1lLCBjb25zdCBXaW5k ICpwYXJlbnQpCnsKICAgIG1lLT5saW1pdChwYXJlbnQpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQK czJjKFdpbmQgKncxKQp7CiAgICB3MS0+czJjKCk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZApjMnMo V2luZCAqdzEpCnsKICAgIHcxLT5jMnMoKTsKfQoKaW5saW5lIGJvb2wKV2luZDo6b3BlcmF0b3Ig IT0gKGNvbnN0IFdpbmQmIHJpZ2h0KQp7CiAgICByZXR1cm4oX1dpbi5zdy51cCAgIT0gcmlnaHQu IF9XaW4uc3cudXAgIHx8CgkgICAgX1dpbi5zdy5sZiAgIT0gcmlnaHQuIF9XaW4uc3cubGYgIHx8 CgkgICAgX1dpbi5zdy5kbiAgIT0gcmlnaHQuIF9XaW4uc3cuZG4gIHx8CgkgICAgX1dpbi5zdy5y dCAgIT0gcmlnaHQuIF9XaW4uc3cucnQgKTsKfQogCiAKCgppbmxpbmUgYm9vbApXaW5kOjpwX2lu c2lkZShjb29yX3QgeCwgY29vcl90IHkpIGNvbnN0CnsKICAgIGlmICh4IDwgX1dpbi5zdy51cCAg fHwgeCA+IF9XaW4uc3cuZG4gKQoJcmV0dXJuIGZhbHNlOwogICAgaWYgKHkgPCBfV2luLnN3Lmxm ICB8fCB5ID4gX1dpbi5zdy5ydCApCglyZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gdHJ1ZTsKfQoK IAoKCmlubGluZSBib29sCldpbmQ6Om92ZXJsYXAoY29uc3QgV2luZCAqd2luMikgY29uc3QKewog ICAgaWYgKChfV2luLnN3LmRuICA8IHdpbjItPiBfV2luLnN3LnVwICkgfHwgKF9XaW4uc3cudXAg ID4gd2luMi0+IF9XaW4uc3cuZG4gKQogICAgICAgICAgICAgICAgfHwgKF9XaW4uc3cucnQgIDwg d2luMi0+IF9XaW4uc3cubGYgKSB8fCAoX1dpbi5zdy5sZiAgPiB3aW4yLT4gX1dpbi5zdy5ydCAp KQogICAgICAgIHJldHVybihmYWxzZSk7CiAgICByZXR1cm4odHJ1ZSk7Cn0KCiAKCgppbmxpbmUg Ym9vbApXaW5kOjp3X2luc2lkZShjb25zdCBXaW5kICpwYXJlbnQpIGNvbnN0CnsKICAgIGlmICgo X1dpbi5zdy51cCAgPD0gcGFyZW50LT4gX1dpbi5zdy51cCApIHx8IChfV2luLnN3LmRuICA+PSBw YXJlbnQtPiBfV2luLnN3LmRuICkgfHwgKF9XaW4uc3cubGYgIDw9IHBhcmVudC0+IF9XaW4uc3cu bGYgKQoJCQkJCQkgICAgfHwgKF9XaW4uc3cucnQgID49IHBhcmVudC0+IF9XaW4uc3cucnQgKSkK CXJldHVybiBmYWxzZTsKICAgIHJldHVybiB0cnVlOwp9CgogCgoKaW5saW5lIGJvb2wKV2luZDo6 d19vbnRvcChXaW5kICpwYXJlbnQpIGNvbnN0CnsKICAgIGlmICgoX1dpbi5zdy51cCAgPCBwYXJl bnQtPiBfV2luLnN3LnVwICkgfHwgKF9XaW4uc3cuZG4gID4gcGFyZW50LT4gX1dpbi5zdy5kbiAp IHx8IChfV2luLnN3LmxmICA8IHBhcmVudC0+IF9XaW4uc3cubGYgKQoJCQkJCQkgICAgfHwgKF9X aW4uc3cucnQgID4gcGFyZW50LT4gX1dpbi5zdy5ydCApKQoJcmV0dXJuIGZhbHNlOwogICAgcmV0 dXJuIHRydWU7Cgp9CgpzdGF0aWMgaW5saW5lIGJvb2wKcF9pbnNpZGUoY29vcl90IHgsIGNvb3Jf dCB5LCBXaW5kICp3aW4pCnsKICAgIHJldHVybih3aW4tPnBfaW5zaWRlKHgsIHkpKTsKfQoKc3Rh dGljIGlubGluZSBib29sCndfaW5zaWRlKGNvbnN0IFdpbmQgKndpbiwgY29uc3QgV2luZCAqcGFy ZW50KQp7CiAgICByZXR1cm4od2luLT53X2luc2lkZShwYXJlbnQpKTsKfQoKc3RhdGljIGlubGlu ZSBib29sCndfb250b3AoV2luZCAqd2luLCBXaW5kICpwYXJlbnQpCnsKICAgIHJldHVybih3aW4t Pndfb250b3AocGFyZW50KSk7Cn0KCnN0YXRpYyBpbmxpbmUgYm9vbApvdmVybGFwKGNvbnN0IFdp bmQgKncsIGNvbnN0IFdpbmQgKncyKQp7CiAgICByZXR1cm4ody0+b3ZlcmxhcCh3MikpOwp9Cgog CgoKaW5saW5lIHZvaWQKV2luZDo6cm90YXRlKGludCBhbmdsZSkKewogICAgZm9yIChpbnQgaSA9 IDA7IGkgPCBhbmdsZTsgaSsrKSB7Cgljb29yX3QgY29vciA9IF9XaW4uc3cucnQgOwoJX1dpbi5z dy5ydCAgPSAtIF9XaW4uc3cudXAgOwoJX1dpbi5zdy51cCAgPSBfV2luLnN3LmxmIDsKCV9XaW4u c3cubGYgID0gLSBfV2luLnN3LmRuIDsKCV9XaW4uc3cuZG4gID0gY29vcjsKICAgIH0KfQoKc3Rh dGljIGlubGluZSB2b2lkCnJvdGF0ZShXaW5kICp3aW4sIGludCBhbmdsZSkKewogICAgd2luLT5y b3RhdGUoYW5nbGUpOwp9CgppbmxpbmUgdm9pZApXaW5kOjpncm93KGNvb3JfdCBkeCwgY29vcl90 IGR5KQp7CiAgICBfV2luLnN3LnJ0ICArPSBkeTsKICAgIF9XaW4uc3cuZG4gICs9IGR4OwoKICAg IF9XaW4uc3cubGYgIC09IGR5OwogICAgaWYgKF9XaW4uc3cubGYgIDwgMCkKCV9XaW4uc3cubGYg ID0gMDsKCiAgICBfV2luLnN3LnVwICAtPSBkeDsKICAgIGlmIChfV2luLnN3LnVwICA8IDApCglf V2luLnN3LnVwICA9IDA7Cn0KCiAKCgpzdGF0aWMgaW5saW5lIHZvaWQKZ3Jvd193aW4oV2luZCAq dywgY29vcl90IGR4LCBjb29yX3QgZHkpCnsKICAgIHctPmdyb3coZHgsIGR5KTsKfQoKc3RhdGlj IGlubGluZSB2b2lkCmNvbXBlbnNhdGUoV2luZCAqdzEpCnsKICAgIHcxLT5jb21wZW5zYXRlKCk7 Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZAp1bl9jb21wZW5zYXRlKFdpbmQgKncxKQp7CiAgICB3MS0+ dW5fY29tcGVuc2F0ZSgpOwp9CgojIDM0NiAiLi4vLi4vaW5jbHVkZS9sb2NhbGluYy9XaW5kLkgi CgoKIyAxOCAiLi4vLi4vaW5jbHVkZS9saWJpbmMvWEdyYXBoaWNzLkgiIDIKCiMgMSAiLi4vLi4v aW5jbHVkZS9sb2NhbGluYy9kcmF3X2NvbnN0LmgiIDEKCgoKCgoKCgoKIAoKCgoKCgoKCgoKIyAx OSAiLi4vLi4vaW5jbHVkZS9saWJpbmMvWEdyYXBoaWNzLkgiIDIKCgogCmNvbnN0IGludCBrWFdp bmRvdwk9IC0xOwoKY29uc3QgaW50IGtSZXN1bHRzCT0gMDsJIApjb25zdCBpbnQgU0hPVwkJPSAx OwkgCmNvbnN0IGludCBTTkFQCQk9IDI7CSAKY29uc3QgaW50IGtCb2FyZAk9IDM7CmNvbnN0IGlu dCBrQ2xvc2UJPSA0Owpjb25zdCBpbnQga051bVBpeG1hcHMJPSBrQ2xvc2UgKyAxOwoKIAoKCgpj b25zdCBpbnQga0NvbXBXaW5kb3cJPSBTTkFQOwkgCgpjb25zdCBpbnQga0hhcmR3YXJlRHVtcCA9 IDI7CSAKY29uc3QgaW50IGtIYXJkd2FyZVNuYXAgPSA0OwkgCgoKCgoKCgogCgoKCmNvbnN0IGlu dAlrTWF4Q29sb3JzID0gNTEyOwoKY2xhc3MgWEdyYXBoaWNzIHsKcHVibGljOgogICAgR0MJCWdj OwkJIAoKICAgIFhHcmFwaGljcygpOwogICAgWEdyYXBoaWNzKERpc3BsYXkgKiwgV2luZG93LCBX aWRnZXQpOwogICAgflhHcmFwaGljcygpOwoKICAgIHZvaWQgCSpvcGVyYXRvciBuZXcoc2l6ZV90 KTsKICAgIAogICAgdm9pZAlhdHRhY2goRGlzcGxheSAqLCBXaW5kb3csIFdpZGdldCk7CiAgICB2 b2lkCXNldHVwKGludCBpbngsIGludCB4LCBpbnQgeSwgR0MgZ2NfY2xlYXIpOwogICAgdm9pZAlz ZXR1cChpbnQgaW54LCBpbnQgZHgsIGludCBkeSk7CgogICAgRGlzcGxheQkqZGlzcGxheSgpIHsg cmV0dXJuIGFwcF9kaXNwbGF5OyB9CiAgICB2b2lkCWRpc3BsYXkoRGlzcGxheSAqIGRpc3ApIHsg YXBwX2Rpc3BsYXkgPSBkaXNwOyB9CiAgICBjb25zdCBYSW1hZ2UgKmdldF94X2ltYWdlKGludCk7 CiAgICB2b2lkCW1hcF9waXhlbHMoKTsKICAgIGludAkJeF9waXhlbChpbnQgZGlyLCBpbnQgZHdu LCBpbnQgYWNjLCBpbnQgcGl4ID0gMCk7CgogICAgbG9uZwlmaW5kX3BpeGVsKGludCBpbngpIGNv bnN0IHsgcmV0dXJuKHBpeGVsc1tpbnhdKTsgfQoKICAgIGxvbmcJSWdfZG90KGludCkgY29uc3Q7 CiAgICBpbnQJCUlnX2ZyYW1lKCkgY29uc3Q7CiAgICBjb25zdCBXaW5kICpJZ193aW5hZHIoKSBj b25zdDsKICAgIGludAkJSWdfZ21vZGUoaW50KSBjb25zdDsKICAgIHZvaWQJSXdsaW5lKGludCB4 X3N0cnQsIGludCB5X3N0cnQsIGludCB4X2VuZCwgaW50IHlfZW5kKSBjb25zdDsKICAgIHZvaWQJ SXdob3JpeihpbnQgZHduLCBpbnQgYWNjLCBpbnQgbGVuZ3RoKSBjb25zdDsKICAgIHZvaWQJSXd2 ZXJ0KGludCBkd24sIGludCBhY2MsIGludCBsZW5ndGgpIGNvbnN0OwogICAgdm9pZAlJd3JlY3Qo Y29uc3QgV2luZCAqdykgY29uc3Q7CiAgICB2b2lkCUl3Y2lyY2xlKGludCBfZHduLCBpbnQgX2Fj YywgaW50IF9sZW4pIGNvbnN0OwogICAgdm9pZAl3cHV0cGl4KGludCBkd24sIGludCBhY2MpIGNv bnN0OwogICAgdm9pZAlJd3BpeGVsKGludCB4LCBpbnQgeSkgY29uc3Q7CiAgICB2b2lkCUlsaW5l KGludCB4X3N0cnQsIGludCB5X3N0cnQsIGludCB4X2VuZCwgaW50IHlfZW5kKSBjb25zdDsKICAg IHZvaWQJSWhvcml6KGludCBkd24sIGludCBhY2MsIGludCBsZW5ndGgpIGNvbnN0OwogICAgdm9p ZAlJdmVydChpbnQgZHduLCBpbnQgYWNjLCBpbnQgbGVuZ3RoKSBjb25zdDsKICAgIHZvaWQJSXJl Y3QoY29uc3QgV2luZCAqdywgaW50ID0gLTEpIGNvbnN0OwogICAgdm9pZAlJY2lyY2xlKGludCBk d24sIGludCBhY2MsIGludCBsZW4sIGJvb2wgPSBmYWxzZSkgY29uc3Q7CiAgICB2b2lkCUlwaXhl bChpbnQgZHduLCBpbnQgYWNjKSBjb25zdDsKICAgIHZvaWQJcHV0cGl4KGludCBkd24sIGludCBh Y2MpIGNvbnN0OwogICAgdV9jaGFyICoJSWdfcGl4YWRyKGludCBkd24sIGludCBhY2MpOwogICAg aW50CQlJZ19uY21vbigpOwogICAgaW50CQlJZ19ucm1vbigpOwogICAgdm9pZAlJcF9kb3QoaW50 IGZnX2JnLCBpbnQgY29sX2lueCk7CiAgICB2b2lkCUlwX2dtb2RlKGludCBJLCBpbnQgVik7Cgog ICAgR0MJCXhfbWFrZUdDKHVfbG9uZyBmb3JlLCB1X2xvbmcgYmFjayk7CiAgICBHQwkJeF9uZXdH QyhpbnQgZ2NfZnVuYywgdV9sb25nIGZvcmUsIHVfbG9uZyBiYWNrKTsKICAgIEdDCQlnZXRPckdD KCk7CiAgICBHQwkJZ2V0Q29weUdDKCk7CiAgICB2b2lkCXhfc2V0R0NfY3VycmVudChHQyBuZXdn Yyk7CiAgICB2b2lkCXhfc2V0R0NfZnVuY3Rpb24oaW50IGdjX2Z1bmMpIGNvbnN0OwogICAgdm9p ZAl4X3NldEdDKEdDIF9nYywgdV9sb25nIGZvcmUsIHVfbG9uZyBiYWNrKSBjb25zdDsKICAgIHZv aWQJeF9zZXRnY19iYWNrZ3JvdW5kKEdDIF9nYywgaW50IGNvbG9yKSBjb25zdDsKICAgIHZvaWQJ eF9zZXRnY19mb3JlZ3JvdW5kKEdDIF9nYywgaW50IGNvbG9yKSBjb25zdDsKCiAgICBib29sCXhf Y29sb3IoaW50LCBjb25zdCBjaGFyICopOwogICAgaW50CQlmaW5kX2luZGV4KHVfbG9uZyk7CiAg ICBib29sCW1hcF9ncmV5KGludCBpbngpOwogICAgYm9vbAltYXBfZ3JleShpbnQgaW54LCBpbnQg c3ByZWFkID0gMik7CiAgICB2b2lkCXNldF9taW5pbXVtX3BpeGVsX3ZhbHVlKGludCBtaW5fdmFs dWUpOwogICAgdm9pZAlJd29mZigpOwogICAgdm9pZAlJdHdpbihpbnQpOwogICAgdm9pZAlJZGFy ayhib29sIGRyYXcgPSAxICk7CiAgICB2b2lkCUlkYXJrRnJhbWUoaW50LCBib29sIGRyYXcgPSAx ICk7CiAgICB2b2lkCUlwZnJhbWUoaW50KTsKICAgIHZvaWQJSXBmKGludCk7CgogICAgdm9pZAlj b250cmFzdF9ob3JpeihpbnQgYWNjLCBpbnQgZHduLCBpbnQgbGVuKTsKICAgIHZvaWQJY29udHJh c3RfdmVydChpbnQgYWNjLCBpbnQgZHduLCBpbnQgbGVuKTsKICAgIHZvaWQJY29udHJhc3RfcmVj dChjb25zdCBXaW5kICp3KTsKICAgIHZvaWQJY29udHJhc3RfeG91dChjb25zdCBXaW5kICp3KTsK ICAgIHZvaWQJeG91dChjb25zdCBXaW5kICopOwogICAgdm9pZAlkcmF3X2NvbnRyYXN0X3dpbmRv dyhjb25zdCBXaW5kICopOwoKICAgIHZvaWQJY29weWFyZWEoaW50LCBpbnQsIGludCwgaW50LCBp bnQsIGludCBkeCA9IC0xLCBpbnQgZHkgPSAtMSkgY29uc3Q7CiAgICB2b2lkCXB1dGltYWdlKGlu dCwgY29uc3QgWEltYWdlICosIGludCwgaW50LCBpbnQsIGludCkgY29uc3Q7CiAgICB2b2lkCWZp bGxyZWN0KGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKSBjb25zdDsKICAgIHZvaWQJZHJhd3Jl Y3QoaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpIGNvbnN0OwogICAgdm9pZAlmaWxscGl4bWFw KGludCBmciwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpIGNvbnN0OwogICAgdm9pZAlkcmF3 c3RyaW5nKGludCwgaW50LCBjb25zdCBjaGFyICopIGNvbnN0OwogICAgdm9pZAljaGFuZ2VfZHJh d193aWRnZXQoV2luZG93LCBXaWRnZXQgKTsKCiAgICBib29sCWlzX3RydWVjb2xvcigpIGNvbnN0 IHsgcmV0dXJuIChfaXNfdHJ1ZWNvbG9yKTsgfQogICAgUGl4bWFwCWdldF9waXhtYXAoaW50IHdo bykgeyByZXR1cm4gcGl4bWFwW3dob107IH0KCiAgICBpbnQJCXZlcnRpY2FsX29mZnNldCgpIGNv bnN0IHsgcmV0dXJuIChfdmVydGljYWxfb2Zmc2V0KTsgfQogICAgaW50CQlob3Jpem9udGFsX29m ZnNldCgpIGNvbnN0IHsgcmV0dXJuIChfaG9yaXpvbnRhbF9vZmZzZXQpOyB9CgogICAgdm9pZAl2 ZXJ0aWNhbF9vZmZzZXQoaW50IHZhbCkgeyBfdmVydGljYWxfb2Zmc2V0ID0gdmFsOyB9CiAgICB2 b2lkCWhvcml6b250YWxfb2Zmc2V0KGludCB2YWwpIHsgX2hvcml6b250YWxfb2Zmc2V0ID0gdmFs OyB9CgogICAgc3RhdGljIGJvb2wgdHJ5X2Zvcl90cnVlY29sb3JfdmlzdWFsKERpc3BsYXkgKmRp c3BsYXkpOwoKICAgIHN0YXRpYyBsb25nIGltYWdlX2RlcHRoKCkgeyByZXR1cm4oX2ltYWdlX2Rl cHRoKTsgfQogICAgc3RhdGljIHZvaWQgaW1hZ2VfZGVwdGgobG9uZyB2YWwpIHsgX2ltYWdlX2Rl cHRoID0gdmFsOyB9Cgpwcml2YXRlOgogICAgc3RhdGljCWxvbmcJCV9pbWFnZV9kZXB0aDsKICAg IHN0YXRpYwlib29sCQlfaXNfdHJ1ZWNvbG9yOwkgCgogICAgbG9uZwlfb2xkX3g7CiAgICBsb25n CV9vbGRfeTsKICAgICAKCgogICAgYm9vbAlfY29waWVkX2NtYXA7CiAgICBXaWRnZXQJX2RyYXdf d2lkZ2V0OwkgCgogICAgRGlzcGxheQkqYXBwX2Rpc3BsYXk7CSAKICAgIFdpbmRvdwl3aW5kb3c7 CQkgCiAgICB1X2xvbmcJcGl4ZWxzW2tNYXhDb2xvcnNdOwogICAgUGl4bWFwCXBpeG1hcFtrTnVt UGl4bWFwc107CiAgICBYSW1hZ2UJKnhfaW1hZ2Vba051bVBpeG1hcHNdOwogICAgdmVjdG9yCTxH Qz4gZ2NsaXN0OwkgCiAgICBHQwkJZ2xvYmFsR0M7CSAKICAgIEdDCQlvckdDOwogICAgR0MJCWNv cHlHQzsKCiAgICBib29sCVVzZVN0b3JlZDsKCiAgICBpbnQJCV9ob3Jpem9udGFsX29mZnNldDsK ICAgIGludAkJX3ZlcnRpY2FsX29mZnNldDsKCiAgICBpbnQJCV9mcm07CQkgCiAgICBpbnQJCWRv dFszXTsKICAgIGludAkJZ21vZGVbMl07CQkgCiAgICBXaW5kCXhfd2luOwoKCgoKICAgIHVfbG9u Zwlmcm1hZHJbNV07CgogICAgIAoKCgoKCgoKCgogICAgaW50CQlzY2FsZTsKCiAgICB2b2lkIHNl dF9waXhlbCh1X2NoYXIgKnhtcCwgdV9jaGFyIHBpeCkgewoJdV9jaGFyIGxvb2t1cCA9IF9pc190 cnVlY29sb3IgPyBwaXggOiAocGl4ICYgMHhmZSk7CgkqeG1wID0gZmluZF9waXhlbChsb29rdXAp OwogICAgfQoKICAgIHZvaWQgY3JlYXRlX25ld19jbWFwKFdpbmRvdyB3aW5kb3cpOwogICAgdm9p ZCBjaGFuZ2VfZGlzcGxheShpbnQgZnJtKTsKfTsKCmV4dGVybiBYR3JhcGhpY3MJKmdHcmFwaGlj czsKCmlubGluZSBjb25zdCBYSW1hZ2UgKgpYR3JhcGhpY3M6OmdldF94X2ltYWdlKGludCBpbngp CnsKICAgIHJldHVybih4X2ltYWdlW2lueF0pOwp9CgppbmxpbmUgdm9pZApYR3JhcGhpY3M6Onhf c2V0R0NfY3VycmVudChHQyBuZXdnYykKewogICAgZ2MgPSBuZXdnYzsKfQoKaW5saW5lIHZvaWQK WEdyYXBoaWNzOjp4X3NldEdDX2Z1bmN0aW9uKGludCBnY19mdW5jKSBjb25zdAp7CiAgICBYU2V0 RnVuY3Rpb24oYXBwX2Rpc3BsYXksIGdjLCBnY19mdW5jKTsKfQoKaW5saW5lIHZvaWQKWEdyYXBo aWNzOjp4X3NldEdDKEdDIF9nYywgdV9sb25nIGZvcmUsIHVfbG9uZyBiYWNrKSBjb25zdAp7CiAg ICBYU2V0Rm9yZWdyb3VuZChhcHBfZGlzcGxheSwgX2djLCBmb3JlKTsKICAgIFhTZXRCYWNrZ3Jv dW5kKGFwcF9kaXNwbGF5LCBfZ2MsIGJhY2spOwp9CgppbmxpbmUgdm9pZApYR3JhcGhpY3M6Onhf c2V0Z2NfYmFja2dyb3VuZChHQyBfZ2MsIGludCBjb2xvcikgY29uc3QKewogICAgWFNldEJhY2tn cm91bmQoYXBwX2Rpc3BsYXksIF9nYywgZmluZF9waXhlbChjb2xvcikpOwp9CgppbmxpbmUgdm9p ZApYR3JhcGhpY3M6Onhfc2V0Z2NfZm9yZWdyb3VuZChHQyBfZ2MsIGludCBjb2xvcikgY29uc3QK ewogICAgWFNldEZvcmVncm91bmQoYXBwX2Rpc3BsYXksIF9nYywgZmluZF9waXhlbChjb2xvcikp Owp9CgppbmxpbmUgdm9pZApYR3JhcGhpY3M6OnNldF9taW5pbXVtX3BpeGVsX3ZhbHVlKGludCBt aW5fdmFsdWUpCnsKICAgIHNjYWxlID0gbWluX3ZhbHVlOwp9CgppbmxpbmUgdm9pZApYR3JhcGhp Y3M6Okl3b2ZmKCkKewogICAgSXR3aW4oMSk7Cn0KCmlubGluZSB2b2lkClhHcmFwaGljczo6Y29w eWFyZWEoaW50IGZyYW1lLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwgaW50IGR4LCBpbnQg ZHkpIGNvbnN0CnsKICAgIGlmIChkeCA9PSAtMSkgewoJZHggPSB4OwoJZHkgPSB5OwogICAgfQog ICAgWENvcHlBcmVhKGFwcF9kaXNwbGF5LCBwaXhtYXBbZnJhbWVdLCB3aW5kb3csIGdjLCB4LCB5 LCB3KzEsIGgrMSwgZHgsIGR5KTsKICAgIGlmIChmcmFtZSA9PSBrQ2xvc2UgfHwgZnJhbWUgPT0g a0JvYXJkKSB7CglYQ29weUFyZWEoYXBwX2Rpc3BsYXksIHBpeG1hcFtmcmFtZV0sIHBpeG1hcFtT SE9XXSwKCQkJCQlnYywgeCwgeSwgdysxLCBoKzEsIGR4LCBkeSk7CiAgICB9Cn0KCmlubGluZSB2 b2lkClhHcmFwaGljczo6cHV0aW1hZ2UoaW50IGZyYW1lLCBjb25zdCBYSW1hZ2UgKnhtLCBpbnQg bCwgaW50IHUsIGludCB3LCBpbnQgaCkgY29uc3QKewogICAgWFB1dEltYWdlKGFwcF9kaXNwbGF5 LCBwaXhtYXBbZnJhbWVdLCBnYywgY29uc3RfY2FzdDxYSW1hZ2UgKj4oeG0pLCBsLCB1LCBsLCB1 LCB3LCBoKTsKfQoKaW5saW5lIHZvaWQKWEdyYXBoaWNzOjpmaWxscmVjdChpbnQgeCwgaW50IHks IGludCB3LCBpbnQgaCkgY29uc3QKewogICAgWEZpbGxSZWN0YW5nbGUoYXBwX2Rpc3BsYXksIHdp bmRvdywgZ2MsIDAsIDAsIHcsIGgpOwp9CgppbmxpbmUgdm9pZApYR3JhcGhpY3M6OmZpbGxwaXht YXAoaW50IGZyLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCkgY29uc3QKewogICAgWEZpbGxS ZWN0YW5nbGUoYXBwX2Rpc3BsYXksIHBpeG1hcFtmcl0sIGdjLCB4LCB5LCB3LCBoKTsKICAgIGlm IChmciA9PSBTSE9XIHx8IGZyID09IGtDbG9zZSB8fCBmciA9PSBrQm9hcmQpIHsKCWlmIChmciAh PSBTSE9XKQoJICAgIFhGaWxsUmVjdGFuZ2xlKGFwcF9kaXNwbGF5LCBwaXhtYXBbU0hPV10sIGdj LCB4LCB5LCB3LCBoKTsKCWVsc2UgewoJICAgIFhGaWxsUmVjdGFuZ2xlKGFwcF9kaXNwbGF5LCBw aXhtYXBba0Nsb3NlXSwgZ2MsIHgsIHksIHcsIGgpOwoJICAgIFhGaWxsUmVjdGFuZ2xlKGFwcF9k aXNwbGF5LCBwaXhtYXBba0JvYXJkXSwgZ2MsIHgsIHksIHcsIGgpOwoJfQogICAgfQp9Cgppbmxp bmUgdm9pZApYR3JhcGhpY3M6OmRyYXdyZWN0KGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKSBj b25zdAp7CiAgICBYRHJhd1JlY3RhbmdsZShhcHBfZGlzcGxheSwgd2luZG93LCBnYywgeCwgeSwg dywgaCk7Cn0KCmlubGluZSB2b2lkClhHcmFwaGljczo6ZHJhd3N0cmluZyhpbnQgYWNjLCBpbnQg ZHduLCBjb25zdCBjaGFyICpzdHIpIGNvbnN0CnsKICAgIFhEcmF3SW1hZ2VTdHJpbmcoYXBwX2Rp c3BsYXksIHBpeG1hcFtfZnJtXSwgZ2MsIGFjYywgZHduLAoJCQkJY29uc3RfY2FzdDxjaGFyICo+ KHN0ciksIHN0cmxlbihzdHIpKTsKICAgIGlmIChfZnJtID09IGtDbG9zZSB8fCBfZnJtID09IGtC b2FyZCkgewoJWERyYXdJbWFnZVN0cmluZyhhcHBfZGlzcGxheSwgcGl4bWFwW1NIT1ddLCBnYywg YWNjLCBkd24sCgkJCQljb25zdF9jYXN0PGNoYXIgKj4oc3RyKSwgc3RybGVuKHN0cikpOwogICAg fQp9CgogCgoKaW5saW5lIHZvaWQgWEdyYXBoaWNzOjpJbGluZShpbnQgeF9zdHJ0LCBpbnQgeV9z dHJ0LCBpbnQgeF9lbmQsIGludCB5X2VuZCkgY29uc3QKewogICAgWERyYXdMaW5lKGFwcF9kaXNw bGF5LCBwaXhtYXBbX2ZybV0sIGdjLCB5X3N0cnQsIHhfc3RydCwgeV9lbmQsIHhfZW5kKTsKfQoK aW5saW5lIHZvaWQgWEdyYXBoaWNzOjpJaG9yaXooaW50IGR3biwgaW50IGFjYywgaW50IGxlbmd0 aCkgY29uc3QKewogICAgWERyYXdMaW5lKGFwcF9kaXNwbGF5LCBwaXhtYXBbX2ZybV0sIGdjLCBh Y2MsIGR3biwgYWNjICsgbGVuZ3RoLCBkd24pOwp9CgppbmxpbmUgdm9pZCBYR3JhcGhpY3M6Okl2 ZXJ0KGludCBkd24sIGludCBhY2MsIGludCBsZW5ndGgpIGNvbnN0CnsKICAgIFhEcmF3TGluZShh cHBfZGlzcGxheSwgcGl4bWFwW19mcm1dLCBnYywgYWNjLCBkd24sIGFjYywgZHduICsgbGVuZ3Ro KTsKfQoKaW5saW5lIHZvaWQgWEdyYXBoaWNzOjpJY2lyY2xlKGludCBkd24sIGludCBhY2MsIGlu dCBsZW4sIGJvb2wgZmlkdWNpYWwpIGNvbnN0CnsKICAgIGlmIChmaWR1Y2lhbCkKCVhEcmF3QXJj KGFwcF9kaXNwbGF5LCBwaXhtYXBbX2ZybV0sIGdjLAoJICAgIGFjYyAtIGxlbiwgZHduIC0gbGVu LCBsZW4gKiAyLCBsZW4gKiAyLCAwLCAzNjAgKiA2NCk7CiAgICBlbHNlCglYRmlsbEFyYyhhcHBf ZGlzcGxheSwgcGl4bWFwW19mcm1dLCBnYywKCSAgICBhY2MgLSBsZW4sIGR3biAtIGxlbiwgbGVu ICogMiwgbGVuICogMiwgMCwgMzYwICogNjQpOwp9CgogCgoKaW5saW5lIHZvaWQgWEdyYXBoaWNz OjpJd2xpbmUoaW50IHhfc3RydCwgaW50IHlfc3RydCwgaW50IHhfZW5kLCBpbnQgeV9lbmQpIGNv bnN0CnsKICAgIFhEcmF3TGluZShhcHBfZGlzcGxheSwgd2luZG93LCBnYywgeV9zdHJ0LCB4X3N0 cnQsIHlfZW5kLCB4X2VuZCk7CiAgICBJbGluZSh4X3N0cnQsIHlfc3RydCwgeF9lbmQsIHlfZW5k KTsKfQoKaW5saW5lIHZvaWQgWEdyYXBoaWNzOjpJd2hvcml6KGludCBkd24sIGludCBhY2MsIGlu dCBsZW5ndGgpIGNvbnN0CnsKICAgIFhEcmF3TGluZShhcHBfZGlzcGxheSwgd2luZG93LCBnYywg YWNjLCBkd24sIGFjYyArIGxlbmd0aCwgZHduKTsKICAgIElob3Jpeihkd24sIGFjYywgbGVuZ3Ro KTsKfQoKaW5saW5lIHZvaWQgWEdyYXBoaWNzOjpJd3ZlcnQoaW50IGR3biwgaW50IGFjYywgaW50 IGxlbmd0aCkgY29uc3QKewogICAgWERyYXdMaW5lKGFwcF9kaXNwbGF5LCB3aW5kb3csIGdjLCBh Y2MsIGR3biwgYWNjLCBkd24gKyBsZW5ndGgpOwogICAgSXZlcnQoZHduLCBhY2MsIGxlbmd0aCk7 Cn0KCmlubGluZSB2b2lkIFhHcmFwaGljczo6SXJlY3QoY29uc3QgV2luZCAqdywgaW50IGZpbGxf Y29sb3IpIGNvbnN0CnsKICAgIGlmIChmaWxsX2NvbG9yID09IC0xKQoJWERyYXdSZWN0YW5nbGUo YXBwX2Rpc3BsYXksIHBpeG1hcFtfZnJtXSwgZ2MsCgkJdy0+IF9XaW4uc3cubGYgLCB3LT4gX1dp bi5zdy51cCAsICh3LT4gX1dpbi5zdy5ydCAgLSB3LT4gX1dpbi5zdy5sZiApLCAody0+IF9XaW4u c3cuZG4gIC0gdy0+IF9XaW4uc3cudXAgKSk7CiAgICBlbHNlIHsKCSAKCgoKCgoJWEZpbGxSZWN0 YW5nbGUoYXBwX2Rpc3BsYXksIHBpeG1hcFtfZnJtXSwgZ2MsCgkJdy0+IF9XaW4uc3cubGYgLCB3 LT4gX1dpbi5zdy51cCAsICh3LT4gX1dpbi5zdy5ydCAgLSB3LT4gX1dpbi5zdy5sZiApICsgMSwg KHctPiBfV2luLnN3LmRuICAtIHctPiBfV2luLnN3LnVwICkgKyAxKTsKICAgIH0KfQoKaW5saW5l IHZvaWQgWEdyYXBoaWNzOjpJd3JlY3QoY29uc3QgV2luZCAqdykgY29uc3QKewogICAgWERyYXdS ZWN0YW5nbGUoYXBwX2Rpc3BsYXksIHdpbmRvdywgZ2MsCgkJdy0+IF9XaW4uc3cubGYgLCB3LT4g X1dpbi5zdy51cCAsICh3LT4gX1dpbi5zdy5ydCAgLSB3LT4gX1dpbi5zdy5sZiApLCAody0+IF9X aW4uc3cuZG4gIC0gdy0+IF9XaW4uc3cudXAgKSk7CiAgICBJcmVjdCh3KTsKfQoKaW5saW5lIHZv aWQgWEdyYXBoaWNzOjpJd2NpcmNsZShpbnQgX2R3biwgaW50IF9hY2MsIGludCBfbGVuKSBjb25z dAp7CiAgICBYRHJhd0FyYyhhcHBfZGlzcGxheSwgd2luZG93LCBnYywKCSAgICBfYWNjIC0gX2xl biwgX2R3biAtIF9sZW4sIF9sZW4gKiAyLCBfbGVuICogMiwgMCwgMzYwICogNjQpOwp9Cgppbmxp bmUgdm9pZCBYR3JhcGhpY3M6OnB1dHBpeChpbnQgZHduLCBpbnQgYWNjKSBjb25zdAp7CiAgICBY RHJhd1BvaW50KGFwcF9kaXNwbGF5LCBwaXhtYXBbX2ZybV0sIGdjLCBhY2MsIGR3bik7Cn0KCmlu bGluZSB2b2lkIFhHcmFwaGljczo6SXBpeGVsKGludCBkd24sIGludCBhY2MpIGNvbnN0CnsKICAg IHB1dHBpeChkd24sIGFjYyk7Cn0KCmlubGluZSB2b2lkIFhHcmFwaGljczo6d3B1dHBpeChpbnQg ZHduLCBpbnQgYWNjKSBjb25zdAp7CiAgICBYRHJhd1BvaW50KGFwcF9kaXNwbGF5LCB3aW5kb3cs IGdjLCBhY2MsIGR3bik7CiAgICBwdXRwaXgoZHduLCBhY2MpOwp9CgppbmxpbmUgdm9pZCBYR3Jh cGhpY3M6Okl3cGl4ZWwoaW50IHgsIGludCB5KSBjb25zdAp7CiAgICB3cHV0cGl4KHgsIHkpOwp9 CgppbmxpbmUgbG9uZwpYR3JhcGhpY3M6OklnX2RvdChpbnQgaSkgY29uc3QKewogICAgcmV0dXJu KGRvdFtpXSk7Cn0KCmlubGluZSBpbnQKWEdyYXBoaWNzOjpJZ19mcmFtZSgpIGNvbnN0CnsKICAg IHJldHVybihfZnJtKTsKfQoKaW5saW5lIGNvbnN0IFdpbmQgKgpYR3JhcGhpY3M6OklnX3dpbmFk cigpIGNvbnN0CnsKICAgIHJldHVybigmeF93aW4pOwp9CgppbmxpbmUgaW50ClhHcmFwaGljczo6 SWdfZ21vZGUoaW50IGkpIGNvbnN0CnsKICAgIHJldHVybihnbW9kZVtpXSk7Cn0KCnR5cGVkZWYg c3RydWN0IHsKICAgaW50IEltMDsKICAgZmxvYXQgSW0xWzJdOwogICBmbG9hdCBJbTJbMl07CiAg IGZsb2F0IElteHk7CiAgIGZsb2F0IEltYWpvclsyXTsKICAgZmxvYXQgSW1pbm9yWzJdOwp9IE1P TVJFUzsKCiMgMTMgInNhdmVfc25hcC5jIiAyCgojIDEgIi4uLy4uL2luY2x1ZGUvbGliaW5jL2xp YmxpZ2h0aW5nLkgiIDEKCgoKIAoKCgojIDEgIi4uLy4uL2luY2x1ZGUvbG9jYWxpbmMvSW5zcExp Z2h0LkgiIDEKCgogCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAogCiAKCgoK CgoKCmNvbnN0CWludAlrTWF4TGlnaHREdXJhdGlvbgk9IDI3ODsKCmNvbnN0CXVfaW50CWtIaWdo CQkJPSAwOwpjb25zdAl1X2ludAlrTWVkCQkJPSAxOwpjb25zdAl1X2ludAlrTG93CQkJPSAyOwpj b25zdAl1X2ludAlrNDUJCQk9IDM7CmNvbnN0CXVfaW50CWtMYXNlcgkJCT0gNDsKY29uc3QJdV9p bnQJa0F1dG9Mb3dlcgkJPSA1Owpjb25zdAl1X2ludAlrSGVpZ2h0CQkJPSA2OwogCgoKY29uc3QJ dV9pbnQJa0NhbUhlaWdodDAJCT0gNzsKY29uc3QJdV9pbnQJa0NhbUhlaWdodDEJCT0gODsKY29u c3QJdV9pbnQJa0NhbUhlaWdodDIJCT0gOTsKY29uc3QJdV9pbnQJa0NhbUhlaWdodDMJCT0gMTA7 Cgpjb25zdAl1X2ludAlrTnVtTGlnaHRSaW5ncwkJPSAxMTsKIAoKCgpjbGFzcyBJbnNwTGlnaHQg ewpwdWJsaWM6CiAgICB2b2lkCWR1cmF0aW9uKGludCB2YWwpOwogICAgdm9pZAlkdXJhdGlvbih1 X2ludCwgaW50IHZhbCk7CiAgICB2b2lkCWVuYWJsZWQoYm9vbCk7CiAgICB2b2lkCWVuYWJsZWQo dV9pbnQsIGJvb2wpOwogICAgdm9pZAllbmFibGVfcmluZ3MobG9uZyk7CiAgICB2b2lkCXJpbmco dV9pbnQgdmFsKTsKCgoKCiAgICBmcmllbmQJYm9vbAlvcGVyYXRvcj09KGNvbnN0IEluc3BMaWdo dCYsIGNvbnN0IEluc3BMaWdodCYpOwogICAgZnJpZW5kCWJvb2wJb3BlcmF0b3IhPShjb25zdCBJ bnNwTGlnaHQmLCBjb25zdCBJbnNwTGlnaHQmKTsKCiAgICBsb25nCWxpZ2h0KCkgY29uc3Q7CiAg ICBpbnQJCWR1cmF0aW9uKCkgY29uc3Q7CiAgICBib29sCWVuYWJsZWQoKSBjb25zdDsKICAgIGJv b2wJbW9kZTNkKCkgY29uc3Q7CiAgICBpbnQJCWh3X3RpbWUoKSBjb25zdDsKICAgIHVfaW50CXJp bmcoKSBjb25zdDsKICAgIGxvbmcJY3VyX3JpbmdzKCkgY29uc3Q7CgogICAgIAoKCgoKCgogICAg dm9pZAlpbml0KHVfaW50IHJpbmcgPSAwKTsKCiAgICAgCgoKCiAgICB2b2lkCWZpeCgpOwoKcHJp dmF0ZToKICAgIGxvbmcJX2xpZ2h0W2tOdW1MaWdodFJpbmdzXTsJCSAKICAgIGludAkJX2R1cmF0 aW9uW2tOdW1MaWdodFJpbmdzXTsJIAogICAgaW50CQlfaHdfdGltZVtrTnVtTGlnaHRSaW5nc107 CSAKICAgIGludAkJX2VuYWJsZWRba051bUxpZ2h0UmluZ3NdOwkgCiAgICB1X2ludAlfcmluZzsJ CQkJIAoKICAgIHZvaWQJY2hlY2tfaGVpZ2h0KHVfaW50IHJpbmcsIGJvb2wgZW5hYmxlZCkgY29u c3Q7CiAgICB2b2lkCXNldF9oZWlnaHQoKSBjb25zdDsKICAgIHZvaWQJY2xlYXJfaGVpZ2h0KCkg Y29uc3Q7Cn07CgoKCmlubGluZSBsb25nIEluc3BMaWdodDo6bGlnaHQoKSBjb25zdAp7CiAgICBy ZXR1cm4oX2xpZ2h0W19yaW5nXSk7Cn0KCmlubGluZSBpbnQgSW5zcExpZ2h0OjpkdXJhdGlvbigp IGNvbnN0CnsKICAgIHJldHVybihfZHVyYXRpb25bX3JpbmddKTsKfQoKaW5saW5lIGJvb2wgSW5z cExpZ2h0Ojptb2RlM2QoKSBjb25zdAp7CiAgICByZXR1cm4oX2VuYWJsZWRba0xhc2VyXSk7CSAK fQoKaW5saW5lIGludCBJbnNwTGlnaHQ6Omh3X3RpbWUoKSBjb25zdAp7CiAgICByZXR1cm4oX2h3 X3RpbWVbX3JpbmddKTsKfQoKaW5saW5lIHVfaW50IEluc3BMaWdodDo6cmluZygpIGNvbnN0CnsK ICAgIHJldHVybihfcmluZyk7Cn0KCiAKCgppbmxpbmUgbG9uZyBJbnNwTGlnaHQ6OmN1cl9yaW5n cygpIGNvbnN0CnsKICAgIGxvbmcgb3V0ID0gMDsKICAgIGZvciAodV9pbnQgaSA9IGtIaWdoOyBp IDwga051bUxpZ2h0UmluZ3M7ICsraSkgewoJaWYgKF9lbmFibGVkW2ldKQoJICAgIG91dCB8PSBf bGlnaHRbaV07CiAgICB9CiAgICByZXR1cm4ob3V0KTsKfQoKaW5saW5lIHZvaWQgSW5zcExpZ2h0 OjpkdXJhdGlvbih1X2ludCByaW5nLCBpbnQgdmFsKQp7CgoKCiAgICBpZiAodmFsIDwgLTEgfHwg dmFsID4ga01heExpZ2h0RHVyYXRpb24pIHsKCV9kdXJhdGlvbltyaW5nXSA9IC0xOwoJX2h3X3Rp bWVbcmluZ10gPSAtMTsKICAgIH0KICAgIGVsc2UgewoJX2R1cmF0aW9uW3JpbmddID0gdmFsOwoJ X2h3X3RpbWVbcmluZ10gPSAoKGludCkgKCgoZmxvYXQpdmFsICogMTEuMCkgLyAxMi4wKSk7CiAg ICB9Cn0KCmlubGluZSB2b2lkIEluc3BMaWdodDo6ZHVyYXRpb24oaW50IHZhbCkKewogICAgZHVy YXRpb24oX3JpbmcsIHZhbCk7Cn0KCmlubGluZSB2b2lkIEluc3BMaWdodDo6cmluZyh1X2ludCB2 YWwpCnsKICAgIF9yaW5nID0gdmFsOwp9CgppbmxpbmUgYm9vbCBvcGVyYXRvciA9PSAoY29uc3Qg SW5zcExpZ2h0JiBsZWZ0LCBjb25zdCBJbnNwTGlnaHQmIHJpZ2h0KQp7CiAgICBmb3IgKHVfaW50 IGkgPSAwOyBpIDwga051bUxpZ2h0UmluZ3M7ICsraSkgewoJaWYgKChsZWZ0Ll9lbmFibGVkW2ld ICE9IHJpZ2h0Ll9lbmFibGVkW2ldKSB8fAoJCShsZWZ0Ll9kdXJhdGlvbltpXSAhPSByaWdodC5f ZHVyYXRpb25baV0pKQoJICAgIHJldHVybihmYWxzZSk7CiAgICB9CiAgICByZXR1cm4odHJ1ZSk7 Cn0KCmlubGluZSBib29sIG9wZXJhdG9yICE9IChjb25zdCBJbnNwTGlnaHQmIGxlZnQsIGNvbnN0 IEluc3BMaWdodCYgcmlnaHQpCnsKICAgIHJldHVybighKGxlZnQgPT0gcmlnaHQpKTsKfQoKCiMg MjEzICIuLi8uLi9pbmNsdWRlL2xvY2FsaW5jL0luc3BMaWdodC5IIgoKCiMgOCAiLi4vLi4vaW5j bHVkZS9saWJpbmMvbGlibGlnaHRpbmcuSCIgMgoKCmNsYXNzCVNlcmlhbFBvcnQ7CmNsYXNzCWNv bmZpZ3VyYXRpb247CgpjbGFzcyBMaWdodGluZyB7CiAgICBwdWJsaWM6CglMaWdodGluZyhjb25z dCBjb25maWd1cmF0aW9uJik7CglMaWdodGluZyhjb25zdCBjb25maWd1cmF0aW9uJiwgY29uc3Qg SW5zcExpZ2h0Jik7Cgl+TGlnaHRpbmcoKTsKCgl2b2lkCXNldF90b19mbHkoaW50IHBhc3Nfbm8g PSAtMSk7CSAKCXZvaWQJc2V0X3RvX2ZpZHUoKTsJIAoJdm9pZAlzZXRfbGlnaHQoY29uc3QgSW5z cExpZ2h0JiBsaWdodCk7Cgl2b2lkCXNldF9saWdodChjb25zdCBJbnNwTGlnaHQgKmxpZ2h0KTsK Cgl2b2lkCXRpbWUoc2hvcnQpOwoJdm9pZAlzZXRfZGlnaW8obG9uZyk7CgoJdm9pZAlkaXNhYmxl X3RpbWluZygpOwoKCXN0YXRpYyBib29sIG1vZGUzZCgpOwoJCglmcmllbmQgaW50IG9wZXJhdG9y PT0gKGNvbnN0IExpZ2h0aW5nJiBsZWZ0LCBjb25zdCBMaWdodGluZyYgcmlnaHQpIHsKCSAgICBy ZXR1cm4obGVmdC5fY3VyX2xpZ2h0ID09IHJpZ2h0Ll9jdXJfbGlnaHQpOwoJfQoJZnJpZW5kIGlu dCBvcGVyYXRvciE9IChjb25zdCBMaWdodGluZyYgbGVmdCwgY29uc3QgTGlnaHRpbmcmIHJpZ2h0 KSB7CgkgICAgcmV0dXJuKCEobGVmdCA9PSByaWdodCkpOwoJfQoKICAgIHByb3RlY3RlZDoKCWNv bnN0IGNvbmZpZ3VyYXRpb24mCV9jZmc7CglJbnNwTGlnaHQJCV9jdXJfbGlnaHQ7CgoJTGlnaHRp bmcoKTsJIAoKCXZvaWQJc2VuZChTZXJpYWxQb3J0Jik7Cgl2b2lkCXVwZGF0ZV9oYXJkd2FyZSgp OwoJdm9pZAl0b2dnbGVfY2FtZXJhX2hlaWdodCgpOwoJdm9pZAlwcm9ncmFtX21vZGUoU2VyaWFs UG9ydCYsIGxvbmcpOwoKCXZvaWQJcnRjX3VwZGF0ZV9oYXJkd2FyZSgpOwoJdm9pZAlydGNfZGlz YWJsZV90aW1pbmcoKTsKfTsKCgoKIyAxNCAic2F2ZV9zbmFwLmMiIDIKCgojIDEgIi4uLy4uL2lu Y2x1ZGUvbG9jYWxpbmMvbWFjcm8uaCIgMQoKCgogCgoKCgojIDE4ICIuLi8uLi9pbmNsdWRlL2xv Y2FsaW5jL21hY3JvLmgiCgoKIAoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoKCgoKIyA3NyAiLi4v Li4vaW5jbHVkZS9sb2NhbGluYy9tYWNyby5oIgoKCiMgMTAxICIuLi8uLi9pbmNsdWRlL2xvY2Fs aW5jL21hY3JvLmgiCgogCgoKCgoKIyAxMjYgIi4uLy4uL2luY2x1ZGUvbG9jYWxpbmMvbWFjcm8u aCIKCgoKCgogCgoKCgojIDE1OCAiLi4vLi4vaW5jbHVkZS9sb2NhbGluYy9tYWNyby5oIgoKCgoK CgoKCgoKCgoKCgoKCnN0YXRpYyBpbmxpbmUgc2hvcnQgaW5saW5lX2FicyhzaG9ydCB2KSB7IGlm ICh2ID49IDApIHJldHVybiB2OyByZXR1cm4gLXY7IH0Kc3RhdGljIGlubGluZSBpbnQgaW5saW5l X2FicyhpbnQgdikgeyBpZiAodiA+PSAwKSByZXR1cm4gdjsgcmV0dXJuIC12OyB9CnN0YXRpYyBp bmxpbmUgbG9uZyBpbmxpbmVfYWJzKGxvbmcgdikgeyBpZiAodiA+PSAwKSByZXR1cm4gdjsgcmV0 dXJuIC12OyB9CnN0YXRpYyBpbmxpbmUgZmxvYXQgaW5saW5lX2FicyhmbG9hdCB2KSB7IGlmICh2 ID49IDApIHJldHVybiB2OyByZXR1cm4gLXY7IH0Kc3RhdGljIGlubGluZSBkb3VibGUgaW5saW5l X2Ficyhkb3VibGUgdikgeyBpZiAodiA+PSAwKSByZXR1cm4gdjsgcmV0dXJuIC12OyB9CgoKCgoK CgoKCgoKCgojIDE2ICJzYXZlX3NuYXAuYyIgMgoKIyAxICIuLi8uLi9pbmNsdWRlL2xvY2FsaW5j L2V2ZW50X3Byb2Nlc3NpbmcuaCIgMQoKCgpjb25zdCBpbnQgQ0hBTkdFX05PVF9TRVQgPSAtMjsJ IApjb25zdCBpbnQgQ0FOQ0VMCT0gLTE7CSAKCiAKCgoKY29uc3QgaW50IEZJRFVDSUFMCT0gLTI7 CgoKIAoKCgoKCgoKCgojIDE3ICJzYXZlX3NuYXAuYyIgMgoKIyAxICIuLi8uLi9pbmNsdWRlL2xv Y2FsaW5jL0NvbW1vbkdsb2JhbHMuSCIgMQoKCgogCgoKCgoKCgoKCgpjbGFzcwlHcm91cDsKY2xh c3MJVG9wZm9ybTsKCmNvbnN0IGludCBrUGluUGFydFV0aWxpdHkJPSAwOwpjb25zdCBpbnQga1Jl cGFpclN0YXRpb24JPSAxOwpjb25zdCBpbnQga0xhc2VyU3RhdGlvbgkJPSAyOwpjb25zdCBpbnQg a0F1dG9UcmFpbmVyCQk9IDM7CmNvbnN0IGludCBrRGVmZWN0U3RhdGlvbgk9IDQ7CmNvbnN0IGlu dCBrVmVyaWZpY2F0aW9uU3RhdGlvbgk9IDU7CmNvbnN0IGludCBrRGJnZW4JCT0gNjsKCmNsYXNz IENvbW1vbkdsb2JhbHMgewpwdWJsaWM6CiAgICBDb21tb25HbG9iYWxzKCk7CQkgCiAgICB2b2lk ICpvcGVyYXRvciBuZXcoc2l6ZV90KSB0aHJvdygpOwoKICAgIFRvcGZvcm0JKnRvcGZvcm07Cgog ICAgYm9vbAlBdXRvSW5zcGVjdG9yKCkgeyByZXR1cm4gKF9hcHBsaWNhdGlvbiA9PSBrUGluUGFy dFV0aWxpdHkpOyB9CiAgICBib29sCUF1dG9UcmFpbmVyKCkgeyByZXR1cm4gKF9hcHBsaWNhdGlv biA9PSBrQXV0b1RyYWluZXIpOyB9CiAgICBib29sCURiZ2VuKCkgeyByZXR1cm4gKF9hcHBsaWNh dGlvbiA9PSBrRGJnZW4pOyB9CiAgICBib29sCURlZmVjdFN0YXRpb24oKSB7IHJldHVybiAoX2Fw cGxpY2F0aW9uID09IGtEZWZlY3RTdGF0aW9uKTsgfQogICAgYm9vbAlMYXNlclN0YXRpb24oKSB7 IHJldHVybiAoX2FwcGxpY2F0aW9uID09IGtMYXNlclN0YXRpb24pOyB9CiAgICBib29sCVJlcGFp clN0YXRpb24oKSB7IHJldHVybiAoX2FwcGxpY2F0aW9uID09IGtSZXBhaXJTdGF0aW9uKTsgfQog ICAgYm9vbAlWZXJpZmljYXRpb25TdGF0aW9uKCkgeyByZXR1cm4gKF9hcHBsaWNhdGlvbiA9PSBr VmVyaWZpY2F0aW9uU3RhdGlvbik7IH0KICAgIGJvb2wgICAgCWdldG5vdXNlcnJ1bGVzKCkge3Jl dHVybiBub191c2VyX3J1bGVzOyB9CgogICAgdm9pZAlNb3ZlV29ya1Byb2NJZChYdFdvcmtQcm9j SWQgaWQpIHsgd29ya19wcm9jID0gaWQ7IH0KICAgIHZvaWQJc2V0X2Rpc3BsYXlfd2lkZ2V0cyhX aWRnZXQsIFdpZGdldCk7CiAgICB2b2lkICAgIAlzZXRub3VzZXJydWxlcyhib29sIHZhbHVlKSB7 bm9fdXNlcl9ydWxlcyA9IHZhbHVlOyB9CgogICAgWHRXb3JrUHJvY0lkIE1vdmVXb3JrUHJvY0lk KCkgeyByZXR1cm4gd29ya19wcm9jOyB9CgogICAgIAoKCgoKICAgIGludAkJYXBwbGljYXRpb24o KSB7IHJldHVybiBfYXBwbGljYXRpb247IH0KICAgIHZvaWQJYXBwbGljYXRpb24oaW50IGFwcGwp IHsgX2FwcGxpY2F0aW9uID0gYXBwbDsgfQoKICAgIGJvb2wJQXV0b0FwcGx5RGVmZWN0KCkgeyBy ZXR1cm4gYXV0b19hcHBseV9kZWZlY3Q7IH0KICAgIHZvaWQJQXV0b0FwcGx5RGVmZWN0KGJvb2wg c3RhdGUpIHsgYXV0b19hcHBseV9kZWZlY3QgPSBzdGF0ZTsgfQoKICAgIGJvb2wJQXV0b1JlcGFp cigpIHsgcmV0dXJuIGF1dG9fcmVwYWlyOyB9CiAgICB2b2lkCUF1dG9SZXBhaXIoYm9vbCBzdGF0 ZSkgeyBhdXRvX3JlcGFpciA9IHN0YXRlOyB9CgogICAgYm9vbAlBdXRvUmVwYWlyTW9kZSgpIHsg cmV0dXJuIGF1dG9fcmVwX21vZGU7IH0KICAgIHZvaWQJQXV0b1JlcGFpck1vZGUoYm9vbCBzdGF0 ZSkgeyBhdXRvX3JlcF9tb2RlID0gc3RhdGU7IH0KCiAgICBib29sCUNhbGlicmF0ZWREYXRhYmFz ZUZsYWcoKSB7IHJldHVybiBkYmFzZV9jYWxpYjsgfQogICAgdm9pZAlDYWxpYnJhdGVkRGF0YWJh c2VGbGFnKGJvb2wgc3RhdGUpIHsgZGJhc2VfY2FsaWIgPSBzdGF0ZTsgfQoKICAgIGJvb2wJQ2hh bmdlQXV0b1JlcGFpck1vZGUoKSB7IHJldHVybiBjaGFuZ2VfYXV0b19yZXA7IH0KICAgIHZvaWQJ Q2hhbmdlQXV0b1JlcGFpck1vZGUoYm9vbCBzdGF0ZSkgeyBjaGFuZ2VfYXV0b19yZXAgPSBzdGF0 ZTsgfQoKICAgIGludAkJQ3VycmVudENhbWVyYSgpIHsgcmV0dXJuIGN1cnJlbnRfY2FtOyB9CiAg ICB2b2lkCUN1cnJlbnRDYW1lcmEoaW50IHdoaWNoKTsKCiAgICAgCgoKICAgIGludAkJRGF0YWJh c2VSb3RhdGlvbigpIHsgcmV0dXJuIGRhdGFiYXNlX3JvdGF0aW9uOyB9CiAgICB2b2lkCURhdGFi YXNlUm90YXRpb24oaW50IGFuZ2xlKSB7IGRhdGFiYXNlX3JvdGF0aW9uID0gYW5nbGU7IH0KCiAg ICAgCgoKCiAgICBpbnQJCURpc3BsYXlSb3RhdGlvbigpIHsgcmV0dXJuIGRpc3BsYXlfcm90YXRp b247IH0KICAgIHZvaWQJRGlzcGxheVJvdGF0aW9uKGludCBhbmdsZSkgeyBkaXNwbGF5X3JvdGF0 aW9uID0gYW5nbGU7IH0KCiAgICBjb25zdCBjaGFyCSpDdXJyZW50Q29tcFRibE5hbWUoKSB7IHJl dHVybiBjb21wX3RhYmxlOyB9CiAgICB2b2lkCUN1cnJlbnRDb21wVGJsTmFtZShjb25zdCBjaGFy ICpuYW1lKSB7IHN0cm5jcHkoY29tcF90YWJsZSwgbmFtZSwgc2l6ZW9mKGNvbXBfdGFibGUpKTsg fQogICAgdm9pZAlDdXJyZW50Q29tcFRibE5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpIHsg c3RybmNweShjb21wX3RhYmxlLCBuYW1lLmNfc3RyKCksIHNpemVvZihjb21wX3RhYmxlKSk7IH0K CiAgICBjb25zdCBjaGFyCSpDdXJyZW50RGF0YWJhc2VOYW1lKCkgeyByZXR1cm4gZGJhc2VfbmFt ZTsgfQogICAgdm9pZAlDdXJyZW50RGF0YWJhc2VOYW1lKGNvbnN0IGNoYXIgKm5hbWUpIHsgc3Ry bmNweShkYmFzZV9uYW1lLCBuYW1lLCBzaXplb2YoZGJhc2VfbmFtZSkpOyB9CiAgICB2b2lkCUN1 cnJlbnREYXRhYmFzZU5hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpIHsgc3RybmNweShkYmFz ZV9uYW1lLCBuYW1lLmNfc3RyKCksIHNpemVvZihkYmFzZV9uYW1lKSk7IH0KCiAgICBjb25zdCBH cm91cAkqQ3VycmVudEdyb3VwKCkgeyByZXR1cm4gY3VycmVudF9ncm91cDsgfQogICAgdm9pZAlD dXJyZW50R3JvdXAoY29uc3QgR3JvdXAgKmdycCkgeyBjdXJyZW50X2dyb3VwID0gZ3JwOyB9Cgog ICAgaW50CQlDdXJzb3JBbmNob3JUeXBlKCkgeyByZXR1cm4gY3Vyc29yX2FuY2hvcl90eXBlOyB9 CiAgICB2b2lkCUN1cnNvckFuY2hvclR5cGUoaW50IGFuY2hvcikgeyBjdXJzb3JfYW5jaG9yX3R5 cGUgPSBhbmNob3I7IH0KCiAgICBib29sCUN1cnNvckRvd24oKSB7IHJldHVybiBjdXJzb3JfZG47 IH0KICAgIHZvaWQJQ3Vyc29yRG93bihib29sIHN0YXRlKSB7IGN1cnNvcl9kbiA9IHN0YXRlOyB9 CgogICAgYm9vbAlEYXRhYmFzZUNoYW5nZWQoKSB7IHJldHVybiBkYmFzZV9jaGFuZ2VkOyB9CiAg ICB2b2lkCURhdGFiYXNlQ2hhbmdlZChib29sIHN0YXRlKSB7IGRiYXNlX2NoYW5nZWQgPSBzdGF0 ZTsgfQoKICAgIGJvb2wJRGF0YWJhc2VOYW1lQ2hhbmdlZCgpIHsgcmV0dXJuIG5hbWVfY2hhbmdl ZDsgfQogICAgdm9pZAlEYXRhYmFzZU5hbWVDaGFuZ2VkKGJvb2wgc3RhdGUpIHsgbmFtZV9jaGFu Z2VkID0gc3RhdGU7IH0KCiAgICBib29sCURhdGFiYXNlTmFtZWQoKSB7IHJldHVybiBkYmFzZV9u YW1lZDsgfQogICAgdm9pZAlEYXRhYmFzZU5hbWVkKGJvb2wgc3RhdGUpIHsgZGJhc2VfbmFtZWQg PSBzdGF0ZTsgfQoKICAgIGJvb2wJZGVidWcoKSB7IHJldHVybiBkZWJ1Z19vbjsgfQogICAgdm9p ZAlkZWJ1Zyhib29sIHN0YXRlKSB7IGRlYnVnX29uID0gc3RhdGU7IH0KCiAgICBib29sCURlbGV0 ZVNuYXBzV2hlbkRvbmUoKSB7IHJldHVybiBkZWxldGVfc25hcHM7IH0KICAgIHZvaWQJRGVsZXRl U25hcHNXaGVuRG9uZShib29sIHN0YXRlKSB7IGRlbGV0ZV9zbmFwcyA9IHN0YXRlOyB9CgogICAg dm9pZAlEaXNwbGF5TXNnV2lkZ2V0KFdpZGdldCBkaXNwKSB7IGRpc3BsYXlfd2lkZ2V0ID0gZGlz cDsgfQogICAgV2lkZ2V0CURpc3BsYXlNc2dXaWRnZXQoKSB7IHJldHVybiBkaXNwbGF5X3dpZGdl dDsgfQoKICAgIGJvb2wJRGlzcGxheUl0ZW1TbmFwcygpIHsgcmV0dXJuIGl0ZW1fc25hcHM7IH0K ICAgIHZvaWQJRGlzcGxheUl0ZW1TbmFwcyhib29sIHN0YXRlKSB7IGl0ZW1fc25hcHMgPSBzdGF0 ZTsgfQoKICAgIGJvb2wJRG9pbmdCb2FyZEluaXQoKSB7IHJldHVybiBkb2luZ19pbml0OyB9CiAg ICB2b2lkCURvaW5nQm9hcmRJbml0KGJvb2wgc3RhdGUpIHsgZG9pbmdfaW5pdCA9IHN0YXRlOyB9 CgogICAgYm9vbAlEb2luZ0NhbGlicmF0aW9uKCkgeyByZXR1cm4gZG9pbmdfY2FsaWI7IH0KICAg IHZvaWQJRG9pbmdDYWxpYnJhdGlvbihib29sIHN0YXRlKSB7IGRvaW5nX2NhbGliID0gc3RhdGU7 IH0KCiAgICBib29sCURvaW5nR2F1Z2UoKSB7IHJldHVybiBkb2luZ19nYXVnZTsgfQogICAgdm9p ZAlEb2luZ0dhdWdlKGJvb2wgc3RhdGUpIHsgZG9pbmdfZ2F1Z2UgPSBzdGF0ZTsgfQoKICAgIGJv b2wJRG9pbmdSb3RhdGlvbigpIHsgcmV0dXJuIGlzX3JvdGF0aW5nOyB9CiAgICB2b2lkCURvaW5n Um90YXRpb24oYm9vbCBzdGF0ZSkgeyBpc19yb3RhdGluZyA9IHN0YXRlOyB9CgogICAgYm9vbAlE b2luZ1NuYXBFZGl0KCkgeyByZXR1cm4gc25hcF9lZGl0OyB9CiAgICB2b2lkCURvaW5nU25hcEVk aXQoYm9vbCBzdGF0ZSkgeyBzbmFwX2VkaXQgPSBzdGF0ZTsgfQoKICAgIGJvb2wJRG9pbmdWaXMo KSB7IHJldHVybiBkb2luZ192aXM7IH0KICAgIHZvaWQJRG9pbmdWaXMoYm9vbCBzdGF0ZSkgeyBk b2luZ192aXMgPSBzdGF0ZTsgfQoKICAgIGJvb2wJRG9udFNob3dJbnNwZWN0aW9uV2luZG93cygp IHsgcmV0dXJuIG5vX3dpbmRvd3M7IH0KICAgIHZvaWQJRG9udFNob3dJbnNwZWN0aW9uV2luZG93 cyhib29sIHN0YXRlKSB7IG5vX3dpbmRvd3MgPSBzdGF0ZTsgfQoKICAgIGJvb2wJRG9TaW1GbHlJ bnNwZWN0aW9uKCkgeyByZXR1cm4gc2ltdWxhdGVkX2ZseTsgfQogICAgdm9pZAlEb1NpbUZseUlu c3BlY3Rpb24oYm9vbCBzdGF0ZSkgeyBzaW11bGF0ZWRfZmx5ID0gc3RhdGU7IH0KCiAgICBpbnQJ CUZpbmRpbmdCeSgpIHsgcmV0dXJuIGZpbmRpbmdfYnk7IH0KICAgIHZvaWQJRmluZGluZ0J5KGlu dCB3aGF0KSB7IGZpbmRpbmdfYnkgPSB3aGF0OyB9CgogICAgaW50CQkqRmluZFBhcnRJbmRleCgp IHsgcmV0dXJuICZwYXJ0X2luZGV4OyB9CiAgICB2b2lkCUZpbmRQYXJ0SW5kZXgoaW50IHdoYXQp IHsgcGFydF9pbmRleCA9IHdoYXQ7IH0KCiAgICBib29sCUZvcmNlQ3Jvc3NoYWlyKCkgeyByZXR1 cm4gZm9yY2VfY3Jvc3NoYWlyOyB9CiAgICB2b2lkCUZvcmNlQ3Jvc3NoYWlyKGJvb2wgc3RhdGUp IHsgZm9yY2VfY3Jvc3NoYWlyID0gc3RhdGU7IH0KCiAgICBib29sCUhhc0xhc2VyU3RhdGlvbigp IHsgcmV0dXJuIGxhc2VyX3N0YXRpb247IH0KICAgIHZvaWQJSGFzTGFzZXJTdGF0aW9uKGJvb2wg c3RhdGUpIHsgbGFzZXJfc3RhdGlvbiA9IHN0YXRlOyB9CgogICAgYm9vbAlIb21lTW90b3JGbGFn KCkgeyByZXR1cm4gaG9tZV9tb3RfZmxhZzsgfQogICAgdm9pZAlIb21lTW90b3JGbGFnKGJvb2wg c3RhdGUpIHsgaG9tZV9tb3RfZmxhZyA9IHN0YXRlOyB9CgogICAgY29uc3QgY2hhcgkqSW1hZ2VT dG9yYWdlRGlyKCkgeyByZXR1cm4gaW1hZ2VfZGlyOyB9CiAgICB2b2lkCUltYWdlU3RvcmFnZURp cihjb25zdCBjaGFyICpkaXIpIHsgc3RybmNweShpbWFnZV9kaXIsIGRpciwgc2l6ZW9mKGltYWdl X2RpcikpOyB9CgogICAgYm9vbAlJbnNwRG9uZSgpIHsgcmV0dXJuIGluc3BfZG9uZTsgfQogICAg dm9pZAlJbnNwRG9uZShib29sIHN0YXRlKSB7IGluc3BfZG9uZSA9IHN0YXRlOyB9CgogICAgaW50 IAlqX2ljb24oKSB7IHJldHVybiBKSWNvbjsgfQogICAgdm9pZCAJal9pY29uKGludCBpY29uKSB7 IEpJY29uID0gaWNvbjsgfQoKICAgIGludCAJal90eXBlKCkgeyByZXR1cm4gSlR5cGU7IH0KICAg IHZvaWQgCWpfdHlwZShpbnQgdHlwZSkgeyBKVHlwZSA9IHR5cGU7IH0KCiAgICBpbnQJCUxhc3RD bG9zZXVwSG9sZSgpIHsgcmV0dXJuIGxhc3RfY2xvc2V1cF9ob2xlOyB9CiAgICB2b2lkCUxhc3RD bG9zZXVwSG9sZShpbnQgaG9sZSkgeyBsYXN0X2Nsb3NldXBfaG9sZSA9IGhvbGU7IH0KCiAgICB2 b2lkCU1vdmluZ1dpbmRvdyhXaW5kICp3aW4pIHsgbW92aW5nX3dpbmRvdyA9IHdpbjsgfQogICAg V2luZAkqTW92aW5nV2luZG93KCkgeyByZXR1cm4gbW92aW5nX3dpbmRvdzsgfQoKICAgIGJvb2wJ T2tUb0luc3BlY3RGbGFnKCkgeyByZXR1cm4gb2tfaW5zcGVjdF9mbGFnOyB9CiAgICB2b2lkCU9r VG9JbnNwZWN0RmxhZyhib29sIHN0YXRlKSB7IG9rX2luc3BlY3RfZmxhZyA9IHN0YXRlOyB9Cgog ICAgdm9pZAlQYXJlbnRXaW5kb3coV2luZCAqd2luKSB7IHBhcmVudF93aW5kb3cgPSB3aW47IH0K ICAgIFdpbmQJKlBhcmVudFdpbmRvdygpIHsgcmV0dXJuIHBhcmVudF93aW5kb3c7IH0KCiAgICBi b29sCVJlcGFpckFib3J0ZWQoKSB7IHJldHVybiByZXBhaXJfYWJvcnQ7IH0KICAgIHZvaWQJUmVw YWlyQWJvcnRlZChib29sIHN0YXRlKSB7IHJlcGFpcl9hYm9ydCA9IHN0YXRlOyB9CgogICAgdm9p ZAlyZXBhaXJfbWFuYWdlKFdpZGdldCB3aG8pIHsgZGVmZWN0X3JlcGFpciA9IHdobzsgfQogICAg V2lkZ2V0CXJlcGFpcl9tYW5hZ2UoKSB7IHJldHVybiBkZWZlY3RfcmVwYWlyOyB9CgogICAgYm9v bAlSZXZpZXdBbGxCb2FyZHMoKSB7IHJldHVybiByZXZpZXdfYWxsOyB9CiAgICB2b2lkCVJldmll d0FsbEJvYXJkcyhib29sIHN0YXRlKSB7IHJldmlld19hbGwgPSBzdGF0ZTsgfQoKICAgIHZvaWQJ U2F2ZVdpbmRvdyhXaW5kIHdpbikgeyBzYXZlX3dpbmRvdyA9IHdpbjsgfQogICAgV2luZAlTYXZl V2luZG93KCkgeyByZXR1cm4gc2F2ZV93aW5kb3c7IH0KCiAgICBib29sCVNjYW5uZXIoKSB7IHJl dHVybiBfc2Nhbm5lcjsgfQogICAgdm9pZAlTY2FubmVyKGJvb2wgc3RhdGUpIHsgX3NjYW5uZXIg PSBzdGF0ZTsgfQoKICAgIGJvb2wJU2VlblNoaWZ0KCkgeyByZXR1cm4gc2Vlbl9zaGlmdDsgfQog ICAgdm9pZAlTZWVuU2hpZnQoYm9vbCBzdGF0ZSkgeyBzZWVuX3NoaWZ0ID0gc3RhdGU7IH0KCiAg ICBib29sCVNob3dQYXJ0TmFtZXMoKSB7IHJldHVybiBfc2hvd19uYW1lczsgfQogICAgdm9pZAlT aG93UGFydE5hbWVzKGJvb2wgc3RhdGUpIHsgX3Nob3dfbmFtZXMgPSBzdGF0ZTsgfQoKICAgIGJv b2wJU25hcElzU25hcCgpIHsgcmV0dXJuIHNuYXBfaXNfc25hcDsgfQogICAgdm9pZCAJU25hcElz U25hcChib29sIHN0YXRlKSB7IHNuYXBfaXNfc25hcCA9IHN0YXRlOyB9CgogICAgaW50CQlTbmFw T25TY3JlZW4oKSB7IHJldHVybiBzbmFwX29uX3NjcmVlbjsgfQogICAgdm9pZAlTbmFwT25TY3Jl ZW4oaW50IHdoaWNoKSB7IHNuYXBfb25fc2NyZWVuID0gd2hpY2g7IH0KCiAgICBib29sCVRlc3RC YXJjb2RlKCkgeyByZXR1cm4gdGVzdF9iYzsgfQogICAgdm9pZAlUZXN0QmFyY29kZShib29sIHN0 YXRlKSB7IHRlc3RfYmMgPSBzdGF0ZTsgfQoKICAgIHZvaWQJVG9wTWVudShXaWRnZXQgbWVudSkg eyB0b3BfbWVudSA9IG1lbnU7IH0KICAgIFdpZGdldAlUb3BNZW51KCkgeyByZXR1cm4gdG9wX21l bnU7IH0KCiAgICBib29sCVVzaW5nU2VyaWFsTnVtYmVycygpIHsgcmV0dXJuIHNlcmlhbF9udW1z OyB9CiAgICB2b2lkCVVzaW5nU2VyaWFsTnVtYmVycyhib29sIHN0YXRlKSB7IHNlcmlhbF9udW1z ID0gc3RhdGU7IH0KCiAgICBib29sCVdhaXRGb3JDb252b2x2ZSgpIHsgcmV0dXJuIHdhaXRfZm9y X2NvbnY7IH0KICAgIHZvaWQJV2FpdEZvckNvbnZvbHZlKGJvb2wgc3RhdGUpIHsgd2FpdF9mb3Jf Y29udiA9IHN0YXRlOyB9Cgpwcml2YXRlOgogICAgaW50CQlfYXBwbGljYXRpb247CiAgICBpbnQJ CUpJY29uOwogICAgaW50CQlKVHlwZTsKICAgIGludAkJY3VycmVudF9jYW07CiAgICBpbnQJCWRh dGFiYXNlX3JvdGF0aW9uOwogICAgaW50CQlkaXNwbGF5X3JvdGF0aW9uOwogICAgaW50CQljdXJz b3JfYW5jaG9yX3R5cGU7CiAgICBpbnQJCWZpbmRpbmdfYnk7CiAgICBpbnQJCWxhc3RfY2xvc2V1 cF9ob2xlOwogICAgaW50CQlwYXJ0X2luZGV4OwogICAgaW50CQlzbmFwX29uX3NjcmVlbjsKCiAg ICBjb25zdCBHcm91cAkqY3VycmVudF9ncm91cDsKCiAgICBib29sCV9zY2FubmVyOwkgCiAgICBi b29sCWF1dG9fYXBwbHlfZGVmZWN0OwogICAgYm9vbAlhdXRvX3JlcF9tb2RlOwogICAgYm9vbAlh dXRvX3JlcGFpcjsKICAgIGJvb2wgCWF1dG9fdHJhaW5lcjsKICAgIGJvb2wJY2hhbmdlX2F1dG9f cmVwOwogICAgYm9vbAlva19pbnNwZWN0X2ZsYWc7CiAgICBib29sCWN1cnNvcl9kbjsKICAgIGJv b2wJZGJhc2VfY2FsaWI7CiAgICBib29sIAlkYmFzZV9jaGFuZ2VkOwogICAgYm9vbAlkYmFzZV9u YW1lZDsKICAgIGJvb2wJZGVidWdfb247CiAgICBib29sCWRlbGV0ZV9zbmFwczsKICAgIGJvb2wJ ZG9pbmdfY2FsaWI7CiAgICBib29sCWRvaW5nX2dhdWdlOwogICAgYm9vbAlkb2luZ19pbml0Owog ICAgYm9vbAlkb2luZ192aXM7CiAgICBib29sCWZvcmNlX2Nyb3NzaGFpcjsKICAgIGJvb2wJaG9t ZV9tb3RfZmxhZzsKICAgIGJvb2wJaW5zcF9kb25lOwogICAgYm9vbAlpc19yb3RhdGluZzsKICAg IGJvb2wJaXRlbV9zbmFwczsKICAgIGJvb2wJbGFzZXJfc3RhdGlvbjsKICAgIGJvb2wJbmFtZV9j aGFuZ2VkOwogICAgYm9vbCAgICAJbm9fdXNlcl9ydWxlczsKICAgIGJvb2wJbm9fd2luZG93czsK ICAgIGJvb2wJcmVwYWlyX2Fib3J0OwogICAgYm9vbAlyZXZpZXdfYWxsOwogICAgYm9vbAlzZWVu X3NoaWZ0OwogICAgYm9vbAlzZXJpYWxfbnVtczsKICAgIGJvb2wJX3Nob3dfbmFtZXM7CiAgICBi b29sCXNpbXVsYXRlZF9mbHk7CiAgICBib29sCXNuYXBfZWRpdDsKICAgIGJvb2wJc25hcF9pc19z bmFwOwogICAgYm9vbAl0ZXN0X2JjOwogICAgYm9vbAl3YWl0X2Zvcl9jb252OwoKICAgIGNoYXIg CWNvbXBfdGFibGVbMTI4XTsKICAgIGNoYXIJZGJhc2VfbmFtZVsxMjhdOwogICAgY2hhcglpbWFn ZV9kaXJbMTI4XTsKCiAgICBXaWRnZXQJZGVmZWN0X3JlcGFpcjsKICAgIFdpZGdldAlkaXNwbGF5 X3dpZGdldDsKICAgIFdpZGdldAl0b3BfbWVudTsKCiAgICBXaW5kCSptb3Zpbmdfd2luZG93Owog ICAgV2luZAkqcGFyZW50X3dpbmRvdzsKICAgIFdpbmQJc2F2ZV93aW5kb3c7CgogICAgWHRXb3Jr UHJvY0lkIHdvcmtfcHJvYzsKfTsKZXh0ZXJuIENvbW1vbkdsb2JhbHMJKmdDRzsKCiMgMTggInNh dmVfc25hcC5jIiAyCgojIDEgIi4uLy4uL2luY2x1ZGUvbGliaW5jL2NmZ19jbGFzcy5oIiAxCgoK IAogCiAKCgoKIyAxICIvdXNyL2luY2x1ZGUvbmV0ZGIuaCIgMSAzIDQKIAogCgogCiAKIAoKIAoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKW5ldGRiLmgJMS4y Mwk5OS8xMi8wNiBTTUkiCgoKIyAxICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAxIDMgNAog CgoKCiAKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylpbi5oCTEu MzAJMDAvMDgvMTAgU01JIgoKCgoKCgpleHRlcm4gIkMiIHsKCgoKIyAxICIvb3B0L212cGxvY2Fs L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1LjMvaW5jbHVkZS9zeXMvc3RyZWFt LmgiIDEgMyA0CgoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3RyZWFtLmgiIDEgMyA0CiAKIAoK IAogCiAKCiAKCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylzdHJlYW0uaAkxLjg1CTk5LzEyLzE1 IFNNSSIJCgogCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy92bm9kZS5oIiAxIDMgNAogCiAKCiAK IAogCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKXZub2Rl LmgJMS44NQk5OS8wNy8zMCBTTUkiCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3RfbG9jay5oIiAx IDMgNAogCgoKCgogCgoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKXRfbG9jay5oCTEuNDUJOTgv MDIvMDEgU01JIgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9tYWNobG9jay5oIiAxIDMgNAogCgoK CgoKCgojcHJhZ21hIGlkZW50CSJAKCMpbWFjaGxvY2suaAkxLjIxCTAwLzA0LzI3IFNNSSIKCgpl eHRlcm4gIkMiIHsKCgoKCgoKIyAyOSAiL3Vzci9pbmNsdWRlL3N5cy9tYWNobG9jay5oIiAzIDQK CgoKCgoKCnR5cGVkZWYJbG9ja190CWRpc3BfbG9ja190OwkJIAoKIAoKCgoKCiAKCgoKCgoKCiAK CgpleHRlcm4JaW50CWhyZXNfbG9jazsKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoK CgoKCgoKCgoKCgoKfQoKCgojIDE4ICIvdXNyL2luY2x1ZGUvc3lzL3RfbG9jay5oIiAyIDMgNAoK IyAxICIvdXNyL2luY2x1ZGUvc3lzL3BhcmFtLmgiIDEgMyA0CiAKCgoKCiAKIAoKIAogCiAKCiAK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpcGFyYW0uaAkxLjc2CTAw LzAyLzE0IFNNSSIKCgoKCgoKCgpleHRlcm4gIkMiIHsKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoJCQkJIAoJCQkJIAoJCQkJIAoKIAoKCgoKCgogCgoKCgoK IAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCiAKCgoKCgoKCgoK CgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgogCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCiAKCgoKCgoKIAoKCgoKIyAy NzkgIi91c3IvaW5jbHVkZS9zeXMvcGFyYW0uaCIgMyA0CgoKCn0KCgogCgoKCgojIDQwMyAiL3Vz ci9pbmNsdWRlL3N5cy9wYXJhbS5oIiAzIDQKCgogCgoKCgoKCgoKCgpleHRlcm4gIkMiIHsKCgoK ZXh0ZXJuIGxvbmcgX3N5c2NvbmYoaW50KTsJIAoKCgoKCgoKCgoKfQoKCgoKCiMgMTkgIi91c3Iv aW5jbHVkZS9zeXMvdF9sb2NrLmgiIDIgMyA0CgojIDEgIi91c3IvaW5jbHVkZS9zeXMvbXV0ZXgu aCIgMSAzIDQKIAoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKW11dGV4LmgJMS4yMAk5OC8wMi8w MSBTTUkiCgoKCgoKCmV4dGVybiAiQyIgewoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYg ZW51bSB7CglNVVRFWF9BREFQVElWRSA9IDAsCSAKCU1VVEVYX1NQSU4gPSAxLAkJIAoJTVVURVhf RFJJVkVSID0gNCwJIAoJTVVURVhfREVGQVVMVCA9IDYJIAp9IGttdXRleF90eXBlX3Q7Cgp0eXBl ZGVmIHN0cnVjdCBtdXRleCB7CgoKCgl2b2lkCSpfb3BhcXVlWzJdOwoKfSBrbXV0ZXhfdDsKCiMg NjcgIi91c3IvaW5jbHVkZS9zeXMvbXV0ZXguaCIgMyA0CgoKCgoKfQoKCgojIDIwICIvdXNyL2lu Y2x1ZGUvc3lzL3RfbG9jay5oIiAyIDMgNAoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3J3bG9jay5o IiAxIDMgNAogCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpcndsb2NrLmgJMS45CTk4LzAyLzE4 IFNNSSIKCiAKCgoKCgoKZXh0ZXJuICJDIiB7CgoKCgp0eXBlZGVmIGVudW0gewoJUldfRFJJVkVS ID0gMiwJCSAKCVJXX0RFRkFVTFQgPSA0CQkgCn0ga3J3X3R5cGVfdDsKCnR5cGVkZWYgZW51bSB7 CglSV19XUklURVIsCglSV19SRUFERVIKfSBrcndfdDsKCnR5cGVkZWYgc3RydWN0IF9rcndsb2Nr IHsKCXZvaWQJKl9vcGFxdWVbMV07Cn0ga3J3bG9ja190OwoKIyA1OCAiL3Vzci9pbmNsdWRlL3N5 cy9yd2xvY2suaCIgMyA0CgoKCgoKfQoKCgojIDIxICIvdXNyL2luY2x1ZGUvc3lzL3RfbG9jay5o IiAyIDMgNAoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NlbWFwaG9yZS5oIiAxIDMgNAogCgoKCgoK CgojcHJhZ21hIGlkZW50CSJAKCMpc2VtYXBob3JlLmgJMS41CTk4LzAyLzAxIFNNSSIKCiAKCgoK CgoKCgoKCmV4dGVybiAiQyIgewoKCnR5cGVkZWYgZW51bSB7CglTRU1BX0RFRkFVTFQsCglTRU1B X0RSSVZFUgp9IGtzZW1hX3R5cGVfdDsKCnR5cGVkZWYgc3RydWN0IF9rc2VtYSB7Cgl2b2lkCSog X29wYXF1ZVsyXTsJIAp9IGtzZW1hX3Q7CgojIDQ2ICIvdXNyL2luY2x1ZGUvc3lzL3NlbWFwaG9y ZS5oIiAzIDQKCgoKfQoKCgoKCiMgMjIgIi91c3IvaW5jbHVkZS9zeXMvdF9sb2NrLmgiIDIgMyA0 CgojIDEgIi91c3IvaW5jbHVkZS9zeXMvY29uZHZhci5oIiAxIDMgNAogCgoKCgogCgoKCgoKCgoK CgojcHJhZ21hIGlkZW50CSJAKCMpY29uZHZhci5oCTEuMTEJMDAvMDMvMDUgU01JIgoKCgoKCgoK CgoKZXh0ZXJuICJDIiB7CgoKCgogCgoKCnR5cGVkZWYgc3RydWN0IF9rY29uZHZhciB7Cgl1c2hv cnRfdAlfb3BhcXVlOwp9IGtjb25kdmFyX3Q7Cgp0eXBlZGVmCWVudW0gewoJQ1ZfREVGQVVMVCwK CUNWX0RSSVZFUgp9IGtjdl90eXBlX3Q7CgoKIyA2NSAiL3Vzci9pbmNsdWRlL3N5cy9jb25kdmFy LmgiIDMgNAoKCgoKCn0KCgoKIyAyMyAiL3Vzci9pbmNsdWRlL3N5cy90X2xvY2suaCIgMiAzIDQK CgoKCmV4dGVybiAiQyIgewoKCgoKIAoKCgoKCgoKCgojIDc2ICIvdXNyL2luY2x1ZGUvc3lzL3Rf bG9jay5oIiAzIDQKCgoKCgp9CgoKCiMgMzggIi91c3IvaW5jbHVkZS9zeXMvdm5vZGUuaCIgMiAz IDQKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvY3JlZC5oIiAxIDMgNAogCiAKCiAKIAogCgogCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpY3JlZC5oCTEuMjEJOTcv MDEvMDkgU01JIgkKCgoKCgoKZXh0ZXJuICJDIiB7CgoKIAoKCgoKCnR5cGVkZWYgc3RydWN0IGNy ZWQgewoJdWludF90CWNyX3JlZjsJCQkgCgl1aWRfdAljcl91aWQ7CQkJIAoJZ2lkX3QJY3JfZ2lk OwkJCSAKCXVpZF90CWNyX3J1aWQ7CQkgCglnaWRfdAljcl9yZ2lkOwkJIAoJdWlkX3QJY3Jfc3Vp ZDsJCSAKCWdpZF90CWNyX3NnaWQ7CQkgCgl1aW50X3QJY3Jfbmdyb3VwczsJCSAKCWdpZF90CWNy X2dyb3Vwc1sxXTsJCSAKfSBjcmVkX3Q7CgojIDg5ICIvdXNyL2luY2x1ZGUvc3lzL2NyZWQuaCIg MyA0CgoKCn0KCgoKIyA0MCAiL3Vzci9pbmNsdWRlL3N5cy92bm9kZS5oIiAyIDMgNAoKIyAxICIv dXNyL2luY2x1ZGUvc3lzL3Vpby5oIiAxIDMgNAogCiAKCiAKIAogCgogCgoKCgoKCgojcHJhZ21h IGlkZW50CSJAKCMpdWlvLmgJMS4yOQk5Ny8wNi8yOSBTTUkiCQoKCgoKZXh0ZXJuICJDIiB7CgoK CgogCgoKCgoKCgoKCgoKCnR5cGVkZWYgc3RydWN0IGlvdmVjIHsKCWNhZGRyX3QJaW92X2Jhc2U7 CgoKCglsb25nCWlvdl9sZW47Cgp9IGlvdmVjX3Q7CgoKIyA1OCAiL3Vzci9pbmNsdWRlL3N5cy91 aW8uaCIgMyA0CgoKCiAKCgp0eXBlZGVmIGVudW0gdWlvX3NlZyB7IFVJT19VU0VSU1BBQ0UsIFVJ T19TWVNTUEFDRSwgVUlPX1VTRVJJU1BBQ0UgfSB1aW9fc2VnX3Q7Cgp0eXBlZGVmIHN0cnVjdCB1 aW8gewoJaW92ZWNfdAkqdWlvX2lvdjsJIAoJaW50CXVpb19pb3ZjbnQ7CSAKCWxsb2ZmX3QJX3Vp b19vZmZzZXQ7CSAKCXVpb19zZWdfdCB1aW9fc2VnZmxnOwkgCglzaG9ydAl1aW9fZm1vZGU7CSAK CWxsZGFkZHJfdCBfdWlvX2xpbWl0OwkgCglzc2l6ZV90CXVpb19yZXNpZDsJIAp9IHVpb190OwoK CgoKCgoKCgoKCgoKCgogCgoKdHlwZWRlZiBlbnVtIHVpb19ydyB7IFVJT19SRUFELCBVSU9fV1JJ VEUgfSB1aW9fcndfdDsKCgojIDEwOCAiL3Vzci9pbmNsdWRlL3N5cy91aW8uaCIgMyA0CgoKCgpl eHRlcm4gc3NpemVfdCByZWFkdihpbnQsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqLCBpbnQpOwpleHRl cm4gc3NpemVfdCB3cml0ZXYoaW50LCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwgaW50KTsKCgoKCgoK CgoKCgp9CgoKCiMgNDEgIi91c3IvaW5jbHVkZS9zeXMvdm5vZGUuaCIgMiAzIDQKCgojIDEgIi91 c3IvaW5jbHVkZS92bS9zZWdfZW51bS5oIiAxIDMgNAogCiAKCiAKIAogCgogCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpc2VnX2VudW0uaAkxLjMJOTUvMTIvMjIg U01JIgoKCmV4dGVybiAiQyIgewoKCiAKCgoKCiAKCgoKCmVudW0gZmF1bHRfdHlwZSB7CglGX0lO VkFMLAkJIAoJRl9QUk9ULAkJCSAKCUZfU09GVExPQ0ssCQkgCglGX1NPRlRVTkxPQ0sJCSAKfTsK CiAKCgplbnVtIGxvY2tfdHlwZSB7CglMX1BBR0VMT0NLLAkJIAoJTF9QQUdFVU5MT0NLLAkJIAoJ TF9QQUdFUkVDTEFJTQkJIAp9OwoKIAoKCmVudW0gc2VnX3J3IHsKCVNfT1RIRVIsCQkgCglTX1JF QUQsCQkJIAoJU19XUklURSwJCSAKCVNfRVhFQywJCQkgCglTX0NSRUFURQkJIAp9OwoKCn0KCgoK IyA0MyAiL3Vzci9pbmNsdWRlL3N5cy92bm9kZS5oIiAyIDMgNAoKCgoKCgpleHRlcm4gIkMiIHsK CgoKIAoKCgoKCiAKCgoKdHlwZWRlZiBlbnVtIHZ0eXBlIHsKCVZOT04JPSAwLAoJVlJFRwk9IDEs CglWRElSCT0gMiwKCVZCTEsJPSAzLAoJVkNIUgk9IDQsCglWTE5LCT0gNSwKCVZGSUZPCT0gNiwK CVZET09SCT0gNywKCVZQUk9DCT0gOCwKCVZTT0NLCT0gOSwKCVZCQUQJPSAxMAp9IHZ0eXBlX3Q7 CgogCgoKCgoKCgoKIAp0eXBlZGVmIHN0cnVjdCB2bm9kZSB7CglrbXV0ZXhfdAl2X2xvY2s7CQkJ IAoJdXNob3J0X3QJdl9mbGFnOwkJCSAKCXVpbnRfdAkJdl9jb3VudDsJCSAKCXN0cnVjdCB2ZnMJ KnZfdmZzbW91bnRlZGhlcmU7CSAKCXN0cnVjdCB2bm9kZW9wcwkqdl9vcDsJCQkgCglzdHJ1Y3Qg dmZzCSp2X3Zmc3A7CQkgCglzdHJ1Y3Qgc3RkYXRhCSp2X3N0cmVhbTsJCSAKCXN0cnVjdCBwYWdl CSp2X3BhZ2VzOwkJIAoJZW51bSB2dHlwZQl2X3R5cGU7CQkJIAoJZGV2X3QJCXZfcmRldjsJCQkg CgljYWRkcl90CQl2X2RhdGE7CQkJIAoJc3RydWN0IGZpbG9jawkqdl9maWxvY2tzOwkJIAoJc3Ry dWN0IHNocmxvY2tsaXN0ICp2X3NocmxvY2tzOwkJIAoJa2NvbmR2YXJfdAl2X2N2OwkJCSAKCXZv aWQJCSp2X2xvY2FsaXR5OwkJIAp9IHZub2RlX3Q7CgogCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoK CgoKIAoKCgoKCiAKCgoKCgoKCgogCgoKCgoKIAoKCgoKCgp0eXBlZGVmIHN0cnVjdCB2YXR0ciB7 Cgl1aW50X3QJCXZhX21hc2s7CSAKCXZ0eXBlX3QJCXZhX3R5cGU7CSAKCW1vZGVfdAkJdmFfbW9k ZTsJIAoJdWlkX3QJCXZhX3VpZDsJCSAKCWdpZF90CQl2YV9naWQ7CQkgCglkZXZfdAkJdmFfZnNp ZDsJIAoJdV9sb25nbG9uZ190CXZhX25vZGVpZDsJIAoJbmxpbmtfdAkJdmFfbmxpbms7CSAKCXVf b2Zmc2V0X3QJdmFfc2l6ZTsJIAoJdGltZXN0cnVjX3QJdmFfYXRpbWU7CSAKCXRpbWVzdHJ1Y190 CXZhX210aW1lOwkgCgl0aW1lc3RydWNfdAl2YV9jdGltZTsJIAoJZGV2X3QJCXZhX3JkZXY7CSAK CXVpbnRfdAkJdmFfYmxrc2l6ZTsJIAoJdV9sb25nbG9uZ190CXZhX25ibG9ja3M7CSAKCXVpbnRf dAkJdmFfdmNvZGU7CSAKfSB2YXR0cl90OwoKIyAyMDAgIi91c3IvaW5jbHVkZS9zeXMvdm5vZGUu aCIgMyA0CgoKdHlwZWRlZiB2YXR0cl90CQl2YXR0cjMyX3Q7CgoKIAoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCgoKCgoKCgoKIAoKCgoKCgogCgoKZW51bSBybQkJeyBS TUZJTEUsIFJNRElSRUNUT1JZIH07CSAKZW51bSBzeW1mb2xsb3cJeyBOT19GT0xMT1csIEZPTExP VyB9OwkJIAplbnVtIHZjZXhjbAl7IE5PTkVYQ0wsIEVYQ0wgfTsJCSAKZW51bSBjcmVhdGUJeyBD UkNSRUFULCBDUk1LTk9ELCBDUk1LRElSIH07CSAKCnR5cGVkZWYgZW51bSBybQkJcm1fdDsKdHlw ZWRlZiBlbnVtIHN5bWZvbGxvdwlzeW1mb2xsb3dfdDsKdHlwZWRlZiBlbnVtIHZjZXhjbAl2Y2V4 Y2xfdDsKdHlwZWRlZiBlbnVtIGNyZWF0ZQljcmVhdGVfdDsKCiAKCgoKdHlwZWRlZiBzdHJ1Y3Qg dnNlY2F0dHIgewoJdWludF90CQl2c2FfbWFzazsJIAoJaW50CQl2c2FfYWNsY250OwkgCgl2b2lk CQkqdnNhX2FjbGVudHA7CSAKCWludAkJdnNhX2RmYWNsY250OwkgCgl2b2lkCQkqdnNhX2RmYWNs ZW50cDsJIAp9IHZzZWNhdHRyX3Q7CgogCgoKCgoKIAoKCnN0cnVjdCBwYXRobmFtZTsKc3RydWN0 IGZpZDsKc3RydWN0IGZsb2NrNjQ7CnN0cnVjdCBzaHJsb2NrOwpzdHJ1Y3QgcGFnZTsKc3RydWN0 IHNlZzsKc3RydWN0IGFzOwpzdHJ1Y3QgcG9sbGhlYWQ7CgogCgoKdHlwZWRlZiBzdHJ1Y3Qgdm5v ZGVvcHMgewoJaW50CSgqdm9wX29wZW4pKHN0cnVjdCB2bm9kZSAqKnZwcCwgaW50IGZsYWcsIHN0 cnVjdCBjcmVkICpjcik7CglpbnQJKCp2b3BfY2xvc2UpKHN0cnVjdCB2bm9kZSAqdnAsIGludCBm bGFnLCBpbnQgY291bnQsCgkJCQlvZmZzZXRfdCBvZmZzZXQsIHN0cnVjdCBjcmVkICpjcik7Cglp bnQJKCp2b3BfcmVhZCkoc3RydWN0IHZub2RlICp2cCwgc3RydWN0IHVpbyAqdWlvcCwgaW50IGlv ZmxhZywKCQkJICAgIHN0cnVjdCBjcmVkICpjcik7CglpbnQJKCp2b3Bfd3JpdGUpKHN0cnVjdCB2 bm9kZSAqdnAsIHN0cnVjdCB1aW8gKnVpb3AsIGludCBpb2ZsYWcsCgkJCQlzdHJ1Y3QgY3JlZCAq Y3IpOwoJaW50CSgqdm9wX2lvY3RsKShzdHJ1Y3Qgdm5vZGUgKnZwLCBpbnQgY21kLCBpbnRwdHJf dCBhcmcsIGludCBmbGFnLAoJCQkJc3RydWN0IGNyZWQgKmNyLCBpbnQgKnJ2YWxwKTsKCWludAko KnZvcF9zZXRmbCkoc3RydWN0IHZub2RlICp2cCwgaW50IG9mbGFncywgaW50IG5mbGFncywKCQkJ CXN0cnVjdCBjcmVkICpjcik7CglpbnQJKCp2b3BfZ2V0YXR0cikoc3RydWN0IHZub2RlICp2cCwg c3RydWN0IHZhdHRyICp2YXAsIGludCBmbGFncywKCQkJCXN0cnVjdCBjcmVkICpjcik7CglpbnQJ KCp2b3Bfc2V0YXR0cikoc3RydWN0IHZub2RlICp2cCwgc3RydWN0IHZhdHRyICp2YXAsIGludCBm bGFncywKCQkJCXN0cnVjdCBjcmVkICpjcik7CglpbnQJKCp2b3BfYWNjZXNzKShzdHJ1Y3Qgdm5v ZGUgKnZwLCBpbnQgbW9kZSwgaW50IGZsYWdzLAoJCQkJc3RydWN0IGNyZWQgKmNyKTsKCWludAko KnZvcF9sb29rdXApKHN0cnVjdCB2bm9kZSAqZHZwLCBjaGFyICpubSwgc3RydWN0IHZub2RlICoq dnBwLAoJCQkJc3RydWN0IHBhdGhuYW1lICpwbnAsIGludCBmbGFncywKCQkJCXN0cnVjdCB2bm9k ZSAqcmRpciwgc3RydWN0IGNyZWQgKik7CglpbnQJKCp2b3BfY3JlYXRlKShzdHJ1Y3Qgdm5vZGUg KmR2cCwgY2hhciAqbmFtZSwgc3RydWN0IHZhdHRyICp2YXAsCgkJCQl2Y2V4Y2xfdCBleGNsLCBp bnQgbW9kZSwgc3RydWN0IHZub2RlICoqdnBwLAoJCQkJc3RydWN0IGNyZWQgKmNyLCBpbnQgZmxh Zyk7CglpbnQJKCp2b3BfcmVtb3ZlKShzdHJ1Y3Qgdm5vZGUgKnZwLCBjaGFyICpubSwgc3RydWN0 IGNyZWQgKmNyKTsKCWludAkoKnZvcF9saW5rKShzdHJ1Y3Qgdm5vZGUgKnRkdnAsIHN0cnVjdCB2 bm9kZSAqc3ZwLCBjaGFyICp0bm0sCgkJCQlzdHJ1Y3QgY3JlZCAqY3IpOwoJaW50CSgqdm9wX3Jl bmFtZSkoc3RydWN0IHZub2RlICpzZHZwLCBjaGFyICpzbm0sCgkJCQlzdHJ1Y3Qgdm5vZGUgKnRk dnAsIGNoYXIgKnRubSwgc3RydWN0IGNyZWQgKmNyKTsKCWludAkoKnZvcF9ta2Rpcikoc3RydWN0 IHZub2RlICpkdnAsIGNoYXIgKmRpcm5hbWUsCgkJCQlzdHJ1Y3QgdmF0dHIgKnZhcCwgc3RydWN0 IHZub2RlICoqdnBwLAoJCQkJc3RydWN0IGNyZWQgKmNyKTsKCWludAkoKnZvcF9ybWRpcikoc3Ry dWN0IHZub2RlICp2cCwgY2hhciAqbm0sIHN0cnVjdCB2bm9kZSAqY2RpciwKCQkJCXN0cnVjdCBj cmVkICpjcik7CglpbnQJKCp2b3BfcmVhZGRpcikoc3RydWN0IHZub2RlICp2cCwgc3RydWN0IHVp byAqdWlvcCwKCQkJCXN0cnVjdCBjcmVkICpjciwgaW50ICplb2ZwKTsKCWludAkoKnZvcF9zeW1s aW5rKShzdHJ1Y3Qgdm5vZGUgKmR2cCwgY2hhciAqbGlua25hbWUsCgkJCQlzdHJ1Y3QgdmF0dHIg KnZhcCwgY2hhciAqdGFyZ2V0LAoJCQkJc3RydWN0IGNyZWQgKmNyKTsKCWludAkoKnZvcF9yZWFk bGluaykoc3RydWN0IHZub2RlICp2cCwgc3RydWN0IHVpbyAqdWlvcCwKCQkJCXN0cnVjdCBjcmVk ICpjcik7CglpbnQJKCp2b3BfZnN5bmMpKHN0cnVjdCB2bm9kZSAqdnAsIGludCBzeW5jZmxhZywg c3RydWN0IGNyZWQgKmNyKTsKCXZvaWQJKCp2b3BfaW5hY3RpdmUpKHN0cnVjdCB2bm9kZSAqdnAs IHN0cnVjdCBjcmVkICpjcik7CglpbnQJKCp2b3BfZmlkKShzdHJ1Y3Qgdm5vZGUgKnZwLCBzdHJ1 Y3QgZmlkICpmaWRwKTsKCXZvaWQJKCp2b3Bfcndsb2NrKShzdHJ1Y3Qgdm5vZGUgKnZwLCBpbnQg d3JpdGVfbG9jayk7Cgl2b2lkCSgqdm9wX3J3dW5sb2NrKShzdHJ1Y3Qgdm5vZGUgKnZwLCBpbnQg d3JpdGVfbG9jayk7CglpbnQJKCp2b3Bfc2Vlaykoc3RydWN0IHZub2RlICp2cCwgb2Zmc2V0X3Qg b29mZiwgb2Zmc2V0X3QgKm5vZmZwKTsKCWludAkoKnZvcF9jbXApKHN0cnVjdCB2bm9kZSAqdnAx LCBzdHJ1Y3Qgdm5vZGUgKnZwMik7CglpbnQJKCp2b3BfZnJsb2NrKShzdHJ1Y3Qgdm5vZGUgKnZw LCBpbnQgY21kLCBzdHJ1Y3QgZmxvY2s2NCAqYmZwLAoJCQkJaW50IGZsYWcsIG9mZnNldF90IG9m ZnNldCwgc3RydWN0IGNyZWQgKmNyKTsKCWludAkoKnZvcF9zcGFjZSkoc3RydWN0IHZub2RlICp2 cCwgaW50IGNtZCwgc3RydWN0IGZsb2NrNjQgKmJmcCwKCQkJCWludCBmbGFnLCBvZmZzZXRfdCBv ZmZzZXQsIHN0cnVjdCBjcmVkICpjcik7CglpbnQJKCp2b3BfcmVhbHZwKShzdHJ1Y3Qgdm5vZGUg KnZwLCBzdHJ1Y3Qgdm5vZGUgKip2cHApOwoJaW50CSgqdm9wX2dldHBhZ2UpKHN0cnVjdCB2bm9k ZSAqdnAsIG9mZnNldF90IG9mZiwgc2l6ZV90IGxlbiwKCQkJCXVpbnRfdCAqcHJvdHAsIHN0cnVj dCBwYWdlICoqcGxhcnIsIHNpemVfdCBwbHN6LAoJCQkJc3RydWN0IHNlZyAqc2VnLCBjYWRkcl90 IGFkZHIsIGVudW0gc2VnX3J3IHJ3LAoJCQkJc3RydWN0IGNyZWQgKmNyKTsKCWludAkoKnZvcF9w dXRwYWdlKShzdHJ1Y3Qgdm5vZGUgKnZwLCBvZmZzZXRfdCBvZmYsIHNpemVfdCBsZW4sCgkJCQlp bnQgZmxhZ3MsIHN0cnVjdCBjcmVkICpjcik7CglpbnQJKCp2b3BfbWFwKShzdHJ1Y3Qgdm5vZGUg KnZwLCBvZmZzZXRfdCBvZmYsIHN0cnVjdCBhcyAqYXMsCgkJCSAgICBjYWRkcl90ICphZGRycCwg c2l6ZV90IGxlbiwgdWNoYXJfdCBwcm90LAoJCQkgICAgdWNoYXJfdCBtYXhwcm90LCB1aW50X3Qg ZmxhZ3MsIHN0cnVjdCBjcmVkICpjcik7CglpbnQJKCp2b3BfYWRkbWFwKShzdHJ1Y3Qgdm5vZGUg KnZwLCBvZmZzZXRfdCBvZmYsIHN0cnVjdCBhcyAqYXMsCgkJCQljYWRkcl90IGFkZHIsIHNpemVf dCBsZW4sIHVjaGFyX3QgcHJvdCwKCQkJCXVjaGFyX3QgbWF4cHJvdCwgdWludF90IGZsYWdzLCBz dHJ1Y3QgY3JlZCAqY3IpOwoJaW50CSgqdm9wX2RlbG1hcCkoc3RydWN0IHZub2RlICp2cCwgb2Zm c2V0X3Qgb2ZmLCBzdHJ1Y3QgYXMgKmFzLAoJCQkJY2FkZHJfdCBhZGRyLCBzaXplX3QgbGVuLCB1 aW50X3QgcHJvdCwKCQkJCXVpbnRfdCBtYXhwcm90LCB1aW50X3QgZmxhZ3MsIHN0cnVjdCBjcmVk ICpjcik7CglpbnQJKCp2b3BfcG9sbCkoc3RydWN0IHZub2RlICp2cCwgc2hvcnQgZXYsIGludCBh bnksIHNob3J0ICpyZXZwLAoJCQlzdHJ1Y3QgcG9sbGhlYWQgKipwaHBwKTsKCWludAkoKnZvcF9k dW1wKShzdHJ1Y3Qgdm5vZGUgKnZwLCBjYWRkcl90IGFkZHIsIGludCBsYmRuLAoJCQkJaW50IGRi bGtzKTsKCWludAkoKnZvcF9wYXRoY29uZikoc3RydWN0IHZub2RlICp2cCwgaW50IGNtZCwgdWxv bmdfdCAqdmFscCwKCQkJCXN0cnVjdCBjcmVkICpjcik7CglpbnQJKCp2b3BfcGFnZWlvKShzdHJ1 Y3Qgdm5vZGUgKnZwLCBzdHJ1Y3QgcGFnZSAqcHAsCgkJCQl1X29mZnNldF90IGlvX29mZiwgc2l6 ZV90IGlvX2xlbiwgaW50IGZsYWdzLAoJCQkJc3RydWN0IGNyZWQgKmNyKTsKCWludAkoKnZvcF9k dW1wY3RsKShzdHJ1Y3Qgdm5vZGUgKnZwLCBpbnQgYWN0aW9uLCBpbnQgKmJsa3ApOwoJdm9pZAko KnZvcF9kaXNwb3NlKShzdHJ1Y3Qgdm5vZGUgKnZwLCBzdHJ1Y3QgcGFnZSAqcHAsIGludCBmbGFn LAoJCQkJaW50IGRuLCBzdHJ1Y3QgY3JlZCAqY3IpOwoJaW50CSgqdm9wX3NldHNlY2F0dHIpKHN0 cnVjdCB2bm9kZSAqdnAsIHZzZWNhdHRyX3QgKnZzYXAsIGludCBmbGFnLAoJCQkJICAgIHN0cnVj dCBjcmVkICpjcik7CglpbnQJKCp2b3BfZ2V0c2VjYXR0cikoc3RydWN0IHZub2RlICp2cCwgdnNl Y2F0dHJfdCAqdnNhcCwgaW50IGZsYWcsCgkJCQkgICAgc3RydWN0IGNyZWQgKmNyKTsKCWludAko KnZvcF9zaHJsb2NrKShzdHJ1Y3Qgdm5vZGUgKnZwLCBpbnQgY21kLCBzdHJ1Y3Qgc2hybG9jayAq c2hyLAoJCQkJaW50IGZsYWcpOwp9IHZub2Rlb3BzX3Q7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgogCgoK CgoKCiAKCgojIDUwMSAiL3Vzci9pbmNsdWRlL3N5cy92bm9kZS5oIiAzIDQKCgoKCgoKCgoKCgoK CiMgNTIzICIvdXNyL2luY2x1ZGUvc3lzL3Zub2RlLmgiIDMgNAoKIAoKCgoKCgoKIAoKCgoKCgoK CiAKCgoKCgoKIyA1NzcgIi91c3IvaW5jbHVkZS9zeXMvdm5vZGUuaCIgMyA0CgoKCn0KCgoKIyAy MiAiL3Vzci9pbmNsdWRlL3N5cy9zdHJlYW0uaCIgMiAzIDQKCiMgMSAiL3Vzci9pbmNsdWRlL3N5 cy9wb2xsLmgiIDEgMyA0CiAKIAoKIAogCiAKCiAKCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylw b2xsLmgJMS4yOAk5OC8xMS8yMyBTTUkiCQoKCmV4dGVybiAiQyIgewoKCiAKCgoKdHlwZWRlZiBz dHJ1Y3QgcG9sbGZkIHsKCWludCBmZDsJCQkJIAoJc2hvcnQgZXZlbnRzOwkJCSAKCXNob3J0IHJl dmVudHM7CQkJIAp9IHBvbGxmZF90OwoKdHlwZWRlZiB1bnNpZ25lZCBsb25nCW5mZHNfdDsKCiAK CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgojIDY4ICIvdXNyL2luY2x1ZGUvc3lzL3BvbGwuaCIgMyA0 CgoKIyAxMjAgIi91c3IvaW5jbHVkZS9zeXMvcG9sbC5oIiAzIDQKCgoKCmludCBwb2xsKHN0cnVj dCBwb2xsZmQgKiwgbmZkc190LCBpbnQpOwoKCgoKCgp9CgoKCiMgMjMgIi91c3IvaW5jbHVkZS9z eXMvc3RyZWFtLmgiIDIgMyA0CgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3RybWRlcC5oIiAxIDMg NAogCgoKCgogCiAKCiAKIAogCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpc3RybWRlcC5oCTEuMTAJ OTgvMDEvMDYgU01JIgkKCgpleHRlcm4gIkMiIHsKCgogCgoKCgogCgoKCgoKIAoKCgoKCiAKCgoK CgoKfQoKCgojIDI0ICIvdXNyL2luY2x1ZGUvc3lzL3N0cmVhbS5oIiAyIDMgNAoKCgojIDEgIi91 c3IvaW5jbHVkZS9zeXMvbW9kZWwuaCIgMSAzIDQKIAoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgj KW1vZGVsLmgJMS4yMAk5Ny8wOS8yMiBTTUkiCgoKZXh0ZXJuICJDIiB7CgoKCgoKCgoKIyA0NSAi L3Vzci9pbmNsdWRlL3N5cy9tb2RlbC5oIiAzIDQKCgoKIAoKCgoKCnR5cGVkZWYgdW5zaWduZWQg aW50IG1vZGVsX3Q7CgoKCiMgMTk5ICIvdXNyL2luY2x1ZGUvc3lzL21vZGVsLmgiIDMgNAoKCgp9 CgoKCiMgMjcgIi91c3IvaW5jbHVkZS9zeXMvc3RyZWFtLmgiIDIgMyA0CgojIDEgIi91c3IvaW5j bHVkZS9zeXMvc3RyZnQuaCIgMSAzIDQKIAoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKXN0cmZ0 LmgJMS4xCTk5LzA3LzMwIFNNSSIKCiAKCgoKCgoKCgpleHRlcm4gIkMiIHsKCgogCgoKCgoKCgp0 eXBlZGVmIGhydGltZV90IHRkZWx0YV90IFsxMiBdWzJdOwoKdHlwZWRlZiBocnRpbWVfdCB0c190 OwoKZXh0ZXJuIHRzX3QgX3RzdGFtcF9jOwkgCgkJCSAKCgoKCgoKCgoKCgoKCgoKCgoKIyA4OCAi L3Vzci9pbmNsdWRlL3N5cy9zdHJmdC5oIiAzIDQKCgojIDEzMyAiL3Vzci9pbmNsdWRlL3N5cy9z dHJmdC5oIiAzIDQKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKc3RydWN0IGZ0ZXZudCB7Cgl0c190 IHRzOwkgCgljaGFyICptaWQ7CSAKCXVzaG9ydF90IGV2bnQ7CSAKCXVzaG9ydF90IGRhdGE7CSAK fTsKCiAKCgpzdHJ1Y3QgZnRibGsgewoJc3RydWN0IGZ0YmxrICpueHQ7CSAKCWludCBpeDsJCQkg CglzdHJ1Y3QgZnRldm50IGV2WzB4OSBdOwp9OwoKIAoKCgoKCgoKCgpzdHJ1Y3QgZnRoZHIgewoJ c3RydWN0IGZ0YmxrICp0YWlsOwoJdW5zaWduZWQgaGFzaDsJCSAKCXZvaWQgKnRocmVhZDsKCWlu dCBjcHVfc2VxaWQ7CglzdHJ1Y3QgZnRibGsgZmlyc3Q7Cn07CgogCgoKCgpzdHJ1Y3QgZnRmbHdl IHsKCWNoYXIgKm1pZDsKCXVzaG9ydF90IGV2bnQ7Cgl1c2hvcnRfdCBkYXRhOwoJdGRlbHRhX3Qg dGQ7Cn07CgpzdHJ1Y3QgZnRmbHcgewoJc3RydWN0IGZ0Zmx3ICpueHQ7CglpbnQgaGFzaDsKCWlu dCBjb3VudDsKCXN0cnVjdCBmdGZsd2UgZXZbMV07CSAKfTsKCnR5cGVkZWYgc3RydWN0IGZ0ZXZu dCBmdGV2bnRfdDsKdHlwZWRlZiBzdHJ1Y3QgZnRibGsgZnRibGtfdDsKdHlwZWRlZiBzdHJ1Y3Qg ZnRoZHIgZnRoZHJfdDsKdHlwZWRlZiBzdHJ1Y3QgZnRmbHdlIGZ0Zmx3ZV90Owp0eXBlZGVmIHN0 cnVjdCBmdGZsdyBmdGZsd190Owp0eXBlZGVmIHN0cnVjdCBmdGV2ZW50cyBmdGV2ZW50c190OwoK IyAzNTcgIi91c3IvaW5jbHVkZS9zeXMvc3RyZnQuaCIgMyA0CgoKCn0KCgoKIyAyOCAiL3Vzci9p bmNsdWRlL3N5cy9zdHJlYW0uaCIgMiAzIDQKCgoKZXh0ZXJuICJDIiB7CgoKIAoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgp0eXBlZGVmIHN0cnVjdAlfX3N0cmVhbV9xdWV1ZSAgewoJ c3RydWN0CXFpbml0CSpxX3FpbmZvOwkgCglzdHJ1Y3QJbXNnYgkqcV9maXJzdDsJIAoJc3RydWN0 CW1zZ2IJKnFfbGFzdDsJIAoJc3RydWN0CV9fc3RyZWFtX3F1ZXVlIAkqcV9uZXh0OwkgCglzdHJ1 Y3QJX19zdHJlYW1fcXVldWUgCSpxX2xpbms7CSAKCXZvaWQJCSpxX3B0cjsJCSAKCXNpemVfdAkJ cV9jb3VudDsJIAoJdWludF90CQlxX2ZsYWc7CQkgCglzc2l6ZV90CQlxX21pbnBzejsJIAoJCQkJ CSAKCXNzaXplX3QJCXFfbWF4cHN6OwkgCgkJCQkJIAoJc2l6ZV90CQlxX2hpd2F0OwkgCglzaXpl X3QJCXFfbG93YXQ7CSAKCXN0cnVjdCBxYmFuZAkqcV9iYW5kcDsJIAoJa211dGV4X3QJcV9sb2Nr OwkJIAoJc3RydWN0IHN0ZGF0YSAJKnFfc3RyZWFtOwkgCglzdHJ1Y3QJc3luY3EJKnFfc3luY3E7 CSAKCXVuc2lnbmVkIGNoYXIJcV9uYmFuZDsJIAoJa2NvbmR2YXJfdAlxX3dhaXQ7CQkgCglrY29u ZHZhcl90CXFfc3luYzsJCSAKCXN0cnVjdAlfX3N0cmVhbV9xdWV1ZSAJKnFfbmZzcnY7CSAKCXN0 cnVjdAlfX3N0cmVhbV9xdWV1ZSAJKnFfbmJzcnY7CSAKCXVzaG9ydF90CXFfZHJhaW5pbmc7CSAK CXNob3J0CQlxX3N0cnVpb3Q7CSAKCXVpbnRfdAkJcV9zeW5jcW1zZ3M7CSAKCXNpemVfdAkJcV9t YmxrY250OwkgCgkgCgoKCgoKCgoJc3RydWN0IG1zZ2IJKnFfc3FoZWFkOwkgCglzdHJ1Y3QgbXNn YgkqcV9zcXRhaWw7CSAKCXVpbnRfdAkJcV9zcWZsYWdzOwkgCglzaXplX3QJCXFfcmVmY250Owkg CgkJCQkJIAoJIAoKCgoJc3RydWN0IF9fc3RyZWFtX3F1ZXVlIAkqcV9zcW5leHQ7CSAKCXN0cnVj dCBfX3N0cmVhbV9xdWV1ZSAJKnFfc3FwcmV2OwkgCglwcmlfdAkJcV9zcHJpOwkJIAp9IHF1ZXVl X3Q7CgogCgoKCgoKCgoKCgkJCQkJIAoKCgkJCQkJIAoKCgoKCgoJCQkJCSAKCgoKCgoKCgoKCgog CgoKCQkJCQkgCgkJCQkJIAoJCQkJCSAKCiAKCgoKdHlwZWRlZiBzdHJ1Y3QgcWJhbmQgewoJc3Ry dWN0IHFiYW5kCSpxYl9uZXh0OwkgCglzaXplX3QJCXFiX2NvdW50OwkgCglzdHJ1Y3QgbXNnYgkq cWJfZmlyc3Q7CSAKCXN0cnVjdCBtc2diCSpxYl9sYXN0OwkgCglzaXplX3QJCXFiX2hpd2F0Owkg CglzaXplX3QJCXFiX2xvd2F0OwkgCgl1aW50X3QJCXFiX2ZsYWc7CSAKCXNpemVfdAkJcWJfbWJs a2NudDsJIAp9IHFiYW5kX3Q7CgogCgoKCgoKCiAKCgoKCiAKCgp0eXBlZGVmIGVudW0gcWZpZWxk cyB7CglRSElXQVQJPSAwLAkJIAoJUUxPV0FUCT0gMSwJCSAKCVFNQVhQU1oJPSAyLAkJIAoJUU1J TlBTWgk9IDMsCQkgCglRQ09VTlQJPSA0LAkJIAoJUUZJUlNUCT0gNSwJCSAKCVFMQVNUCT0gNiwJ CSAKCVFGTEFHCT0gNywJCSAKCVFTVFJVSU9UID0gOCwJCSAKCVFCQUQJPSA5Cn0gcWZpZWxkc190 OwoKIAoKCnN0cnVjdCBtb2R1bGVfaW5mbyB7Cgl1c2hvcnRfdCBtaV9pZG51bTsJCSAKCWNoYXIg CSptaV9pZG5hbWU7CQkgCglzc2l6ZV90CW1pX21pbnBzejsJCSAKCXNzaXplX3QJbWlfbWF4cHN6 OwkJIAoJc2l6ZV90CW1pX2hpd2F0OwkJIAoJc2l6ZV90IAltaV9sb3dhdDsJCSAKfTsKCiAKCgpz dHJ1Y3QJcWluaXQgewoJaW50CSgqcWlfcHV0cCkoKTsJCSAKCWludAkoKnFpX3NydnApKCk7CQkg CglpbnQJKCpxaV9xb3BlbikoKTsJCSAKCWludAkoKnFpX3FjbG9zZSkoKTsJCSAKCWludAkoKnFp X3FhZG1pbikoKTsJCSAKCXN0cnVjdCBtb2R1bGVfaW5mbyAqcWlfbWluZm87CSAKCXN0cnVjdCBt b2R1bGVfc3RhdCAqcWlfbXN0YXQ7CSAKCWludAkoKnFpX3J3cCkoKTsJCSAKCWludAkoKnFpX2lu Zm9wKSgpOwkJIAoJaW50CXFpX3N0cnVpb3Q7CQkgCn07CgogCgoKCgoKCgogCgoKCnN0cnVjdCBz dHJlYW10YWIgewoJc3RydWN0IHFpbml0ICpzdF9yZGluaXQ7CglzdHJ1Y3QgcWluaXQgKnN0X3dy aW5pdDsKCXN0cnVjdCBxaW5pdCAqc3RfbXV4cmluaXQ7CglzdHJ1Y3QgcWluaXQgKnN0X211eHdp bml0Owp9OwoKIAoKCgpzdHJ1Y3QgbGlua2JsayB7CglxdWV1ZV90ICpsX3F0b3A7CSAKCQkJCSAK CXF1ZXVlX3QgKmxfcWJvdDsJIAoJaW50CWxfaW5kZXg7CSAKfTsKCiAKCgp0eXBlZGVmIHN0cnVj dCBmcmVlX3J0biB7Cgl2b2lkCSgqZnJlZV9mdW5jKSgpOwoJY2FkZHJfdAlmcmVlX2FyZzsKfSBm cnRuX3Q7CgogCgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgZGF0YWIgewoJZnJ0bl90CQkqZGJfZnJ0 bnA7Cgl1bnNpZ25lZCBjaGFyCSpkYl9iYXNlOwoJdW5zaWduZWQgY2hhcgkqZGJfbGltOwoJdW5z aWduZWQgY2hhcglkYl9yZWY7Cgl1bnNpZ25lZCBjaGFyCWRiX3R5cGU7Cgl1bnNpZ25lZCBjaGFy CWRiX2ZsYWdzOwoJdW5zaWduZWQgY2hhcglkYl9zdHJ1aW9mbGFnOwoJdm9pZAkJKmRiX2NhY2hl OwkgCglzdHJ1Y3QgbXNnYgkqZGJfbWJsazsKCXZvaWQJCSgqZGJfZnJlZSkoc3RydWN0IG1zZ2Ig Kiwgc3RydWN0IGRhdGFiICopOwoJdm9pZAkJKCpkYl9sYXN0ZnJlZSkoc3RydWN0IG1zZ2IgKiwg c3RydWN0IGRhdGFiICopOwoKCXZvaWQJCSpkYl9wYWQ7CSAKCgl1bnNpZ25lZCBjaGFyCSpkYl9z dHJ1aW9iYXNlOwoJdW5zaWduZWQgY2hhcgkqZGJfc3RydWlvbGltOwoJdW5zaWduZWQgY2hhcgkq ZGJfc3RydWlvcHRyOwoJdW5pb24gewoJCWRvdWJsZSBlbmZvcmNlX2FsaWdubWVudDsKCQl1bnNp Z25lZCBjaGFyIGRhdGFbOF07CgkJdW5zaWduZWQgdTE2OjE2OwkgCgkJIAoKCgl9IGRiX3N0cnVp b3VuOwoJZnRoZHJfdAkJKmRiX2Z0aGRyOwoJZnRmbHdfdAkJKioqZGJfZnRmbHc7Cgl1aWRfdAkJ ZGJfdWlkOwkJIAoJIAoJdWlkX3QJCWRiX2xpZDsKfSBkYmxrX3Q7CgogCgoKdHlwZWRlZiBzdHJ1 Y3QJbXNnYiB7CglzdHJ1Y3QJbXNnYgkqYl9uZXh0OwoJc3RydWN0ICBtc2diCSpiX3ByZXY7Cglz dHJ1Y3QJbXNnYgkqYl9jb250OwoJdW5zaWduZWQgY2hhcgkqYl9ycHRyOwoJdW5zaWduZWQgY2hh cgkqYl93cHRyOwoJc3RydWN0IGRhdGFiIAkqYl9kYXRhcDsKCXVuc2lnbmVkIGNoYXIJYl9iYW5k OwoJdW5zaWduZWQgY2hhcgliX2Z0ZmxhZzsJIAoJdW5zaWduZWQgc2hvcnQJYl9mbGFnOwoJcXVl dWVfdAkJKmJfcXVldWU7CSAKfSBtYmxrX3Q7CgogCgoKCgogCgoKCgoKCgoKIAoKCgoKCQkJCQkg CgoKCgoKIAoKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAK CgoKCgogCgoKIyA0MTIgIi91c3IvaW5jbHVkZS9zeXMvc3RyZWFtLmgiIDMgNAoKc3RydWN0IGlv Y2JsayB7CglpbnQgCWlvY19jbWQ7CQkgCgljcmVkX3QJKmlvY19jcjsJCSAKCXVpbnRfdAlpb2Nf aWQ7CQkJIAoJc2l6ZV90CWlvY19jb3VudDsJCSAKCWludAlpb2NfZXJyb3I7CQkgCglpbnQJaW9j X3J2YWw7CQkgCglpbnQJaW9jX2ZpbGwxOwoJdWludF90CWlvY19mbGFnOwkJIAoJaW50CWlvY19m aWxsZXJbMl07CQkgCn07CgoKdHlwZWRlZglzdHJ1Y3QgaW9jYmxrCSpJT0NQOwoKCgoKIAoKCgoK CgoKIAoKCgoKCiAKCgojIDQ1OCAiL3Vzci9pbmNsdWRlL3N5cy9zdHJlYW0uaCIgMyA0CgpzdHJ1 Y3QgY29weXJlcSB7CglpbnQJY3FfY21kOwkJCSAKCWNyZWRfdAkqY3FfY3I7CQkJIAoJdWludF90 CWNxX2lkOwkJCSAKCWNhZGRyX3QJY3FfYWRkcjsJCSAKCXNpemVfdAljcV9zaXplOwkJIAoJdWlu dF90CWNxX2ZsYWc7CQkgCgltYmxrX3QJKmNxX3ByaXZhdGU7CQkgCglpbnQJY3FfZmlsbGVyWzRd OwkJIAp9OwoKCgoKCiAKCgoJCQkJCSAKCgkJCQkJIAoJCQkJCSAKCiAKCgojIDQ5NSAiL3Vzci9p bmNsdWRlL3N5cy9zdHJlYW0uaCIgMyA0CgpzdHJ1Y3QgY29weXJlc3AgewoJaW50CWNwX2NtZDsJ CQkgCgljcmVkX3QJKmNwX2NyOwkJCSAKCXVpbnRfdAljcF9pZDsJCQkgCgljYWRkcl90CWNwX3J2 YWw7CQkgCgkJCQkJIAoJc2l6ZV90CWNwX3BhZDE7Cgl1aW50X3QJY3BfcGFkMjsKCW1ibGtfdCAq Y3BfcHJpdmF0ZTsJCSAKCXVpbnRfdAljcF9mbGFnOwkJIAoJaW50CWNwX2ZpbGxlclszXTsKfTsK CgoKCgogCgoKCgp1bmlvbiBpb2N0eXBlcyB7CglzdHJ1Y3QgaW9jYmxrCWlvY2JsazsKCXN0cnVj dCBjb3B5cmVxCWNvcHlyZXE7CglzdHJ1Y3QgY29weXJlc3AJY29weXJlc3A7Cn07CgogCgoKCgpz dHJ1Y3Qgc3Ryb3B0aW9ucyB7Cgl1aW50X3QJc29fZmxhZ3M7CQkgCglzaG9ydAlzb19yZWFkb3B0 OwkJIAoJdXNob3J0X3Qgc29fd3JvZmY7CQkgCglzc2l6ZV90CXNvX21pbnBzejsJCSAKCXNzaXpl X3QJc29fbWF4cHN6OwkJIAoJc2l6ZV90CXNvX2hpd2F0OwkJIAoJc2l6ZV90CXNvX2xvd2F0OwkJ IAoJdW5zaWduZWQgY2hhciBzb19iYW5kOwkJIAoJdXNob3J0X3Qgc29fZXJyb3B0OwkJIAoJc3Np emVfdAlzb19tYXhibGs7CQkgCgl1c2hvcnRfdCBzb19jb3B5b3B0OwkJIAp9OwoKIAoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgojIDYwMiAiL3Vzci9pbmNsdWRlL3N5cy9zdHJlYW0uaCIgMyA0CgoK IAoKCgogCgoKCgoKCiAKCgoKCgoKCgogCgoKCgoKCgkJCQkJIAoKIAoKCgoKIAoKCgoKCiAKCgoK CiAKCgoKCgogCgoKCgogCgoKCgoKIAoKCgogCgoKCgogCgoKCgoKCiAKCgoKCgoKCgoKIAoKCgoK IAoKCgoKIAoKCgoKIAoKCgojIDc4NiAiL3Vzci9pbmNsdWRlL3N5cy9zdHJlYW0uaCIgMyA0CgoK IAoKCmV4dGVybiBpbnQgbnN0cnB1c2g7CQkJIAoKCn0KCgoKIyA1ICIvb3B0L212cGxvY2FsL2xp Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1LjMvaW5jbHVkZS9zeXMvc3RyZWFtLmgi IDIgMyA0CgoKCgoKCiMgNDEgIi91c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgiIDIgMyA0CgoKIAoK CgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2J5dGVvcmRlci5oIiAxIDMgNAogCiAKCiAKIAogCgoK CgojcHJhZ21hIGlkZW50CSJAKCMpYnl0ZW9yZGVyLmgJMS4xNAk5OC8wNC8xOSBTTUkiCQoKCgoK ZXh0ZXJuICJDIiB7CgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCiAKCgoKCgojIDc0ICIv dXNyL2luY2x1ZGUvc3lzL2J5dGVvcmRlci5oIiAzIDQKCgoKfQoKCgojIDQ4ICIvdXNyL2luY2x1 ZGUvbmV0aW5ldC9pbi5oIiAyIDMgNAoKCgoKCnR5cGVkZWYJdWludDE2X3QJaW5fcG9ydF90OwoK CiAKCgoKCgoKCgoKCgoKdHlwZWRlZgl1aW50MzJfdAlpbl9hZGRyX3Q7CgoKCgp0eXBlZGVmIHVp bnQzMl90IGlwYWRkcl90OwoKCgoKc3RydWN0IGluNl9hZGRyIHsKCXVuaW9uIHsKCQkgCgoKCgoK CgoKCgoKCgoKCQl1aW50OF90CQlfUzZfdThbMTZdOwkgCgkJdWludDMyX3QJX1M2X3UzMls0XTsJ IAoKCQl1aW50MzJfdAlfX1M2X2FsaWduOwkgCgl9IF9TNl91bjsKfTsKCgoKCgoKCnR5cGVkZWYg c3RydWN0IGluNl9hZGRyIGluNl9hZGRyX3Q7CgoKCgoKdHlwZWRlZgl1bnNpZ25lZCBzaG9ydAlz YV9mYW1pbHlfdDsKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoK CgoKCgoKIAoKCgoKCgoKCgoKIAoKCgoKCgoKIAoKCgoKCgogCgoKCgoKCgoKIAoKCgoKCgogCgoK CgoKCgoKCgoKCgoKc3RydWN0IGluX2FkZHIgewoJdW5pb24gewoJCXN0cnVjdCB7IHVpbnQ4X3Qg c19iMSwgc19iMiwgc19iMywgc19iNDsgfSBTX3VuX2IgOwoJCXN0cnVjdCB7IHVpbnQxNl90IHNf dzEsIHNfdzI7IH0gU191bl93IDsKCgkJdWludDMyX3QgU19hZGRyIDsKCgoKCX0gU191biA7CgoK CgoKCn07CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK CgoKCiAKCgpzdHJ1Y3Qgc29ja2FkZHJfaW4gewoJc2FfZmFtaWx5X3QJc2luX2ZhbWlseTsKCWlu X3BvcnRfdAlzaW5fcG9ydDsKCXN0cnVjdAlpbl9hZGRyIHNpbl9hZGRyOwoKCWNoYXIJCXNpbl96 ZXJvWzhdOwoKCgp9OwoKCiAKCgpzdHJ1Y3Qgc29ja2FkZHJfaW42IHsKCXNhX2ZhbWlseV90CXNp bjZfZmFtaWx5OwoJaW5fcG9ydF90CXNpbjZfcG9ydDsKCXVpbnQzMl90CXNpbjZfZmxvd2luZm87 CglzdHJ1Y3QgaW42X2FkZHIJc2luNl9hZGRyOwoJdWludDMyX3QJc2luNl9zY29wZV9pZDsgICAK CXVpbnQzMl90CV9fc2luNl9zcmNfaWQ7CSAKfTsKCiAKCgoKCgoKIAoKCgoKCgoKCgoKCiAKCgoK CgoKCgoKCiMgMzU3ICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAzIDQKCgoKCgoKCgoKCgoK CiAKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK CgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCiMgNjA3ICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAzIDQKCgogCgoKCgoKCgoK CgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAK CgoKCgp0eXBlZGVmIHN0cnVjdCBpcHNlY19yZXEgewoJdWludF90IAkJaXBzcl9haF9yZXE7CQkg Cgl1aW50X3QgCQlpcHNyX2VzcF9yZXE7CQkgCgl1aW50X3QJCWlwc3Jfc2VsZl9lbmNhcF9yZXE7 CSAKCXVpbnQ4X3QJCWlwc3JfYXV0aF9hbGc7CQkgCgl1aW50OF90CQlpcHNyX2VzcF9hbGc7CQkg Cgl1aW50OF90CQlpcHNyX2VzcF9hdXRoX2FsZzsJIAp9IGlwc2VjX3JlcV90OwoKCiAKCgoKCgoK IAoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoKCgoKCgoKIAoKCnN0cnVjdCBpcF9tcmVxIHsKCXN0 cnVjdCBpbl9hZGRyCWltcl9tdWx0aWFkZHI7CSAKCXN0cnVjdCBpbl9hZGRyCWltcl9pbnRlcmZh Y2U7CSAKfTsKCiAKCgoKc3RydWN0IGlwdjZfbXJlcSB7CglzdHJ1Y3QgaW42X2FkZHIJaXB2Nm1y X211bHRpYWRkcjsJIAoJdW5zaWduZWQgaW50CWlwdjZtcl9pbnRlcmZhY2U7CSAKfTsKCiAKCgpz dHJ1Y3QgaW42X3BrdGluZm8gewoJc3RydWN0IGluNl9hZGRyCQlpcGk2X2FkZHI7CSAKCXVuc2ln bmVkIGludAkJaXBpNl9pZmluZGV4OwkgCn07CgogCgoKCgoKCiAKCgoKCnR5cGVkZWYgc3RydWN0 IHsKCXN0cnVjdCBpbl9hZGRyCWluX3ByZWZpeF9hZGRyOwoJdW5zaWduZWQgaW50CWluX3ByZWZp eF9sZW47Cn0gaW5fcHJlZml4X3Q7CgoKIAoKCgoJCQkJCSAKCQkJCQkgCgoJCQkJCSAKCQkJCQkg CgoJCQkJCSAKCQkJCQkgCgoJCQkJCSAKCQkJCQkgCgoJCQkJCSAKCgkJCQkJIAogCgoKCgoKCQkJ CQkgCgoJCQkJCSAKCgoJCQkJCSAKCgoKCgkJCQkJIAoKCgkJCQkJIAoKCgoKCgoKCgogCgoKCgoJ CQkJCSAKCgkJCQkJIAoKIAoKCgoJCQkJCSAKCgkJCQkJIAoKCgoKIAoKCgoKZXh0ZXJuIGNvbnN0 IHN0cnVjdCBpbjZfYWRkciBpbjZhZGRyX2FueTsKZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbjZfYWRk ciBpbjZhZGRyX2xvb3BiYWNrOwoKCgoKfQoKCgojIDk2ICIvdXNyL2luY2x1ZGUvbmV0ZGIuaCIg MiAzIDQKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc29ja2V0LmgiIDEgMyA0CiAKCgoKCiAKIAoK IAogCiAKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylzb2NrZXQuaAkxLjUzCTk5LzExLzA3IFNNSSIJ CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL25ldGNvbmZp Zy5oIiAxIDMgNAogCiAKCiAKIAogCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpbmV0Y29uZmlnLmgJ MS4yMAk5OS8wNC8yNyBTTUkiCQoKCmV4dGVybiAiQyIgewoKCgoKCnN0cnVjdCAgbmV0Y29uZmln IHsKCWNoYXIJCSpuY19uZXRpZDsJIAoJdW5zaWduZWQgaW50CW5jX3NlbWFudGljczsJIAoJdW5z aWduZWQgaW50CW5jX2ZsYWc7CSAKCWNoYXIJCSpuY19wcm90b2ZtbHk7CSAKCWNoYXIJCSpuY19w cm90bzsJIAoJY2hhcgkJKm5jX2RldmljZTsJIAoJdW5zaWduZWQgaW50CW5jX25sb29rdXBzOwkg CgljaGFyCQkqKm5jX2xvb2t1cHM7CSAKCXVuc2lnbmVkIGludAluY191bnVzZWRbOF07CSAKfTsK CnR5cGVkZWYgc3RydWN0IHsKCXN0cnVjdCBuZXRjb25maWcgKipuY19oZWFkOwoJc3RydWN0IG5l dGNvbmZpZyAqKm5jX2N1cnI7Cn0gTkNPTkZfSEFORExFOwoKIAoKCgoKCgoKCiAKCgoKCgoKCiAK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCmV4dGVybiB2b2lkCQkqc2V0 bmV0Y29uZmlnKHZvaWQpOwpleHRlcm4gaW50CQllbmRuZXRjb25maWcodm9pZCAqKTsKZXh0ZXJu IHN0cnVjdCBuZXRjb25maWcJKmdldG5ldGNvbmZpZyh2b2lkICopOwpleHRlcm4gc3RydWN0IG5l dGNvbmZpZwkqZ2V0bmV0Y29uZmlnZW50KGNoYXIgKik7CmV4dGVybiB2b2lkCQlmcmVlbmV0Y29u ZmlnZW50KHN0cnVjdCBuZXRjb25maWcgKik7CmV4dGVybiB2b2lkCQkqc2V0bmV0cGF0aCh2b2lk KTsKZXh0ZXJuIGludAkJZW5kbmV0cGF0aCh2b2lkICopOwpleHRlcm4gc3RydWN0IG5ldGNvbmZp ZyAqZ2V0bmV0cGF0aCh2b2lkICopOwpleHRlcm4gdm9pZAkJbmNfcGVycm9yKGNvbnN0IGNoYXIg Kik7CmV4dGVybiBjaGFyCQkqbmNfc3BlcnJvcih2b2lkKTsKCiMgMTE4ICIvdXNyL2luY2x1ZGUv c3lzL25ldGNvbmZpZy5oIiAzIDQKCgoKfQoKCgojIDQyICIvdXNyL2luY2x1ZGUvc3lzL3NvY2tl dC5oIiAyIDMgNAoKCgoKCmV4dGVybiAiQyIgewoKCgoKCgoKCgoKCgoKdHlwZWRlZgl1aW50MzJf dAlzb2NrbGVuX3Q7CgoKCgoKdHlwZWRlZgl2b2lkCQkqUHNvY2tsZW5fdDsKCgoKCiAKCgoKCgoK CgoKCgogCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoK IAoKCgoKCgoKCgogCgoKc3RydWN0CWxpbmdlciB7CglpbnQJbF9vbm9mZjsJCSAKCWludAlsX2xp bmdlcjsJCSAKfTsKCiAKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoK CgpzdHJ1Y3Qgc29ja2FkZHIgewoJc2FfZmFtaWx5X3QJc2FfZmFtaWx5OwkgCgljaGFyCQlzYV9k YXRhWzE0XTsJIAp9OwoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdW4uaCIgMSAzIDQKIAogCgog CiAKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKXVuLmgJ MS45CTk2LzA3LzEyIFNNSSIJCgoKZXh0ZXJuICJDIiB7CgoKCgoKCgogCgoKc3RydWN0CXNvY2th ZGRyX3VuIHsKCXNhX2ZhbWlseV90CXN1bl9mYW1pbHk7CQkgCgljaGFyCQlzdW5fcGF0aFsxMDhd OwkJIAp9OwoKCgoKCgp9CgoKCiMgMjAwICIvdXNyL2luY2x1ZGUvc3lzL3NvY2tldC5oIiAyIDMg NAoKIyAxICIvdXNyL2luY2x1ZGUvbmV0L2lmX2RsLmgiIDEgMyA0CiAKCgoKIAoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylpZl9kbC5oCTEuNwk5 OC8wMS8wNiBTTUkiCiAKCgpleHRlcm4gIkMiIHsKCgogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCnN0 cnVjdCBzb2NrYWRkcl9kbCB7Cgl1c2hvcnRfdCBzZGxfZmFtaWx5OwkgCgl1c2hvcnRfdCBzZGxf aW5kZXg7CSAKCXVjaGFyX3QJc2RsX3R5cGU7CSAKCXVjaGFyX3QJc2RsX25sZW47CSAKCXVjaGFy X3QJc2RsX2FsZW47CSAKCXVjaGFyX3QJc2RsX3NsZW47CSAKCWNoYXIJc2RsX2RhdGFbMjQ0XTsJ IAp9OwoKCgoKfQoKCgojIDIwMSAiL3Vzci9pbmNsdWRlL3N5cy9zb2NrZXQuaCIgMiAzIDQKCgog CgoKCgoKIAoKCgoKIAoKCgoKCgoKCgoKCgp0eXBlZGVmCWRvdWJsZQkJc29ja2FkZHJfbWF4YWxp Z25fdDsKCgoKIAoKCgoKCgpzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSB7CglzYV9mYW1pbHlfdAlz c19mYW1pbHk7CSAKCSAKCWNoYXIJCV9zc19wYWQxWygoc2l6ZW9mIChzb2NrYWRkcl9tYXhhbGln bl90KSkgIC0gc2l6ZW9mIChzYV9mYW1pbHlfdCkpIF07Cglzb2NrYWRkcl9tYXhhbGlnbl90IF9z c19hbGlnbjsKCWNoYXIJCV9zc19wYWQyWygyNTYgIC0gKHNpemVvZiAoc2FfZmFtaWx5X3QpKyAo KHNpemVvZiAoc29ja2FkZHJfbWF4YWxpZ25fdCkpICAtIHNpemVvZiAoc2FfZmFtaWx5X3QpKSAg KyAoc2l6ZW9mIChzb2NrYWRkcl9tYXhhbGlnbl90KSkgKSkgXTsKfTsKCgogCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCiAKCgpzdHJ1Y3QgbXNnaGRyIHsKCXZvaWQJCSpt c2dfbmFtZTsJCSAKCXNvY2tsZW5fdAltc2dfbmFtZWxlbjsJCSAKCXN0cnVjdCBpb3ZlYwkqbXNn X2lvdjsJCSAKCWludAkJbXNnX2lvdmxlbjsJCSAKCgoKCgoKCWNhZGRyX3QJCW1zZ19hY2NyaWdo dHM7CSAKCWludAkJbXNnX2FjY3JpZ2h0c2xlbjsKCn07CgojIDM0NyAiL3Vzci9pbmNsdWRlL3N5 cy9zb2NrZXQuaCIgMyA0CgoKCgoKIAoKCgoKIAoKCgoKCiAKCgoKCnN0cnVjdCBjbXNnaGRyIHsK CXNvY2tsZW5fdAljbXNnX2xlbjsJIAoJaW50CQljbXNnX2xldmVsOwkgCglpbnQJCWNtc2dfdHlw ZTsJIAp9OwoKIyAzODIgIi91c3IvaW5jbHVkZS9zeXMvc29ja2V0LmgiIDMgNAoKCiMgNDA1ICIv dXNyL2luY2x1ZGUvc3lzL3NvY2tldC5oIiAzIDQKCgojIDQyOCAiL3Vzci9pbmNsdWRlL3N5cy9z b2NrZXQuaCIgMyA0CgoKCgoKCgoKCgoKCmV4dGVybiBpbnQgYWNjZXB0KGludCwgc3RydWN0IHNv Y2thZGRyICosIFBzb2NrbGVuX3QpOwpleHRlcm4gaW50IGJpbmQoaW50LCBjb25zdCBzdHJ1Y3Qg c29ja2FkZHIgKiwgc29ja2xlbl90KTsKZXh0ZXJuIGludCBjb25uZWN0KGludCwgY29uc3Qgc3Ry dWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCk7CmV4dGVybiBpbnQgZ2V0cGVlcm5hbWUoaW50LCBz dHJ1Y3Qgc29ja2FkZHIgKiwgUHNvY2tsZW5fdCk7CmV4dGVybiBpbnQgZ2V0c29ja25hbWUoaW50 LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgUHNvY2tsZW5fdCk7CmV4dGVybiBpbnQgZ2V0c29ja29wdChp bnQsIGludCwgaW50LCB2b2lkICosIFBzb2NrbGVuX3QpOwpleHRlcm4gaW50IGxpc3RlbihpbnQs IGludCk7CSAKZXh0ZXJuIGludCBzb2NrZXRwYWlyKGludCwgaW50LCBpbnQsIGludCAqKTsKZXh0 ZXJuIHNzaXplX3QgcmVjdihpbnQsIHZvaWQgKiwgc2l6ZV90LCBpbnQpOwpleHRlcm4gc3NpemVf dCByZWN2ZnJvbShpbnQsIHZvaWQgKiwgc2l6ZV90LCBpbnQsIHN0cnVjdCBzb2NrYWRkciAqLAoJ UHNvY2tsZW5fdCk7CmV4dGVybiBzc2l6ZV90IHJlY3Ztc2coaW50LCBzdHJ1Y3QgbXNnaGRyICos IGludCk7CmV4dGVybiBzc2l6ZV90IHNlbmQoaW50LCBjb25zdCB2b2lkICosIHNpemVfdCwgaW50 KTsKZXh0ZXJuIHNzaXplX3Qgc2VuZG1zZyhpbnQsIGNvbnN0IHN0cnVjdCBtc2doZHIgKiwgaW50 KTsKZXh0ZXJuIHNzaXplX3Qgc2VuZHRvKGludCwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCwg Y29uc3Qgc3RydWN0IHNvY2thZGRyICosCglzb2NrbGVuX3QpOwpleHRlcm4gaW50IHNldHNvY2tv cHQoaW50LCBpbnQsIGludCwgY29uc3Qgdm9pZCAqLCBzb2NrbGVuX3QpOwpleHRlcm4gaW50IHNo dXRkb3duKGludCwgaW50KTsKZXh0ZXJuIGludCBzb2NrZXQoaW50LCBpbnQsIGludCk7CiMgNDc3 ICIvdXNyL2luY2x1ZGUvc3lzL3NvY2tldC5oIiAzIDQKCgoKCn0KCgoKIyA5OCAiL3Vzci9pbmNs dWRlL25ldGRiLmgiIDIgMyA0CgoKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCgoKCgpzdHJ1Y3QJaG9z dGVudCB7CgljaGFyCSpoX25hbWU7CSAKCWNoYXIJKipoX2FsaWFzZXM7CSAKCWludAloX2FkZHJ0 eXBlOwkgCglpbnQJaF9sZW5ndGg7CSAKCWNoYXIJKipoX2FkZHJfbGlzdDsJIAoKfTsKCgogCgoK CgoKc3RydWN0IGFkZHJpbmZvIHsKCWludCBhaV9mbGFnczsJCSAKCWludCBhaV9mYW1pbHk7CQkg CglpbnQgYWlfc29ja3R5cGU7CSAKCWludCBhaV9wcm90b2NvbDsJIAoJc2l6ZV90IGFpX2FkZHJs ZW47CQkgCgljaGFyICphaV9jYW5vbm5hbWU7CSAKCXN0cnVjdCBzb2NrYWRkciAqYWlfYWRkcjsJ IAoJc3RydWN0IGFkZHJpbmZvICphaV9uZXh0OwkgCn07CiAKCgoKCiAKCgoKCgogCgoKCgoKCgoK CgoKCiAKCgoKCiAKCgoKCgoKCgoKIAoKCgpzdHJ1Y3QJbmV0ZW50IHsKCWNoYXIJCSpuX25hbWU7 CSAKCWNoYXIJCSoqbl9hbGlhc2VzOwkgCglpbnQJCW5fYWRkcnR5cGU7CSAKCWluX2FkZHJfdAlu X25ldDsJCSAKfTsKCnN0cnVjdAlwcm90b2VudCB7CgljaGFyCSpwX25hbWU7CSAKCWNoYXIJKipw X2FsaWFzZXM7CSAKCWludAlwX3Byb3RvOwkgCn07CgpzdHJ1Y3QJc2VydmVudCB7CgljaGFyCSpz X25hbWU7CSAKCWNoYXIJKipzX2FsaWFzZXM7CSAKCWludAlzX3BvcnQ7CQkgCgljaGFyCSpzX3By b3RvOwkgCn07CgoKCnN0cnVjdCBob3N0ZW50CSpnZXRob3N0YnluYW1lX3IKCShjb25zdCBjaGFy ICosIHN0cnVjdCBob3N0ZW50ICosIGNoYXIgKiwgaW50LCBpbnQgKmhfZXJybm9wKTsKc3RydWN0 IGhvc3RlbnQJKmdldGhvc3RieWFkZHJfcgoJKGNvbnN0IGNoYXIgKiwgaW50LCBpbnQsIHN0cnVj dCBob3N0ZW50ICosIGNoYXIgKiwgaW50LCBpbnQgKmhfZXJybm9wKTsKc3RydWN0IGhvc3RlbnQJ KmdldGlwbm9kZWJ5bmFtZShjb25zdCBjaGFyICosIGludCwgaW50LCBpbnQgKik7CnN0cnVjdCBo b3N0ZW50CSpnZXRpcG5vZGVieWFkZHIoY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCwgaW50ICop Owp2b2lkCQlmcmVlaG9zdGVudChzdHJ1Y3QgaG9zdGVudCAqKTsKc3RydWN0IGhvc3RlbnQJKmdl dGhvc3RlbnRfcihzdHJ1Y3QgaG9zdGVudCAqLCBjaGFyICosIGludCwgaW50ICpoX2Vycm5vcCk7 CgpzdHJ1Y3Qgc2VydmVudAkqZ2V0c2VydmJ5bmFtZV9yCgkoY29uc3QgY2hhciAqbmFtZSwgY29u c3QgY2hhciAqLCBzdHJ1Y3Qgc2VydmVudCAqLCBjaGFyICosIGludCk7CnN0cnVjdCBzZXJ2ZW50 CSpnZXRzZXJ2Ynlwb3J0X3IKCShpbnQgcG9ydCwgY29uc3QgY2hhciAqLCBzdHJ1Y3Qgc2VydmVu dCAqLCBjaGFyICosIGludCk7CnN0cnVjdCBzZXJ2ZW50CSpnZXRzZXJ2ZW50X3Ioc3RydWN0CXNl cnZlbnQgKiwgY2hhciAqLCBpbnQpOwoKc3RydWN0IG5ldGVudAkqZ2V0bmV0YnluYW1lX3IKCShj b25zdCBjaGFyICosIHN0cnVjdCBuZXRlbnQgKiwgY2hhciAqLCBpbnQpOwpzdHJ1Y3QgbmV0ZW50 CSpnZXRuZXRieWFkZHJfcihsb25nLCBpbnQsIHN0cnVjdCBuZXRlbnQgKiwgY2hhciAqLCBpbnQp OwpzdHJ1Y3QgbmV0ZW50CSpnZXRuZXRlbnRfcihzdHJ1Y3QgbmV0ZW50ICosIGNoYXIgKiwgaW50 KTsKCnN0cnVjdCBwcm90b2VudAkqZ2V0cHJvdG9ieW5hbWVfcgoJKGNvbnN0IGNoYXIgKiwgc3Ry dWN0IHByb3RvZW50ICosIGNoYXIgKiwgaW50KTsKc3RydWN0IHByb3RvZW50CSpnZXRwcm90b2J5 bnVtYmVyX3IKCShpbnQsIHN0cnVjdCBwcm90b2VudCAqLCBjaGFyICosIGludCk7CnN0cnVjdCBw cm90b2VudAkqZ2V0cHJvdG9lbnRfcihzdHJ1Y3QgcHJvdG9lbnQgKiwgY2hhciAqLCBpbnQpOwoK aW50IGdldG5ldGdyZW50X3IoY2hhciAqKiwgY2hhciAqKiwgY2hhciAqKiwgY2hhciAqLCBpbnQp OwppbnQgaW5uZXRncihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBj b25zdCBjaGFyICopOwoKCiAKc3RydWN0IGhvc3RlbnQJKmdldGhvc3RieW5hbWUoY29uc3QgY2hh ciAqKTsKc3RydWN0IGhvc3RlbnQJKmdldGhvc3RlbnQodm9pZCk7CgpzdHJ1Y3QgbmV0ZW50ICpn ZXRuZXRieWFkZHIoaW5fYWRkcl90LCBpbnQpOwoKCgpzdHJ1Y3QgbmV0ZW50CSpnZXRuZXRieW5h bWUoY29uc3QgY2hhciAqKTsKc3RydWN0IG5ldGVudAkqZ2V0bmV0ZW50KHZvaWQpOwpzdHJ1Y3Qg cHJvdG9lbnQJKmdldHByb3RvYnluYW1lKGNvbnN0IGNoYXIgKik7CnN0cnVjdCBwcm90b2VudAkq Z2V0cHJvdG9ieW51bWJlcihpbnQpOwpzdHJ1Y3QgcHJvdG9lbnQJKmdldHByb3RvZW50KHZvaWQp OwpzdHJ1Y3Qgc2VydmVudAkqZ2V0c2VydmJ5bmFtZShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIg Kik7CnN0cnVjdCBzZXJ2ZW50CSpnZXRzZXJ2Ynlwb3J0KGludCwgY29uc3QgY2hhciAqKTsKc3Ry dWN0IHNlcnZlbnQJKmdldHNlcnZlbnQodm9pZCk7CgoKaW50CQkgZ2V0bmV0Z3JlbnQoY2hhciAq KiwgY2hhciAqKiwgY2hhciAqKik7CnN0cnVjdCBob3N0ZW50CSpnZXRob3N0YnlhZGRyKGNvbnN0 IGNoYXIgKiwgaW50LCBpbnQpOwoKCgoKCmludCBlbmRob3N0ZW50KHZvaWQpOwppbnQgZW5kbmV0 ZW50KHZvaWQpOwppbnQgZW5kcHJvdG9lbnQodm9pZCk7CmludCBlbmRzZXJ2ZW50KHZvaWQpOwpp bnQgc2V0aG9zdGVudChpbnQpOwppbnQgc2V0bmV0ZW50KGludCk7CmludCBzZXRwcm90b2VudChp bnQpOwppbnQgc2V0c2VydmVudChpbnQpOwojIDI3NyAiL3Vzci9pbmNsdWRlL25ldGRiLmgiIDMg NAoKCgoKCgppbnQgc2V0bmV0Z3JlbnQoY29uc3QgY2hhciAqKTsKaW50IGVuZG5ldGdyZW50KHZv aWQpOwppbnQgcmNtZChjaGFyICoqLCB1bnNpZ25lZCBzaG9ydCwKCWNvbnN0IGNoYXIgKiwgY29u c3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCAqKTsKaW50IHJjbWRfYWYoY2hhciAqKiwgdW5z aWduZWQgc2hvcnQsCgljb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBp bnQgKiwgaW50KTsKaW50IHJyZXN2cG9ydF9hZihpbnQgKiwgaW50KTsKaW50IHJleGVjKGNoYXIg KiosIHVuc2lnbmVkIHNob3J0LAoJY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNo YXIgKiwgaW50ICopOwppbnQgcmV4ZWNfYWYoY2hhciAqKiwgdW5zaWduZWQgc2hvcnQsCgljb25z dCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQgKiwgaW50KTsKaW50IHJy ZXN2cG9ydChpbnQgKik7CmludCBydXNlcm9rKGNvbnN0IGNoYXIgKiwgaW50LCBjb25zdCBjaGFy ICosIGNvbnN0IGNoYXIgKik7CiAKc3RydWN0IGhvc3RlbnQJKmdldGhvc3RieW5hbWUyKGNvbnN0 IGNoYXIgKiwgaW50KTsKdm9pZAkJaGVycm9yKGNvbnN0IGNoYXIgKik7CmNvbnN0IGNoYXIJKmhz dHJlcnJvcihpbnQpOwogCgogCmludAkJZ2V0YWRkcmluZm8oY29uc3QgY2hhciAqLCBjb25zdCBj aGFyICosCgkJCWNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqLCBzdHJ1Y3QgYWRkcmluZm8gKiopOwp2 b2lkCQlmcmVlYWRkcmluZm8oc3RydWN0IGFkZHJpbmZvICopOwpjaGFyCQkqZ2FpX3N0cmVycm9y KGludCk7CmludAkJZ2V0bmFtZWluZm8oY29uc3Qgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5f dCwKCQkJY2hhciAqLCBzaXplX3QsIGNoYXIgKiwgc2l6ZV90LCBpbnQpOwogCgoKCiMgMzc1ICIv dXNyL2luY2x1ZGUvbmV0ZGIuaCIgMyA0CgoKIAoKCgoKZXh0ZXJuICBpbnQgaF9lcnJubzsKCgoK CgoKCgoKIAoKCiAKCgoKCgoKCgp9CgoKCiMgOSAiLi4vLi4vaW5jbHVkZS9saWJpbmMvY2ZnX2Ns YXNzLmgiIDIKCgoKCgoKIyAxICIuLi8uLi9pbmNsdWRlL2xvY2FsaW5jL2JhcmNvZGUuaCIgMQog CgoKCgoKIAoKCgoKCgoKCgogCgoKCgoKCgoKIAoKCgoKCgoKCgoKCnZvaWQgcmVhZF9iYXJjb2Rl X2RhdGEoaW50IGluX21haW4pOwoKIyAxNSAiLi4vLi4vaW5jbHVkZS9saWJpbmMvY2ZnX2NsYXNz LmgiIDIKCiMgMSAiLi4vLi4vaW5jbHVkZS9sb2NhbGluYy9YeXN0YWdlLkgiIDEKCgoKCiMgMSAi Li4vLi4vaW5jbHVkZS9sb2NhbGluYy9JbmRleGVyLkgiIDEKCgoKCgoKCiAKCgoKc3RhdGljIGNv bnN0IGxvbmcga01pblNuYXBEZWxheSA9IDEwOwogCgoKc3RhdGljIGNvbnN0IGxvbmcga01pblNp bmdsZVNwZWVkRGVsYXkgPSAzNjsKc3RhdGljIGNvbnN0IGxvbmcga01pbkRpZ2l0YWxQdWxuaXgg PSBrTWluU25hcERlbGF5OwpzdGF0aWMgY29uc3QgbG9uZyBrTWluRGVmYXVsdERlbGF5ID0gMjA7 CgpjbGFzcyBJbmRleGVyIHsKcHVibGljOgogCgoKCgogICAgc2hvcnQgaV9zc3RhdDsJIAogICAg c2hvcnQgaV9maWxsZXIxOwogICAgc3RydWN0IGF4aXMgKmFfaG9tZTsKICAgIHVfc2hvcnQgaV9h Y2M7CSAKICAgIHVfc2hvcnQgaV92ZWw7CSAKICAgIHVfc2hvcnQgaV9tYWNjOwkgCiAgICB1X3No b3J0IGlfbXZlbDsKICAgIHVfc2hvcnQgaV9waXRjaFI7CSAKICAgIHVfc2hvcnQgaV9waXRjaEQ7 CSAKICAgIHNob3J0IGlfdW5pdDsKICAgIHVfc2hvcnQgaV9mZWVkYmFjazsJIAogICAgbG9uZyBp X2RpczsJCSAKICAgIHVfbG9uZyBpX210aW1lOwkgCiAgICB1X2xvbmcgaV90ZGlzOwkgCiAgICBs b25nIGlfcG9zOwogICAgbG9uZyBpX21wb3M7CiAgICBsb25nIGlfZGVsYXk7CiAgICBsb25nIGlf c2NhbGU7CSAKCQkJIAogICAgbG9uZyBpX2NudHJldjsKIAoKCgoKfTsKCiMgNSAiLi4vLi4vaW5j bHVkZS9sb2NhbGluYy9YeXN0YWdlLkgiIDIKCiMgMSAiLi4vLi4vaW5jbHVkZS9sb2NhbGluYy9a ZXRhLkgiIDEKCgoKCgoKCiAKCgoKCmNsYXNzIFpldGEgewpwdWJsaWM6CiAgICB1X3Nob3J0IHVu aXQ7CSAKICAgIHVfc2hvcnQgZGVsdmlzOwkgCiAgICB1X3Nob3J0IGR3YXZlZjsJIAogICAgdV9z aG9ydCBkYWN0ZHA7CSAKICAgIHVfc2hvcnQgZGFyZW47CSAKICAgIHVfc2hvcnQgZGF1dG9zOwkg CiAgICB1X3Nob3J0IGRtdGluZDsJIAogICAgdV9zaG9ydCBkbXRzdHQ7CSAKICAgIHVfc2hvcnQg ZXJlczsJIAogICAgdV9zaG9ydCBlcG12OwkgCiAgICBsb25nIGVwbWc7CQkgCiAKCgoKCn07Cgoj IDYgIi4uLy4uL2luY2x1ZGUvbG9jYWxpbmMvWHlzdGFnZS5IIiAyCgoKY2xhc3MJY29uZmlndXJh dGlvbjsKCmNsYXNzIFRsYWcgewpwdWJsaWM6CiAgICBzaG9ydCBsX3BvczsKICAgIHNob3J0IGxf bmVnOwp9OwoKCgpzdGF0aWMgY29uc3QgaW50CWtNYXhTdGFnZXMJPSAyOyAgICAgCnN0YXRpYyBj b25zdCBpbnQJa0F4aXNYCQk9IDA7CnN0YXRpYyBjb25zdCBpbnQJa0F4aXNZCQk9IDE7CgpzdGF0 aWMgY29uc3QgaW50CWtNYXhEZWxheQk9IDUwMDA7CnN0YXRpYyBjb25zdCBpbnQJa01heEFjY2Vs CT0gMzAwOwoKc3RhdGljIGNvbnN0IHVfc2hvcnQJa01heFVTaG9ydAk9IDB4ZmZmZjsKCnN0YXRp YyBjb25zdCBpbnQJa1ZlbG9jaXR5CT0gMDsKc3RhdGljIGNvbnN0IGludAlrQWNjZWxlcmF0aW9u CT0gMTsKCnN0YXRpYyBjb25zdCBsb25nCWtWZWxvY2l0eVNoaWZ0CT0gMDsKc3RhdGljIGNvbnN0 IGxvbmcJa0FjY2VsZXJhdGlvblNoaWZ0ID0gMTY7CgpjbGFzcyBYeXN0YWdlIHsKcHJpdmF0ZToK ICAgIHZvbGF0aWxlIHNob3J0IF94eV9jbWQ7CiAgICB2b2xhdGlsZSBzaG9ydCBfeHlfc3Ryb2Jl OwpwdWJsaWM6CiAgICBzaG9ydCB4eV9zdGF0OwogICAgc2hvcnQgeHlfbmluc3A7CQkgCiAgICBs b25nIHh5X2F0dG5tc2c7CQkgCiAgICBsb25nIHh5X3hjbWQ7CiAgICBsb25nIHh5X3ljbWQ7CiAg ICBsb25nIHh5X25zdHJvYmVzOwogICAgbG9uZyB4eV94cGFyazsKICAgIGxvbmcgeHlfeXBhcms7 CiAgICBUbGFnIHh5X3RsYWdbMzEgXTsKICAgIEluZGV4ZXIgeHlfeDsKICAgIEluZGV4ZXIgeHlf eTsKICAgIFpldGEgeHlfeng7CiAgICBaZXRhIHh5X3p5OwoKICAgIHZvaWQgc2V0X2ZpZHVfc3Bl ZWQgKGNvbmZpZ3VyYXRpb24mKTsKICAgIHZvaWQgc2V0X25vcm1hbF9zcGVlZCAoY29uZmlndXJh dGlvbiYpOwogICAgdm9pZCB1cGRhdGVfZnJvbV9jb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24g Kik7CiAgICB2b2lkIHdhaXRfY21kKHNob3J0IGNtZCk7CgogICAgdm9pZCBjbGVhcl9zYXZlKCk7 CiAgICB2b2lkIHNhdmVfZmx5KCk7CiAgICB2b2lkIHJlc3RvcmVfZmx5KCk7CiAgICB2b2lkIHNh dmVfZmlkdSgpOwogICAgdm9pZCByZXN0b3JlX2ZpZHUoKTsKCiAgICB2b2lkIHh5X2NtZChzaG9y dCBjbWQpIHZvbGF0aWxlOwogICAgdm9pZCB4eV9zdHJvYmUoYm9vbCBmaXJlKSB2b2xhdGlsZTsK CiAgICBib29sIHh5X3N0cm9iZSgpIHZvbGF0aWxlIHsgcmV0dXJuKF94eV9zdHJvYmUpOyB9CiAg ICBpbnQgeHlfY21kKCkgdm9sYXRpbGUgeyByZXR1cm4oX3h5X2NtZCk7IH0KCiAgICBzdGF0aWMg WHlzdGFnZSAqZ2V0KCk7Cgpwcml2YXRlOgogICAgIAogICAgIAogICAgIAogICAgIAogICAgIAog ICAgIAogICAgbG9uZyBfc2F2ZV9mbHlfdmVsW2tNYXhTdGFnZXNdOwogICAgbG9uZyBfc2F2ZV9m bHlfYWNjW2tNYXhTdGFnZXNdOwogICAgbG9uZyBfZmx5X3NhdmVkOwoKICAgIGxvbmcgX3NhdmVf ZmlkdV92ZWxba01heFN0YWdlc107CiAgICBsb25nIF9zYXZlX2ZpZHVfYWNjW2tNYXhTdGFnZXNd OwogICAgbG9uZyBfZmlkdV9zYXZlZDsKCiAgICB2b2lkIHNldF9hY2NfdmVsKHVfc2hvcnQgYWNj LCB1X3Nob3J0IHZlbCk7CSAKICAgIHZvaWQgc2V0X2FjY192ZWwoaW50IGF4aXMsIHVfc2hvcnQg YWNjLCB1X3Nob3J0IHZlbCk7CiAgICB2b2lkIGxvYWRfYXhpcyhjb25maWd1cmF0aW9uICpjZmcs IGludCBheGlzKTsKCiAgICB2b2lkICpvcGVyYXRvciBuZXcoc2l6ZV90KTsKICAgIHZvaWQgb3Bl cmF0b3IgZGVsZXRlKHZvaWQgKik7Cn07CgojIDE2ICIuLi8uLi9pbmNsdWRlL2xpYmluYy9jZmdf Y2xhc3MuaCIgMgoKCgoKIyAxICIuLi8uLi9pbmNsdWRlL2xpYmluYy9GaWR1X1NwZC5IIiAxCgoK CgoKCgoKCgoKY2xhc3MgQ2ZnU3RhZ2UyIHsKcHVibGljOgogICAgdV9zaG9ydAlmaWR1X2FjY2Vs OwogICAgdV9zaG9ydAlmaWR1X3ZlbDsKfTsKCgojIDIwICIuLi8uLi9pbmNsdWRlL2xpYmluYy9j ZmdfY2xhc3MuaCIgMgoKCgoKCgoKY29uc3QJaW50CWtOdmNwdQk9IDg7CSAKdHlwZWRlZiBlbnVt IHsga0hvc3RGaWR1Y2lhbHMgPSAwLCBrUmVtb3RlRmlkdWNpYWxzID0gMSB9IGVfZmlkdV9sb2Nh dGlvbjsKCiAKCgpjb25zdCBpbnQga1N4NTAwID0gMDsKY29uc3QgaW50IGtaZXRhID0gMTsKY29u c3QgaW50IGtMaW5lYXIgPSAyOwoKIAoKCmNvbnN0IGludCBrQ2FtZXJhV2lkdGhFcnJvciA9IC0x MDAwOwpjb25zdCBpbnQga0NhbWVyYUZyYW1lQnVmZmVyRXJyb3IgPSAtMTAwMTsKY29uc3QgaW50 IGtMYXNlclZlbG9jaXR5RXJyb3IgPSAtMTAyMDsKY29uc3QgaW50IGtTcGVjaWFsM2RMZWZ0T2Zm c2V0RXJyb3IgPSAtMTAzMDsKY29uc3QgaW50IGtTcGVjaWFsM2RSaWdodE9mZnNldEVycm9yID0g LTEwMzE7CgpzdGF0aWMgY29uc3QgY2hhciAqa0NhbWVyYVdpZHRoTXNnID0gCSJDYW1lcmEgV2lk dGggbm90IHZhbGlkIGZvciB0aGlzIGNhbWVyYSB0eXBlIjsKCnN0YXRpYyBjb25zdCBjaGFyICpr Q2FtZXJhRnJhbWVCdWZmZXJNc2cgPSAJIkNhbWVyYSBGcmFtZSBCdWZmZXIgc2l6ZSBub3QgdmFs aWQgZm9yIHRoaXMgY2FtZXJhIHR5cGUiOwoKc3RhdGljIGNvbnN0IGNoYXIgKmtMYXNlclZlbG9j aXR5TXNnID0gCSJMYXNlciBJbml0aWFsIFZlbG9jaXR5IGdyZWF0ZXIgdGhhbiBMYXNlciBGaW5h bCBWZWxvY2l0eSI7CgpzdGF0aWMgY29uc3QgY2hhciAqa1NwZWNpYWwzZExlZnRPZmZzZXRNc2cg PSAJIjNEIExlZnQgb2Zmc2V0IGdyZWF0ZXIgdGhhbiBTdGFydCBTdG9wIGRpc3RhbmNlIjsKCnN0 YXRpYyBjb25zdCBjaGFyICprU3BlY2lhbDNkUmlnaHRPZmZzZXRNc2cgPSAJIjNEIFJpZ2h0IG9m ZnNldCBncmVhdGVyIHRoYW4gU3RhcnQgU3RvcCBkaXN0YW5jZSI7CgoKCnVfbG9uZyBrZXlfZGVj b2RlKGNvbnN0IGNoYXIgKmtleSk7CgpjbGFzcyBDZmdWaXNpb25LZXkgewpwdWJsaWM6CiAgICBj aGFyCWNyeXB0ZWRbNDAgXTsKICAgIGNoYXIJZGF0ZVsyMCBdOwogICAgY2hhcglhbGdvX2tleVs0 MCBdOwp9OwoKY2xhc3MgQ2ZnQmFyY29kZSB7CnB1YmxpYzoKICAgIGludAkJbGVuZ3RoOwogICAg aW50CQlzaWc7CiAgICBpbnQJCWJsaW5rcmF0ZTsKICAgIGludAkJcmVtaW5kZXI7CgogICAgY2hh cglmaWxlbmFtZVsxMjggXTsKCiAgICBCb29sZWFuCW1hdGNoX2RhdGFiYXNlOwogICAgQm9vbGVh bglpbl91c2U7CiAgICBCb29sZWFuCWRpc3BsYXk7CiAgICBCb29sZWFuCWZpbGxlcjsKfTsKCmNs YXNzIENmZ0JhcmNvZGUyIHsKcHVibGljOgogICAgQm9vbGVhbgloYXNfZHVhbF9yZWFkZXJzOwog ICAgQm9vbGVhbgljYW5fcXVldWU7CgogICAgc2hvcnQJc2tpcF9zdGFydDsKICAgIHNob3J0CXNr aXBfZW5kOwp9OwoKY2xhc3MgQ2ZnTWF0IHsKcHVibGljOgogICAgaW50CQltYXhfZmFpbHVyZXM7 CSAKCiAgICBCb29sZWFuCWRhdGV0aW1lOwogICAgQm9vbGVhbglzaW1wbGltYXRpYzsKICAgIEJv b2xlYW4JYWRqdXN0X3JhaWxzOwogICAgQm9vbGVhbglzbWVtYV9tb2RlOwoKICAgIEJvb2xlYW4J bm9fZmlyc3RfYm9hcmQ7CiAgICBCb29sZWFuCXJldmlld19vdmVybGltaXQ7CiAgICBjaGFyCXBy aW50ZXJbMTI4IF07CiAgICBCb29sZWFuCWZpbGxlcjE7CiAgICBCb29sZWFuCWZpbGxlcjI7Cn07 CgogCgoKCmNsYXNzIENmZ01hdDIgewpwdWJsaWM6CiAgICBCb29sZWFuCWFkZF9saW5lX3ByZWZp eDsKICAgIGNoYXIJdXNlcl9saW5lX3ByZWZpeFsxNl07CiAgICBCb29sZWFuCWZpbGxlcjE7CiAg ICBCb29sZWFuCWZpbGxlcjI7CiAgICBCb29sZWFuCWZpbGxlcjM7Cn07CgogCgoKY29uc3QgdV9p bnQga01pbkNhbVdpZHRoID0gNTEyOwoKY2xhc3MgQ2ZnQ2FtZXJhIHsKcHVibGljOgogICAgQm9v bGVhbglzaW5nbGVzcGVlZDsKICAgIEJvb2xlYW4JZmlsbGVyMTsKICAgIEJvb2xlYW4JZmlsbGVy MjsKICAgIEJvb2xlYW4JZmlsbGVyMzsKCiAgICBpbnQJCW51bTsKICAgIHVfaW50CXdpZHRoOwog ICAgdV9pbnQJb3ZlcmxhcDsKICAgIHVfaW50CW9yaWVudGF0aW9uOwogICAgdV9pbnQJaG9yaXpv bnRhbF9mb3Y7CiAgICB1X2ludAlodl9yYXRpbzsKfTsKCmNsYXNzIENmZ0NhbWVyYTIgewpwdWJs aWM6CiAgICBCb29sZWFuCXZhcmlhYmxlX2xpZ2h0aW5nOwogICAgQm9vbGVhbglpc19wYW5hc29u aWM7Cn07CgpjbGFzcyBDZmdDYW1lcmEzIHsKcHVibGljOgogICAgQm9vbGVhbglyZXRha2VfYmFk c25hcHM7CiAgICBCb29sZWFuCWZpbGxlcjE7Cn07CgpjbGFzcyBDZmdDYW1lcmE0IHsKcHVibGlj OgogICAgbG9uZyB1bnVzZWRfZmlsbGVyOwkJIAogICAgIAoKCgoKCn07CgpjbGFzcyBDZmdDYW1l cmE1IHsKcHVibGljOgogICAgQm9vbGVhbiBfaXNfZGlnaXRhbDsKICAgIEJvb2xlYW4gX2lzX2Nv bG9yOwogICAgQm9vbGVhbiBmaWxsZXJbMl07CQkgCn07CgpjbGFzcyBDZmdDYW1lcmE2IHsKcHVi bGljOgogICAgQm9vbGVhbiBfaXNfY2FtZXJhbGluazsJIAogICAgQm9vbGVhbiBmaWxsZXJbM107 CQkgCn07CgpjbGFzcyBDZmdTcGVjaWFsM0QgewpwdWJsaWM6CiAgICB1X3Nob3J0IExMVF9MVVRf VmFsdWU7CSAKICAgIHNob3J0IHdpbl9iYXNlX2Fkal9BOwkgCgogICAgc2hvcnQgd2luX2Jhc2Vf YWRqX0I7CSAKICAgIHNob3J0IHdpbl9iYXNlX2Fkal9DOwkgCgogICAgc2hvcnQgaGVpZ2h0X1pf Y29ycjsJIAogICAgc2hvcnQgc3RhcnRfc3RvcF8zZDsJIAoKICAgIHNob3J0IGxlZnRfb2Zmc2V0 OwkJIAogICAgc2hvcnQgcmlnaHRfb2Zmc2V0OwkJIAoKICAgIGxvbmcgIHJlc2VydmVkWzJdOwkJ IAp9OwoKIAoKCmNvbnN0CWludAlrU2hvd01vZGVPblNoaWZ0CT0gMDsKY29uc3QJaW50CWtTaG93 TW9kZUZha2VBbGdvU2hpZnQJPSAxOwpjb25zdAlpbnQJa1Nob3dNb2RlQ29sb3JTaGlmdAk9IDI7 CmNvbnN0CWludAlrU2hvd01vZGVCV1NoaWZ0CT0gMzsKY29uc3QJaW50CWtTaG93TW9kZUZyYW1l U2hpZnQJPSA0OwoKY29uc3QJaW50CWtTaG93TW9kZU9uCQk9IDEgPDwga1Nob3dNb2RlT25TaGlm dDsKY29uc3QJaW50CWtTaG93TW9kZUZha2VBbGdvCT0gMSA8PCBrU2hvd01vZGVGYWtlQWxnb1No aWZ0Owpjb25zdAlpbnQJa1Nob3dNb2RlQ29sb3IJCT0gMSA8PCBrU2hvd01vZGVDb2xvclNoaWZ0 Owpjb25zdAlpbnQJa1Nob3dNb2RlQlcJCT0gMSA8PCBrU2hvd01vZGVCV1NoaWZ0OwoKY2xhc3Mg Q2ZnU3lzcGFyIHsKcHVibGljOgogICAgY2hhcgljb21wZmlsZVsxMDI0IF07CSAKCiAgICBCb29s ZWFuCWxpZ2h0ZWRfZmlkdWNpYWxzOwogICAgQm9vbGVhbglzdGFydHN0b3A7CiAgICBCb29sZWFu CXJldmlldzsKICAgIEJvb2xlYW4JYmFkc25hcDsKCiAgICBCb29sZWFuCWNvbXBlbnNhdGlvbjsJ CSAKICAgIEJvb2xlYW4Jc2hvd21vZGU7CiAgICBCb29sZWFuCXNob3dtb2RlX2Zha2VfYWxnbzsJ IAogICAgQm9vbGVhbglyZWluc3BlY3Rfc25hcHM7CgogICAgc2hvcnQJc2hvd21vZGVfZnJhbWU7 CQkgCiAgICBzaG9ydAliYWRzbmFwX2ZyYW1lczsKICAgIHNob3J0CWJhZHNuYXBfaXRlbXM7CiAg ICBzaG9ydAlyZWluc3BlY3Rfc25hcHNfbnNuYXBzOwoKICAgIGludAkJcGFya3Bvc194OwogICAg aW50CQlwYXJrcG9zX3k7Cn07Cgpjb25zdAlpbnQJa0Nvb3JNb2RlRWRpdAkJPSAwOwpjb25zdAlp bnQJa0Nvb3JNb2RlSW5zcGVjdAk9IDE7CmNvbnN0CWludAlrQ29vck1vZGVJZGxlCQk9IDI7CmNv bnN0CWludAlrQ29vck1vZGVDbGVhcgkJPSAzOwoKY29uc3QJaW50CWtNYXRNb2RlSG9sZAkJPSAw Owpjb25zdAlpbnQJa01hdE1vZGVSZWplY3QJCT0gMTsKY29uc3QJaW50CWtNYXRNb2RlUGFzcwkJ PSAyOwpjb25zdAlpbnQJa01hdE1vZGVTaW11bGF0ZQk9IDM7CgpjbGFzcyBDZmdNb2RlIHsKcHVi bGljOgogICAgaW50CWNvb3JkaW5hdG9yOwogICAgaW50IG1hdGVyaWFsOwogICAgaW50IGF1dG9o b21lOwkJCSAKCiAgICBCb29sZWFuIGJvdHRvbXNpZGU7CiAgICBCb29sZWFuCWZpbGxlcjE7CiAg ICBCb29sZWFuCWZpbGxlcjI7CiAgICBCb29sZWFuCWZpbGxlcjM7Cn07CgpjbGFzcyBDZmdTcGNn ZW4gewpwdWJsaWM6CiAgICBCb29sZWFuCWFwcGVuZDsJCQkgCiAgICBCb29sZWFuCWZsYXZvcl9h c19kaXI7CQkgCiAgICBCb29sZWFuCWFwcGVuZF9mbGF2b3I7CQkgCiAgICBCb29sZWFuCXN0YW5k YXJkOwkJIAoKICAgIEJvb2xlYW4JcmVwb3J0X2luX2ZpbGU7CQkgCiAgICBCb29sZWFuCXJlcG9y dF9vbl93aW47CQkgCiAgICBCb29sZWFuCXJlcG9ydF9vbl9wcmludGVyOwkgCiAgICBCb29sZWFu CXNhdmVfcmVwb3J0X29uX2Vycm9yOwkgCgogICAgQm9vbGVhbgloYWx0X29uX2Vycm9yOwogICAg Qm9vbGVhbglhbGxvd19yZXZpZXdfcGFzczsKICAgIEJvb2xlYW4JcmVwb3J0X292ZXJyaWRlczsK ICAgIEJvb2xlYW4Jc3RvY2tfbnVtYmVyOwoKICAgIEJvb2xlYW4JcHJpbnRfcGluczsKICAgIEJv b2xlYW4Jc3VtbWFyaXplX2l0ZW1zOwogICAgQm9vbGVhbglydW5fc2NyaXB0OwogICAgY2hhcglz Y3JpcHRfZmlsZW5hbWVbMTI4XTsKCgogICAgIAoKCiAgICBCb29sZWFuCXNob3dfcGxvdDsKCiAg ICBCb29sZWFuCWlnc19sZXZlbDI7CiAgICBCb29sZWFuCWlnc19sZXZlbDE7CiAgICBCb29sZWFu CWlnc19ncm91cHM7CiAgICBCb29sZWFuCWlnc19pdGVtczsKCiAgICBpbnQJCXBpbl9saW1pdDsK ICAgIGludAkJcGFydF9saW1pdDsKfTsKCmNsYXNzIENmZ1NwY2dlbjIgewpwdWJsaWM6CiAgICBC b29sZWFuCXNob3dfcmV2aWV3X3Bhc3M7CiAgICBCb29sZWFuCW5vX3N1bW1hcnk7Cn07CgpjbGFz cyBDZmdTcGNnZW4zIHsKcHVibGljOgogICAgQm9vbGVhbglydW5fZGVmZWN0Owp9OwoKY2xhc3Mg Q2ZnU3BjZ2VuNCB7CnB1YmxpYzoKICAgIEJvb2xlYW4gCXJ1bl9yZXBhaXJfc2NyaXB0OwogICAg Y2hhciAJcmVwYWlyX3NjcmlwdF9uYW1lWzEyOF07CiAgICBCb29sZWFuCWZpbGxlcjE7Cn07Cgpj bGFzcyBDZmdTcGNnZW41IHsKcHVibGljOgogICAgQm9vbGVhbglhdXRvX3NhdmVfc3RhdGlzdGlj czsKICAgIEJvb2xlYW4JbWV0cmljX3VuaXRzOyAgCgogICAgc2hvcnQJYXV0b19zYXZlX2hvdXJz OwogICAgc2hvcnQJYXV0b19zYXZlX21pbnV0ZXM7Cn07CgogCgoKY29uc3QgbG9uZyBrTWluQ2Ft RkJzaXplID0gNEwgKiAxMDI0TCAqIDEwMjRMOwoKY2xhc3MgQ2ZnSW1hZ2VNZW1vcnkgewpwdWJs aWM6CiAgICBsb25nCXNpemU7Cn07CgpjbGFzcyBDZmdTdGFnZTMgewpwdWJsaWM6CiAgICBCb29s ZWFuCWR1bW15X3N0YWdlOwp9OwoKY2xhc3MgQ2ZnU3RhZ2U0IHsKcHVibGljOgogICAgZV9maWR1 X2xvY2F0aW9uICAgX2ZpZHVfbG9jYXRpb247CgogICAgQm9vbGVhbglfaGFzXzNzdGFnZV9jb252 ZXlvcjsJIAogICAgQm9vbGVhbglfdXNpbmdfZXh0ZXJuYWxfcmV2aWV3OwkgCiAgICBCb29sZWFu CUNmZ1N0YWdlNF9maWxsZXIxOwkgCiAgICBCb29sZWFuCUNmZ1N0YWdlNF9maWxsZXIyOwkgCn07 CgpjbGFzcyBDZmdTeXNwYXIyIHsKcHVibGljOgogICAgbG9uZwlob21lX3NvZnRfbGltaXQ7CQp9 OwoKY2xhc3MgQ2ZnTGFzZXIgewpwdWJsaWM6CiAgICBCb29sZWFuCWhhc19sYXNlcjsKICAgIEJv b2xlYW4JZmlsbGVyMTsKICAgIEJvb2xlYW4JZmlsbGVyMjsKICAgIEJvb2xlYW4JZmlsbGVyMzsK CiAgICBmbG9hdAloZWlnaHQ7CiAgICBmbG9hdAl4X2hvbWU7CiAgICBmbG9hdAl5X2hvbWU7CiAg ICBpbnQJCXhfbW90b3JfaG9tZTsKICAgIGludAkJeV9tb3Rvcl9ob21lOwp9OwoKY2xhc3MgQ2Zn TGFzZXIyIHsKcHVibGljOgogICAgaW50CQlpbml0aWFsX3ZlbG9jaXR5OwogICAgaW50CQlmaW5h bF92ZWxvY2l0eTsKICAgIGludAkJYWNjZWxlcmF0aW9uOwp9OwoKY2xhc3MgQ2ZnU3lzdGVtIHsK cHVibGljOgogICAgQm9vbGVhbglpc19zb2xhcmlzOwogICAgQm9vbGVhbgloYXNfc2J1czsKICAg IEJvb2xlYW4JaXNfcnRwOwogICAgQm9vbGVhbgloYXNfMzJiaXRfZGlvOwogICAgaW50CQltb3Rv cl9kcml2ZXI7CSAKfTsKCmNsYXNzIEluc3BlY3Rpb25PcHRpb25zIHsKcHVibGljOgogICAgQm9v bGVhbglzYXZlX2FsbF9mYXVsdHM7Cn07CgpjbGFzcyBJbnNwZWN0aW9uT3B0aW9uczIgewpwdWJs aWM6CiAgICBzaG9ydAludW1fcmVzZXJ2ZWRfZnJhbWVzOwp9OwoKdHlwZWRlZiBlbnVtICB7IGtS aUhhcmR3YXJlLCBrUmlPbiwga1JpT2ZmIH0gZVJlYWRvdXRJbmhpYml0T3B0aW9uczsKCmNsYXNz IEluc3BlY3Rpb25PcHRpb25zMyB7CnB1YmxpYzoKICAgIHNob3J0ICByaV9vcHRpb25zOwogICAg c2hvcnQgIGZpbGxlcjsKfTsKCmNsYXNzIENmZ1JhbWRhYyB7CnB1YmxpYzoKICAgIGludAkJaGk7 CiAgICBpbnQJCWxvdzsKfTsKCmNsYXNzIENmZ0xpbmVhciB7CnB1YmxpYzoKICAgIGludAkJZW5j b2Rlcl9yZXNvbHV0aW9uOwogICAgaW50CQlpX3BpdGNoRDsJIAogICAgaW50CQlpX2ZlZWRiYWNr OwkgCiAgICBpbnQJCWlfY250cmV2OwkgCiAgICBpbnQJCWZpZHVfYWNjZWw7CiAgICBpbnQJCWZp ZHVfdmVsOwp9OwoKY2xhc3MgQ2ZnQXV0b05ldHdvcmtlciB7CnB1YmxpYzoKICAgIGNoYXIJaG9z dG5hbWVbMTI4XTsKICAgIGNoYXIJdXNlcm5hbWVbNjRdOwogICAgY2hhcglwYXNzd29yZFs2NF07 CiAgICBjaGFyCWRhdGFiYXNlbmFtZVs2NF07Cn07Cgp0eXBlZGVmIGVudW0geyBrTm9EYXRhYmFz ZSwga09yYWNsZSwga015U3FsIH0gZURhdGFiYXNlVHlwZXM7CgpjbGFzcyBDZmdEYXRhYmFzZVR5 cGUgewpwdWJsaWM6CiAgICBsb25nCWRiX3R5cGU7Cn07CgpjbGFzcyBDZmdTcGNnZW5VREMgewpw dWJsaWM6CiAgICBCb29sZWFuCWVuYWJsZV91ZGM7CiAgICBCb29sZWFuCXVzZV91ZGNfdGFibGU7 CiAgICBCb29sZWFuCWp1bmtbMl07Cn07Cgpjb25zdCBpbnQga0lmaWNzTWF4VHNuYW1lID0gMjA7 CmNvbnN0IGludCBrSWZpY3NNYXhNQUNISU5FID0gNjsKY29uc3QgaW50IGtRc3RhdHNNYXhIb3N0 bmFtZSA9IDI1NjsKY29uc3QgaW50IGtRc3RhdHNNYXhQcm9jZXNzU3RlcCA9IDgwOwpjb25zdCBp bnQga0ZDX01heE9waWQgPSA0Owpjb25zdCBpbnQga0ZDX01heFVpZCA9IDEwOwpjb25zdCBpbnQg a0ZDX01heFNoaWZ0ID0gMTsKCnR5cGVkZWYgZW51bSB7IGtTZXR0aW5nT2ssIGtCYWRMZW5ndGgs IGtCYWRDaGFyYWN0ZXIgfSBlU3RyaW5nRXJyb3JzIDsKCmNsYXNzIENmZ0ZhY3RvcnlDb250cm9s IHsKcHVibGljOgogICAgQm9vbGVhbglpZmljc19vbjsKICAgIEJvb2xlYW4gCWVuZ19kYl9vbjsK ICAgIEJvb2xlYW4gCXVzZXJfcHJvbXB0X29uOwogICAgQm9vbGVhbiAJZmlsbGVyMTsKCiAgICBj aGFyIAlpZmljc19UU05hbWVbNjRdOwogICAgY2hhciAJaWZpY3NfTWFjaGluZVs2NF07CgogICAg Y2hhciAJZW5nX2RiX2hvc3RuYW1lWzI1Nl07CiAgICBjaGFyCWVuZ19kYl9Qcm9jZXNzU3RlcFsx MDBdOwoKICAgIGNoYXIgCU9waWRbMTAwXTsKICAgIGNoYXIJVWlkWzEwMF07CiAgICBjaGFyIAlT aGlmdFsxMDBdOwoKICAgIGxvbmcJaWZpY3NfcG9ydDsKICAgIGxvbmcJaWZpY3NfdGltZW91dDsK fTsKCmNsYXNzIENmZ0hlaWdodE9mZnNldCB7CnB1YmxpYzoKICAgIGZsb2F0CW9mZnNldDsKfTsK CmNsYXNzIGNvbmZpZ3VyYXRpb24gewpwcml2YXRlOgogICAgQ2ZnVmlzaW9uS2V5IHZpc2lvbmtl eTsJCSAKICAgICAKCgogICAgQ2ZnTWF0CW1hdDsKICAgIENmZ0JhcmNvZGUJYmFyY29kZTsKICAg IENmZ1NwY2dlbglzcGNnZW47CiAgICBDZmdNb2RlCW1vZGU7CiAgICBDZmdDYW1lcmEJY2FtZXJh OwogICAgQ2ZnU3lzcGFyCXN5c3BhcjsKICAgIGludAkJYXhpczsJCQkgCiAgICBJbmRleGVyCXN0 YWdlW2tNYXhTdGFnZXNdOwkgCiAgICBJbmRleGVyCSpjdXJfc3RhZ2U7CQkgCiAgICBaZXRhCW1v dG9yc1trTWF4U3RhZ2VzXTsJIAogICAgWmV0YQkqY3VyX3pldGE7CQkgCiAgICBCb29sZWFuCWNo YW5nZWQ7CiAgICAgCgoKICAgIEluc3BlY3Rpb25PcHRpb25zCWluc3Bfb3B0aW9uczsJIAogICAg Q2ZnU3BjZ2VuMglzcGNnZW4yOwogICAgQ2ZnQ2FtZXJhMgljYW1lcmEyOwogICAgQ2ZnU3RhZ2Uy CWR1bW15X3N0YWdlOwkJIAogICAgIAoKCiAgICBDZmdCYXJjb2RlMiBiYXJjb2RlMjsKICAgIENm Z0NhbWVyYTMJY2FtZXJhMzsKICAgICAKCgogICAgQ2ZnU3RhZ2UyCXN0YWdlMltrTWF4U3RhZ2Vz XTsJIAogICAgc2hvcnQJZmlsbGVyOwkJCSAKICAgIENmZ1N0YWdlMgkqY3VyX3N0YWdlMjsJCSAK ICAgIENmZ1NwY2dlbjMJc3BjZ2VuMzsKICAgIENmZ1N0YWdlMyAJc3RhZ2UzOwkJCSAKICAgIENm Z1NwY2dlbjQgIHNwY2dlbjQ7CQkgCiAgICBDZmdMYXNlcglsYXNlcjsJCQkgCiAgICBJbnNwZWN0 aW9uT3B0aW9uczIJaW5zcF9vcHRpb25zMjsJIAogICAgQ2ZnU3BjZ2VuNQlzcGNnZW41OwkJIAog ICAgIAoKCiAgICBDZmdTeXN0ZW0Jc3lzdGVtOwogICAgIAoKCiAgICBDZmdSYW1kYWMJcmFtZGFj X2RhdGFba052Y3B1XTsKICAgIENmZ0xpbmVhcglsaW5lYXJba01heFN0YWdlc107CiAgICBDZmdM aW5lYXIJKmN1cl9saW5lYXI7CiAgICAgCgoKICAgIENmZ0NhbWVyYTQgCWNhbWVyYTQ7CiAgICAg CgoKICAgIENmZ01hdDIJCW1hdDI7CiAgICBDZmdJbWFnZU1lbW9yeQlpbWFnZW1lbW9yeTsKICAg IEluc3BlY3Rpb25PcHRpb25zMyAgaW5zcF9vcHRpb25zMzsKICAgIENmZ0xhc2VyMgkJbGFzZXIy OwkJIAogICAgQ2ZnU3RhZ2U0CQlzdGFnZTQ7CiAgICBDZmdDYW1lcmE1CQljYW1lcmE1OwogICAg IAoKCiAgICBDZmdTcGVjaWFsM0QJc3BlY2lhbDNkOwogICAgQ2ZnQXV0b05ldHdvcmtlcglhdXRv X25ldHdvcmtlcjsKICAgICAKCgogICAgQ2ZnU3lzcGFyMgkJc3lzcGFyMjsKICAgICAKCgogICAg Q2ZnRGF0YWJhc2VUeXBlCWRhdGFiYXNlX3R5cGU7CiAgICAgCgoKICAgIENmZ0ZhY3RvcnlDb250 cm9sCWZhY3RvcnlfY29udHJvbDsKICAgIENmZ1NwY2dlblVEQwl1ZGM7ICAKICAgICAKCgogICAg Q2ZnSGVpZ2h0T2Zmc2V0CWhlaWdodFsyXTsJIAogICAgIAoKCiAgICBDZmdDYW1lcmE2CQljYW1l cmE2OwogICAgIAoKCgogICAgc3RhdGljIGNvbmZpZ3VyYXRpb24gKglfc2VsZjsJIAogICAgIAoK ICAgICAKCgoKCgogICAgdm9pZCByZXNvdXJjZXMoQm9vbGVhbiByZWFkLCBjb25zdCB2b2lkICpw YXJlbnQpOwoKcHVibGljOgogICAgY29uZmlndXJhdGlvbihib29sIGlzX2dsb2JhbCk7CiAgICBz dGF0aWMgY29uZmlndXJhdGlvbiAqIGdldCgpOwoKICAgIHZvaWQJdXBkYXRlKCk7CiAgICB2b2lk CXNlbmRfdXBkYXRlcygpOwogICAgaW50CQlmaW5kX2JhZF9kYXRhKCk7CiAgICBpbnQJCWZpbmRf YmFkXzNEX2RhdGEoKTsKICAgIGludAkJZmluZF9iYWRfY2FtZXJhX2RhdGEoKTsKICAgIGludAkJ ZmluZF9iYWRfbGFzZXJfZGF0YSgpOwogICAgaW50CQlmaW5kX2JhZF9zcGNfZGF0YSgpOwogICAg Y29uc3QgY2hhciAqZ2V0X2JhZF9kYXRhX21lc3NhZ2UoaW50KSBjb25zdDsKCiAgICBib29sCXdy aXRlKCk7CiAgICB2b2lkCXdyaXRlX3Jlc291cmNlcygpOwogICAgQm9vbGVhbglrZXlfY2hlY2so aW50KTsKICAgICAKCgoKICAgIHZvaWQJcmVhZF9yZXNvdXJjZXMoY29uc3Qgdm9pZCAqcGFyZW50 KTsKICAgIEJvb2xlYW4JY2ZnX2NoYW5nZWQoKSBjb25zdDsKICAgIHZvaWQJY2ZnX2NoYW5nZWQo Qm9vbGVhbik7CgogICAgIAoKCiAgICB2b2lkCXZpc2lvbmtleV9jcnlwdGVkKGNoYXIgKik7CiAg ICB2b2lkCXZpc2lvbmtleV9kYXRlKGNoYXIgKik7CiAgICB2b2lkCXZpc2lvbmtleV9rZXkoY2hh ciAqKTsKCiAgICB2b2lkCWdldF92aXNpb25rZXlfZGF0YShzdGQ6OnN0cmluZyYgY3J5cHQsIHN0 ZDo6c3RyaW5nJiBkYXRlLCBzdGQ6OnN0cmluZyYga2V5KTsKCiAgICB2b2lkCXNldF92aXNpb25r ZXlfZGF0YShjaGFyICpjcnlwdCwgY2hhciAqZGF0ZSwgY2hhciAqa2V5KTsKICAgIHVfbG9uZwl2 YWxpZF92aXNpb25rZXkoKTsKCiAgICAgCgoKICAgIEJvb2xlYW4JYmFyY29kZXMoKSBjb25zdDsK ICAgIEJvb2xlYW4JYmFyY29kZV9kaXNwbGF5KCkgY29uc3Q7CiAgICBpbnQJCWJhcmNvZGVfcmVt aW5kZXIoKSBjb25zdDsKICAgIGludAkJYmFyY29kZV9sZW5ndGgodm9pZCkgY29uc3Q7CiAgICBp bnQJCWJhcmNvZGVfc2lnX2xlbmd0aCh2b2lkKSBjb25zdDsKICAgIGNvbnN0IGNoYXIqCWJhcmNv ZGVfZmlsZW5hbWUodm9pZCkgY29uc3Q7CiAgICBCb29sZWFuCWJhcmNvZGVfbWF0Y2hfZGF0YWJh c2UoKSBjb25zdDsKICAgIGludAkJYmFyY29kZV9ibGlua3JhdGUoKTsKICAgIEJvb2xlYW4JYmFy Y29kZV9oYXNfZHVhbF9yZWFkZXJzKCkgY29uc3Q7CiAgICBzaG9ydAliYXJjb2RlX3NraXBfc3Rh cnQoKSBjb25zdDsKICAgIHNob3J0CWJhcmNvZGVfc2tpcF9lbmQoKSBjb25zdDsKICAgIEJvb2xl YW4JYmFyY29kZV9jYW5fcXVldWUoKSBjb25zdDsKCiAgICB2b2lkCWJhcmNvZGVzKEJvb2xlYW4p OwogICAgdm9pZAliYXJjb2RlX2Rpc3BsYXkoQm9vbGVhbik7CiAgICB2b2lkCWJhcmNvZGVfbGVu Z3RoKGludCk7CiAgICB2b2lkCWJhcmNvZGVfc2lnX2xlbmd0aChpbnQpOwogICAgdm9pZAliYXJj b2RlX2JsaW5rcmF0ZShpbnQpOwogICAgdm9pZAliYXJjb2RlX3JlbWluZGVyKGludCk7CiAgICB2 b2lkCWJhcmNvZGVfZmlsZW5hbWUoY29uc3QgY2hhciAqKTsKICAgIHZvaWQJYmFyY29kZV9tYXRj aF9kYXRhYmFzZShCb29sZWFuKTsKICAgIHZvaWQJYmFyY29kZV9oYXNfZHVhbF9yZWFkZXJzKEJv b2xlYW4pOwogICAgdm9pZAliYXJjb2RlX3NraXBfc3RhcnQoc2hvcnQpOwogICAgdm9pZAliYXJj b2RlX3NraXBfZW5kKHNob3J0KTsKICAgIHZvaWQJYmFyY29kZV9jYW5fcXVldWUoQm9vbGVhbik7 CgogICAgIAoKCiAgICBpbnQJCW1hdF9tYXhfZmFpbHVyZXMoKSBjb25zdDsKICAgIEJvb2xlYW4J bWF0X2RhdGV0aW1lKCkgY29uc3Q7CiAgICBCb29sZWFuCW1hdF9zaW1wbGltYXRpYygpIGNvbnN0 OwogICAgQm9vbGVhbgltYXRfYWRqdXN0X3JhaWxzKCkgY29uc3Q7CiAgICBjb25zdCBjaGFyKglt YXRfcHJpbnRlcigpIGNvbnN0OwogICAgQm9vbGVhbgltYXRfcmV2aWV3X292ZXJsaW1pdCgpIGNv bnN0OwogICAgQm9vbGVhbgltYXRfc21lbWFfbW9kZSgpIGNvbnN0OwogICAgQm9vbGVhbgltYXRf bm9fZmlyc3RfYm9hcmQoKSBjb25zdDsKICAgIEJvb2xlYW4JbWF0X2FkZF9saW5lX3ByZWZpeCgp IGNvbnN0OwogICAgY29uc3QgY2hhciogbWF0X3VzZXJfcHJlZml4KCkgY29uc3Q7CgogICAgdm9p ZAltYXRfZGF0ZXRpbWUoQm9vbGVhbik7CiAgICB2b2lkCW1hdF9zaW1wbGltYXRpYyhCb29sZWFu KTsKICAgIHZvaWQJbWF0X2FkanVzdF9yYWlscyhCb29sZWFuKTsKICAgIHZvaWQJbWF0X3ByaW50 ZXIoY29uc3QgY2hhciAqKTsKICAgIHZvaWQJbWF0X21heF9mYWlsdXJlcyhpbnQpOwogICAgdm9p ZAltYXRfcmV2aWV3X292ZXJsaW1pdChCb29sZWFuKTsKICAgIHZvaWQJbWF0X3NtZW1hX21vZGUo Qm9vbGVhbik7CiAgICB2b2lkCW1hdF9ub19maXJzdF9ib2FyZChCb29sZWFuKTsKICAgIHZvaWQJ bWF0X2FkZF9saW5lX3ByZWZpeChCb29sZWFuKTsKICAgIHZvaWQJbWF0X3VzZXJfcHJlZml4KGNv bnN0IGNoYXIgKnZhbHVlKTsKCiAgICAgCgoKICAgIEJvb2xlYW4Jc3BjX2ZsYXZvcl9hc19kaXIo KSBjb25zdDsKICAgIEJvb2xlYW4Jc3BjX2FwcGVuZCgpIGNvbnN0OwogICAgQm9vbGVhbglzcGNf YXBwZW5kX2ZsYXZvcigpIGNvbnN0OwogICAgQm9vbGVhbglzcGNfbm9ybWFsKCkgY29uc3Q7Cgog ICAgIAoKCiAgICBCb29sZWFuCXNwY190b19wcmludGVyKCkgY29uc3Q7CiAgICBCb29sZWFuCXNw Y190b19jb25zb2xlKCkgY29uc3Q7CiAgICBCb29sZWFuCXNwY190b19maWxlKCkgY29uc3Q7CiAg ICBCb29sZWFuCXNwY19zYXZlX3JlcG9ydF9vbl9lcnJvcigpIGNvbnN0OwoKICAgICAKCgogICAg Qm9vbGVhbglzcGNfc3RvcF9vbl9mYWlsdXJlKCk7CgogICAgIAoKCiAgICBpbnQJCXNwY19waW5f bGltaXQoKSBjb25zdDsKICAgIGludAkJc3BjX3BhcnRfbGltaXQoKSBjb25zdDsKCiAgICAgCgoK ICAgIEJvb2xlYW4Jc3BjX2lnc19sZXZlbDIoKSBjb25zdDsKICAgIEJvb2xlYW4Jc3BjX2lnc19s ZXZlbDEoKSBjb25zdDsKICAgIEJvb2xlYW4Jc3BjX2lnc19ncm91cHMoKSBjb25zdDsKICAgIEJv b2xlYW4Jc3BjX2lnc19pdGVtcygpIGNvbnN0OwogICAgY29uc3QgY2hhcioJc3BjX3NjcmlwdF9m aWxlbmFtZSgpIGNvbnN0OwogICAgQm9vbGVhbglzcGNfcGxvdF9vdXRwdXQoKSBjb25zdDsKICAg IEJvb2xlYW4Jc3BjX3J1bl9kZWZlY3QoKSBjb25zdDsKICAgIEJvb2xlYW4Jc3BjX3J1bl9zY3Jp cHQoKSBjb25zdDsKICAgIEJvb2xlYW4Jc3BjX3J1bl9yZXBhaXJfc2NyaXB0KCkgY29uc3Q7CiAg ICBjb25zdCBjaGFyKglzcGNfcmVwYWlyX3NjcmlwdF9uYW1lKCkgY29uc3Q7CgogICAgIAoKCiAg ICBCb29sZWFuCXNwY19hbGxvd19yZXZpZXdfdG9fcGFzcygpIGNvbnN0OwogICAgQm9vbGVhbglz cGNfcmVwb3J0X292ZXJyaWRlcygpIGNvbnN0OwogICAgQm9vbGVhbglzcGNfc2ltcGxlX3JlcG9y dCgpIGNvbnN0OwogICAgQm9vbGVhbglzcGNfc3RvY2tfbnVtYmVyKCkgY29uc3Q7CiAgICBCb29s ZWFuCXNwY19wcmludF9waW5zKCkgY29uc3Q7CiAgICBCb29sZWFuCXNwY19zdW1tYXJpemVfaXRl bXMoKSBjb25zdDsKICAgIEJvb2xlYW4Jc3BjX3Nob3dfcmV2aWV3X3Bhc3MoKSBjb25zdDsKICAg IEJvb2xlYW4Jc3BjX25vX3N1bW1hcnkoKSBjb25zdDsKICAgIEJvb2xlYW4Jc3BjX21ldHJpY191 bml0cygpIGNvbnN0OwoKICAgICAKCgogICAgQm9vbGVhbglzcGNfYXV0b19zYXZlX3N0YXRpc3Rp Y3MoKSBjb25zdDsKICAgIHNob3J0CXNwY19hdXRvX3NhdmVfaG91cnMoKSBjb25zdDsKICAgIHNo b3J0CXNwY19hdXRvX3NhdmVfbWludXRlcygpIGNvbnN0OwoKICAgICAKCgogICAgdm9pZAlzcGNf Zmxhdm9yX2FzX2RpcihCb29sZWFuKTsKICAgIHZvaWQJc3BjX2FwcGVuZChCb29sZWFuKTsKICAg IHZvaWQJc3BjX2FwcGVuZF9mbGF2b3IoQm9vbGVhbik7CiAgICB2b2lkCXNwY19ub3JtYWwoQm9v bGVhbik7CiAgICB2b2lkCXNwY190b19wcmludGVyKEJvb2xlYW4pOwogICAgdm9pZAlzcGNfdG9f Y29uc29sZShCb29sZWFuKTsKICAgIHZvaWQJc3BjX3RvX2ZpbGUoQm9vbGVhbik7CiAgICB2b2lk CXNwY19zYXZlX3JlcG9ydF9vbl9lcnJvcihCb29sZWFuKTsKICAgIHZvaWQJc3BjX3N0b3Bfb25f ZmFpbHVyZShCb29sZWFuKTsKICAgIHZvaWQJc3BjX3Bpbl9saW1pdChpbnQpOwogICAgdm9pZAlz cGNfcGFydF9saW1pdChpbnQpOwogICAgdm9pZAlzcGNfc2ltcGxlX3JlcG9ydChCb29sZWFuKTsK ICAgIHZvaWQJc3BjX3JlcG9ydF9vdmVycmlkZXMoQm9vbGVhbik7CiAgICB2b2lkCXNwY19hbGxv d19yZXZpZXdfcGFzcyhCb29sZWFuKTsKICAgIHZvaWQJc3BjX3Nob3dfcmV2aWV3X3Bhc3MoQm9v bGVhbik7CiAgICB2b2lkCXNwY19zdG9ja19udW1iZXIoQm9vbGVhbik7CiAgICB2b2lkCXNwY19w cmludF9waW5zKEJvb2xlYW4pOwogICAgdm9pZAlzcGNfc3VtbWFyaXplX2l0ZW1zKEJvb2xlYW4p OwogICAgdm9pZAlzcGNfaWdzX2xldmVsMihCb29sZWFuKTsKICAgIHZvaWQJc3BjX2lnc19sZXZl bDEoQm9vbGVhbik7CiAgICB2b2lkCXNwY19pZ3NfZ3JvdXBzKEJvb2xlYW4pOwogICAgdm9pZAlz cGNfaWdzX2l0ZW1zKEJvb2xlYW4pOwogICAgdm9pZAlzcGNfcGxvdF9vdXRwdXQoQm9vbGVhbik7 CiAgICB2b2lkCXNwY19ydW5fZGVmZWN0KEJvb2xlYW4pOwogICAgdm9pZAlzcGNfcnVuX3Njcmlw dChCb29sZWFuKTsKICAgIHZvaWQJc3BjX3NjcmlwdF9maWxlbmFtZShjb25zdCBjaGFyICopOwog ICAgdm9pZAlzcGNfbm9fc3VtbWFyeShCb29sZWFuKTsKICAgIHZvaWQJc3BjX3J1bl9yZXBhaXJf c2NyaXB0KEJvb2xlYW4pOwogICAgdm9pZAlzcGNfcmVwYWlyX3NjcmlwdF9uYW1lKGNvbnN0IGNo YXIgKik7CiAgICB2b2lkCXNwY19hdXRvX3NhdmVfc3RhdGlzdGljcyhCb29sZWFuKTsKICAgIHZv aWQJc3BjX2F1dG9fc2F2ZV9ob3VycyhzaG9ydCk7CiAgICB2b2lkCXNwY19hdXRvX3NhdmVfbWlu dXRlcyhzaG9ydCk7CiAgICB2b2lkCXNwY19tZXRyaWNfdW5pdHMoQm9vbGVhbik7CgogICAgIAoK CiAgICBpbnQJCW1vZGVfY29vcmRpbmF0b3IoKSBjb25zdDsKICAgIGludAkJbW9kZV9tYXRlcmlh bCgpIGNvbnN0OwogICAgQm9vbGVhbgltb2RlX2JvdHRvbXNpZGUoKSBjb25zdDsKICAgIGludAkJ bW9kZV9hdXRvaG9tZSgpIGNvbnN0OwoKICAgIHZvaWQJbW9kZV9jb29yZGluYXRvcihpbnQpOwog ICAgdm9pZAltb2RlX21hdGVyaWFsKGludCk7CiAgICB2b2lkCW1vZGVfYm90dG9tc2lkZShCb29s ZWFuKTsKICAgIHZvaWQJbW9kZV9hdXRvaG9tZShpbnQpOwoKICAgICAKCgogICAgaW50CQljYW1l cmFfbnVtKCkgY29uc3Q7CiAgICBCb29sZWFuCWNhbWVyYV92YXJpYWJsZV9saWdodGluZygpIGNv bnN0OwogICAgQm9vbGVhbgljYW1lcmFfaXNfcGFuYXNvbmljKCkgY29uc3Q7CiAgICBCb29sZWFu CWNhbWVyYV9zaW5nbGVzcGVlZCgpIGNvbnN0OwogICAgaW50CQljYW1lcmFfb3JpZW50YXRpb24o KSBjb25zdDsKICAgIHVfaW50CWNhbWVyYV93aWR0aCgpIGNvbnN0OwogICAgdV9pbnQJY2FtZXJh X2hvcml6b250YWxfZm92KCkgY29uc3Q7CiAgICB1X2ludAljYW1lcmFfb3ZlcmxhcCgpIGNvbnN0 OwogICAgdV9pbnQJY2FtZXJhX2h2X3JhdGlvKCkgY29uc3Q7CiAgICBCb29sZWFuCWNhbWVyYV9y ZXRha2VfYmFkc25hcHMoKSBjb25zdDsKICAgIEJvb2xlYW4JY2FtZXJhX2lzX2RpZ2l0YWwoKSBj b25zdDsKICAgIEJvb2xlYW4JY2FtZXJhX2lzX2NvbG9yKCkgY29uc3Q7CiAgICBCb29sZWFuCWNh bWVyYV9pc19jYW1lcmFsaW5rKCkgY29uc3Q7CSAKCiAgICB2b2lkCWNhbWVyYV9zaW5nbGVzcGVl ZChCb29sZWFuKTsKICAgIHZvaWQJY2FtZXJhX3ZhcmlhYmxlX2xpZ2h0aW5nKEJvb2xlYW4pOwog ICAgdm9pZAljYW1lcmFfaXNfcGFuYXNvbmljKEJvb2xlYW4pOwogICAgdm9pZAljYW1lcmFfbnVt KGludCk7CiAgICB2b2lkCWNhbWVyYV93aWR0aCh1X2ludCk7CiAgICB2b2lkCWNhbWVyYV9vdmVy bGFwKHVfaW50KTsKICAgIHZvaWQJY2FtZXJhX29yaWVudGF0aW9uKHVfaW50KTsKICAgIHZvaWQJ Y2FtZXJhX2hvcml6b250YWxfZm92KHVfaW50KTsKICAgIHZvaWQJY2FtZXJhX2h2X3JhdGlvKHVf aW50KTsKICAgIHZvaWQJY2FtZXJhX3JldGFrZV9iYWRzbmFwcyhCb29sZWFuKTsKICAgIHZvaWQJ Y2FtZXJhX2lzX2RpZ2l0YWwoQm9vbGVhbik7CiAgICB2b2lkCWNhbWVyYV9pc19jb2xvcihCb29s ZWFuKTsKICAgIHZvaWQJY2FtZXJhX2lzX2NhbWVyYWxpbmsoQm9vbGVhbik7CSAKICAgICAKCgog ICAgaW50CQlzeXNwYXJfcGFya3Bvc194KCkgY29uc3Q7CiAgICBpbnQJCXN5c3Bhcl9wYXJrcG9z X3koKSBjb25zdDsKICAgIGNvbnN0IGNoYXIqIHN5c3Bhcl9jb21wZmlsZSgpIGNvbnN0OwogICAg Qm9vbGVhbglzeXNwYXJfbGlnaHRlZF9maWR1Y2lhbHMoKSBjb25zdDsKICAgIEJvb2xlYW4Jc3lz cGFyX3N0YXJ0c3RvcCgpIGNvbnN0OwogICAgQm9vbGVhbglzeXNwYXJfcmV2aWV3KCkgY29uc3Q7 CiAgICBCb29sZWFuCXN5c3Bhcl9iYWRzbmFwKCkgY29uc3Q7CiAgICBpbnQJCXN5c3Bhcl9iYWRz bmFwX2ZyYW1lcygpIGNvbnN0OwogICAgaW50CQlzeXNwYXJfYmFkc25hcF9pdGVtcygpIGNvbnN0 OwogICAgQm9vbGVhbglzeXNwYXJfY29tcGVuc2F0aW9uKCkgY29uc3Q7CiAgICBCb29sZWFuCXN5 c3Bhcl9zaG93bW9kZSgpIGNvbnN0OwogICAgQm9vbGVhbglzeXNwYXJfc2hvd21vZGVfZmFrZV9h bGdvKCkgY29uc3Q7CiAgICBpbnQJCXN5c3Bhcl9zaG93bW9kZV9mcmFtZSgpIGNvbnN0OwogICAg bG9uZwlzeXNwYXJfaG9tZV9zb2Z0X2xpbWl0KCkgY29uc3Q7CiAgICBCb29sZWFuCXN5c3Bhcl9y ZWluc3BlY3Rfc25hcHMoKSBjb25zdDsKICAgIGludAkJc3lzcGFyX3JlaW5zcGVjdF9zbmFwc19u c25hcHMoKSBjb25zdDsKCiAgICB2b2lkCXN5c3Bhcl9saWdodGVkX2ZpZHVjaWFscyhCb29sZWFu KTsKICAgIHZvaWQJc3lzcGFyX3N0YXJ0c3RvcChCb29sZWFuKTsKICAgIHZvaWQJc3lzcGFyX3Jl dmlldyhCb29sZWFuKTsKICAgIHZvaWQJc3lzcGFyX2JhZHNuYXAoQm9vbGVhbik7CiAgICB2b2lk CXN5c3Bhcl9wYXJrcG9zX3goaW50KTsKICAgIHZvaWQJc3lzcGFyX3Bhcmtwb3NfeShpbnQpOwog ICAgdm9pZAlzeXNwYXJfYmFkc25hcF9mcmFtZXMoaW50KTsKICAgIHZvaWQJc3lzcGFyX2JhZHNu YXBfaXRlbXMoaW50KTsKICAgIHZvaWQJc3lzcGFyX2NvbXBlbnNhdGlvbihCb29sZWFuKTsKICAg IHZvaWQJc3lzcGFyX3Nob3dtb2RlKEJvb2xlYW4pOwogICAgdm9pZAlzeXNwYXJfc2hvd21vZGVf ZmFrZV9hbGdvKEJvb2xlYW4pOwogICAgdm9pZAlzeXNwYXJfc2hvd21vZGVfZnJhbWUoaW50KTsK ICAgIHZvaWQJc3lzcGFyX2NvbXBmaWxlKGNvbnN0IGNoYXIgKik7CiAgICB2b2lkCXN5c3Bhcl9o b21lX3NvZnRfbGltaXQobG9uZyk7CiAgICB2b2lkCXN5c3Bhcl9yZWluc3BlY3Rfc25hcHMoQm9v bGVhbik7CiAgICB2b2lkCXN5c3Bhcl9yZWluc3BlY3Rfc25hcHNfbnNuYXBzKGludCk7CgogICAg IAoKCiAgICBpbnQJCXN0YWdlX2F4aXMoKSBjb25zdDsKICAgIGludAkJc3RhZ2VfYWNjZWwoKSBj b25zdDsKICAgIGludAkJc3RhZ2VfbWF4dmVsKCkgY29uc3Q7CiAgICBpbnQJCXN0YWdlX21heHBv cygpIGNvbnN0OwogICAgaW50CQlzdGFnZV9kZWxheSgpIGNvbnN0OwogICAgaW50CQlzdGFnZV9z Y2FsZSgpIGNvbnN0OwogICAgaW50CQlzdGFnZV9mZWVkYmFjaygpIGNvbnN0OwogICAgaW50CQlz dGFnZV9jb3VudHNfcmV2KCkgY29uc3Q7CiAgICBpbnQJCXN0YWdlX2Rpc3RhbmNlX3JldigpIGNv bnN0OwogICAgdm9pZAlzdGFnZV9pbmRleGVyKEluZGV4ZXIgKikgY29uc3Q7CiAgICBpbnQJCXN0 YWdlX2ZpZHVfdmVsKCkgY29uc3Q7CiAgICBpbnQJCXN0YWdlX2ZpZHVfYWNjZWwoKSBjb25zdDsK ICAgIGVfZmlkdV9sb2NhdGlvbiBmaWR1X2xvY2F0aW9uKCkgY29uc3Q7CiAgICBCb29sZWFuCWhh c18zc3RhZ2VfY29udmV5b3IoKSBjb25zdDsKICAgIEJvb2xlYW4JdXNpbmdfZXh0ZXJuYWxfcmV2 aWV3KCkgY29uc3Q7CgogICAgQm9vbGVhbgloYXNfZmlsbGVyX3N0YWdlKCkgY29uc3Q7CgogICAg dm9pZAlzdGFnZV9heGlzKGludCk7CiAgICB2b2lkCXN0YWdlX2FjY2VsKGludCk7CiAgICB2b2lk CXN0YWdlX21heHZlbChpbnQpOwogICAgdm9pZAlzdGFnZV9tYXhwb3MoaW50KTsKICAgIHZvaWQJ c3RhZ2VfZGVsYXkoaW50KTsKICAgIHZvaWQJc3RhZ2Vfc2NhbGUoaW50KTsKICAgIHZvaWQJc3Rh Z2VfZmVlZGJhY2soaW50KTsKICAgIHZvaWQJc3RhZ2VfY291bnRzX3JldihpbnQpOwogICAgdm9p ZAlzdGFnZV9kaXN0YW5jZV9yZXYoaW50KTsKICAgIHZvaWQJc3RhZ2VfZmlkdV92ZWwoaW50KTsK ICAgIHZvaWQJc3RhZ2VfZmlkdV9hY2NlbChpbnQpOwogICAgdm9pZAlmaWR1X2xvY2F0aW9uKGVf ZmlkdV9sb2NhdGlvbik7CiAgICB2b2lkCWhhc18zc3RhZ2VfY29udmV5b3IoQm9vbGVhbik7CiAg ICB2b2lkCXVzaW5nX2V4dGVybmFsX3JldmlldyhCb29sZWFuKTsKCiAgICAgCgoKICAgIHZvaWQJ ZW5jb2Rlcl9yZXNvbHV0aW9uKGludCk7CiAgICBpbnQJCWVuY29kZXJfcmVzb2x1dGlvbigpIGNv bnN0OwoKICAgICAKCgogICAgaW50CQl6ZXRhX3dhdmVmb3JtKCkgY29uc3Q7CiAgICBpbnQJCXpl dGFfYWN0aXZlX2RhbXBpbmcoKSBjb25zdDsKICAgIGludAkJemV0YV9lbGVjdHJvbmljX3Zpc2Nv c2l0eSgpIGNvbnN0OwogICAgaW50CQl6ZXRhX2luZHVjdGFuY2UoKSBjb25zdDsKICAgIGludAkJ emV0YV9zdGF0aWNfdG9ycXVlKCkgY29uc3Q7CiAgICBCb29sZWFuCXpldGFfYW50aV9yZXNvbmFu Y2UoKSBjb25zdDsKICAgIGludAkJemV0YV9wb3NfbWFpbl9nYWluX3ZlbCgpIGNvbnN0OwogICAg aW50CQl6ZXRhX3Bvc19tYWluX2dhaW5fZmFjdG9yKCkgY29uc3Q7CiAgICBjb25zdCBaZXRhJiB6 ZXRhX3ZhbHVlcygpIGNvbnN0OwoKICAgIHZvaWQJemV0YV93YXZlZm9ybShpbnQpOwogICAgdm9p ZAl6ZXRhX2FjdGl2ZV9kYW1waW5nKGludCk7CiAgICB2b2lkCXpldGFfZWxlY3Ryb25pY192aXNj b3NpdHkoaW50KTsKICAgIHZvaWQJemV0YV9pbmR1Y3RhbmNlKGludCk7CiAgICB2b2lkCXpldGFf c3RhdGljX3RvcnF1ZShpbnQpOwogICAgdm9pZAl6ZXRhX2FudGlfcmVzb25hbmNlKEJvb2xlYW4p OwogICAgdm9pZAl6ZXRhX3Bvc19tYWluX2dhaW5fdmVsKGludCk7CiAgICB2b2lkCXpldGFfcG9z X21haW5fZ2Fpbl9mYWN0b3IoaW50KTsKCiAgICBCb29sZWFuCWluc3Bfb3B0aW9uX3NhdmVfYWxs X2ZhdWx0cygpIGNvbnN0OwogICAgc2hvcnQJaW5zcF9zYXZlX2FsbF9mYXVsdF9mcmFtZXMoKSBj b25zdDsKICAgIHNob3J0CWluc3BfcmVhZG91dF9pbmhpYml0KCkgY29uc3Q7CgogICAgdm9pZAlp bnNwX29wdGlvbl9zYXZlX2FsbF9mYXVsdHMoQm9vbGVhbik7CiAgICB2b2lkCWluc3Bfc2F2ZV9h bGxfZmF1bHRfZnJhbWVzKHNob3J0KTsKICAgIHZvaWQJaW5zcF9yZWFkb3V0X2luaGliaXQoZVJl YWRvdXRJbmhpYml0T3B0aW9ucyk7CgogICAgIAoKCiAgICBCb29sZWFuCWxhc2VyX2hhc19sYXNl cigpIGNvbnN0OwogICAgZmxvYXQJbGFzZXJfaGVpZ2h0KCkgY29uc3Q7CiAgICBmbG9hdAlsYXNl cl94X2hvbWUoKSBjb25zdDsKICAgIGZsb2F0CWxhc2VyX3lfaG9tZSgpIGNvbnN0OwogICAgaW50 CQlsYXNlcl94X21vdG9yX2hvbWUoKSBjb25zdDsKICAgIGludAkJbGFzZXJfeV9tb3Rvcl9ob21l KCkgY29uc3Q7CiAgICBpbnQJCWxhc2VyX2luaXRpYWxfdmVsb2NpdHkoKSBjb25zdDsKICAgIGlu dAkJbGFzZXJfZmluYWxfdmVsb2NpdHkoKSBjb25zdDsKICAgIGludAkJbGFzZXJfYWNjZWxlcmF0 aW9uKCkgY29uc3Q7CgogICAgdm9pZAlsYXNlcl9oYXNfbGFzZXIoQm9vbGVhbik7CiAgICB2b2lk CWxhc2VyX2hlaWdodChmbG9hdCk7CiAgICB2b2lkCWxhc2VyX3hfaG9tZShmbG9hdCk7CiAgICB2 b2lkCWxhc2VyX3lfaG9tZShmbG9hdCk7CiAgICB2b2lkCWxhc2VyX3hfbW90b3JfaG9tZShpbnQp OwogICAgdm9pZAlsYXNlcl95X21vdG9yX2hvbWUoaW50KTsKICAgIHZvaWQJbGFzZXJfaW5pdGlh bF92ZWxvY2l0eShpbnQpOwogICAgdm9pZAlsYXNlcl9maW5hbF92ZWxvY2l0eShpbnQpOwogICAg dm9pZAlsYXNlcl9hY2NlbGVyYXRpb24oaW50KTsKCiAgICAgCgoKICAgIEJvb2xlYW4JaXNfc29s YXJpcygpIGNvbnN0OwogICAgQm9vbGVhbgloYXNfc2J1cygpIGNvbnN0OwogICAgQm9vbGVhbglp c19ydHAoKSBjb25zdDsKICAgIEJvb2xlYW4JaGFzXzMyYml0X2RpbygpIGNvbnN0OwogICAgaW50 CQltb3RvcigpIGNvbnN0OwogICAgaW50CQlyYW1kYWMoaW50IHZjcHUsIGJvb2wgaGlfbG93KSBj b25zdDsKICAgIGxvbmcJdmlkZW9fbWVtb3J5X3NpemUoKSBjb25zdDsKCiAgICB2b2lkCWhhc19z YnVzKEJvb2xlYW4pOwogICAgdm9pZAlpc19ydHAoQm9vbGVhbik7CiAgICB2b2lkCWhhc18zMmJp dF9kaW8oQm9vbGVhbik7CiAgICB2b2lkCW1vdG9yKGludCk7CiAgICB2b2lkCXJhbWRhYyhpbnQg dmNwdSwgYm9vbCBoaV9sb3csIGludCB2YWx1ZSk7CiAgICB2b2lkCXZpZGVvX21lbW9yeV9zaXpl KGxvbmcgYW10KTsKCiAgICAgCgoKICAgIHVfc2hvcnQJc3BlY2lhbDNkX2xsdF9sdXRfdmFsdWUo KSBjb25zdDsKICAgIHNob3J0CXNwZWNpYWwzZF93aW5fYmFzZV9hZGpfQSgpIGNvbnN0OwogICAg c2hvcnQJc3BlY2lhbDNkX3dpbl9iYXNlX2Fkal9CKCkgY29uc3Q7CiAgICBzaG9ydAlzcGVjaWFs M2Rfd2luX2Jhc2VfYWRqX0MoKSBjb25zdDsKICAgIHNob3J0CXNwZWNpYWwzZF9oZWlnaHRfWl9j b3JyKCkgY29uc3Q7CiAgICBzaG9ydAlzcGVjaWFsM2Rfc3RhcnRfc3RvcF8zZCgpIGNvbnN0Owog ICAgc2hvcnQJc3BlY2lhbDNkX2xlZnRfb2Zmc2V0KCkgY29uc3Q7CiAgICBzaG9ydAlzcGVjaWFs M2RfcmlnaHRfb2Zmc2V0KCkgY29uc3Q7CgogICAgdm9pZAlzcGVjaWFsM2RfbGx0X2x1dF92YWx1 ZSh1X3Nob3J0KTsKICAgIHZvaWQJc3BlY2lhbDNkX3dpbl9iYXNlX2Fkal9BKHNob3J0KTsKICAg IHZvaWQJc3BlY2lhbDNkX3dpbl9iYXNlX2Fkal9CKHNob3J0KTsKICAgIHZvaWQJc3BlY2lhbDNk X3dpbl9iYXNlX2Fkal9DKHNob3J0KTsKICAgIHZvaWQJc3BlY2lhbDNkX2hlaWdodF9aX2NvcnIo c2hvcnQpOwogICAgdm9pZAlzcGVjaWFsM2Rfc3RhcnRfc3RvcF8zZChzaG9ydCk7CiAgICB2b2lk CXNwZWNpYWwzZF9sZWZ0X29mZnNldChzaG9ydCk7CiAgICB2b2lkCXNwZWNpYWwzZF9yaWdodF9v ZmZzZXQoc2hvcnQpOwoKICAgICAKCgogICAgY29uc3QgY2hhciogYW5fdXNlcm5hbWUoKSBjb25z dDsKICAgIGNvbnN0IGNoYXIqIGFuX3Bhc3N3b3JkKCkgY29uc3Q7CiAgICBjb25zdCBjaGFyKiBh bl9kYXRhYmFzZW5hbWUoKSBjb25zdDsKICAgIGNvbnN0IGNoYXIqIGFuX2hvc3RuYW1lKCkgY29u c3Q7CiAgICBjb25zdCBlRGF0YWJhc2VUeXBlcyBhbl9kYXRhYmFzZSgpIGNvbnN0OwoKICAgIHZv aWQJYW5fdXNlcm5hbWUoY29uc3QgY2hhciAqKTsKICAgIHZvaWQJYW5fcGFzc3dvcmQoY29uc3Qg Y2hhciAqKTsKICAgIHZvaWQJYW5fZGF0YWJhc2VuYW1lKGNvbnN0IGNoYXIgKik7CiAgICB2b2lk CWFuX2hvc3RuYW1lKGNvbnN0IGNoYXIgKik7CiAgICB2b2lkCWFuX2RhdGFiYXNlKGNvbnN0IGVE YXRhYmFzZVR5cGVzKTsKCiAgICAgCgoKCiAgICBCb29sZWFuICAgICB1ZGNfZW5hYmxlZCgpIGNv bnN0OwogICAgQm9vbGVhbiAgICAgdXNlX3VkY190YWJsZSgpIGNvbnN0OwoKICAgIHZvaWQJdWRj X2VuYWJsZWQoQm9vbGVhbik7CiAgICB2b2lkCXVzZV91ZGNfdGFibGUoQm9vbGVhbik7CgogICAg IAoKCiAgICBCb29sZWFuIAlpZmljc19lbmFibGVkKCkgY29uc3Q7CiAgICBjb25zdCBjaGFyKglp Zmljc19UU05hbWUoKSAgY29uc3Q7CiAgICBjb25zdCBjaGFyKglpZmljc19NQUNISU5FKCkgIGNv bnN0OwogICAgdWxvbmcJaWZpY3NfUE9SVCgpICBjb25zdDsKICAgIHVsb25nIAlpZmljc19UaW1l b3V0KCkgIGNvbnN0OwogICAgQm9vbGVhbiAJZW5nX2RiX2VuYWJsZWQoKSBjb25zdDsKICAgIGNv bnN0IGNoYXIqCWVuZ19kYl9ob3N0bmFtZSgpICBjb25zdDsKICAgIGNvbnN0IGNoYXIqCWVuZ19k Yl9Qcm9jZXNzU3RlcCgpICBjb25zdDsKICAgIGNvbnN0IGNoYXIqCWZjX09QSUQoKSAgY29uc3Q7 CiAgICBCb29sZWFuIAlmY191c2VyX3Byb21wdF9lbmFibGVkKCkgY29uc3Q7CiAgICBjb25zdCBj aGFyKglmY19VSUQoKSAgY29uc3Q7CiAgICBjb25zdCBjaGFyKglmY19TSElGVCgpICBjb25zdDsK ICAgIHZvaWQgCWZjX2luaXRfdXNlcl9kYXRhKHZvaWQpOwoKICAgIHZvaWQgCQlpZmljc19lbmFi bGVkKEJvb2xlYW4pOwogICAgZVN0cmluZ0Vycm9ycyAJaWZpY3NfVFNOYW1lKGNvbnN0IGNoYXIg Kik7CiAgICBlU3RyaW5nRXJyb3JzIAlpZmljc19NQUNISU5FKGNvbnN0IGNoYXIgKik7CiAgICB2 b2lkCQlpZmljc19QT1JUKHVsb25nKTsKICAgIHZvaWQJCWlmaWNzX1RpbWVvdXQodWxvbmcpOwog ICAgdm9pZAkgCWVuZ19kYl9lbmFibGVkKEJvb2xlYW4pOwogICAgZVN0cmluZ0Vycm9ycwllbmdf ZGJfaG9zdG5hbWUoY29uc3QgY2hhciAqKTsKICAgIGVTdHJpbmdFcnJvcnMgCWVuZ19kYl9Qcm9j ZXNzU3RlcChjb25zdCBjaGFyICopOwogICAgZVN0cmluZ0Vycm9ycyAJZmNfT1BJRChjb25zdCBj aGFyICopOwogICAgdm9pZAkJZmNfdXNlcl9wcm9tcHRfZW5hYmxlZChCb29sZWFuKTsKICAgIGVT dHJpbmdFcnJvcnMgCWZjX1VJRChjb25zdCBjaGFyICopOwogICAgZVN0cmluZ0Vycm9ycyAJZmNf U0hJRlQoY29uc3QgY2hhciAqKTsKCiAgICAgCgoKICAgIGZsb2F0CQlvZmZzZXQoaW50KTsKICAg IHZvaWQJCW9mZnNldChpbnQsIGZsb2F0KTsKfTsKCmlubGluZSBCb29sZWFuCmNvbmZpZ3VyYXRp b246OmNmZ19jaGFuZ2VkKCkgY29uc3QKewogICAgcmV0dXJuIChjaGFuZ2VkKTsKfQoKaW5saW5l IHZvaWQKY29uZmlndXJhdGlvbjo6Y2ZnX2NoYW5nZWQoQm9vbGVhbiB2YWx1ZSkKewogICAgY2hh bmdlZCA9IHZhbHVlOwp9CgogCgoKaW5saW5lIEJvb2xlYW4KY29uZmlndXJhdGlvbjo6c3BjX2ln c19sZXZlbDIoKSBjb25zdAp7CiAgICByZXR1cm4oc3BjZ2VuLmlnc19sZXZlbDIpOwp9Cgppbmxp bmUgQm9vbGVhbgpjb25maWd1cmF0aW9uOjpzcGNfaWdzX2xldmVsMSgpIGNvbnN0CnsKICAgIHJl dHVybihzcGNnZW4uaWdzX2xldmVsMSk7Cn0KCmlubGluZSBCb29sZWFuCmNvbmZpZ3VyYXRpb246 OnNwY19pZ3NfZ3JvdXBzKCkgY29uc3QKewogICAgcmV0dXJuKHNwY2dlbi5pZ3NfZ3JvdXBzKTsK fQoKaW5saW5lIEJvb2xlYW4KY29uZmlndXJhdGlvbjo6c3BjX2lnc19pdGVtcygpIGNvbnN0CnsK ICAgIHJldHVybihzcGNnZW4uaWdzX2l0ZW1zKTsKfQoKaW5saW5lIGNvbnN0IGNoYXIgKgpjb25m aWd1cmF0aW9uOjpzcGNfc2NyaXB0X2ZpbGVuYW1lKCkgY29uc3QKewogICAgcmV0dXJuKHNwY2dl bi5zY3JpcHRfZmlsZW5hbWUpOwp9CgppbmxpbmUgQm9vbGVhbgpjb25maWd1cmF0aW9uOjpzcGNf cGxvdF9vdXRwdXQoKSBjb25zdAp7CiAgICByZXR1cm4oc3BjZ2VuLnNob3dfcGxvdCk7Cn0KCmlu bGluZSBCb29sZWFuCmNvbmZpZ3VyYXRpb246OnNwY19ydW5fZGVmZWN0KCkgY29uc3QKewogICAg cmV0dXJuKHNwY2dlbjMucnVuX2RlZmVjdCk7Cn0KCmlubGluZSBCb29sZWFuCmNvbmZpZ3VyYXRp b246OnNwY19ydW5fc2NyaXB0KCkgY29uc3QKewogICAgcmV0dXJuKHNwY2dlbi5ydW5fc2NyaXB0 KTsKfQoKaW5saW5lIGNvbnN0IGNoYXIgKgpjb25maWd1cmF0aW9uOjpzcGNfcmVwYWlyX3Njcmlw dF9uYW1lKCkgY29uc3QKewogICAgcmV0dXJuKHNwY2dlbjQucmVwYWlyX3NjcmlwdF9uYW1lKTsK fQoKaW5saW5lIEJvb2xlYW4KY29uZmlndXJhdGlvbjo6c3BjX3J1bl9yZXBhaXJfc2NyaXB0KCkg Y29uc3QKewogICAgcmV0dXJuKHNwY2dlbjQucnVuX3JlcGFpcl9zY3JpcHQpOwp9CgoKIAoKCmlu bGluZSBCb29sZWFuCmNvbmZpZ3VyYXRpb246OnNwY19ub19zdW1tYXJ5KCkgY29uc3QKewogICAg cmV0dXJuKHNwY2dlbjIubm9fc3VtbWFyeSk7Cn0KCmlubGluZSBCb29sZWFuCmNvbmZpZ3VyYXRp b246OnNwY19hbGxvd19yZXZpZXdfdG9fcGFzcygpIGNvbnN0CnsKICAgIHJldHVybihzcGNnZW4u YWxsb3dfcmV2aWV3X3Bhc3MpOwp9CgppbmxpbmUgQm9vbGVhbgpjb25maWd1cmF0aW9uOjpzcGNf cmVwb3J0X292ZXJyaWRlcygpIGNvbnN0CnsKICAgIHJldHVybihzcGNnZW4ucmVwb3J0X292ZXJy aWRlcyk7Cn0KCmlubGluZSBCb29sZWFuCmNvbmZpZ3VyYXRpb246OnNwY19zaW1wbGVfcmVwb3J0 KCkgY29uc3QKewogICAgcmV0dXJuIChzcGNnZW4ucHJpbnRfcGlucyAmJiAhc3BjZ2VuLnN0b2Nr X251bWJlcik7Cn0KCiAKaW5saW5lIEJvb2xlYW4KY29uZmlndXJhdGlvbjo6c3BjX21ldHJpY191 bml0cygpIGNvbnN0CnsKICAgIHJldHVybiAoc3BjZ2VuNS5tZXRyaWNfdW5pdHMpOwp9Cgppbmxp bmUgQm9vbGVhbgpjb25maWd1cmF0aW9uOjpzcGNfc3RvY2tfbnVtYmVyKCkgY29uc3QKewogICAg cmV0dXJuKHNwY2dlbi5zdG9ja19udW1iZXIpOwp9CgppbmxpbmUgQm9vbGVhbgpjb25maWd1cmF0 aW9uOjpzcGNfcHJpbnRfcGlucygpIGNvbnN0CnsKICAgIHJldHVybihzcGNnZW4ucHJpbnRfcGlu cyk7Cn0KCmlubGluZSBCb29sZWFuCmNvbmZpZ3VyYXRpb246OnNwY19zdW1tYXJpemVfaXRlbXMo KSBjb25zdAp7CiAgICByZXR1cm4oc3BjZ2VuLnN1bW1hcml6ZV9pdGVtcyk7Cn0KCmlubGluZSBC b29sZWFuCmNvbmZpZ3VyYXRpb246OnNwY19zaG93X3Jldmlld19wYXNzKCkgY29uc3QKewogICAg cmV0dXJuKHNwY2dlbjIuc2hvd19yZXZpZXdfcGFzcyk7Cn0KCiAKCgppbmxpbmUgQm9vbGVhbgpj b25maWd1cmF0aW9uOjpzcGNfYXV0b19zYXZlX3N0YXRpc3RpY3MoKSBjb25zdAp7CiAgICByZXR1 cm4oc3BjZ2VuNS5hdXRvX3NhdmVfc3RhdGlzdGljcyk7Cn0KCmlubGluZSBzaG9ydApjb25maWd1 cmF0aW9uOjpzcGNfYXV0b19zYXZlX2hvdXJzKCkgY29uc3QKewogICAgcmV0dXJuKHNwY2dlbjUu YXV0b19zYXZlX2hvdXJzKTsKfQoKaW5saW5lIHNob3J0CmNvbmZpZ3VyYXRpb246OnNwY19hdXRv X3NhdmVfbWludXRlcygpIGNvbnN0CnsKICAgIHJldHVybihzcGNnZW41LmF1dG9fc2F2ZV9taW51 dGVzKTsKfQoKIAoKCmlubGluZSBCb29sZWFuCmNvbmZpZ3VyYXRpb246OnN5c3Bhcl9saWdodGVk X2ZpZHVjaWFscygpIGNvbnN0CnsKICAgIHJldHVybihzeXNwYXIubGlnaHRlZF9maWR1Y2lhbHMp Owp9CgppbmxpbmUgQm9vbGVhbgpjb25maWd1cmF0aW9uOjpzeXNwYXJfc3RhcnRzdG9wKCkgY29u c3QKewogICAgcmV0dXJuKHN5c3Bhci5zdGFydHN0b3ApOwp9CgppbmxpbmUgQm9vbGVhbgpjb25m aWd1cmF0aW9uOjpzeXNwYXJfcmV2aWV3KCkgY29uc3QKewogICAgcmV0dXJuKHN5c3Bhci5yZXZp ZXcpOwp9CgppbmxpbmUgQm9vbGVhbgpjb25maWd1cmF0aW9uOjpzeXNwYXJfYmFkc25hcCgpIGNv bnN0CnsKICAgIHJldHVybihzeXNwYXIuYmFkc25hcCk7Cn0KCmlubGluZSBpbnQKY29uZmlndXJh dGlvbjo6c3lzcGFyX2JhZHNuYXBfZnJhbWVzKCkgY29uc3QKewogICAgcmV0dXJuKHN5c3Bhci5i YWRzbmFwX2ZyYW1lcyk7Cn0KCmlubGluZSBpbnQKY29uZmlndXJhdGlvbjo6c3lzcGFyX2JhZHNu YXBfaXRlbXMoKSBjb25zdAp7CiAgICByZXR1cm4oc3lzcGFyLmJhZHNuYXBfaXRlbXMpOwp9Cgpp bmxpbmUgQm9vbGVhbgpjb25maWd1cmF0aW9uOjpzeXNwYXJfY29tcGVuc2F0aW9uKCkgY29uc3QK ewogICAgcmV0dXJuKHN5c3Bhci5jb21wZW5zYXRpb24pOwp9CgppbmxpbmUgQm9vbGVhbgpjb25m aWd1cmF0aW9uOjpzeXNwYXJfc2hvd21vZGUoKSBjb25zdAp7CiAgICByZXR1cm4oc3lzcGFyLnNo b3dtb2RlKTsKfQoKaW5saW5lIEJvb2xlYW4KY29uZmlndXJhdGlvbjo6c3lzcGFyX3Nob3dtb2Rl X2Zha2VfYWxnbygpIGNvbnN0CnsKICAgIHJldHVybihzeXNwYXIuc2hvd21vZGVfZmFrZV9hbGdv KTsKfQoKaW5saW5lIGludApjb25maWd1cmF0aW9uOjpzeXNwYXJfc2hvd21vZGVfZnJhbWUoKSBj b25zdAp7CiAgICByZXR1cm4oc3lzcGFyLnNob3dtb2RlX2ZyYW1lIDw8IGtTaG93TW9kZUZyYW1l U2hpZnQpOwp9CgppbmxpbmUgQm9vbGVhbgpjb25maWd1cmF0aW9uOjppbnNwX29wdGlvbl9zYXZl X2FsbF9mYXVsdHMoKSBjb25zdAp7CiAgICByZXR1cm4oaW5zcF9vcHRpb25zLnNhdmVfYWxsX2Zh dWx0cyk7Cn0KCmlubGluZSBzaG9ydApjb25maWd1cmF0aW9uOjppbnNwX3NhdmVfYWxsX2ZhdWx0 X2ZyYW1lcygpIGNvbnN0CnsKICAgIHJldHVybihpbnNwX29wdGlvbnMyLm51bV9yZXNlcnZlZF9m cmFtZXMpOwp9CgogCgoKaW5saW5lIEJvb2xlYW4KY29uZmlndXJhdGlvbjo6Y2FtZXJhX3Npbmds ZXNwZWVkKCkgY29uc3QKewogICAgcmV0dXJuKGNhbWVyYS5zaW5nbGVzcGVlZCk7Cn0KCmlubGlu ZSBpbnQKY29uZmlndXJhdGlvbjo6Y2FtZXJhX29yaWVudGF0aW9uKCkgY29uc3QKewogICAgcmV0 dXJuKGNhbWVyYS5vcmllbnRhdGlvbik7Cn0KCmlubGluZSBCb29sZWFuCmNvbmZpZ3VyYXRpb246 OmNhbWVyYV9pc19wYW5hc29uaWMoKSBjb25zdAp7CiAgICByZXR1cm4oY2FtZXJhMi5pc19wYW5h c29uaWMpOwp9CgppbmxpbmUgQm9vbGVhbgpjb25maWd1cmF0aW9uOjpjYW1lcmFfdmFyaWFibGVf bGlnaHRpbmcoKSBjb25zdAp7CiAgICByZXR1cm4oY2FtZXJhMi52YXJpYWJsZV9saWdodGluZyk7 Cn0KCmlubGluZSBCb29sZWFuCmNvbmZpZ3VyYXRpb246OmNhbWVyYV9yZXRha2VfYmFkc25hcHMo KSBjb25zdAp7CiAgICByZXR1cm4oY2FtZXJhMy5yZXRha2VfYmFkc25hcHMpOwp9CgppbmxpbmUg Qm9vbGVhbgpjb25maWd1cmF0aW9uOjpjYW1lcmFfaXNfZGlnaXRhbCgpIGNvbnN0CnsKICAgIHJl dHVybiAoY2FtZXJhNS5faXNfZGlnaXRhbCk7Cn0KCmlubGluZSBCb29sZWFuCmNvbmZpZ3VyYXRp b246OmNhbWVyYV9pc19jb2xvcigpIGNvbnN0CnsKICAgIHJldHVybihjYW1lcmE1Ll9pc19jb2xv cik7Cn0KCiAKCgppbmxpbmUgQm9vbGVhbgpjb25maWd1cmF0aW9uOjpjYW1lcmFfaXNfY2FtZXJh bGluaygpIGNvbnN0CnsKICAgIHJldHVybihjYW1lcmE2Ll9pc19jYW1lcmFsaW5rKTsKfQoKIAoK CmlubGluZSB1X3Nob3J0CmNvbmZpZ3VyYXRpb246OnNwZWNpYWwzZF9sbHRfbHV0X3ZhbHVlKCkg Y29uc3QKewogICAgcmV0dXJuIChzcGVjaWFsM2QuTExUX0xVVF9WYWx1ZSk7Cn0KCmlubGluZSBz aG9ydApjb25maWd1cmF0aW9uOjpzcGVjaWFsM2Rfd2luX2Jhc2VfYWRqX0EoKSBjb25zdAp7CiAg ICByZXR1cm4gKHNwZWNpYWwzZC53aW5fYmFzZV9hZGpfQSk7Cn0KCmlubGluZSBzaG9ydApjb25m aWd1cmF0aW9uOjpzcGVjaWFsM2Rfd2luX2Jhc2VfYWRqX0IoKSBjb25zdAp7CiAgICByZXR1cm4g KHNwZWNpYWwzZC53aW5fYmFzZV9hZGpfQik7Cn0KCmlubGluZSBzaG9ydApjb25maWd1cmF0aW9u OjpzcGVjaWFsM2Rfd2luX2Jhc2VfYWRqX0MoKSBjb25zdAp7CiAgICByZXR1cm4gKHNwZWNpYWwz ZC53aW5fYmFzZV9hZGpfQyk7Cn0KCmlubGluZSBzaG9ydApjb25maWd1cmF0aW9uOjpzcGVjaWFs M2RfaGVpZ2h0X1pfY29ycigpIGNvbnN0CnsKICAgIHJldHVybiAoc3BlY2lhbDNkLmhlaWdodF9a X2NvcnIpOwp9CgppbmxpbmUgc2hvcnQKY29uZmlndXJhdGlvbjo6c3BlY2lhbDNkX3N0YXJ0X3N0 b3BfM2QoKSBjb25zdAp7CiAgICByZXR1cm4gKHNwZWNpYWwzZC5zdGFydF9zdG9wXzNkKTsKfQoK aW5saW5lIHNob3J0CmNvbmZpZ3VyYXRpb246OnNwZWNpYWwzZF9sZWZ0X29mZnNldCgpIGNvbnN0 CnsKICAgIHJldHVybiAoc3BlY2lhbDNkLmxlZnRfb2Zmc2V0KTsKfQoKaW5saW5lIHNob3J0CmNv bmZpZ3VyYXRpb246OnNwZWNpYWwzZF9yaWdodF9vZmZzZXQoKSBjb25zdAp7CiAgICByZXR1cm4g KHNwZWNpYWwzZC5yaWdodF9vZmZzZXQpOwp9CgoKIAoKCmlubGluZSBpbnQKY29uZmlndXJhdGlv bjo6bW9kZV9jb29yZGluYXRvcigpIGNvbnN0CnsKICAgIHJldHVybihrQ29vck1vZGVJZGxlKTsJ IAp9CgppbmxpbmUgaW50CmNvbmZpZ3VyYXRpb246Om1vZGVfbWF0ZXJpYWwoKSBjb25zdAp7CiAg ICByZXR1cm4obW9kZS5tYXRlcmlhbCk7Cn0KCmlubGluZSBCb29sZWFuCmNvbmZpZ3VyYXRpb246 Om1vZGVfYm90dG9tc2lkZSgpIGNvbnN0CnsKICAgIHJldHVybihtb2RlLmJvdHRvbXNpZGUpOwp9 CgppbmxpbmUgaW50CmNvbmZpZ3VyYXRpb246Om1vZGVfYXV0b2hvbWUoKSBjb25zdAp7CiAgICBy ZXR1cm4obW9kZS5hdXRvaG9tZSk7Cn0KCiAKCgppbmxpbmUgQm9vbGVhbgpjb25maWd1cmF0aW9u OjptYXRfZGF0ZXRpbWUoKSBjb25zdAp7CiAgICByZXR1cm4obWF0LmRhdGV0aW1lKTsKfQoKaW5s aW5lIEJvb2xlYW4KY29uZmlndXJhdGlvbjo6bWF0X3NpbXBsaW1hdGljKCkgY29uc3QKewogICAg cmV0dXJuKG1hdC5zaW1wbGltYXRpYyk7Cn0KCmlubGluZSBCb29sZWFuCmNvbmZpZ3VyYXRpb246 Om1hdF9hZGp1c3RfcmFpbHMoKSBjb25zdAp7CiAgICByZXR1cm4obWF0LmFkanVzdF9yYWlscyk7 Cn0KCmlubGluZSBjb25zdCBjaGFyICoKY29uZmlndXJhdGlvbjo6bWF0X3ByaW50ZXIoKSBjb25z dAp7CiAgICByZXR1cm4obWF0LnByaW50ZXIpOwp9CgppbmxpbmUgQm9vbGVhbgpjb25maWd1cmF0 aW9uOjptYXRfcmV2aWV3X292ZXJsaW1pdCgpIGNvbnN0CnsKICAgIHJldHVybiAobWF0LnJldmll d19vdmVybGltaXQpOwp9CgppbmxpbmUgQm9vbGVhbgpjb25maWd1cmF0aW9uOjptYXRfc21lbWFf bW9kZSgpIGNvbnN0CnsKICAgIHJldHVybihtYXQuc21lbWFfbW9kZSk7Cn0KCmlubGluZSBCb29s ZWFuCmNvbmZpZ3VyYXRpb246Om1hdF9ub19maXJzdF9ib2FyZCgpIGNvbnN0CnsKICAgIHJldHVy bihtYXQubm9fZmlyc3RfYm9hcmQpOwp9CgogCgoKaW5saW5lIEJvb2xlYW4KY29uZmlndXJhdGlv bjo6c3BjX2ZsYXZvcl9hc19kaXIoKSBjb25zdAp7CiAgICByZXR1cm4oc3BjZ2VuLmZsYXZvcl9h c19kaXIpOwp9CgppbmxpbmUgQm9vbGVhbgpjb25maWd1cmF0aW9uOjpzcGNfYXBwZW5kKCkgY29u c3QKewogICAgcmV0dXJuKHNwY2dlbi5hcHBlbmQpOwp9CgppbmxpbmUgQm9vbGVhbgpjb25maWd1 cmF0aW9uOjpzcGNfYXBwZW5kX2ZsYXZvcigpIGNvbnN0CnsKICAgIHJldHVybihzcGNnZW4uYXBw ZW5kX2ZsYXZvcik7Cn0KCmlubGluZSBCb29sZWFuCmNvbmZpZ3VyYXRpb246OnNwY19ub3JtYWwo KSBjb25zdAp7CiAgICByZXR1cm4oc3BjZ2VuLnN0YW5kYXJkKTsKfQoKIAoKCmlubGluZSBCb29s ZWFuCmNvbmZpZ3VyYXRpb246OnNwY190b19wcmludGVyKCkgY29uc3QKewogICAgcmV0dXJuKHNw Y2dlbi5yZXBvcnRfb25fcHJpbnRlcik7Cn0KCmlubGluZSBCb29sZWFuCmNvbmZpZ3VyYXRpb246 OnNwY190b19jb25zb2xlKCkgY29uc3QKewogICAgcmV0dXJuKHNwY2dlbi5yZXBvcnRfb25fd2lu KTsKfQoKaW5saW5lIEJvb2xlYW4KY29uZmlndXJhdGlvbjo6c3BjX3RvX2ZpbGUoKSBjb25zdAp7 CiAgICByZXR1cm4oc3BjZ2VuLnJlcG9ydF9pbl9maWxlKTsKfQoKaW5saW5lIEJvb2xlYW4KY29u ZmlndXJhdGlvbjo6c3BjX3NhdmVfcmVwb3J0X29uX2Vycm9yKCkgY29uc3QKewogICAgcmV0dXJu KHNwY2dlbi5zYXZlX3JlcG9ydF9vbl9lcnJvcik7Cn0KCiAKCgppbmxpbmUgQm9vbGVhbgpjb25m aWd1cmF0aW9uOjpzcGNfc3RvcF9vbl9mYWlsdXJlKCkKewogICAgcmV0dXJuKHNwY2dlbi5oYWx0 X29uX2Vycm9yKTsKfQoKIAoKCmlubGluZSBpbnQKY29uZmlndXJhdGlvbjo6c3BjX3BhcnRfbGlt aXQoKSBjb25zdAp7CiAgICByZXR1cm4gKHNwY2dlbi5wYXJ0X2xpbWl0KTsKfQoKIAoKCmlubGlu ZSBpbnQKY29uZmlndXJhdGlvbjo6c3BjX3Bpbl9saW1pdCgpIGNvbnN0CnsKICAgIHJldHVybiAo c3BjZ2VuLnBpbl9saW1pdCk7Cn0KCiAKCgppbmxpbmUgQm9vbGVhbgpjb25maWd1cmF0aW9uOjpi YXJjb2RlcygpIGNvbnN0CnsKICAgIHJldHVybihiYXJjb2RlLmluX3VzZSk7Cn0KCmlubGluZSBC b29sZWFuCmNvbmZpZ3VyYXRpb246OmJhcmNvZGVfZGlzcGxheSgpIGNvbnN0CnsKICAgIHJldHVy bihiYXJjb2RlLmRpc3BsYXkpOwp9CgppbmxpbmUgaW50CmNvbmZpZ3VyYXRpb246OmJhcmNvZGVf cmVtaW5kZXIoKSBjb25zdAp7CiAgICByZXR1cm4oYmFyY29kZS5yZW1pbmRlcik7Cn0KCmlubGlu ZSBpbnQKY29uZmlndXJhdGlvbjo6YmFyY29kZV9sZW5ndGgodm9pZCkgY29uc3QKewogICAgcmV0 dXJuKGJhcmNvZGUubGVuZ3RoKTsKfQoKaW5saW5lIGludApjb25maWd1cmF0aW9uOjpiYXJjb2Rl X3NpZ19sZW5ndGgodm9pZCkgY29uc3QKewogICAgcmV0dXJuKGJhcmNvZGUuc2lnKTsKfQoKaW5s aW5lIGNvbnN0IGNoYXIgKgpjb25maWd1cmF0aW9uOjpiYXJjb2RlX2ZpbGVuYW1lKHZvaWQpIGNv bnN0CnsKICAgIHJldHVybihiYXJjb2RlLmZpbGVuYW1lKTsKfQoKaW5saW5lIEJvb2xlYW4KY29u ZmlndXJhdGlvbjo6YmFyY29kZV9tYXRjaF9kYXRhYmFzZSgpIGNvbnN0CnsKICAgIHJldHVybihi YXJjb2RlLm1hdGNoX2RhdGFiYXNlKTsKfQoKIAoKCmlubGluZSBpbnQKY29uZmlndXJhdGlvbjo6 c3RhZ2VfYXhpcygpIGNvbnN0CnsKICAgIHJldHVybihheGlzKTsKfQoKIAoKCmlubGluZSBCb29s ZWFuCmNvbmZpZ3VyYXRpb246Omxhc2VyX2hhc19sYXNlcigpIGNvbnN0CnsKICAgIHJldHVybihs YXNlci5oYXNfbGFzZXIpOwp9CgppbmxpbmUgZmxvYXQKY29uZmlndXJhdGlvbjo6bGFzZXJfaGVp Z2h0KCkgY29uc3QKewogICAgcmV0dXJuKGxhc2VyLmhlaWdodCk7Cn0KCmlubGluZSBmbG9hdApj b25maWd1cmF0aW9uOjpsYXNlcl94X2hvbWUoKSBjb25zdAp7CiAgICByZXR1cm4obGFzZXIueF9o b21lKTsKfQoKaW5saW5lIGZsb2F0CmNvbmZpZ3VyYXRpb246Omxhc2VyX3lfaG9tZSgpIGNvbnN0 CnsKICAgIHJldHVybihsYXNlci55X2hvbWUpOwp9CgppbmxpbmUgaW50CmNvbmZpZ3VyYXRpb246 Omxhc2VyX3hfbW90b3JfaG9tZSgpIGNvbnN0CnsKICAgIHJldHVybihsYXNlci54X21vdG9yX2hv bWUpOwp9CgppbmxpbmUgaW50CmNvbmZpZ3VyYXRpb246Omxhc2VyX3lfbW90b3JfaG9tZSgpIGNv bnN0CnsKICAgIHJldHVybihsYXNlci55X21vdG9yX2hvbWUpOwp9CgppbmxpbmUgaW50CmNvbmZp Z3VyYXRpb246Omxhc2VyX2luaXRpYWxfdmVsb2NpdHkoKSBjb25zdAp7CiAgICByZXR1cm4obGFz ZXIyLmluaXRpYWxfdmVsb2NpdHkpOwp9CgppbmxpbmUgaW50CmNvbmZpZ3VyYXRpb246Omxhc2Vy X2ZpbmFsX3ZlbG9jaXR5KCkgY29uc3QKewogICAgcmV0dXJuKGxhc2VyMi5maW5hbF92ZWxvY2l0 eSk7Cn0KCmlubGluZSBpbnQKY29uZmlndXJhdGlvbjo6bGFzZXJfYWNjZWxlcmF0aW9uKCkgY29u c3QKewogICAgcmV0dXJuKGxhc2VyMi5hY2NlbGVyYXRpb24pOwp9CgppbmxpbmUgQm9vbGVhbgpj b25maWd1cmF0aW9uOjppc19zb2xhcmlzKCkgY29uc3QKewoKICAgIHJldHVybih0cnVlKTsKCgoK fQoKaW5saW5lIEJvb2xlYW4KY29uZmlndXJhdGlvbjo6aGFzXzMyYml0X2RpbygpIGNvbnN0CnsK ICAgIHJldHVybihzeXN0ZW0uaGFzXzMyYml0X2Rpbyk7Cn0KCmlubGluZSBCb29sZWFuCmNvbmZp Z3VyYXRpb246OmlzX3J0cCgpIGNvbnN0CnsKICAgIHJldHVybihzeXN0ZW0uaXNfcnRwKTsKfQoK aW5saW5lIGludApjb25maWd1cmF0aW9uOjptb3RvcigpIGNvbnN0CnsKICAgIHJldHVybihzeXN0 ZW0ubW90b3JfZHJpdmVyKTsKfQoKaW5saW5lIGVfZmlkdV9sb2NhdGlvbgpjb25maWd1cmF0aW9u OjpmaWR1X2xvY2F0aW9uKCkgY29uc3QKewogICAgcmV0dXJuKHN0YWdlNC5fZmlkdV9sb2NhdGlv bik7Cn0KCmlubGluZSBCb29sZWFuCmNvbmZpZ3VyYXRpb246OnVzaW5nX2V4dGVybmFsX3Jldmll dygpIGNvbnN0CnsKICAgIHJldHVybihzdGFnZTQuX3VzaW5nX2V4dGVybmFsX3Jldmlldyk7Cn0K CmlubGluZSBCb29sZWFuCmNvbmZpZ3VyYXRpb246Omhhc18zc3RhZ2VfY29udmV5b3IoKSBjb25z dAp7CiAgICByZXR1cm4oc3RhZ2U0Ll9oYXNfM3N0YWdlX2NvbnZleW9yKTsKfQoKaW5saW5lIGlu dApjb25maWd1cmF0aW9uOjpyYW1kYWMoaW50IHZjcHUsIGJvb2wgaGlfbG93KSBjb25zdAp7CiAg ICBpZiAodmNwdSA8IDAgfHwgdmNwdSA+IGtOdmNwdSkKCXJldHVybigwKTsKCiAgICBpZiAoaGlf bG93KQoJcmV0dXJuKHJhbWRhY19kYXRhW3ZjcHVdLmhpKTsKICAgIHJldHVybihyYW1kYWNfZGF0 YVt2Y3B1XS5sb3cpOwp9CgppbmxpbmUgY29uc3QgY2hhciAqCmNvbmZpZ3VyYXRpb246OmFuX3Vz ZXJuYW1lKCkgY29uc3QKewogICAgcmV0dXJuKGF1dG9fbmV0d29ya2VyLnVzZXJuYW1lKTsKfQoK aW5saW5lIGNvbnN0IGNoYXIgKgpjb25maWd1cmF0aW9uOjphbl9wYXNzd29yZCgpIGNvbnN0CnsK ICAgIHJldHVybihhdXRvX25ldHdvcmtlci5wYXNzd29yZCk7Cn0KCmlubGluZSBjb25zdCBjaGFy ICoKY29uZmlndXJhdGlvbjo6YW5faG9zdG5hbWUoKSBjb25zdAp7CiAgICByZXR1cm4oYXV0b19u ZXR3b3JrZXIuaG9zdG5hbWUpOwp9CgppbmxpbmUgY29uc3QgY2hhciAqCmNvbmZpZ3VyYXRpb246 OmFuX2RhdGFiYXNlbmFtZSgpIGNvbnN0CnsKICAgIHJldHVybihhdXRvX25ldHdvcmtlci5kYXRh YmFzZW5hbWUpOwp9CgppbmxpbmUgQm9vbGVhbgpjb25maWd1cmF0aW9uOjp1ZGNfZW5hYmxlZCgp IGNvbnN0CnsKICAgIHJldHVybih1ZGMuZW5hYmxlX3VkYyk7Cn0KCmlubGluZSBCb29sZWFuCmNv bmZpZ3VyYXRpb246OnVzZV91ZGNfdGFibGUoKSBjb25zdAp7CiAgICByZXR1cm4odWRjLnVzZV91 ZGNfdGFibGUpOwp9CgppbmxpbmUgQm9vbGVhbiAJCQpjb25maWd1cmF0aW9uOjppZmljc19lbmFi bGVkKCkgY29uc3QKewogICAgcmV0dXJuKGZhY3RvcnlfY29udHJvbC5pZmljc19vbik7Cn0KCmlu bGluZSBjb25zdCBjaGFyICogCQpjb25maWd1cmF0aW9uOjppZmljc19UU05hbWUoKSAgY29uc3QK ewogICAgcmV0dXJuKGZhY3RvcnlfY29udHJvbC5pZmljc19UU05hbWUpOwp9CgppbmxpbmUgY29u c3QgY2hhciAqIAkKY29uZmlndXJhdGlvbjo6aWZpY3NfTUFDSElORSgpICBjb25zdAp7CiAgICBy ZXR1cm4oZmFjdG9yeV9jb250cm9sLmlmaWNzX01hY2hpbmUpOwp9CgppbmxpbmUgdWxvbmcKY29u ZmlndXJhdGlvbjo6aWZpY3NfUE9SVCgpIGNvbnN0CnsKICAgIHJldHVybihmYWN0b3J5X2NvbnRy b2wuaWZpY3NfcG9ydCk7Cn0KCgppbmxpbmUgdWxvbmcKY29uZmlndXJhdGlvbjo6aWZpY3NfVGlt ZW91dCgpIGNvbnN0CnsKICAgIHJldHVybihmYWN0b3J5X2NvbnRyb2wuaWZpY3NfdGltZW91dCk7 Cn0KCmlubGluZSBCb29sZWFuIAkJCmNvbmZpZ3VyYXRpb246OmVuZ19kYl9lbmFibGVkKCkgY29u c3QKewogICAgcmV0dXJuKGZhY3RvcnlfY29udHJvbC5lbmdfZGJfb24pOwp9CgppbmxpbmUgY29u c3QgY2hhciAqIAkKY29uZmlndXJhdGlvbjo6ZW5nX2RiX2hvc3RuYW1lKCkgIGNvbnN0CnsKICAg IHJldHVybihmYWN0b3J5X2NvbnRyb2wuZW5nX2RiX2hvc3RuYW1lKTsKfQoKaW5saW5lIGNvbnN0 IGNoYXIgKiAJCmNvbmZpZ3VyYXRpb246OmVuZ19kYl9Qcm9jZXNzU3RlcCgpICBjb25zdAp7CiAg ICByZXR1cm4oZmFjdG9yeV9jb250cm9sLmVuZ19kYl9Qcm9jZXNzU3RlcCk7Cn0KCmlubGluZSBj b25zdCBjaGFyICogCQpjb25maWd1cmF0aW9uOjpmY19PUElEKCkgIGNvbnN0CnsKICAgIHJldHVy bihmYWN0b3J5X2NvbnRyb2wuT3BpZCk7Cn0KCmlubGluZSBCb29sZWFuCmNvbmZpZ3VyYXRpb246 OmZjX3VzZXJfcHJvbXB0X2VuYWJsZWQoKSBjb25zdAp7CiAgICByZXR1cm4oZmFjdG9yeV9jb250 cm9sLnVzZXJfcHJvbXB0X29uKTsKfQoKaW5saW5lIGNvbnN0IGNoYXIgKiAJCmNvbmZpZ3VyYXRp b246OmZjX1VJRCgpICBjb25zdAp7CiAgICByZXR1cm4oZmFjdG9yeV9jb250cm9sLlVpZCk7Cn0K CmlubGluZSBjb25zdCBjaGFyICogCQpjb25maWd1cmF0aW9uOjpmY19TSElGVCgpICBjb25zdAp7 CiAgICByZXR1cm4oZmFjdG9yeV9jb250cm9sLlNoaWZ0KTsKfQoKaW5saW5lIHZvaWQKY29uZmln dXJhdGlvbjo6ZmNfaW5pdF91c2VyX2RhdGEodm9pZCkKewogICAgZmFjdG9yeV9jb250cm9sLlVp ZFswXSA9ICdcMCc7CiAgICBmYWN0b3J5X2NvbnRyb2wuU2hpZnRbMF0gPSAnXDAnOwp9Cgppbmxp bmUgZmxvYXQKY29uZmlndXJhdGlvbjo6b2Zmc2V0KGludCBheGlzKQp7CiAgICByZXR1cm4oaGVp Z2h0W2F4aXNdLm9mZnNldCk7Cn0KCiMgMTkgInNhdmVfc25hcC5jIiAyCgojIDEgIi4uLy4uL2lu Y2x1ZGUvbG9jYWxpbmMvRGJnY3RybC5IIiAxCgoKCgojIDEgIi4uLy4uL2luY2x1ZGUvbGliaW5j L0Vsb2cuSCIgMQoKCiAKCgoKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgoKCgpjb25zdAlpbnQJa05s b2dzCQk9IDUxMjsKCmNsYXNzIExvZyB7CnByaXZhdGU6CiAgICB1X2xvbmcJX3RpbWU7CiAgICB1 X2xvbmcJX21pbGxpc2VjOwogICAgc3RyaW5nCV9kYXRhOwogICAgYm9vbAlfdmFsaWQ7CgpwdWJs aWM6CiAgICB2b2lkCWluaXQoKSB7IF92YWxpZCA9IGZhbHNlOyBfZGF0YSA9ICIqKioqKioqXG4i OyB9CiAgICB2b2lkCWFkZChjb25zdCBjaGFyICpidWYpOwogICAgdm9pZAlkaXNwbGF5KEZJTEUg KiwgY29uc3Qgc3RyaW5nJikgY29uc3Q7Cn07CgpjbGFzcyBFbG9nIHsKcHVibGljOgogICAgRWxv Zyhjb25zdCBjaGFyICpmbmFtZSk7CiAgICB+RWxvZygpIHt9CgogICAgdm9pZAltZXNzYWdlKGJv b2wgZm9yY2UsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKICAgIHZvaWQJZGlzcGxheSgpOwogICAg dm9pZAlpbml0KCk7CiAgICB2b2lkCWxvZ2ZpbGVfaW5pdCgpOwogICAgdm9pZAlkZWJ1ZyggaW50 IGxldmVsICkgeyBfbGV2ZWwgPSBsZXZlbDsgfQogICAgaW50CQlkZWJ1ZygpIHsgcmV0dXJuIF9s ZXZlbDsgfQogICAgc3RyaW5nCWZuYW1lKCkgeyByZXR1cm4gX2ZuYW1lOyB9CiAgICBzdGF0aWMg RWxvZwkqZ2V0KCk7Cgpwcml2YXRlOgogICAgaW50CQlfbGV2ZWw7CiAgICBzdHJpbmcJX2ZuYW1l OwogICAgRklMRQkqX2ZwOwogICAgc2hvcnQJX2NsaWR4OwogICAgTG9nCQlfbG9nc1trTmxvZ3Nd OwoKICAgIHB0aHJlYWRfbXV0ZXhfdCAgICAgX2xvY2s7CgogICAgc3RhdGljIEVsb2cJKl9zZWxm OwoKfTsKCiMgNSAiLi4vLi4vaW5jbHVkZS9sb2NhbGluYy9EYmdjdHJsLkgiIDIKCiMgMSAiLi4v Li4vaW5jbHVkZS9saWJpbmMvSW1hZ2VCdWYuSCIgMQoKCiAKCgoKCiAKCgoKCiMgMSAiLi4vLi4v aW5jbHVkZS9sb2NhbGluYy9TbmFwLkgiIDEKCgoKCiMgMSAiLi4vLi4vaW5jbHVkZS9sb2NhbGlu Yy9Qb2ludC5IIiAxCgoKCgoKCgpjbGFzcyBMUG9pbnQgewpwdWJsaWM6CiAgICBMUG9pbnQoaW50 IHgsIGludCB5KSA6IF94KHgpLCBfeSh5KSB7fQogICAgTFBvaW50KCkgOiBfeCgwKSwgX3koMCkg e30KCiAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IExQb2ludCYgbGVmdCwgY29uc3Qg TFBvaW50JiByaWdodCk7CiAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0IExQb2ludCYg bGVmdCwgY29uc3QgTFBvaW50JiByaWdodCk7CgogICAgbG9uZyB4KCkgY29uc3QgeyByZXR1cm4o X3gpOyB9CiAgICB2b2lkIHgobG9uZyB2YWwpIHsgX3ggPSB2YWw7IH0KICAgIGxvbmcgeSgpIGNv bnN0IHsgcmV0dXJuKF95KTsgfQogICAgdm9pZCB5KGxvbmcgdmFsKSB7IF95ID0gdmFsOyB9Cgog ICAgbG9uZyBkb3duKCkgY29uc3QgeyByZXR1cm4oX3gpOyB9CiAgICB2b2lkIGRvd24obG9uZyB2 YWwpIHsgX3ggPSB2YWw7IH0KICAgIGxvbmcgYWNyb3NzKCkgY29uc3QgeyByZXR1cm4oX3kpOyB9 CiAgICB2b2lkIGFjcm9zcyhsb25nIHZhbCkgeyBfeSA9IHZhbDsgfQoKcHJpdmF0ZToKICAgIGxv bmcgX3g7CiAgICBsb25nIF95Owp9OwoKY2xhc3MgUG9pbnQgewpwdWJsaWM6CiAgICBQb2ludChj b29yX3QgX3gsIGNvb3JfdCBfeSkgOiB4KF94KSwgeShfeSkge30KICAgIFBvaW50KCkgOiB4KDAp LCB5KDApIHt9CgogICAgY29vcl90IHgsIHk7CgogICAgbG9uZyBkb3duKCkgY29uc3QgeyByZXR1 cm4oeCk7IH0KICAgIHZvaWQgZG93bihsb25nIHZhbCkgeyB4ID0gdmFsOyB9CiAgICBsb25nIGFj cm9zcygpIGNvbnN0IHsgcmV0dXJuKHkpOyB9CiAgICB2b2lkIGFjcm9zcyhsb25nIHZhbCkgeyB5 ID0gdmFsOyB9Cgp9OwoKaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBMUG9pbnQmIGxlZnQs IGNvbnN0IExQb2ludCYgcmlnaHQpIHsKICAgIHJldHVybihsZWZ0Ll94ID09IHJpZ2h0Ll94ICYm IGxlZnQuX3kgPT0gcmlnaHQuX3kpOwp9CgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IExQ b2ludCYgbGVmdCwgY29uc3QgTFBvaW50JiByaWdodCkgewogICAgcmV0dXJuKCEobGVmdCA9PSBy aWdodCkpOwp9CgojIDUgIi4uLy4uL2luY2x1ZGUvbG9jYWxpbmMvU25hcC5IIiAyCgojIDEgIi4u Ly4uL2luY2x1ZGUvbG9jYWxpbmMvdmlydF9waHlzLmgiIDEKCgoKCgogCgoKCgoKCgpleHRlcm4g dW5zaWduZWQgbG9uZyBnU2htZW1PZmZzZXQ7CgoKCgoKCgoKCgoKCgoKCgoKIyA2ICIuLi8uLi9p bmNsdWRlL2xvY2FsaW5jL1NuYXAuSCIgMgoKCmNsYXNzCUl0ZW07CmNsYXNzCVNpZGVudjsKY2xh c3MJSGRyOwoKY2xhc3MgU25hcCB7CnB1YmxpYzoKICAgICAKCgoKCiAgICBQb2ludCBzbl9wdDsK CiAgICB1X2ludAludW1faXRlbXMoKSBjb25zdDsKCiAgICBjb29yX3QJYWNyb3NzKCkgY29uc3Qg eyByZXR1cm4oc25fcHQueSk7IH0KICAgIGNvb3JfdAlkb3duKCkgY29uc3QgeyByZXR1cm4oc25f cHQueCk7IH0KCiAgICBjb29yX3QJYWNyb3NzKGNvb3JfdCB2YWwpIHsgc25fcHQueSA9IHZhbDsg cmV0dXJuKHZhbCk7IH0KICAgIGNvb3JfdAlkb3duKGNvb3JfdCB2YWwpIHsgc25fcHQueCA9IHZh bDsgcmV0dXJuKHZhbCk7IH0KCiAgICB2b2lkCSpvcGVyYXRvciBuZXcoc2l6ZV90IGFtdCk7CiAg ICB2b2lkCW9wZXJhdG9yIGRlbGV0ZSh2b2lkICopOwogICAgc3RhdGljIFNuYXAJKmdldF9wYXNz KGludCBwYXNzID0gLTEpOwogICAgdm9pZAlyZWxvYyhsb25nIGFtdCk7CiAgICB2b2lkCWRlbGV0 ZV9hbGxfc25hcHMoKTsKICAgICAKCgogICAgdm9pZAlyZW1vdmUoSXRlbSAqKTsKICAgIHZvaWQJ YWRkKEl0ZW0gKik7CgogICAgU25hcAkqc25fZm9ydygpIGNvbnN0OwogICAgSXRlbQkqc25faWxz dCgpIGNvbnN0OyAgCiAgICBTaWRlbnYJKnNuX3NpZGVudigpIGNvbnN0OyAgCiAgICBCb29sZWFu CXJldGFrZV90aGlzX3NuYXAoKSBjb25zdDsKICAgIEJvb2xlYW4Jc25fYmFkc25hcCgpIGNvbnN0 OwogICAgQm9vbGVhbglzbl9iYWRpdGVtKCkgY29uc3Q7CiAgICBCb29sZWFuCXNuX2JhZHNhdmVm KCkgY29uc3Q7CgogICAgdm9pZAlzbl9mb3J3KFNuYXAgKik7CiAgICB2b2lkCXNuX2lsc3QoSXRl bSAqKTsKICAgIHZvaWQJc25fc2lkZW52KFNpZGVudiAqKTsKICAgIHZvaWQJcmV0YWtlX3RoaXNf c25hcChCb29sZWFuKTsKICAgIHZvaWQJc25fYmFkc25hcChCb29sZWFuKTsKICAgIHZvaWQJc25f YmFkaXRlbShCb29sZWFuKTsKICAgIHZvaWQJc25fYmFkc2F2ZWYoQm9vbGVhbik7CgogICAgbG9u Zwlzbl9kc25wKCkgY29uc3QgeyByZXR1cm4gX3NuX2RzbnA7IH0KICAgIGxvbmcJc25fbGxjbnQo KSBjb25zdCB7IHJldHVybiBfc25fbGxjbnQ7IH0KICAgIHVfaW50CXNuX2Jhc2VncmV5KCkgY29u c3QgeyByZXR1cm4gX3NuX2Jhc2VncmV5OyB9CiAgICB1X2ludAlzbl9iYWR2Y3B1KCkgY29uc3Qg eyByZXR1cm4gX3NuX2JhZHZjcHU7IH0KICAgIHVfaW50CXNuX2JhZGZyYW1lKCkgY29uc3QgeyBy ZXR1cm4gX3NuX2JhZGZyYW1lOyB9CiAgICB1X2ludAlzbl9wYXNzKCkgY29uc3QgeyByZXR1cm4g X3NuX3Bhc3M7IH0KICAgIHVfaW50CXNuX2NhbW51bSgpIGNvbnN0IHsgcmV0dXJuIF9zbl9jYW1u dW07IH0KICAgIHVfaW50CXNuX3JwbmR4KCkgY29uc3QgeyByZXR1cm4gX3NuX3JwbmR4OyB9CiAg ICB1X2ludAludW1iZXIoKSBjb25zdCB7IHJldHVybiBfc25fcnBuZHg7IH0KICAgIGludAkJc25f YmFzZV9jb21wKCkgY29uc3QgeyByZXR1cm4gX3NuX2Jhc2VfY29tcDsgfQogICAgaW50CQlzbl8z RHdpbl9hZGooKSBjb25zdCB7IHJldHVybiBfc25fM0R3aW5fYWRqOyB9CgogICAgdm9pZAlzbl9k c25wKGxvbmcgdmFsKSB7IF9zbl9kc25wID0gdmFsOyB9CiAgICB2b2lkCXNuX2xsY250KGxvbmcg dmFsKSB7IF9zbl9sbGNudCA9IHZhbDsgfQogICAgdm9pZAlzbl9iYXNlZ3JleSh1X2ludCB2YWwp IHsgX3NuX2Jhc2VncmV5ID0gdmFsOyB9CiAgICB2b2lkCXNuX2JhZHZjcHUodV9pbnQgdmFsKSB7 IF9zbl9iYWR2Y3B1ID0gdmFsOyB9CiAgICB2b2lkCXNuX2JhZGZyYW1lKHVfaW50IHZhbCkgeyBf c25fYmFkZnJhbWUgPSB2YWw7IH0KICAgIHZvaWQJc25fcGFzcyh1X2ludCB2YWwpIHsgX3NuX3Bh c3MgPSB2YWw7IH0KICAgIHZvaWQJc25fY2FtbnVtKHVfaW50IHZhbCkgeyBfc25fY2FtbnVtID0g dmFsOyB9CiAgICB2b2lkCXNuX3JwbmR4KHVfaW50IHZhbCkgeyBfc25fcnBuZHggPSB2YWw7IH0K ICAgIHZvaWQJc25fYmFzZV9jb21wKGludCB2YWwpIHsgX3NuX2Jhc2VfY29tcCA9IHZhbDsgfQog ICAgdm9pZAlzbl8zRHdpbl9hZGooaW50IHZhbCkgeyBfc25fM0R3aW5fYWRqID0gdmFsOyB9CgoK CgogICAgflNuYXAoKTsKICAgIFNuYXAoKTsKCnByaXZhdGU6CiAgICB2b2lkCWVzc25wcmVsX2Jy ZChIZHIgKik7CgogICAgU25hcCAqX3NuX2Zvcnc7CiAgICBJdGVtICpfc25faWxzdDsJCSAKICAg IFNpZGVudiAqX3NuX3NpZGVudjsJCSAKCiAgICBCb29sZWFuIF9yZXRha2Vfc25hcDsJIAogICAg Qm9vbGVhbiBfc25fYmFkc25hcDsJIAogICAgQm9vbGVhbiBfc25fYmFkaXRlbTsJIAogICAgQm9v bGVhbiBfc25fYmFkc2F2ZWY7CSAKCiAgICBsb25nIF9zbl9kc25wOwkJIAogICAgbG9uZyBfc25f bGxjbnQ7CQkgCgogICAgdV9zaG9ydCBfc25fYmFzZWdyZXk7CSAKCiAgICBzaG9ydCBfc25fM0R3 aW5fYWRqOwkgCgoKICAgIHVfc2hvcnQgX3NuX2JhZHZjcHU7CQkgCiAgICB1X3Nob3J0IF9zbl9i YWRmcmFtZTsJIAoKICAgIHVfc2hvcnQgX3NuX3Bhc3M7CQkgCiAgICB1X3Nob3J0IF9zbl9jYW1u dW07CQkgCgogICAgdV9zaG9ydCBfc25fcnBuZHg7CQkgCgogICAgc2hvcnQgX3NuX2Jhc2VfY29t cDsJIAoKCn07CgppbmxpbmUgU25hcCAqClNuYXA6OnNuX2ZvcncoKSBjb25zdAp7CiAgICByZXR1 cm4oKCAgICBfc25fZm9ydyAgID8gKCAgU25hcCAqICApKCgoY2hhciAqKSAgICBfc25fZm9ydyAg KSArIGdTaG1lbU9mZnNldCkgOiAoICBTbmFwICogICkwKSAgKTsKfQoKaW5saW5lIEl0ZW0gKgpT bmFwOjpzbl9pbHN0KCkgY29uc3QKewogICAgcmV0dXJuKCggICAgX3NuX2lsc3QgICA/ICggIEl0 ZW0gKiAgKSgoKGNoYXIgKikgICAgX3NuX2lsc3QgICkgKyBnU2htZW1PZmZzZXQpIDogKCAgSXRl bSAqICApMCkgICk7Cn0KCmlubGluZSBTaWRlbnYgKgpTbmFwOjpzbl9zaWRlbnYoKSBjb25zdAp7 CiAgICByZXR1cm4oKCAgICBfc25fc2lkZW52ICAgPyAoICBTaWRlbnYgKiAgKSgoKGNoYXIgKikg ICAgX3NuX3NpZGVudiAgKSArIGdTaG1lbU9mZnNldCkgOiAoICBTaWRlbnYgKiAgKTApICApOwp9 CgppbmxpbmUgQm9vbGVhbgpTbmFwOjpyZXRha2VfdGhpc19zbmFwKCkgY29uc3QKewogICAgcmV0 dXJuIF9yZXRha2Vfc25hcDsKfQoKaW5saW5lIEJvb2xlYW4KU25hcDo6c25fYmFkc25hcCgpIGNv bnN0CnsKICAgIHJldHVybiBfc25fYmFkc25hcDsKfQoKaW5saW5lIEJvb2xlYW4KU25hcDo6c25f YmFkaXRlbSgpIGNvbnN0CnsKICAgIHJldHVybiBfc25fYmFkaXRlbTsKfQoKaW5saW5lIEJvb2xl YW4KU25hcDo6c25fYmFkc2F2ZWYoKSBjb25zdAp7CiAgICByZXR1cm4gX3NuX2JhZHNhdmVmOwp9 CgppbmxpbmUgdm9pZApTbmFwOjpzbl9pbHN0KEl0ZW0gKmlsc3QpCnsKICAgIF9zbl9pbHN0ID0g KCAgICBpbHN0ICAgPyAoICBJdGVtICogICkoKChjaGFyICopICAgIGlsc3QgICkgLSBnU2htZW1P ZmZzZXQpIDogKCAgSXRlbSAqICApMCkgIDsKfQoKaW5saW5lIHZvaWQKU25hcDo6c25fZm9ydyhT bmFwICpzbikKewogICAgX3NuX2ZvcncgPSAoICAgIHNuICAgPyAoICBTbmFwICogICkoKChjaGFy ICopICAgIHNuICApIC0gZ1NobWVtT2Zmc2V0KSA6ICggIFNuYXAgKiAgKTApICA7Cn0KCmlubGlu ZSB2b2lkClNuYXA6OnNuX3NpZGVudihTaWRlbnYgKmRhdGEpCnsKICAgIF9zbl9zaWRlbnYgPSAo ICAgIGRhdGEgICA/ICggIFNpZGVudiAqICApKCgoY2hhciAqKSAgICBkYXRhICApIC0gZ1NobWVt T2Zmc2V0KSA6ICggIFNpZGVudiAqICApMCkgIDsKfQoKaW5saW5lIHZvaWQKU25hcDo6cmV0YWtl X3RoaXNfc25hcChCb29sZWFuIGlzX3NldCkKewogICAgX3JldGFrZV9zbmFwID0gaXNfc2V0Owp9 CgppbmxpbmUgdm9pZApTbmFwOjpzbl9iYWRzbmFwKEJvb2xlYW4gaXNfc2V0KQp7CiAgICBfc25f YmFkc25hcCA9IGlzX3NldDsKfQoKaW5saW5lIHZvaWQKU25hcDo6c25fYmFkaXRlbShCb29sZWFu IGlzX3NldCkKewogICAgX3NuX2JhZGl0ZW0gPSBpc19zZXQ7Cn0KCmlubGluZSB2b2lkClNuYXA6 OnNuX2JhZHNhdmVmKEJvb2xlYW4gaXNfc2V0KQp7CiAgICBfc25fYmFkc2F2ZWYgPSBpc19zZXQ7 Cn0KCgojIDEzICIuLi8uLi9pbmNsdWRlL2xpYmluYy9JbWFnZUJ1Zi5IIiAyCgoKIApjb25zdCB1 X2NoYXIga0ZvcmNlUHJpdmF0ZUJ1ZmZlcgk9IDB4ZmY7CSAKCmNvbnN0IGludCBrTWF4SUJCcwkJ CT0gNDsKY29uc3QgaW50IGtCYW5rc1BlcklCQgkJCT0gMjsJIApjb25zdCBjYWRkcl90IGtJQkJD b250cm9sUmVnaXN0ZXIJPSAoY2FkZHJfdCkweDAxMDAwMDAwOwpjb25zdCBjYWRkcl90IGtJQkJD b2x1bW5TcmFtCQk9IChjYWRkcl90KTB4MDIwMDAwMDA7CmNvbnN0IGNhZGRyX3Qga0lCQlJvd1Ny YW0JCT0gKGNhZGRyX3QpMHgwMzAwMDAwMDsKY29uc3QgY2FkZHJfdCBrSUJCRkJBZGRyZXNzQ291 bnRlcgk9IChjYWRkcl90KTB4MDQwMDAwMDA7CmNvbnN0IGZiYWRkcl90IGtJQkJGcmFtZUJ1ZmZl ckJhbmswCT0gKGZiYWRkcl90KTB4MTAwMDAwMDA7CmNvbnN0IGZiYWRkcl90IGtJQkJGcmFtZUJ1 ZmZlckJhbmsxCT0gKGZiYWRkcl90KTB4MTgwMDAwMDA7CmNvbnN0IGludCBrSUJCQmFua09mZnNl dE1hc2sJCT0gMHgwN0ZGRkZGRjsKCgpjb25zdCBsb25nIGtJQkJJbWFnZURvbmUJCT0gKDFMIDw8 IDMxKTsKCmNvbnN0IGxvbmcga1JUQ0NvbnRpbnVlSW5zcGVjdGlvbgk9IDB4MDAwMDAwMDBMOwpj b25zdCBsb25nIGtSVENCZWdpbkZpcnN0U2NhbgkJPSAweDAwNDAwMDAwTDsKY29uc3QgbG9uZyBr UlRDQmVnaW5MYXN0U2NhbgkJPSAweDAwODAwMDAwTDsKY29uc3QgbG9uZyBrUlRDRW5kU2NhbgkJ CT0gMHgwMEMwMDAwMEw7CgogCgoKCgoKY29uc3QgaW50IGtJbWFnZUJ1Zk5vSW1hZ2UJCT0gMHhG RkZGOwoKY2xhc3MgSW1hZ2VCdWYgewpwdWJsaWM6CiAgICBJbWFnZUJ1ZigpOwogICAgSW1hZ2VC dWYoIGludCBpYmIsIGludCBiYW5rLCBpbnQgaW5kZXgsCgkgICAgICBTbmFwICogcFNuYXAgPSAo U25hcCAqKV9fbnVsbCAgKTsKICAgIH5JbWFnZUJ1ZigpOwoKICAgICAKCgogICAgZmJhZGRyX3Qg YWRkcihib29sIHdyaXRhYmxlID0gZmFsc2UpOyAgCiAgICAgCgoKCiAgICB2b2lkIHByaXZhdGVf ZmIoZmJhZGRyX3QpOwogICAgZmJhZGRyX3QgcHJpdmF0ZV9mYigpIHsgcmV0dXJuKF9wcml2YXRl X2ZiKTsgfQoKICAgIHZvaWQgdW5tYXAoKSB7fTsKCiAgICBTbmFwICogc25hcCgpIHsgcmV0dXJu IF9zbmFwOyB9CiAgICB2b2lkIHNuYXAoU25hcCAqIHBTbmFwKSB7IF9zbmFwID0gcFNuYXA7IH0K CiAgICAgCgoKCgogICAgaW50IGliYl9udW0oKTsKICAgIGludCBiYW5rKCk7CiAgICBpbnQgaW5k ZXgoKTsKCiAgICAgCgoKICAgIGludCBjYW1lcmFfdG9fdXNlKCkgeyByZXR1cm4gX2NhbWVyYV90 b191c2U7IH0KICAgIHZvaWQgY2FtZXJhX3RvX3VzZShpbnQgY2FtKSB7IF9jYW1lcmFfdG9fdXNl ID0gY2FtOyB9CgogICAgc2l6ZV90IGltYWdlX3NpemUoKSB7IHJldHVybiBfaW1hZ2Vfc2l6ZTsg fQoKICAgICAKCgoKCiAgICB2b2lkIGNob29zZSggaW50IGliYiwgaW50IGJhbmssIGludCBpbmRl eCwKICAgIAkJIFNuYXAgKiBwU25hcCA9IChTbmFwICopX19udWxsICApOwoKICAgIHN0YXRpYyB2 b2lkCQlmYm0oaW50IGliYl9udW0sIGludCBiYW5rLCBmYmFkZHJfdCBhZGRyKTsJCgpwcml2YXRl OgogICAgbG9uZwkJX2Nvb2tpZTsKICAgIFNuYXAgKgkJX3NuYXA7CiAgICAgCgoKCiAgICBmYmFk ZHJfdAkJX3ByaXZhdGVfZmI7CiAgICBmYmFkZHJfdAkJX3ByaXZhdGVfZmJfYnVmOwogICAgaW50 CQkJX2NhbWVyYV90b191c2U7CgogICAgIAoKCgogICAgc3RhdGljIGZiYWRkcl90CV9mYm1ba01h eElCQnNdW2tCYW5rc1BlcklCQl07CgogICAgc3RhdGljIHNpemVfdAlfaW1hZ2Vfc2l6ZTsKCiAg ICBzdGF0aWMgdm9pZAkJaW5pdCgpOwp9OwoKIyA2ICIuLi8uLi9pbmNsdWRlL2xvY2FsaW5jL0Ri Z2N0cmwuSCIgMgoKCiMgMSAiLi4vLi4vaW5jbHVkZS9saWJpbmMvbGlidXRpbC5oIiAxCiMgMjI0 ICIuLi8uLi9pbmNsdWRlL2xpYmluYy9saWJ1dGlsLmgiCgoKIyAzNjIgIi4uLy4uL2luY2x1ZGUv bGliaW5jL2xpYnV0aWwuaCIKCiMgMzk2ICIuLi8uLi9pbmNsdWRlL2xpYmluYy9saWJ1dGlsLmgi CgojIDggIi4uLy4uL2luY2x1ZGUvbG9jYWxpbmMvRGJnY3RybC5IIiAyCgogCgoKCgoKCiAKCgoK CgoKCgoKCgoKCnN0YXRpYyBjb25zdCBzaG9ydCBEQkdfQ0xFQVIJPSAwOwkgCnN0YXRpYyBjb25z dCBzaG9ydCBEQkdfQ09QWQk9IDE7CSAKIAoKCgpzdGF0aWMgY29uc3Qgc2hvcnQgREJHX0NPUFlf QUxMCT0gMDsJIApzdGF0aWMgY29uc3Qgc2hvcnQgREJHX0NPUFlfMgk9IDI7CSAKc3RhdGljIGNv bnN0IHNob3J0IERCR19DT1BZXzQJPSA0OwkgCgpjbGFzcyBEYmdjdHJsIHsKcHJpdmF0ZToKICAg ICAKCgoKICAgIHVfY2hhcgkqX3NoYXJlZF9mYl9wdHI7CSAKCiAgICAgCgoKCiAgICBzdGF0aWMg dV9jaGFyICpfc2hhcmVkX2ZiX2FkZHI7CSAKCnB1YmxpYzoKICAgIHN0YXRpYyBEYmdjdHJsICpn ZXQoKTsKCiAgICB1X2NoYXIJKmhvc3RfZmJfcHRyOwkgCiAgICBzaG9ydAlkYmdfc3RhdGU7CSAK ICAgIHNob3J0CWRiZ19jb3B5OwkgCgogICAgdV9jaGFyCSpzaGFyZWRfZmJfcHRyKCk7CiAgICB2 b2lkCXNoYXJlZF9mYl9wdHIodV9jaGFyICpkYXRhKTsKICAgIHN0YXRpYyB1X2NoYXIgKnNoYXJl ZF9mYl9hZGRyKCkgeyByZXR1cm4oX3NoYXJlZF9mYl9hZGRyKTsgfQogICAgc3RhdGljIHZvaWQg c2hhcmVkX2ZiX2FkZHIodV9jaGFyICphZGRyKSB7IF9zaGFyZWRfZmJfYWRkciA9IGFkZHI7IH0K fTsKCmlubGluZSB2b2lkCkRiZ2N0cmw6OnNoYXJlZF9mYl9wdHIodV9jaGFyICpkYXRhKQp7CiAg ICBfc2hhcmVkX2ZiX3B0ciA9ICggICAgZGF0YSAgID8gKCAgdV9jaGFyICogICkoKChjaGFyICop ICAgIGRhdGEgICkgLSBnU2htZW1PZmZzZXQpIDogKCAgdV9jaGFyICogICkwKSAgOwp9CgojIDIw ICJzYXZlX3NuYXAuYyIgMgoKCiMgMSAiLi4vLi4vaW5jbHVkZS9saWJpbmMvVnN1YnMuaCIgMQoK CgoKIyAxICIvdXNyL2luY2x1ZGUvbWVtb3J5LmgiIDEgMyA0CiAKIAoKIAogCiAKCgoKCiNwcmFn bWEgaWRlbnQJIkAoIyltZW1vcnkuaAkxLjEzCTAwLzA3LzEwIFNNSSIJCgoKCgpleHRlcm4gIkMi IHsKCgoKZXh0ZXJuIHZvaWQgKm1lbWNjcHkodm9pZCAqLCBjb25zdCB2b2lkICosIGludCwgc2l6 ZV90KTsKIyAzNCAiL3Vzci9pbmNsdWRlL21lbW9yeS5oIiAzIDQKCmV4dGVybiB2b2lkICptZW1j aHIoY29uc3Qgdm9pZCAqLCBpbnQsIHNpemVfdCk7CgpleHRlcm4gdm9pZCAqbWVtY3B5KHZvaWQg KiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwpleHRlcm4gdm9pZCAqbWVtc2V0KHZvaWQgKiwgaW50 LCBzaXplX3QpOwpleHRlcm4gaW50IG1lbWNtcChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKiwg c2l6ZV90KTsKCgoKCgoKCgoKfQoKCgojIDUgIi4uLy4uL2luY2x1ZGUvbGliaW5jL1ZzdWJzLmgi IDIKCgoKCgogCgoKCgogCgoKCnR5cGVkZWYJZW51bSB7IGtTdW1CeVJvd3MsIGtTdW1CeUNvbHVt bnMsIGtFcnJvciB9IGVBbGdvRGlyZWN0aW9uOwoKdHlwZWRlZiBlbnVtIHsga1JpZ2h0LCBrTGVm dCB9IGVCcmlkZ2VEaXJlY3Rpb247CiAKCgp0eXBlZGVmIGVudW0geyBrRGlyVXAsIGtEaXJEb3du IH0gZVN1YkRpcmVjdGlvbjsKCgoKIAoKCnN0YXRpYwljb25zdAlpbnQJa0ZpbHRlclN1bVBpeGVs cwk9IDA7CnN0YXRpYwljb25zdAlpbnQJa0ZpbHRlckNvdW50VHJhbnNsYXRpb25zPSAyOwpzdGF0 aWMJY29uc3QJaW50CWtGaWx0ZXJXZWlnaHRlZEF2ZXJhZ2UJPSAzOwpzdGF0aWMJY29uc3QJaW50 CWtGaWx0ZXJNZWRpYW4JCT0gNDsKc3RhdGljCWNvbnN0CWludAlrRmlsdGVyU3VtT3Zlck1pblBp eGVsCT0gNjsKc3RhdGljCWNvbnN0CWludAlrRmlsdGVyVW5pZm9ybQkJPSA3OwpzdGF0aWMJY29u c3QJaW50CWtGaWx0ZXJOb3JtYWxpemUJPSA5OwpzdGF0aWMJY29uc3QJaW50CWtGaWx0ZXJNaW5Q aXhlbAkJPSAxMTsKc3RhdGljCWNvbnN0CWludAlrRmlsdGVyRmluZEdyZWF0ZXIJPSAxMzsKc3Rh dGljCWNvbnN0CWludAlrRmlsdGVyRmluZExlc3MJCT0gMTU7CnN0YXRpYwljb25zdAlpbnQJa0Zp bHRlck1hc2sJCT0gMHhmOwoKIAoKCgpzdGF0aWMJY29uc3QJaW50CWtGaWx0ZXJDbGFtcAkJPSAx NjsKc3RhdGljCWNvbnN0CWludAlrRmlsdGVyRXJvZGVEaWFsYXRlCT0gMzI7CnN0YXRpYwljb25z dAlpbnQJa0ZpbHRlckRpYWxhdGVFcm9kZQk9IDY0OwpzdGF0aWMJY29uc3QJaW50CWtGaWx0ZXJO b0xvd1Bhc3NGaWx0ZXIJPSAyNTY7Cgp0eXBlZGVmCXVfbG9uZwlwYnVjX3Q7CnR5cGVkZWYgdV9j aGFyCXBpeGVsX3Q7CgoKIyAyMiAic2F2ZV9zbmFwLmMiIDIKCiMgMSAiLi4vLi4vaW5jbHVkZS9s b2NhbGluYy9GcmFtZS5IIiAxCgoKIAoKCgoKCgoKCgoKCgoKCmNsYXNzCVZjcHVyZXM7CmNsYXNz CUNhbWRlc2M7CmNsYXNzCUltYWdlQnVmOwoKY2xhc3MgRnJhbWUgewpwdWJsaWM6CiAgICBXaW5k CWZfd2luOwoKCiAgICAgCgoKCiAgICBGcmFtZSgpIDogX2RyYXdpbmdfY3Jvc3MoZmFsc2UpLCBf ZHJhd2luZ19jaXJjbGUoZmFsc2UpLCBfZHJhd2luZ19saW5lKGZhbHNlKSB7fQogICAgRnJhbWUo SW1hZ2VCdWYgKiwgQ2FtZGVzYyAqKTsKICAgIEZyYW1lKGludCwgQ2FtZGVzYyAqKTsKCgogICAg IAoKCiAgICBsb25nCWhlaWdodCgpIGNvbnN0IHsgcmV0dXJuKF9mX2hlaWdodCk7IH0KICAgIGxv bmcJd2lkdGgoKSBjb25zdCB7IHJldHVybihfZl93aWR0aCk7IH0KICAgIHZvaWQJcHJpbnQoY29u c3QgV2luZCYpOwoKICAgIGJvb2wJY2hlY2tfd2luKFdpbmQgKmN3KSBjb25zdDsKCiAgICB2b2lk CXNldF9mcmFtZV9idWZmZXIoaW50LCBDYW1kZXNjICosIGJvb2wgPSBmYWxzZSk7CiAgICB2b2lk CXNldF9mcmFtZV9hZGRyZXNzKHVfY2hhciAqIGRhdGEpIHsgX2ZfZnJhZHIgPSBkYXRhOyB9Cgog ICAgdm9pZAlWcmVjdChjb25zdCBXaW5kICp3aW4sIGludCBwZW4gPSAtMSwgaW50IGNvbCA9IC0x KSBjb25zdDsKICAgIHZvaWQJVmNyb3NzKGludCBkd24sIGludCBhY2MsIGludCBsZW4pIGNvbnN0 OwogICAgdm9pZAlWaG9yaXooaW50IGR3biwgaW50IGFjYywgaW50IGwpIGNvbnN0OwogICAgdm9p ZAlWdmVydChpbnQgZHduLCBpbnQgYWNjLCBpbnQgbCkgY29uc3Q7CiAgICB2b2lkCVZwaXhlbChp bnQgZHduLCBpbnQgYWNjKSBjb25zdDsKICAgIHZvaWQJVmNpcmNsZSgpIGNvbnN0IHsgZHJhd19w b2ludHMoKTsgfQogICAgdm9pZAlWY2lyY2xlKGNvbnN0IFdpbmQmIHcpIGNvbnN0OwoKICAgIHZv aWQJVnByb2ZpbGUoKSBjb25zdCB7IGRyYXdfcG9pbnRzKCk7IH0KCiAgICAgCgoKICAgIHZvaWQJ aW5pdF9kcmF3aW5nKCkgY29uc3Q7CgogICAgdm9pZAlWc3RhcnRfcHJvZmlsZSgpIGNvbnN0IHsg aW5pdF9kcmF3aW5nKCk7IH0KICAgIHZvaWQJVnN0YXJ0X2NpcmNsZSgpIGNvbnN0OwogICAgIAoK CiAgICB2b2lkCWRyYXdfY2lyY2xlKGludCwgaW50LCBpbnQpIGNvbnN0OwoKICAgIHZvaWQJVmxp bmUoaW50IHgwLCBpbnQgeTAsIGludCB4MSwgaW50IHkxKSBjb25zdDsKICAgIGludAlWY2xpcChX aW5kICp3KSBjb25zdDsKCiAgICAgCgoKCiAgICBpbnQJY3V0X2hpc3RvKHBidWNfdCAqaCwgY29u c3QgV2luZCAqdywgaW50KSBjb25zdDsKICAgIHZvaWQJY3RoaXN0KHBidWNfdCAqLCBjb25zdCBX aW5kICosIGludCkgY29uc3Q7CiAgICB2b2lkCWN0YXZnKFZjcHVyZXMgKnZyZXNwLCBXaW5kICp3 KTsKCiAgICBpbmxpbmUgdV9jaGFyCSpnZXRfZnJhbWVfb2Zmc2V0KGludCwgaW50KSBjb25zdDsK ICAgIGlubGluZSB1X2NoYXIJKmdldF9jb2xvcl9mcmFtZV9vZmZzZXQoaW50LCBpbnQpIGNvbnN0 OwoKICAgIHZvaWQJd2luYWRqdXN0KFdpbmQgKnN3aW4pOwkJIAogICAgIAoKCgogICAgdm9pZAlz aG93X3dpbihjb25zdCBXaW5kKiB3LCBjb25zdCBjaGFyICpwcm9tcHQsIGJvb2wgY2lyY2xlID0g ZmFsc2UpIGNvbnN0OwoKcHJpdmF0ZToKICAgICAKCgogICAgbXV0YWJsZSBsb25nCV9taW5fYWNj OwogICAgbXV0YWJsZSBsb25nCV9taW5fZHduOwogICAgbXV0YWJsZSBsb25nCV9tYXhfZHduOwog ICAgbXV0YWJsZSBsb25nCV9tYXhfYWNjOwoKICAgIG11dGFibGUgQm9vbGVhbglfZHJhd2luZ19w cm9maWxlOwogICAgbXV0YWJsZSBCb29sZWFuCV9kcmF3aW5nX2Nyb3NzOwogICAgbXV0YWJsZSBC b29sZWFuCV9kcmF3aW5nX2NpcmNsZTsKICAgIG11dGFibGUgQm9vbGVhbglfZHJhd2luZ19saW5l OwoKICAgIGxvbmcJX2Zfd2lkdGg7CSAKICAgIGxvbmcJX2ZfaGVpZ2h0OwkgCgogICAgdV9jaGFy CSpfZl9mcmFkcjsKICAgICAKCgoKICAgIHZvaWQgZHJhd19waXhtYXAoYm9vbCwgaW50LCBpbnQs IGludCwgaW50KSBjb25zdDsKICAgIHZvaWQgc3ltX2NpcihpbnQgeCwgaW50IHksIGludCB4X29m ZiwgaW50IHlfb2ZmKSBjb25zdDsKICAgIHZvaWQgZHJhd19wb2ludHMoKSBjb25zdDsKfTsKCmlu bGluZSB1X2NoYXIgKgpGcmFtZTo6Z2V0X2ZyYW1lX29mZnNldChpbnQgdXAsIGludCBsZWZ0KSBj b25zdAp7CgoKCgoKCiAgICByZXR1cm4oJl9mX2ZyYWRyWyh1cCAqIF9mX3dpZHRoKSArIGxlZnRd KTsKfQoKaW5saW5lIHVfY2hhciAqCkZyYW1lOjpnZXRfY29sb3JfZnJhbWVfb2Zmc2V0KGludCB1 cCwgaW50IGxlZnQpIGNvbnN0CnsKICAgIGlmICh1cCAmIDEpCgktLXVwOwogICAgCiAgICBpZiAo bGVmdCAmIDEpCgktLWxlZnQ7CiAgICByZXR1cm4oZ2V0X2ZyYW1lX29mZnNldCh1cCwgbGVmdCkp Owp9CgppbmxpbmUgYm9vbApGcmFtZTo6Y2hlY2tfd2luKFdpbmQgKmN3KSBjb25zdAp7CiAgICAg CgoKICAgIGlmIChjdy0+IF9XaW4uc3cubGYgIDwgMCkKCWN3LT4gX1dpbi5zdy5sZiAgPSAwOwog ICAgaWYgKGN3LT4gX1dpbi5zdy51cCAgPCAwKQoJY3ctPiBfV2luLnN3LnVwICA9IDA7CiAgICBp ZiAoY3ctPiBfV2luLnN3LnJ0ICA+PSB3aWR0aCgpKQoJY3ctPiBfV2luLnN3LnJ0ICA9IHdpZHRo KCkgLSAxOwogICAgaWYgKGN3LT4gX1dpbi5zdy5kbiAgPj0gaGVpZ2h0KCkpCgljdy0+IF9XaW4u c3cuZG4gID0gaGVpZ2h0KCkgLSAxOwoKICAgICAKCgogICAgaWYgKGN3LT4gX1dpbi5zdy5sZiAg Pj0gY3ctPiBfV2luLnN3LnJ0ICB8fCBjdy0+IF9XaW4uc3cudXAgID49IGN3LT4gX1dpbi5zdy5k biApCglyZXR1cm4oZmFsc2UpOwoKICAgIHJldHVybih0cnVlKTsKfQoKaW5saW5lIHZvaWQKRnJh bWU6OlZjaXJjbGUoY29uc3QgV2luZCYgdykgY29uc3QKewogICAgV2luZCBjbnRyKHcpOwogICAg Y250ci5zMmMoKTsKICAgIGRyYXdfY2lyY2xlKGNudHIuIF9XaW4uY3cueCAsIGNudHIuIF9XaW4u Y3cueSAsIChjbnRyLiBfV2luLmN3LmR4ICArIGNudHIuIF9XaW4uY3cuZHkgKSAvIDQpOwp9Cgpz dGF0aWMgaW5saW5lIHZvaWQKVnJlY3QoY29uc3QgRnJhbWUgKmYsIGNvbnN0IFdpbmQgKndpbiwg aW50IHBlbiA9IC0xLCBpbnQgY29sID0gLTEpCnsKICAgIGYtPlZyZWN0KHdpbiwgcGVuLCBjb2wp Owp9CgpzdGF0aWMgaW5saW5lIHZvaWQKVmNyb3NzKGNvbnN0IEZyYW1lICpmLCBpbnQgZHduLCBp bnQgYWNjLCBpbnQgbGVuKQp7CiAgICBmLT5WY3Jvc3MoZHduLCBhY2MsIGxlbik7Cn0KCnN0YXRp YyBpbmxpbmUgdm9pZApWaG9yaXooY29uc3QgRnJhbWUgKmYsIGludCBkd24sIGludCBhY2MsIGlu dCBsKQp7CiAgICBmLT5WaG9yaXooZHduLCBhY2MsIGwpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQK VnZlcnQoY29uc3QgRnJhbWUgKmYsIGludCBkd24sIGludCBhY2MsIGludCBsKQp7CiAgICBmLT5W dmVydChkd24sIGFjYywgbCk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZApWcGl4ZWwoY29uc3QgRnJh bWUgKmYsIGludCBkd24sIGludCBhY2MpCnsKICAgIGYtPlZwaXhlbChkd24sIGFjYyk7Cn0KCnN0 YXRpYyBpbmxpbmUgdm9pZApWY2lyY2xlKGNvbnN0IEZyYW1lICpmKQp7CiAgICBmLT5WY2lyY2xl KCk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZApWbGluZShjb25zdCBGcmFtZSAqZiwgaW50IHgwLCBp bnQgeTAsIGludCB4MSwgaW50IHkxKQp7CiAgICBmLT5WbGluZSh4MCwgeTAsIHgxLCB5MSk7Cn0K CnN0YXRpYyBpbmxpbmUgaW50ClZjbGlwKGNvbnN0IEZyYW1lICpmLCBXaW5kICp3KQp7CiAgICBy ZXR1cm4oZi0+VmNsaXAodykpOwp9CgpzdGF0aWMgaW5saW5lIGludApjaGVja193aW4oV2luZCAq Y3csIGNvbnN0IEZyYW1lICpmKQp7CiAgICByZXR1cm4oZi0+Y2hlY2tfd2luKGN3KSA/IDAgOiAt MSk7Cn0KCiMgMjMgInNhdmVfc25hcC5jIiAyCgojIDEgIkluc3BlY3Rvci5IIiAxCgoKCgp1c2lu ZyBuYW1lc3BhY2Ugc3RkOwoKCgpzdHJ1Y3Qgc25hcGFybXM7CgpjbGFzcyBQYXNzOwpjbGFzcyBB bGlnbjsKY2xhc3MgVGhyZXNob2xkOwpjbGFzcyBIaWJ1OwpjbGFzcyBTbmFwU3BhY2U7CmNsYXNz IEhkcjsKY2xhc3MgU25hcDsKY2xhc3MgU3luYzsKY2xhc3MgSXRlbTsKY2xhc3MgV2luZDsKY2xh c3MgTWVtZGVzYzsKY2xhc3MgUmVzdWx0czsKY2xhc3MgY29uZmlndXJhdGlvbjsKY2xhc3MgRnJh bWU7CmNsYXNzIEdyb3VwOwpjbGFzcyBGdW5uZWw7Cgpjb25zdCAgICAgaW50ICAgICBrRmlyc3RD YW1lcmEgICAgPSAxOwplbnVtIGVTYXZlVHlwZSB7IGtTbmFwLCBrRnJhbWUsIGtGaWR1IH07Cgpj bGFzcyBJbnNwZWN0b3IgewpwdWJsaWM6CiAgICBJbnNwZWN0b3IoKTsKICAgIHZpcnR1YWwgfklu c3BlY3RvcigpIHt9CgogICAgdmlydHVhbCB2b2lkIG5vdF9mbHlpbmcoU25hcCAqKSB7fQogICAg dmlydHVhbCB2b2lkIGRpc3BsYXlfcmVzdWx0cyhjb25zdCBHcm91cCAqKSB7fQogICAgdmlydHVh bCB2b2lkIGRpc3BsYXlfM2Rfc25hcChpbnQgc25hcF9udW0pIHt9OwogICAgdmlydHVhbCBpbnQg bXNuYXAoKTsKCiAgICAgCgoKICAgIHZpcnR1YWwgdm9pZCBwdXRfbWVzc2FnZShjb25zdCBzdHJp bmcmIHN0cikgPSAwOwogICAgdmlydHVhbCB2b2lkIHJlcG9ydCgpIHt9CiAgICB2aXJ0dWFsIHZv aWQgcmV2aWV3KGNvbnN0IFN5bmMgKkRzeSwgYm9vbCBhbGxfYm9hcmRzLCBib29sIGNhbl9jaGFu Z2VfYWxnb3MpIHt9CgogICAgdmlydHVhbCBzbmFwX3Jlc190IHNuYXAoaW50IHNuYXBubywgaW50 IGNhbSwgYm9vbCBmaWR1ID0gZmFsc2UsIGNvbnN0IFN5bmMgKnN5bmMgPSAwLCBTbmFwICpuZXh0 X3NuYXAgPSAwKTsKCiAgICBzbmFwX3Jlc190IHNuYXAzZChpbnQgc25hcG5vLCBpbnQgY2FtLCBi b29sIGZpZHUgPSBmYWxzZSwgY29uc3QgU3luYyAqc3luYyA9IDAsIFNuYXAgKm5leHRfc25hcCA9 IDApOwoKICAgIGxvbmcgYmFzZWdyZXkoRnJhbWUgKmYsIFNuYXBTcGFjZSAmc25hcF9zcGFjZSwg U25hcCAqc25hcCk7CgogICAgaW50IGdldF9udW1fZmlkdSgpIHsgcmV0dXJuIF9udW1fZmlkdTsg fQogICAgdm9pZCBzZXRfbnVtX2ZpZHUoaW50IHZhbCkgeyBfbnVtX2ZpZHUgPSB2YWw7fSAKCiAg ICBBbGlnbiAqZ2V0X2FsaWduKCkgeyByZXR1cm4gX2FsaWduO30KICAgIHZvaWQgc2V0X2FsaWdu KEFsaWduICp2YWwpIHtfYWxpZ24gPSB2YWw7fQoKICAgIGJvb2wgcmVnaXN0ZXJfYm9hcmQoY29u c3QgU3luYyAqRHN5KTsKICAgIHZvaWQgc2hvd19pbnNwZWN0aW9uX2Vycm9ycygpOwogICAgIAoK CgogICAgdm9pZCBzaG93X2FsbF9lcnJvcnMobG9uZyBpbngsIGJvb2wpOwogICAgIAoKCiAgICBi b29sIGhhdmVfcmVzdWx0cygpIGNvbnN0IHsgcmV0dXJuKF9oYXZlX3Jlc3VsdHMpOyB9CiAgICAK ICAgIHZvaWQgaGFyZHdhcmVfZmx5aW5nKGJvb2wgdmFsdWUpIHsgX2hhcmR3YXJlX2ZseWluZyA9 IHZhbHVlOyB9CiAgICBib29sIGhhcmR3YXJlX2ZseWluZygpIGNvbnN0IHsgcmV0dXJuKF9oYXJk d2FyZV9mbHlpbmcpOyB9CgogICAgYm9vbCBsZXZlbDEoaW50IGFsZ28gPSAtMSwgRnVubmVsICpy ZW1vdGUgPSBfX251bGwgLCBib29sIGZvcl8zZF9zbmFwID0gZmFsc2UpOwogICAgaW50IGxldmVs MihpbnQgcGFzcyA9IC0xKTsKCiAgICBib29sIGluc3BlY3RfcGFzcyhib29sIGRvaW5nX2ZseWlu Z19pbnNwZWN0aW9uLCBpbnQgYWxnbyA9IC0xKTsKICAgIGJvb2wgaW5zcGVjdF9zbmFwKFNuYXAg KkRzLCBjb25zdCBTeW5jICpEc3ksIFNuYXAgKkRzX2ZvcncpOwoKICAgIGludCBzcGVjX29uZShT bmFwICosIGNvbnN0IFN5bmMgKiwgaW50IHNuYXBubywgYm9vbCBzaG93X3dpbmRvd3MgPSBmYWxz ZSwgSXRlbSAqID0gMCwgYm9vbCA9IGZhbHNlKTsKICAgIGludCByZXRha2VfYmFkX3NuYXBzKFN5 bmMgKkRzeSk7CgogICAgYm9vbCBxdWl0X2luc3BlY3Rpb24oKSBjb25zdCB7IHJldHVybihfcXVp dF9pbnNwZWN0aW9uKTsgfQogICAgdm9pZCBxdWl0X2luc3BlY3Rpb24oYm9vbCB2YWwpIHsgX3F1 aXRfaW5zcGVjdGlvbiA9IHZhbDsgfQoKICAgIGJvb2wgY3VycmVudF9zbmFwX251bSgpIGNvbnN0 IHsgcmV0dXJuKF9jdXJfc25hcG5vKTsgfQogICAgdm9pZCBjdXJyZW50X3NuYXBfbnVtKGludCB2 YWwpIHsgX2N1cl9zbmFwbm8gPSB2YWw7IH0KCiAgICBib29sIGZyZXNoX2ZseV9qdXN0X2RvbmUo KSBjb25zdCB7IHJldHVybihfZnJlc2hfZmx5X2p1c3RfZG9uZSk7IH0KICAgIHZvaWQgZnJlc2hf Zmx5X2p1c3RfZG9uZShib29sIHZhbCkgeyBfZnJlc2hfZmx5X2p1c3RfZG9uZSA9IHZhbDsgfQoK ICAgIFN5bmMgKiBnZXRfYm9hcmRfc3luY19wb2ludChpbnQgaW54ID0gLTEpOwogICAgCiAgICBp bnQgc2F2ZV9zbmFwKGludCBzbiwgY29uc3QgU25hcCAqRHMsIGVTYXZlVHlwZSBzdHlsZSwgYm9v bCBzYXZpbmdfYWxsX3NuYXBzKTsKICAgIHZvaWQgc2F2ZV9maWR1cyhjb25zdCBTeW5jICpEc3ks IGJvb2wgc2F2aW5nX2FsbF9zbmFwcyk7Cgpwcm90ZWN0ZWQ6CiAgICBIZHIgKmVzcDsJCSAKICAg IE1lbWRlc2MgKl9tZW1kcDsKCiAgICBzdGF0aWMgYm9vbCBfcXVpdF9pbnNwZWN0aW9uOwogICAg aW50IF9jdXJfc25hcG5vOwkJIAogICAgaW50IF9zeW5jX2lkOwogICAgYm9vbCBfZG9pbmdfZmx5 aW5nX2luc3BlY3Rpb247CgogICAgaW50IF9iYWRfc25hcF9jb3VudGVyOwogICAgYm9vbCBfb2tf dG9fcnVuX3JldmlldzsKICAgIGJvb2wgX2ZyZXNoX2ZseV9qdXN0X2RvbmU7CgogICAgYm9vbCBw cm9jZXNzX3NuYXAoU25hcCAqRHMsIFN5bmMgKkRzeSk7CiAgICBpbnQgZmlkdWNpYWxzKGNvbnN0 IFN5bmMgKiwgRnJhbWUgKik7CgogICAgdmlydHVhbCBib29sIGNoZWNrX21vdmVfYWhlYWQoU25h cCAqbnMpIHsgcmV0dXJuKG5zICE9IDApOyB9CiAgICB2aXJ0dWFsIGJvb2wgY2hlY2tfaW50ZXJh Y3RpdmUoU3luYyAqRHN5KSB7IHJldHVybihmYWxzZSk7IH0KICAgIHZpcnR1YWwgYm9vbCBjaGVj a19xdWl0KGNvbnN0IFNuYXAgKikgeyByZXR1cm4oZmFsc2UpOyB9CiAgICB2aXJ0dWFsIGJvb2wg cmV2aWV3X2R1cmluZyhJdGVtICpqdXN0bWUsIFJlc3VsdHMgKkRyLCBjb25zdCBTeW5jICosIEl0 ZW0gKiwgU25hcCAqKSB7IHJldHVybihmYWxzZSk7IH0KICAgIHZpcnR1YWwgdm9pZCByZXN0b3Jl X3NuYXBfc2VsZWN0aW9uKCkge30KICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVfc2NyZWVuKCkge30K ICAgIHZpcnR1YWwgYm9vbCBzZXRfc2VyaWFsKCkgeyByZXR1cm4oZmFsc2UpOyB9CiAgICB2aXJ0 dWFsIGJvb2wgY2hlY2tfc3BjbF9mbGFncyhpbnQsIGJvb2wsIGludCkgeyByZXR1cm4gKGZhbHNl KTsgfQogICAgYm9vbAltYWNoaW5lX2ZseWluZ19zaW5nbGVfc25hcChib29sLCBpbnQsIHN0cnVj dCBzbmFwYXJtcyosIEZ1bm5lbCAqKTsKCnByaXZhdGU6CiAgICBib29sCV9oYXZlX3Jlc3VsdHM7 CiAgICBib29sCV9oYXJkd2FyZV9mbHlpbmc7CiAgICBpbnQJCV9udW1fZmlkdTsJCSAKICAgIGlu dAkJX3JldHJ5X2NvdW50OwogICAgQWxpZ24JKl9hbGlnbjsKCiAgICB2b2lkCXNhdmVfaW1hZ2Uo aW50IHNuYXBubywgYm9vbCBmaWR1ID0gZmFsc2UpOwogICAgaW50CQljaGVja19ncm91cChHcm91 cCAqRGcpOwogICAgdm9pZAltYWNoaW5lX2ZseWluZ19pbnNwZWN0aW9uKEZ1bm5lbCAqcmVtb3Rl LCBib29sIGZseWluZ19zaW5nbGVfcGFzcyk7CiAgICBsb25nCWNhbGNfY2dsMTAoSGlidSAqaGgs IHVfaW50IG5ncmF5KTsKCiAgICBib29sCWluc3BlY3RfZmlkdWNpYWwoRnJhbWUgKiwgaW50LCBJ dGVtICosIFNuYXAmICwgY29uc3QgU3luYyAqLCBSZXN1bHRzICosIFdpbmQgKiwgV2luZCAqKTsK CiAgICBib29sCWRlYnVnX29uKGNvbnN0IEl0ZW0gKkRpKSBjb25zdDsKICAgIFNuYXAgKglmaW5k X25leHRfZmlkdShpbnQgZmlkdV9udW0pOwogICAgdm9pZAlkcmF3X2ZpZHVjaWFsX3dpbmRvdyhX aW5kJiBmd2luLCBJdGVtICpEaSk7CgogICAgIAoKCiAgICBib29sCWNhbl9mbHlfZmlkdWNpYWxz KCk7CiAgICBib29sCWZseV9maWR1Y2lhbHMoKTsKICAgIGludCAgICAgICAgIGJ1aWxkX2ZpZHVj aWFsX3NuYXBzKCk7CiAgICB2b2lkICAgICAgICBmbHlfZmlkdWNpYWxfc25hcHMoKTsKICAgIHZv aWQJd2Fsa19maWR1Y2lhbHMoY29uc3QgU3luYyAqLCBGcmFtZSAqLCBQYXNzICopOwogICAgIAoK Cgp9OwoKZXh0ZXJuIEluc3BlY3RvciAqaW5zcGVjdG9yOwoKIyAyNCAic2F2ZV9zbmFwLmMiIDIK CiMgMSAiLi4vLi4vaW5jbHVkZS9sb2NhbGluYy9IZHIuSCIgMQoKCgogCgoKCgoKCgojIDEgIi9v cHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8u Li8uLi9pbmNsdWRlL2crKy0zL3NldCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgojIDEgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUu My8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF90cmVlLmgiIDEgMwogCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvb3B0 L212cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi8yLjk1LjMvLi4vLi4vLi4v Li4vaW5jbHVkZS9nKystMy9zdGxfZnVuY3Rpb24uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCiAKCgoKCgoKIAoKdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+CnN0 cnVjdCB1bmFyeV9mdW5jdGlvbiB7CiAgdHlwZWRlZiBfQXJnIGFyZ3VtZW50X3R5cGU7CiAgdHlw ZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFz cyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4Kc3RydWN0IGJpbmFyeV9mdW5jdGlvbiB7CiAgdHlwZWRl ZiBfQXJnMSBmaXJzdF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX0FyZzIgc2Vjb25kX2FyZ3Vt ZW50X3R5cGU7CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOwp9OyAgICAgIAoKdGVtcGxh dGUgPGNsYXNzIF9UcD4Kc3RydWN0IHBsdXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxf VHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195 KSBjb25zdCB7IHJldHVybiBfX3ggKyBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0 cnVjdCBtaW51cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAg b3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJu IF9feCAtIF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG11bHRpcGxpZXMg OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCko Y29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggKiBfX3k7 IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBkaXZpZGVzIDogcHVibGljIGJpbmFy eV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194 LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IC8gX195OyB9Cn07CgogCgp0ZW1w bGF0ZSA8Y2xhc3MgX1RwPiBpbmxpbmUgX1RwIGlkZW50aXR5X2VsZW1lbnQocGx1czxfVHA+KSB7 CiAgcmV0dXJuIF9UcCgwKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBpbmxpbmUgX1RwIGlkZW50 aXR5X2VsZW1lbnQobXVsdGlwbGllczxfVHA+KSB7CiAgcmV0dXJuIF9UcCgxKTsKfQoKdGVtcGxh dGUgPGNsYXNzIF9UcD4Kc3RydWN0IG1vZHVsdXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9U cCxfVHAsX1RwPiAKewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAm IF9feSkgY29uc3QgeyByZXR1cm4gX194ICUgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw PgpzdHJ1Y3QgbmVnYXRlIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfVHA+IAp7CiAgX1Rw IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuIC1fX3g7IH0KfTsKCnRl bXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBlcXVhbF90byA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rp b248X1RwLF9UcCxib29sPiAKewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA9PSBfX3k7IH0KfTsKCnRlbXBsYXRlIDxj bGFzcyBfVHA+CnN0cnVjdCBub3RfZXF1YWxfdG8gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9U cCxfVHAsYm9vbD4gCnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9U cCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggIT0gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwPgpzdHJ1Y3QgZ3JlYXRlciA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29s PiAKewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNv bnN0IHsgcmV0dXJuIF9feCA+IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0 IGxlc3MgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4gCnsKICBib29sIG9w ZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBf X3ggPCBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBncmVhdGVyX2VxdWFs IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9y KCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPj0g X195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbGVzc19lcXVhbCA6IHB1Ymxp YyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPiAKewogIGJvb2wgb3BlcmF0b3IoKShjb25z dCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA8PSBfX3k7IH0K fTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX2FuZCA6IHB1YmxpYyBiaW5h cnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYg X194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICYmIF9feTsgfQp9OwoKdGVt cGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfb3IgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0 aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCB8fCBfX3k7IH0KfTsKCnRlbXBsYXRlIDxj bGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX25vdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAs Ym9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QgeyByZXR1cm4g IV9feDsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNsYXNzIHVuYXJ5X25lZ2F0 ZQogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3VtZW50 X3R5cGUsIGJvb2w+IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVibGljOgog IGV4cGxpY2l0IHVuYXJ5X25lZ2F0ZShjb25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChf X3gpIHt9CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3Vt ZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuICFfTV9wcmVkKF9feCk7CiAgfQp9OwoK dGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSB1bmFyeV9uZWdhdGU8X1ByZWRpY2F0 ZT4gCm5vdDEoY29uc3QgX1ByZWRpY2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJuIHVuYXJ5X25lZ2F0 ZTxfUHJlZGljYXRlPihfX3ByZWQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4gCmNs YXNzIGJpbmFyeV9uZWdhdGUgCiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9Q cmVkaWNhdGU6OmZpcnN0X2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg IHR5cGVuYW1lIF9QcmVkaWNhdGU6OnNlY29uZF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAg ICAgICAgICAgICAgICBib29sPiB7CnByb3RlY3RlZDoKICBfUHJlZGljYXRlIF9NX3ByZWQ7CnB1 YmxpYzoKICBleHBsaWNpdCBiaW5hcnlfbmVnYXRlKGNvbnN0IF9QcmVkaWNhdGUmIF9feCkgOiBf TV9wcmVkKF9feCkge30KICBib29sIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0 ZTo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX194LCAKICAgICAgICAgICAgICAgICAgY29uc3QgdHlw ZW5hbWUgX1ByZWRpY2F0ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feSkgY29uc3QKICB7CiAg ICByZXR1cm4gIV9NX3ByZWQoX194LCBfX3kpOyAKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1By ZWRpY2F0ZT4KaW5saW5lIGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4gCm5vdDIoY29uc3QgX1By ZWRpY2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJuIGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4oX19w cmVkKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24+IApjbGFzcyBiaW5kZXIxc3QKICA6 IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1l bnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpy ZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6CiAgX09wZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBfT3Bl cmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlIHZhbHVlOwpwdWJsaWM6CiAgYmluZGVyMXN0KGNv bnN0IF9PcGVyYXRpb24mIF9feCwKICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX09wZXJhdGlv bjo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX195KQogICAgICA6IG9wKF9feCksIHZhbHVlKF9feSkg e30KICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3Qg dHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3Qgewog ICAgcmV0dXJuIG9wKHZhbHVlLCBfX3gpOyAKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJh dGlvbiwgY2xhc3MgX1RwPgppbmxpbmUgYmluZGVyMXN0PF9PcGVyYXRpb24+IApiaW5kMXN0KGNv bnN0IF9PcGVyYXRpb24mIF9fb3BlciwgY29uc3QgX1RwJiBfX3gpIAp7CiAgdHlwZWRlZiB0eXBl bmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlIF9BcmcxX3R5cGU7CiAgcmV0dXJu IGJpbmRlcjFzdDxfT3BlcmF0aW9uPihfX29wZXIsIF9BcmcxX3R5cGUoX194KSk7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfT3BlcmF0aW9uPiAKY2xhc3MgYmluZGVyMm5kCiAgOiBwdWJsaWMgdW5hcnlf ZnVuY3Rpb248dHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZT4gewpw cm90ZWN0ZWQ6CiAgX09wZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRf YXJndW1lbnRfdHlwZSB2YWx1ZTsKcHVibGljOgogIGJpbmRlcjJuZChjb25zdCBfT3BlcmF0aW9u JiBfX3gsCiAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1 bWVudF90eXBlJiBfX3kpIAogICAgICA6IG9wKF9feCksIHZhbHVlKF9feSkge30KICB0eXBlbmFt ZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09w ZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3Ao X194LCB2YWx1ZSk7IAogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uLCBjbGFzcyBf VHA+CmlubGluZSBiaW5kZXIybmQ8X09wZXJhdGlvbj4gCmJpbmQybmQoY29uc3QgX09wZXJhdGlv biYgX19vcGVyLCBjb25zdCBfVHAmIF9feCkgCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVyYXRp b246OnNlY29uZF9hcmd1bWVudF90eXBlIF9BcmcyX3R5cGU7CiAgcmV0dXJuIGJpbmRlcjJuZDxf T3BlcmF0aW9uPihfX29wZXIsIF9BcmcyX3R5cGUoX194KSk7Cn0KCiAKCnRlbXBsYXRlIDxjbGFz cyBfT3BlcmF0aW9uMSwgY2xhc3MgX09wZXJhdGlvbjI+CmNsYXNzIHVuYXJ5X2NvbXBvc2UKICA6 IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uMjo6YXJndW1lbnRfdHlw ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uMTo6cmVzdWx0 X3R5cGU+IAp7CnByb3RlY3RlZDoKICBfT3BlcmF0aW9uMSBfX29wMTsKICBfT3BlcmF0aW9uMiBf X29wMjsKcHVibGljOgogIHVuYXJ5X2NvbXBvc2UoY29uc3QgX09wZXJhdGlvbjEmIF9feCwgY29u c3QgX09wZXJhdGlvbjImIF9feSkgCiAgICA6IF9fb3AxKF9feCksIF9fb3AyKF9feSkge30KICB0 eXBlbmFtZSBfT3BlcmF0aW9uMTo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVu YW1lIF9PcGVyYXRpb24yOjphcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBf X29wMShfX29wMihfX3gpKTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbjEsIGNs YXNzIF9PcGVyYXRpb24yPgppbmxpbmUgdW5hcnlfY29tcG9zZTxfT3BlcmF0aW9uMSxfT3BlcmF0 aW9uMj4gCmNvbXBvc2UxKGNvbnN0IF9PcGVyYXRpb24xJiBfX29wMSwgY29uc3QgX09wZXJhdGlv bjImIF9fb3AyKQp7CiAgcmV0dXJuIHVuYXJ5X2NvbXBvc2U8X09wZXJhdGlvbjEsX09wZXJhdGlv bjI+KF9fb3AxLCBfX29wMik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uMSwgY2xhc3Mg X09wZXJhdGlvbjIsIGNsYXNzIF9PcGVyYXRpb24zPgpjbGFzcyBiaW5hcnlfY29tcG9zZQogIDog cHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRpb24yOjphcmd1bWVudF90eXBl LAogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb24xOjpyZXN1bHRf dHlwZT4gewpwcm90ZWN0ZWQ6CiAgX09wZXJhdGlvbjEgX01fb3AxOwogIF9PcGVyYXRpb24yIF9N X29wMjsKICBfT3BlcmF0aW9uMyBfTV9vcDM7CnB1YmxpYzoKICBiaW5hcnlfY29tcG9zZShjb25z dCBfT3BlcmF0aW9uMSYgX194LCBjb25zdCBfT3BlcmF0aW9uMiYgX195LCAKICAgICAgICAgICAg ICAgICBjb25zdCBfT3BlcmF0aW9uMyYgX196KSAKICAgIDogX01fb3AxKF9feCksIF9NX29wMihf X3kpLCBfTV9vcDMoX196KSB7IH0KICB0eXBlbmFtZSBfT3BlcmF0aW9uMTo6cmVzdWx0X3R5cGUK ICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb24yOjphcmd1bWVudF90eXBlJiBf X3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV9vcDEoX01fb3AyKF9feCksIF9NX29wMyhfX3gpKTsK ICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbjEsIGNsYXNzIF9PcGVyYXRpb24yLCBj bGFzcyBfT3BlcmF0aW9uMz4KaW5saW5lIGJpbmFyeV9jb21wb3NlPF9PcGVyYXRpb24xLCBfT3Bl cmF0aW9uMiwgX09wZXJhdGlvbjM+IApjb21wb3NlMihjb25zdCBfT3BlcmF0aW9uMSYgX19vcDEs IGNvbnN0IF9PcGVyYXRpb24yJiBfX29wMiwgCiAgICAgICAgIGNvbnN0IF9PcGVyYXRpb24zJiBf X29wMykKewogIHJldHVybiBiaW5hcnlfY29tcG9zZTxfT3BlcmF0aW9uMSxfT3BlcmF0aW9uMixf T3BlcmF0aW9uMz4KICAgIChfX29wMSwgX19vcDIsIF9fb3AzKTsKfQoKdGVtcGxhdGUgPGNsYXNz IF9BcmcsIGNsYXNzIF9SZXN1bHQ+CmNsYXNzIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24gOiBw dWJsaWMgdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4gewpwcm90ZWN0ZWQ6CiAgX1Jlc3Vs dCAoKl9NX3B0cikoX0FyZyk7CnB1YmxpYzoKICBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uKCkg e30KICBleHBsaWNpdCBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gpKF9B cmcpKSA6IF9NX3B0cihfX3gpIHt9CiAgX1Jlc3VsdCBvcGVyYXRvcigpKF9BcmcgX194KSBjb25z dCB7IHJldHVybiBfTV9wdHIoX194KTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNz IF9SZXN1bHQ+CmlubGluZSBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+ IHB0cl9mdW4oX1Jlc3VsdCAoKl9feCkoX0FyZykpCnsKICByZXR1cm4gcG9pbnRlcl90b191bmFy eV9mdW5jdGlvbjxfQXJnLCBfUmVzdWx0PihfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEs IGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0PgpjbGFzcyBwb2ludGVyX3RvX2JpbmFyeV9mdW5j dGlvbiA6IAogIHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3VsdD4gewpw cm90ZWN0ZWQ6CiAgICBfUmVzdWx0ICgqX01fcHRyKShfQXJnMSwgX0FyZzIpOwpwdWJsaWM6CiAg ICBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbigpIHt9CiAgICBleHBsaWNpdCBwb2ludGVyX3Rv X2JpbmFyeV9mdW5jdGlvbihfUmVzdWx0ICgqX194KShfQXJnMSwgX0FyZzIpKSAKICAgICAgOiBf TV9wdHIoX194KSB7fQogICAgX1Jlc3VsdCBvcGVyYXRvcigpKF9BcmcxIF9feCwgX0FyZzIgX195 KSBjb25zdCB7CiAgICAgIHJldHVybiBfTV9wdHIoX194LCBfX3kpOwogICAgfQp9OwoKdGVtcGxh dGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4KaW5saW5lIHBvaW50 ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+IApwdHJfZnVuKF9SZXN1 bHQgKCpfX3gpKF9BcmcxLCBfQXJnMikpIHsKICByZXR1cm4gcG9pbnRlcl90b19iaW5hcnlfZnVu Y3Rpb248X0FyZzEsX0FyZzIsX1Jlc3VsdD4oX194KTsKfQoKIAp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw PgpzdHJ1Y3QgX0lkZW50aXR5IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfVHA+IHsKICBj b25zdCBfVHAmIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9feDsg fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4gc3RydWN0IGlkZW50aXR5IDogcHVibGljIF9JZGVu dGl0eTxfVHA+IHt9OwoKIAp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+CnN0cnVjdCBfU2VsZWN0MXN0 IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9QYWlyLCB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlw ZT4gewogIGNvbnN0IHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlJiBvcGVyYXRvcigpKGNvbnN0 IF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guZmlyc3Q7CiAgfQp9OwoKdGVtcGxh dGUgPGNsYXNzIF9QYWlyPgpzdHJ1Y3QgX1NlbGVjdDJuZCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlv bjxfUGFpciwgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlPgp7CiAgY29uc3QgdHlwZW5hbWUg X1BhaXI6OnNlY29uZF90eXBlJiBvcGVyYXRvcigpKGNvbnN0IF9QYWlyJiBfX3gpIGNvbnN0IHsK ICAgIHJldHVybiBfX3guc2Vjb25kOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4gc3Ry dWN0IHNlbGVjdDFzdCA6IHB1YmxpYyBfU2VsZWN0MXN0PF9QYWlyPiB7fTsKdGVtcGxhdGUgPGNs YXNzIF9QYWlyPiBzdHJ1Y3Qgc2VsZWN0Mm5kIDogcHVibGljIF9TZWxlY3QybmQ8X1BhaXI+IHt9 OwoKIAp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyPgpzdHJ1Y3QgX1Byb2plY3Qx c3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLCBfQXJnMiwgX0FyZzE+IHsKICBfQXJn MSBvcGVyYXRvcigpKGNvbnN0IF9BcmcxJiBfX3gsIGNvbnN0IF9BcmcyJikgY29uc3QgeyByZXR1 cm4gX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyPgpzdHJ1Y3Qg X1Byb2plY3QybmQgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLCBfQXJnMiwgX0FyZzI+ IHsKICBfQXJnMiBvcGVyYXRvcigpKGNvbnN0IF9BcmcxJiwgY29uc3QgX0FyZzImIF9feSkgY29u c3QgeyByZXR1cm4gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9Bcmcy PiAKc3RydWN0IHByb2plY3Qxc3QgOiBwdWJsaWMgX1Byb2plY3Qxc3Q8X0FyZzEsIF9BcmcyPiB7 fTsKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzI+CnN0cnVjdCBwcm9qZWN0Mm5k IDogcHVibGljIF9Qcm9qZWN0Mm5kPF9BcmcxLCBfQXJnMj4ge307CgogCiAKIAp0ZW1wbGF0ZSA8 Y2xhc3MgX1Jlc3VsdD4Kc3RydWN0IGNvbnN0YW50X3ZvaWRfZnVuCnsKICB0eXBlZGVmIF9SZXN1 bHQgcmVzdWx0X3R5cGU7CiAgcmVzdWx0X3R5cGUgX192YWw7CiAgY29uc3RhbnRfdm9pZF9mdW4o Y29uc3QgcmVzdWx0X3R5cGUmIF9fdikgOiBfX3ZhbChfX3YpIHt9CiAgY29uc3QgcmVzdWx0X3R5 cGUmIG9wZXJhdG9yKCkoKSBjb25zdCB7IHJldHVybiBfX3ZhbDsgfQp9OyAgCgoKdGVtcGxhdGUg PGNsYXNzIF9SZXN1bHQsIGNsYXNzIF9Bcmd1bWVudCA9IF9SZXN1bHQ+CgoKCnN0cnVjdCBjb25z dGFudF91bmFyeV9mdW4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X0FyZ3VtZW50LCBfUmVzdWx0 PiB7CiAgX1Jlc3VsdCBfTV92YWw7CiAgY29uc3RhbnRfdW5hcnlfZnVuKGNvbnN0IF9SZXN1bHQm IF9fdikgOiBfTV92YWwoX192KSB7fQogIGNvbnN0IF9SZXN1bHQmIG9wZXJhdG9yKCkoY29uc3Qg X0FyZ3VtZW50JikgY29uc3QgeyByZXR1cm4gX01fdmFsOyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNz IF9SZXN1bHQsIGNsYXNzIF9BcmcxID0gX1Jlc3VsdCwgY2xhc3MgX0FyZzIgPSBfQXJnMT4KCgoK c3RydWN0IGNvbnN0YW50X2JpbmFyeV9mdW4gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9Bcmcx LCBfQXJnMiwgX1Jlc3VsdD4gewogIF9SZXN1bHQgX01fdmFsOwogIGNvbnN0YW50X2JpbmFyeV9m dW4oY29uc3QgX1Jlc3VsdCYgX192KSA6IF9NX3ZhbChfX3YpIHt9CiAgY29uc3QgX1Jlc3VsdCYg b3BlcmF0b3IoKShjb25zdCBfQXJnMSYsIGNvbnN0IF9BcmcyJikgY29uc3QgewogICAgcmV0dXJu IF9NX3ZhbDsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdD4KaW5saW5lIGNvbnN0YW50 X3ZvaWRfZnVuPF9SZXN1bHQ+IGNvbnN0YW50MChjb25zdCBfUmVzdWx0JiBfX3ZhbCkKewogIHJl dHVybiBjb25zdGFudF92b2lkX2Z1bjxfUmVzdWx0PihfX3ZhbCk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfUmVzdWx0PgppbmxpbmUgY29uc3RhbnRfdW5hcnlfZnVuPF9SZXN1bHQsX1Jlc3VsdD4gY29u c3RhbnQxKGNvbnN0IF9SZXN1bHQmIF9fdmFsKQp7CiAgcmV0dXJuIGNvbnN0YW50X3VuYXJ5X2Z1 bjxfUmVzdWx0LF9SZXN1bHQ+KF9fdmFsKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQ+Cmlu bGluZSBjb25zdGFudF9iaW5hcnlfZnVuPF9SZXN1bHQsX1Jlc3VsdCxfUmVzdWx0PiAKY29uc3Rh bnQyKGNvbnN0IF9SZXN1bHQmIF9fdmFsKQp7CiAgcmV0dXJuIGNvbnN0YW50X2JpbmFyeV9mdW48 X1Jlc3VsdCxfUmVzdWx0LF9SZXN1bHQ+KF9fdmFsKTsKfQoKIAogCmNsYXNzIHN1YnRyYWN0aXZl X3JuZyA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludD4g ewpwcml2YXRlOgogIHVuc2lnbmVkIGludCBfTV90YWJsZVs1NV07CiAgc2l6ZV90IF9NX2luZGV4 MTsKICBzaXplX3QgX01faW5kZXgyOwpwdWJsaWM6CiAgdW5zaWduZWQgaW50IG9wZXJhdG9yKCko dW5zaWduZWQgaW50IF9fbGltaXQpIHsKICAgIF9NX2luZGV4MSA9IChfTV9pbmRleDEgKyAxKSAl IDU1OwogICAgX01faW5kZXgyID0gKF9NX2luZGV4MiArIDEpICUgNTU7CiAgICBfTV90YWJsZVtf TV9pbmRleDFdID0gX01fdGFibGVbX01faW5kZXgxXSAtIF9NX3RhYmxlW19NX2luZGV4Ml07CiAg ICByZXR1cm4gX01fdGFibGVbX01faW5kZXgxXSAlIF9fbGltaXQ7CiAgfQoKICB2b2lkIF9NX2lu aXRpYWxpemUodW5zaWduZWQgaW50IF9fc2VlZCkKICB7CiAgICB1bnNpZ25lZCBpbnQgX19rID0g MTsKICAgIF9NX3RhYmxlWzU0XSA9IF9fc2VlZDsKICAgIHNpemVfdCBfX2k7CiAgICBmb3IgKF9f aSA9IDA7IF9faSA8IDU0OyBfX2krKykgewogICAgICAgIHNpemVfdCBfX2lpID0gKDIxICogKF9f aSArIDEpICUgNTUpIC0gMTsKICAgICAgICBfTV90YWJsZVtfX2lpXSA9IF9fazsKICAgICAgICBf X2sgPSBfX3NlZWQgLSBfX2s7CiAgICAgICAgX19zZWVkID0gX01fdGFibGVbX19paV07CiAgICB9 CiAgICBmb3IgKGludCBfX2xvb3AgPSAwOyBfX2xvb3AgPCA0OyBfX2xvb3ArKykgewogICAgICAg IGZvciAoX19pID0gMDsgX19pIDwgNTU7IF9faSsrKQogICAgICAgICAgICBfTV90YWJsZVtfX2ld ID0gX01fdGFibGVbX19pXSAtIF9NX3RhYmxlWygxICsgX19pICsgMzApICUgNTVdOwogICAgfQog ICAgX01faW5kZXgxID0gMDsKICAgIF9NX2luZGV4MiA9IDMxOwogIH0KCiAgc3VidHJhY3RpdmVf cm5nKHVuc2lnbmVkIGludCBfX3NlZWQpIHsgX01faW5pdGlhbGl6ZShfX3NlZWQpOyB9CiAgc3Vi dHJhY3RpdmVfcm5nKCkgeyBfTV9pbml0aWFsaXplKDE2MTgwMzM5OHUpOyB9Cn07CgoKIAoKIAog CiAKIAogCiAKIAoKIAogCiAKIAogCgogCiAKIAogCiAKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwg Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwKixf UmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3QoX1JldCAoX1RwOjoqX19wZikoKSkg OiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCogX19wKSBjb25zdCB7IHJldHVy biAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCk7Cn07Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3QgOiBw dWJsaWMgdW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNp dCBjb25zdF9tZW1fZnVuX3QoX1JldCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYp IHt9CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9UcCogX19wKSBjb25zdCB7IHJldHVybiAoX19w LT4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07CgoK dGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl9yZWZfdCA6IHB1 YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1 bl9yZWZfdChfUmV0IChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJh dG9yKCkoX1RwJiBfX3IpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToK ICBfUmV0IChfVHA6OipfTV9mKSgpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9U cD4KY2xhc3MgY29uc3RfbWVtX2Z1bl9yZWZfdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAs X1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl9yZWZfdChfUmV0IChfVHA6 OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3Qg X1RwJiBfX3IpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0 IChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9U cCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248 X1RwKixfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3QoX1JldCAoX1Rw OjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAqIF9f cCwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6 CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZyk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xh c3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV90IDogcHVibGljIGJpbmFy eV9mdW5jdGlvbjxjb25zdCBfVHAqLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29u c3RfbWVtX2Z1bjFfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYp IHt9CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9UcCogX19wLCBfQXJnIF9feCkgY29uc3QKICAg IHsgcmV0dXJuIChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01f ZikoX0FyZykgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFz cyBfQXJnPgpjbGFzcyBtZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1Rw LF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1Rw OjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAmIF9f ciwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToK ICBfUmV0IChfVHA6OipfTV9mKShfQXJnKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFz cyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3JlZl90IDogcHVibGljIGJp bmFyeV9mdW5jdGlvbjxfVHAsX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9t ZW1fZnVuMV9yZWZfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYp IHt9CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyBy ZXR1cm4gKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9B cmcpIGNvbnN0Owp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3Q8dm9p ZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAqLHZvaWQ+IHsKcHVibGljOgogIGV4 cGxpY2l0IG1lbV9mdW5fdCh2b2lkIChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICB2 b2lkIG9wZXJhdG9yKCkoX1RwKiBfX3ApIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0 ZToKICB2b2lkIChfVHA6OipfTV9mKSgpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3Mg Y29uc3RfbWVtX2Z1bl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248Y29uc3Qg X1RwKix2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3Qodm9pZCAoX1Rw OjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0 IF9UcCogX19wKSBjb25zdCB7IChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1Rw OjoqX01fZikoKSBjb25zdDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5f cmVmX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsdm9pZD4gewpwdWJs aWM6CiAgZXhwbGljaXQgbWVtX2Z1bl9yZWZfdCh2b2lkIChfVHA6OipfX3BmKSgpKSA6IF9NX2Yo X19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwJiBfX3IpIGNvbnN0IHsgKF9fci4qX01fZiko KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3JlZl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlf ZnVuY3Rpb248X1RwLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fcmVm X3Qodm9pZCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVy YXRvcigpKGNvbnN0IF9UcCYgX19yKSBjb25zdCB7IChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToK ICB2b2lkIChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh c3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfdDx2b2lkLCBfVHAsIF9Bcmc+IDogcHVibGljIGJpbmFy eV9mdW5jdGlvbjxfVHAqLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFf dCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRv cigpKF9UcCogX19wLCBfQXJnIF9feCkgY29uc3QgeyAoX19wLT4qX01fZikoX194KTsgfQpwcml2 YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg Y2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfdDx2b2lkLCBfVHAsIF9Bcmc+IAogIDog cHVibGljIGJpbmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAg ZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfdCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkg OiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCogX19wLCBfQXJnIF9f eCkgY29uc3QgeyAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9N X2YpKF9BcmcpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xh c3MgbWVtX2Z1bjFfcmVmX3Q8dm9pZCwgX1RwLCBfQXJnPgogIDogcHVibGljIGJpbmFyeV9mdW5j dGlvbjxfVHAsX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV9yZWZfdCh2 b2lkIChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigp KF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyAoX19yLipfTV9mKShfX3gpOyB9CnByaXZhdGU6 CiAgdm9pZCAoX1RwOjoqX01fZikoX0FyZyk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz cyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBw dWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0 IGNvbnN0X21lbV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9N X2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IsIF9BcmcgX194KSBj b25zdCB7IChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShf QXJnKSBjb25zdDsKfTsKCgoKIAogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9U cD4KaW5saW5lIG1lbV9mdW5fdDxfUmV0LF9UcD4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKCkp CiAgeyByZXR1cm4gbWVtX2Z1bl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1JldCwgY2xhc3MgX1RwPgppbmxpbmUgY29uc3RfbWVtX2Z1bl90PF9SZXQsX1RwPiBtZW1fZnVu KF9SZXQgKF9UcDo6Kl9fZikoKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuX3Q8X1Jl dCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBt ZW1fZnVuX3JlZl90PF9SZXQsX1RwPiBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKCkpIAog IHsgcmV0dXJuIG1lbV9mdW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFz cyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBjb25zdF9tZW1fZnVuX3JlZl90PF9SZXQsX1RwPiBt ZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKCkgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVt X2Z1bl9yZWZfdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNz IF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIG1lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1 bihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3Q8X1JldCxfVHAs X0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0Fy Zz4KaW5saW5lIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bihfUmV0IChf VHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxf VHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3Mg X0FyZz4KaW5saW5lIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW5fcmVmKF9S ZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAgeyByZXR1cm4gbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAs X0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0Fy Zz4KaW5saW5lIGNvbnN0X21lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+Cm1lbV9mdW5fcmVm KF9SZXQgKF9UcDo6Kl9fZikoX0FyZykgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFf cmVmX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNz IF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIG1lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1 bjEoX1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVybiBtZW1fZnVuMV90PF9SZXQsX1Rw LF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9B cmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4xKF9SZXQg KF9UcDo6Kl9fZikoX0FyZykgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfdDxfUmV0 LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFz cyBfQXJnPgppbmxpbmUgbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bjFfcmVm KF9SZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAgeyByZXR1cm4gbWVtX2Z1bjFfcmVmX3Q8X1JldCxf VHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3Mg X0FyZz4KaW5saW5lIGNvbnN0X21lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+Cm1lbV9mdW4x X3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9m dW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCiAKCgoKIAogCiAKIyA1OSAiL29wdC9t dnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4u L2luY2x1ZGUvZysrLTMvc3RsX3RyZWUuaCIgMiAzCgoKICAKCgoKCgp0eXBlZGVmIGJvb2wgX1Ji X3RyZWVfQ29sb3JfdHlwZTsKY29uc3QgX1JiX3RyZWVfQ29sb3JfdHlwZSBfU19yYl90cmVlX3Jl ZCA9IGZhbHNlOwpjb25zdCBfUmJfdHJlZV9Db2xvcl90eXBlIF9TX3JiX3RyZWVfYmxhY2sgPSB0 cnVlOwoKc3RydWN0IF9SYl90cmVlX25vZGVfYmFzZQp7CiAgdHlwZWRlZiBfUmJfdHJlZV9Db2xv cl90eXBlIF9Db2xvcl90eXBlOwogIHR5cGVkZWYgX1JiX3RyZWVfbm9kZV9iYXNlKiBfQmFzZV9w dHI7CgogIF9Db2xvcl90eXBlIF9NX2NvbG9yOyAKICBfQmFzZV9wdHIgX01fcGFyZW50OwogIF9C YXNlX3B0ciBfTV9sZWZ0OwogIF9CYXNlX3B0ciBfTV9yaWdodDsKCiAgc3RhdGljIF9CYXNlX3B0 ciBfU19taW5pbXVtKF9CYXNlX3B0ciBfX3gpCiAgewogICAgd2hpbGUgKF9feC0+X01fbGVmdCAh PSAwKSBfX3ggPSBfX3gtPl9NX2xlZnQ7CiAgICByZXR1cm4gX194OwogIH0KCiAgc3RhdGljIF9C YXNlX3B0ciBfU19tYXhpbXVtKF9CYXNlX3B0ciBfX3gpCiAgewogICAgd2hpbGUgKF9feC0+X01f cmlnaHQgIT0gMCkgX194ID0gX194LT5fTV9yaWdodDsKICAgIHJldHVybiBfX3g7CiAgfQp9OwoK dGVtcGxhdGUgPGNsYXNzIF9WYWx1ZT4Kc3RydWN0IF9SYl90cmVlX25vZGUgOiBwdWJsaWMgX1Ji X3RyZWVfbm9kZV9iYXNlCnsKICB0eXBlZGVmIF9SYl90cmVlX25vZGU8X1ZhbHVlPiogX0xpbmtf dHlwZTsKICBfVmFsdWUgX01fdmFsdWVfZmllbGQ7Cn07CgoKc3RydWN0IF9SYl90cmVlX2Jhc2Vf aXRlcmF0b3IKewogIHR5cGVkZWYgX1JiX3RyZWVfbm9kZV9iYXNlOjpfQmFzZV9wdHIgX0Jhc2Vf cHRyOwogIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdv cnk7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIF9CYXNlX3B0ciBfTV9u b2RlOwoKICB2b2lkIF9NX2luY3JlbWVudCgpCiAgewogICAgaWYgKF9NX25vZGUtPl9NX3JpZ2h0 ICE9IDApIHsKICAgICAgX01fbm9kZSA9IF9NX25vZGUtPl9NX3JpZ2h0OwogICAgICB3aGlsZSAo X01fbm9kZS0+X01fbGVmdCAhPSAwKQogICAgICAgIF9NX25vZGUgPSBfTV9ub2RlLT5fTV9sZWZ0 OwogICAgfQogICAgZWxzZSB7CiAgICAgIF9CYXNlX3B0ciBfX3kgPSBfTV9ub2RlLT5fTV9wYXJl bnQ7CiAgICAgIHdoaWxlIChfTV9ub2RlID09IF9feS0+X01fcmlnaHQpIHsKICAgICAgICBfTV9u b2RlID0gX195OwogICAgICAgIF9feSA9IF9feS0+X01fcGFyZW50OwogICAgICB9CiAgICAgIGlm IChfTV9ub2RlLT5fTV9yaWdodCAhPSBfX3kpCiAgICAgICAgX01fbm9kZSA9IF9feTsKICAgIH0K ICB9CgogIHZvaWQgX01fZGVjcmVtZW50KCkKICB7CiAgICBpZiAoX01fbm9kZS0+X01fY29sb3Ig PT0gX1NfcmJfdHJlZV9yZWQgJiYKICAgICAgICBfTV9ub2RlLT5fTV9wYXJlbnQtPl9NX3BhcmVu dCA9PSBfTV9ub2RlKQogICAgICBfTV9ub2RlID0gX01fbm9kZS0+X01fcmlnaHQ7CiAgICBlbHNl IGlmIChfTV9ub2RlLT5fTV9sZWZ0ICE9IDApIHsKICAgICAgX0Jhc2VfcHRyIF9feSA9IF9NX25v ZGUtPl9NX2xlZnQ7CiAgICAgIHdoaWxlIChfX3ktPl9NX3JpZ2h0ICE9IDApCiAgICAgICAgX195 ID0gX195LT5fTV9yaWdodDsKICAgICAgX01fbm9kZSA9IF9feTsKICAgIH0KICAgIGVsc2Ugewog ICAgICBfQmFzZV9wdHIgX195ID0gX01fbm9kZS0+X01fcGFyZW50OwogICAgICB3aGlsZSAoX01f bm9kZSA9PSBfX3ktPl9NX2xlZnQpIHsKICAgICAgICBfTV9ub2RlID0gX195OwogICAgICAgIF9f eSA9IF9feS0+X01fcGFyZW50OwogICAgICB9CiAgICAgIF9NX25vZGUgPSBfX3k7CiAgICB9CiAg fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9WYWx1ZSwgY2xhc3MgX1JlZiwgY2xhc3MgX1B0cj4Kc3Ry dWN0IF9SYl90cmVlX2l0ZXJhdG9yIDogcHVibGljIF9SYl90cmVlX2Jhc2VfaXRlcmF0b3IKewog IHR5cGVkZWYgX1ZhbHVlIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfUmVmIHJlZmVyZW5jZTsKICB0 eXBlZGVmIF9QdHIgcG9pbnRlcjsKICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPF9WYWx1ZSwg X1ZhbHVlJiwgX1ZhbHVlKj4gICAgICAgICAgICAgCiAgICBpdGVyYXRvcjsKICB0eXBlZGVmIF9S Yl90cmVlX2l0ZXJhdG9yPF9WYWx1ZSwgY29uc3QgX1ZhbHVlJiwgY29uc3QgX1ZhbHVlKj4gCiAg ICBjb25zdF9pdGVyYXRvcjsKICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPF9WYWx1ZSwgX1Jl ZiwgX1B0cj4gICAgICAgICAgICAgICAgICAgCiAgICBfU2VsZjsKICB0eXBlZGVmIF9SYl90cmVl X25vZGU8X1ZhbHVlPiogX0xpbmtfdHlwZTsKCiAgX1JiX3RyZWVfaXRlcmF0b3IoKSB7fQogIF9S Yl90cmVlX2l0ZXJhdG9yKF9MaW5rX3R5cGUgX194KSB7IF9NX25vZGUgPSBfX3g7IH0KICBfUmJf dHJlZV9pdGVyYXRvcihjb25zdCBpdGVyYXRvciYgX19pdCkgeyBfTV9ub2RlID0gX19pdC5fTV9u b2RlOyB9CgogIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBfTGlua190eXBl KF9NX25vZGUpLT5fTV92YWx1ZV9maWVsZDsgfQoKICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25z dCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKCiAgX1NlbGYmIG9wZXJhdG9yKysoKSB7IF9N X2luY3JlbWVudCgpOyByZXR1cm4gKnRoaXM7IH0KICBfU2VsZiBvcGVyYXRvcisrKGludCkgewog ICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIF9NX2luY3JlbWVudCgpOwogICAgcmV0dXJuIF9f dG1wOwogIH0KICAgIAogIF9TZWxmJiBvcGVyYXRvci0tKCkgeyBfTV9kZWNyZW1lbnQoKTsgcmV0 dXJuICp0aGlzOyB9CiAgX1NlbGYgb3BlcmF0b3ItLShpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0g KnRoaXM7CiAgICBfTV9kZWNyZW1lbnQoKTsKICAgIHJldHVybiBfX3RtcDsKICB9Cn07Cgppbmxp bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9SYl90cmVlX2Jhc2VfaXRlcmF0b3ImIF9feCwKICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9iYXNlX2l0ZXJhdG9yJiBfX3kpIHsK ICByZXR1cm4gX194Ll9NX25vZGUgPT0gX195Ll9NX25vZGU7Cn0KCmlubGluZSBib29sIG9wZXJh dG9yIT0oY29uc3QgX1JiX3RyZWVfYmFzZV9pdGVyYXRvciYgX194LAogICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IF9SYl90cmVlX2Jhc2VfaXRlcmF0b3ImIF9feSkgewogIHJldHVybiBfX3gu X01fbm9kZSAhPSBfX3kuX01fbm9kZTsKfQoKIyAyMTQgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1s aWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0 bF90cmVlLmgiIDMKCgppbmxpbmUgdm9pZCAKX1JiX3RyZWVfcm90YXRlX2xlZnQoX1JiX3RyZWVf bm9kZV9iYXNlKiBfX3gsIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcm9vdCkKewogIF9SYl90cmVl X25vZGVfYmFzZSogX195ID0gX194LT5fTV9yaWdodDsKICBfX3gtPl9NX3JpZ2h0ID0gX195LT5f TV9sZWZ0OwogIGlmIChfX3ktPl9NX2xlZnQgIT0wKQogICAgX195LT5fTV9sZWZ0LT5fTV9wYXJl bnQgPSBfX3g7CiAgX195LT5fTV9wYXJlbnQgPSBfX3gtPl9NX3BhcmVudDsKCiAgaWYgKF9feCA9 PSBfX3Jvb3QpCiAgICBfX3Jvb3QgPSBfX3k7CiAgZWxzZSBpZiAoX194ID09IF9feC0+X01fcGFy ZW50LT5fTV9sZWZ0KQogICAgX194LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3k7CiAgZWxzZQog ICAgX194LT5fTV9wYXJlbnQtPl9NX3JpZ2h0ID0gX195OwogIF9feS0+X01fbGVmdCA9IF9feDsK ICBfX3gtPl9NX3BhcmVudCA9IF9feTsKfQoKaW5saW5lIHZvaWQgCl9SYl90cmVlX3JvdGF0ZV9y aWdodChfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feCwgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19yb290 KQp7CiAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3gtPl9NX2xlZnQ7CiAgX194LT5fTV9s ZWZ0ID0gX195LT5fTV9yaWdodDsKICBpZiAoX195LT5fTV9yaWdodCAhPSAwKQogICAgX195LT5f TV9yaWdodC0+X01fcGFyZW50ID0gX194OwogIF9feS0+X01fcGFyZW50ID0gX194LT5fTV9wYXJl bnQ7CgogIGlmIChfX3ggPT0gX19yb290KQogICAgX19yb290ID0gX195OwogIGVsc2UgaWYgKF9f eCA9PSBfX3gtPl9NX3BhcmVudC0+X01fcmlnaHQpCiAgICBfX3gtPl9NX3BhcmVudC0+X01fcmln aHQgPSBfX3k7CiAgZWxzZQogICAgX194LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3k7CiAgX195 LT5fTV9yaWdodCA9IF9feDsKICBfX3gtPl9NX3BhcmVudCA9IF9feTsKfQoKaW5saW5lIHZvaWQg Cl9SYl90cmVlX3JlYmFsYW5jZShfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feCwgX1JiX3RyZWVfbm9k ZV9iYXNlKiYgX19yb290KQp7CiAgX194LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwogIHdo aWxlIChfX3ggIT0gX19yb290ICYmIF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9PSBfU19yYl90 cmVlX3JlZCkgewogICAgaWYgKF9feC0+X01fcGFyZW50ID09IF9feC0+X01fcGFyZW50LT5fTV9w YXJlbnQtPl9NX2xlZnQpIHsKICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3gtPl9N X3BhcmVudC0+X01fcGFyZW50LT5fTV9yaWdodDsKICAgICAgaWYgKF9feSAmJiBfX3ktPl9NX2Nv bG9yID09IF9TX3JiX3RyZWVfcmVkKSB7CiAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX2NvbG9y ID0gX1NfcmJfdHJlZV9ibGFjazsKICAgICAgICBfX3ktPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9i bGFjazsKICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9TX3Ji X3RyZWVfcmVkOwogICAgICAgIF9feCA9IF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQ7CiAgICAg IH0KICAgICAgZWxzZSB7CiAgICAgICAgaWYgKF9feCA9PSBfX3gtPl9NX3BhcmVudC0+X01fcmln aHQpIHsKICAgICAgICAgIF9feCA9IF9feC0+X01fcGFyZW50OwogICAgICAgICAgX1JiX3RyZWVf cm90YXRlX2xlZnQoX194LCBfX3Jvb3QpOwogICAgICAgIH0KICAgICAgICBfX3gtPl9NX3BhcmVu dC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgIF9feC0+X01fcGFyZW50LT5f TV9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgX1JiX3RyZWVfcm90 YXRlX3JpZ2h0KF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQsIF9fcm9vdCk7CiAgICAgIH0KICAg IH0KICAgIGVsc2UgewogICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9IF9feC0+X01fcGFy ZW50LT5fTV9wYXJlbnQtPl9NX2xlZnQ7CiAgICAgIGlmIChfX3kgJiYgX195LT5fTV9jb2xvciA9 PSBfU19yYl90cmVlX3JlZCkgewogICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9T X3JiX3RyZWVfYmxhY2s7CiAgICAgICAgX195LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7 CiAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVl X3JlZDsKICAgICAgICBfX3ggPSBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50OwogICAgICB9CiAg ICAgIGVsc2UgewogICAgICAgIGlmIChfX3ggPT0gX194LT5fTV9wYXJlbnQtPl9NX2xlZnQpIHsK ICAgICAgICAgIF9feCA9IF9feC0+X01fcGFyZW50OwogICAgICAgICAgX1JiX3RyZWVfcm90YXRl X3JpZ2h0KF9feCwgX19yb290KTsKICAgICAgICB9CiAgICAgICAgX194LT5fTV9wYXJlbnQtPl9N X2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fcGFy ZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwogICAgICAgIF9SYl90cmVlX3JvdGF0ZV9s ZWZ0KF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQsIF9fcm9vdCk7CiAgICAgIH0KICAgIH0KICB9 CiAgX19yb290LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7Cn0KCmlubGluZSBfUmJfdHJl ZV9ub2RlX2Jhc2UqCl9SYl90cmVlX3JlYmFsYW5jZV9mb3JfZXJhc2UoX1JiX3RyZWVfbm9kZV9i YXNlKiBfX3osCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNl KiYgX19yb290LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFz ZSomIF9fbGVmdG1vc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfbm9k ZV9iYXNlKiYgX19yaWdodG1vc3QpCnsKICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9IF9fejsK ICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feCA9IDA7CiAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3hf cGFyZW50ID0gMDsKICBpZiAoX195LT5fTV9sZWZ0ID09IDApICAgICAgCiAgICBfX3ggPSBfX3kt Pl9NX3JpZ2h0OyAgICAgIAogIGVsc2UKICAgIGlmIChfX3ktPl9NX3JpZ2h0ID09IDApICAgCiAg ICAgIF9feCA9IF9feS0+X01fbGVmdDsgICAgIAogICAgZWxzZSB7ICAgICAgICAgICAgICAgICAg ICAKICAgICAgX195ID0gX195LT5fTV9yaWdodDsgICAgCiAgICAgIHdoaWxlIChfX3ktPl9NX2xl ZnQgIT0gMCkKICAgICAgICBfX3kgPSBfX3ktPl9NX2xlZnQ7CiAgICAgIF9feCA9IF9feS0+X01f cmlnaHQ7CiAgICB9CiAgaWYgKF9feSAhPSBfX3opIHsgICAgICAgICAgIAogICAgX196LT5fTV9s ZWZ0LT5fTV9wYXJlbnQgPSBfX3k7IAogICAgX195LT5fTV9sZWZ0ID0gX196LT5fTV9sZWZ0Owog ICAgaWYgKF9feSAhPSBfX3otPl9NX3JpZ2h0KSB7CiAgICAgIF9feF9wYXJlbnQgPSBfX3ktPl9N X3BhcmVudDsKICAgICAgaWYgKF9feCkgX194LT5fTV9wYXJlbnQgPSBfX3ktPl9NX3BhcmVudDsK ICAgICAgX195LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3g7ICAgICAgIAogICAgICBfX3ktPl9N X3JpZ2h0ID0gX196LT5fTV9yaWdodDsKICAgICAgX196LT5fTV9yaWdodC0+X01fcGFyZW50ID0g X195OwogICAgfQogICAgZWxzZQogICAgICBfX3hfcGFyZW50ID0gX195OyAgCiAgICBpZiAoX19y b290ID09IF9feikKICAgICAgX19yb290ID0gX195OwogICAgZWxzZSBpZiAoX196LT5fTV9wYXJl bnQtPl9NX2xlZnQgPT0gX196KQogICAgICBfX3otPl9NX3BhcmVudC0+X01fbGVmdCA9IF9feTsK ICAgIGVsc2UgCiAgICAgIF9fei0+X01fcGFyZW50LT5fTV9yaWdodCA9IF9feTsKICAgIF9feS0+ X01fcGFyZW50ID0gX196LT5fTV9wYXJlbnQ7CiAgICAgOjpzd2FwKF9feS0+X01fY29sb3IsIF9f ei0+X01fY29sb3IpOwogICAgX195ID0gX196OwogICAgIAogIH0KICBlbHNlIHsgICAgICAgICAg ICAgICAgICAgICAgICAgCiAgICBfX3hfcGFyZW50ID0gX195LT5fTV9wYXJlbnQ7CiAgICBpZiAo X194KSBfX3gtPl9NX3BhcmVudCA9IF9feS0+X01fcGFyZW50OyAgIAogICAgaWYgKF9fcm9vdCA9 PSBfX3opCiAgICAgIF9fcm9vdCA9IF9feDsKICAgIGVsc2UgCiAgICAgIGlmIChfX3otPl9NX3Bh cmVudC0+X01fbGVmdCA9PSBfX3opCiAgICAgICAgX196LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBf X3g7CiAgICAgIGVsc2UKICAgICAgICBfX3otPl9NX3BhcmVudC0+X01fcmlnaHQgPSBfX3g7CiAg ICBpZiAoX19sZWZ0bW9zdCA9PSBfX3opIAogICAgICBpZiAoX196LT5fTV9yaWdodCA9PSAwKSAg ICAgICAgIAogICAgICAgIF9fbGVmdG1vc3QgPSBfX3otPl9NX3BhcmVudDsKICAgICAKICAgICAg ZWxzZQogICAgICAgIF9fbGVmdG1vc3QgPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21pbmltdW0o X194KTsKICAgIGlmIChfX3JpZ2h0bW9zdCA9PSBfX3opICAKICAgICAgaWYgKF9fei0+X01fbGVm dCA9PSAwKSAgICAgICAgICAKICAgICAgICBfX3JpZ2h0bW9zdCA9IF9fei0+X01fcGFyZW50OyAg CiAgICAgCiAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgIF9fcmlnaHRt b3N0ID0gX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19tYXhpbXVtKF9feCk7CiAgfQogIGlmIChfX3kt Pl9NX2NvbG9yICE9IF9TX3JiX3RyZWVfcmVkKSB7IAogICAgd2hpbGUgKF9feCAhPSBfX3Jvb3Qg JiYgKF9feCA9PSAwIHx8IF9feC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9ibGFjaykpCiAgICAg IGlmIChfX3ggPT0gX194X3BhcmVudC0+X01fbGVmdCkgewogICAgICAgIF9SYl90cmVlX25vZGVf YmFzZSogX193ID0gX194X3BhcmVudC0+X01fcmlnaHQ7CiAgICAgICAgaWYgKF9fdy0+X01fY29s b3IgPT0gX1NfcmJfdHJlZV9yZWQpIHsKICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfU19yYl90 cmVlX2JsYWNrOwogICAgICAgICAgX194X3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX3Jl ZDsKICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9feF9wYXJlbnQsIF9fcm9vdCk7CiAg ICAgICAgICBfX3cgPSBfX3hfcGFyZW50LT5fTV9yaWdodDsKICAgICAgICB9CiAgICAgICAgaWYg KChfX3ctPl9NX2xlZnQgPT0gMCB8fCAKICAgICAgICAgICAgIF9fdy0+X01fbGVmdC0+X01fY29s b3IgPT0gX1NfcmJfdHJlZV9ibGFjaykgJiYKICAgICAgICAgICAgKF9fdy0+X01fcmlnaHQgPT0g MCB8fCAKICAgICAgICAgICAgIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVf YmxhY2spKSB7CiAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAg ICAgICBfX3ggPSBfX3hfcGFyZW50OwogICAgICAgICAgX194X3BhcmVudCA9IF9feF9wYXJlbnQt Pl9NX3BhcmVudDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKF9fdy0+X01fcmlnaHQg PT0gMCB8fCAKICAgICAgICAgICAgICBfX3ctPl9NX3JpZ2h0LT5fTV9jb2xvciA9PSBfU19yYl90 cmVlX2JsYWNrKSB7CiAgICAgICAgICAgIGlmIChfX3ctPl9NX2xlZnQpIF9fdy0+X01fbGVmdC0+ X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0g X1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdodChfX3csIF9f cm9vdCk7CiAgICAgICAgICAgIF9fdyA9IF9feF9wYXJlbnQtPl9NX3JpZ2h0OwogICAgICAgICAg fQogICAgICAgICAgX193LT5fTV9jb2xvciA9IF9feF9wYXJlbnQtPl9NX2NvbG9yOwogICAgICAg ICAgX194X3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgICAgaWYg KF9fdy0+X01fcmlnaHQpIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFj azsKICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9feF9wYXJlbnQsIF9fcm9vdCk7CiAg ICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAg IAogICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSogX193ID0gX194X3BhcmVudC0+X01fbGVmdDsK ICAgICAgICBpZiAoX193LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX3JlZCkgewogICAgICAgICAg X193LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgICBfX3hfcGFyZW50LT5f TV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwogICAgICAgICAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0 KF9feF9wYXJlbnQsIF9fcm9vdCk7CiAgICAgICAgICBfX3cgPSBfX3hfcGFyZW50LT5fTV9sZWZ0 OwogICAgICAgIH0KICAgICAgICBpZiAoKF9fdy0+X01fcmlnaHQgPT0gMCB8fCAKICAgICAgICAg ICAgIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfYmxhY2spICYmCiAgICAg ICAgICAgIChfX3ctPl9NX2xlZnQgPT0gMCB8fCAKICAgICAgICAgICAgIF9fdy0+X01fbGVmdC0+ X01fY29sb3IgPT0gX1NfcmJfdHJlZV9ibGFjaykpIHsKICAgICAgICAgIF9fdy0+X01fY29sb3Ig PSBfU19yYl90cmVlX3JlZDsKICAgICAgICAgIF9feCA9IF9feF9wYXJlbnQ7CiAgICAgICAgICBf X3hfcGFyZW50ID0gX194X3BhcmVudC0+X01fcGFyZW50OwogICAgICAgIH0gZWxzZSB7CiAgICAg ICAgICBpZiAoX193LT5fTV9sZWZ0ID09IDAgfHwgCiAgICAgICAgICAgICAgX193LT5fTV9sZWZ0 LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX2JsYWNrKSB7CiAgICAgICAgICAgIGlmIChfX3ctPl9N X3JpZ2h0KSBfX3ctPl9NX3JpZ2h0LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAg ICAgICAgIF9fdy0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICAgICAgICAgICAgX1JiX3Ry ZWVfcm90YXRlX2xlZnQoX193LCBfX3Jvb3QpOwogICAgICAgICAgICBfX3cgPSBfX3hfcGFyZW50 LT5fTV9sZWZ0OwogICAgICAgICAgfQogICAgICAgICAgX193LT5fTV9jb2xvciA9IF9feF9wYXJl bnQtPl9NX2NvbG9yOwogICAgICAgICAgX194X3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVl X2JsYWNrOwogICAgICAgICAgaWYgKF9fdy0+X01fbGVmdCkgX193LT5fTV9sZWZ0LT5fTV9jb2xv ciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX194 X3BhcmVudCwgX19yb290KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAg aWYgKF9feCkgX194LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgfQogIHJldHVybiBf X3k7Cn0KCiAKIAogCiAKCgoKIAp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2MsIGJv b2wgX1NfaW5zdGFuY2VsZXNzPgpjbGFzcyBfUmJfdHJlZV9hbGxvY19iYXNlIHsKcHVibGljOgog IHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46OmFsbG9jYXRvcl90 eXBlIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25z dCB7IHJldHVybiBfTV9ub2RlX2FsbG9jYXRvcjsgfQoKICBfUmJfdHJlZV9hbGxvY19iYXNlKGNv bnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9NX25vZGVfYWxsb2NhdG9yKF9fYSksIF9N X2hlYWRlcigwKSB7fQoKcHJvdGVjdGVkOgogIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1JiX3Ry ZWVfbm9kZTxfVHA+LCBfQWxsb2M+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgIF9NX25vZGVf YWxsb2NhdG9yOwogIF9SYl90cmVlX25vZGU8X1RwPiogX01faGVhZGVyOwoKICBfUmJfdHJlZV9u b2RlPF9UcD4qIF9NX2dldF9ub2RlKCkgCiAgICB7IHJldHVybiBfTV9ub2RlX2FsbG9jYXRvci5h bGxvY2F0ZSgxKTsgfQogIHZvaWQgX01fcHV0X25vZGUoX1JiX3RyZWVfbm9kZTxfVHA+KiBfX3Ap IAogICAgeyBfTV9ub2RlX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9fcCwgMSk7IH0KfTsKCiAKdGVt cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpjbGFzcyBfUmJfdHJlZV9hbGxvY19iYXNl PF9UcCwgX0FsbG9jLCB0cnVlPiB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190 cmFpdHM8X1RwLCBfQWxsb2M+OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICBhbGxv Y2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gYWxsb2NhdG9yX3R5cGUo KTsgfQoKICBfUmJfdHJlZV9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikgOiBfTV9o ZWFkZXIoMCkge30KCnByb3RlY3RlZDoKICBfUmJfdHJlZV9ub2RlPF9UcD4qIF9NX2hlYWRlcjsK CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9SYl90cmVlX25vZGU8X1RwPiwgX0Fs bG9jPjo6X0FsbG9jX3R5cGUKICAgICAgICAgIF9BbGxvY190eXBlOwoKICBfUmJfdHJlZV9ub2Rl PF9UcD4qIF9NX2dldF9ub2RlKCkKICAgIHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZSgx KTsgfQogIHZvaWQgX01fcHV0X25vZGUoX1JiX3RyZWVfbm9kZTxfVHA+KiBfX3ApCiAgICB7IF9B bGxvY190eXBlOjpkZWFsbG9jYXRlKF9fcCwgMSk7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAs IGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9SYl90cmVlX2Jhc2UKICA6IHB1YmxpYyBfUmJfdHJlZV9h bGxvY19iYXNlPF9UcCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Fs bG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KewogIHR5cGVkZWYgX1Ji X3RyZWVfYWxsb2NfYmFzZTxfVHAsIF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KICAgICAgICAg IF9CYXNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRv cl90eXBlOwoKICBfUmJfdHJlZV9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIAogICAg OiBfQmFzZShfX2EpIHsgX01faGVhZGVyID0gX01fZ2V0X25vZGUoKTsgfQogIH5fUmJfdHJlZV9i YXNlKCkgeyBfTV9wdXRfbm9kZShfTV9oZWFkZXIpOyB9Cgp9OwoKIyA1MTkgIi9vcHQvbXZwbG9j YWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNs dWRlL2crKy0zL3N0bF90cmVlLmgiIDMKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1Zh bHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgY2xhc3MgX0NvbXBhcmUsCiAgICAgICAgICBjbGFzcyBf QWxsb2MgPSBhbGxvY2F0b3I8IF9WYWx1ZSA+ICA+CmNsYXNzIF9SYl90cmVlIDogcHJvdGVjdGVk IF9SYl90cmVlX2Jhc2U8X1ZhbHVlLCBfQWxsb2M+IHsKICB0eXBlZGVmIF9SYl90cmVlX2Jhc2U8 X1ZhbHVlLCBfQWxsb2M+IF9CYXNlOwpwcm90ZWN0ZWQ6CiAgdHlwZWRlZiBfUmJfdHJlZV9ub2Rl X2Jhc2UqIF9CYXNlX3B0cjsKICB0eXBlZGVmIF9SYl90cmVlX25vZGU8X1ZhbHVlPiBfUmJfdHJl ZV9ub2RlOwogIHR5cGVkZWYgX1JiX3RyZWVfQ29sb3JfdHlwZSBfQ29sb3JfdHlwZTsKcHVibGlj OgogIHR5cGVkZWYgX0tleSBrZXlfdHlwZTsKICB0eXBlZGVmIF9WYWx1ZSB2YWx1ZV90eXBlOwog IHR5cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUq IGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2YWx1ZV90eXBlJiByZWZlcmVuY2U7CiAgdHlwZWRl ZiBjb25zdCB2YWx1ZV90eXBlJiBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBfUmJfdHJlZV9u b2RlKiBfTGlua190eXBlOwogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0 cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9j YXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3Io KSBjb25zdCB7IHJldHVybiBfQmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9Cgpwcm90ZWN0ZWQ6CgoK CgoKCnByb3RlY3RlZDoKCiAgX0xpbmtfdHlwZSBfTV9jcmVhdGVfbm9kZShjb25zdCB2YWx1ZV90 eXBlJiBfX3gpCiAgewogICAgX0xpbmtfdHlwZSBfX3RtcCA9IF9NX2dldF9ub2RlKCk7CiAgICB0 cnkgIHsKICAgICAgY29uc3RydWN0KCZfX3RtcC0+X01fdmFsdWVfZmllbGQsIF9feCk7CiAgICB9 CiAgICBjYXRjaCguLi4pIHsgIF9NX3B1dF9ub2RlKF9fdG1wKSA7IHRocm93OyB9IDsKICAgIHJl dHVybiBfX3RtcDsKICB9CgogIF9MaW5rX3R5cGUgX01fY2xvbmVfbm9kZShfTGlua190eXBlIF9f eCkKICB7CiAgICBfTGlua190eXBlIF9fdG1wID0gX01fY3JlYXRlX25vZGUoX194LT5fTV92YWx1 ZV9maWVsZCk7CiAgICBfX3RtcC0+X01fY29sb3IgPSBfX3gtPl9NX2NvbG9yOwogICAgX190bXAt Pl9NX2xlZnQgPSAwOwogICAgX190bXAtPl9NX3JpZ2h0ID0gMDsKICAgIHJldHVybiBfX3RtcDsK ICB9CgogIHZvaWQgZGVzdHJveV9ub2RlKF9MaW5rX3R5cGUgX19wKQogIHsKICAgIGRlc3Ryb3ko Jl9fcC0+X01fdmFsdWVfZmllbGQpOwogICAgX01fcHV0X25vZGUoX19wKTsKICB9Cgpwcm90ZWN0 ZWQ6CiAgc2l6ZV90eXBlIF9NX25vZGVfY291bnQ7ICAKICBfQ29tcGFyZSBfTV9rZXlfY29tcGFy ZTsKCiAgX0xpbmtfdHlwZSYgX01fcm9vdCgpIGNvbnN0IAogICAgeyByZXR1cm4gKF9MaW5rX3R5 cGUmKSBfTV9oZWFkZXItPl9NX3BhcmVudDsgfQogIF9MaW5rX3R5cGUmIF9NX2xlZnRtb3N0KCkg Y29uc3QgCiAgICB7IHJldHVybiAoX0xpbmtfdHlwZSYpIF9NX2hlYWRlci0+X01fbGVmdDsgfQog IF9MaW5rX3R5cGUmIF9NX3JpZ2h0bW9zdCgpIGNvbnN0IAogICAgeyByZXR1cm4gKF9MaW5rX3R5 cGUmKSBfTV9oZWFkZXItPl9NX3JpZ2h0OyB9CgogIHN0YXRpYyBfTGlua190eXBlJiBfU19sZWZ0 KF9MaW5rX3R5cGUgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX2xlZnQp OyB9CiAgc3RhdGljIF9MaW5rX3R5cGUmIF9TX3JpZ2h0KF9MaW5rX3R5cGUgX194KQogICAgeyBy ZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX3JpZ2h0KTsgfQogIHN0YXRpYyBfTGlua190eXBl JiBfU19wYXJlbnQoX0xpbmtfdHlwZSBfX3gpCiAgICB7IHJldHVybiAoX0xpbmtfdHlwZSYpKF9f eC0+X01fcGFyZW50KTsgfQogIHN0YXRpYyByZWZlcmVuY2UgX1NfdmFsdWUoX0xpbmtfdHlwZSBf X3gpCiAgICB7IHJldHVybiBfX3gtPl9NX3ZhbHVlX2ZpZWxkOyB9CiAgc3RhdGljIGNvbnN0IF9L ZXkmIF9TX2tleShfTGlua190eXBlIF9feCkKICAgIHsgcmV0dXJuIF9LZXlPZlZhbHVlKCkoX1Nf dmFsdWUoX194KSk7IH0KICBzdGF0aWMgX0NvbG9yX3R5cGUmIF9TX2NvbG9yKF9MaW5rX3R5cGUg X194KQogICAgeyByZXR1cm4gKF9Db2xvcl90eXBlJikoX194LT5fTV9jb2xvcik7IH0KCiAgc3Rh dGljIF9MaW5rX3R5cGUmIF9TX2xlZnQoX0Jhc2VfcHRyIF9feCkKICAgIHsgcmV0dXJuIChfTGlu a190eXBlJikoX194LT5fTV9sZWZ0KTsgfQogIHN0YXRpYyBfTGlua190eXBlJiBfU19yaWdodChf QmFzZV9wdHIgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX3JpZ2h0KTsg fQogIHN0YXRpYyBfTGlua190eXBlJiBfU19wYXJlbnQoX0Jhc2VfcHRyIF9feCkKICAgIHsgcmV0 dXJuIChfTGlua190eXBlJikoX194LT5fTV9wYXJlbnQpOyB9CiAgc3RhdGljIHJlZmVyZW5jZSBf U192YWx1ZShfQmFzZV9wdHIgX194KQogICAgeyByZXR1cm4gKChfTGlua190eXBlKV9feCktPl9N X3ZhbHVlX2ZpZWxkOyB9CiAgc3RhdGljIGNvbnN0IF9LZXkmIF9TX2tleShfQmFzZV9wdHIgX194 KQogICAgeyByZXR1cm4gX0tleU9mVmFsdWUoKShfU192YWx1ZShfTGlua190eXBlKF9feCkpKTt9 IAogIHN0YXRpYyBfQ29sb3JfdHlwZSYgX1NfY29sb3IoX0Jhc2VfcHRyIF9feCkKICAgIHsgcmV0 dXJuIChfQ29sb3JfdHlwZSYpKF9MaW5rX3R5cGUoX194KS0+X01fY29sb3IpOyB9CgogIHN0YXRp YyBfTGlua190eXBlIF9TX21pbmltdW0oX0xpbmtfdHlwZSBfX3gpIAogICAgeyByZXR1cm4gKF9M aW5rX3R5cGUpICBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21pbmltdW0oX194KTsgfQoKICBzdGF0 aWMgX0xpbmtfdHlwZSBfU19tYXhpbXVtKF9MaW5rX3R5cGUgX194KQogICAgeyByZXR1cm4gKF9M aW5rX3R5cGUpIF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWF4aW11bShfX3gpOyB9CgpwdWJsaWM6 CiAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjx2YWx1ZV90eXBlLCByZWZlcmVuY2UsIHBvaW50 ZXI+IGl0ZXJhdG9yOwogIHR5cGVkZWYgX1JiX3RyZWVfaXRlcmF0b3I8dmFsdWVfdHlwZSwgY29u c3RfcmVmZXJlbmNlLCBjb25zdF9wb2ludGVyPiAKICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yOwoK CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNl X2l0ZXJhdG9yOwogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9p dGVyYXRvcjsKCgoKCgoKCiAKCnByaXZhdGU6CiAgaXRlcmF0b3IgX01faW5zZXJ0KF9CYXNlX3B0 ciBfX3gsIF9CYXNlX3B0ciBfX3ksIGNvbnN0IHZhbHVlX3R5cGUmIF9fdik7CiAgX0xpbmtfdHlw ZSBfTV9jb3B5KF9MaW5rX3R5cGUgX194LCBfTGlua190eXBlIF9fcCk7CiAgdm9pZCBfTV9lcmFz ZShfTGlua190eXBlIF9feCk7CgpwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAogIF9SYl90cmVlKCkKICAgIDogX0Jhc2UoYWxsb2NhdG9yX3R5cGUoKSksIF9NX25vZGVf Y291bnQoMCksIF9NX2tleV9jb21wYXJlKCkKICAgIHsgX01fZW1wdHlfaW5pdGlhbGl6ZSgpOyB9 CgogIF9SYl90cmVlKGNvbnN0IF9Db21wYXJlJiBfX2NvbXApCiAgICA6IF9CYXNlKGFsbG9jYXRv cl90eXBlKCkpLCBfTV9ub2RlX2NvdW50KDApLCBfTV9rZXlfY29tcGFyZShfX2NvbXApIAogICAg eyBfTV9lbXB0eV9pbml0aWFsaXplKCk7IH0KCiAgX1JiX3RyZWUoY29uc3QgX0NvbXBhcmUmIF9f Y29tcCwgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgIDogX0Jhc2UoX19hKSwgX01fbm9k ZV9jb3VudCgwKSwgX01fa2V5X2NvbXBhcmUoX19jb21wKSAKICAgIHsgX01fZW1wdHlfaW5pdGlh bGl6ZSgpOyB9CgogIF9SYl90cmVlKGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZh bHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCkgCiAgICA6IF9CYXNlKF9feC5nZXRfYWxsb2NhdG9y KCkpLAogICAgICBfTV9ub2RlX2NvdW50KDApLCBfTV9rZXlfY29tcGFyZShfX3guX01fa2V5X2Nv bXBhcmUpCiAgeyAKICAgIGlmIChfX3guX01fcm9vdCgpID09IDApCiAgICAgIF9NX2VtcHR5X2lu aXRpYWxpemUoKTsKICAgIGVsc2UgewogICAgICBfU19jb2xvcihfTV9oZWFkZXIpID0gX1NfcmJf dHJlZV9yZWQ7CiAgICAgIF9NX3Jvb3QoKSA9IF9NX2NvcHkoX194Ll9NX3Jvb3QoKSwgX01faGVh ZGVyKTsKICAgICAgX01fbGVmdG1vc3QoKSA9IF9TX21pbmltdW0oX01fcm9vdCgpKTsKICAgICAg X01fcmlnaHRtb3N0KCkgPSBfU19tYXhpbXVtKF9NX3Jvb3QoKSk7CiAgICB9CiAgICBfTV9ub2Rl X2NvdW50ID0gX194Ll9NX25vZGVfY291bnQ7CiAgfQogIH5fUmJfdHJlZSgpIHsgY2xlYXIoKTsg fQogIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIAog IG9wZXJhdG9yPShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFy ZSxfQWxsb2M+JiBfX3gpOwoKcHJpdmF0ZToKICB2b2lkIF9NX2VtcHR5X2luaXRpYWxpemUoKSB7 CiAgICBfU19jb2xvcihfTV9oZWFkZXIpID0gX1NfcmJfdHJlZV9yZWQ7ICAKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgX01fcm9vdCgpID0gMDsKICAgIF9N X2xlZnRtb3N0KCkgPSBfTV9oZWFkZXI7CiAgICBfTV9yaWdodG1vc3QoKSA9IF9NX2hlYWRlcjsK ICB9CgpwdWJsaWM6ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICBfQ29t cGFyZSBrZXlfY29tcCgpIGNvbnN0IHsgcmV0dXJuIF9NX2tleV9jb21wYXJlOyB9CiAgaXRlcmF0 b3IgYmVnaW4oKSB7IHJldHVybiBfTV9sZWZ0bW9zdCgpOyB9CiAgY29uc3RfaXRlcmF0b3IgYmVn aW4oKSBjb25zdCB7IHJldHVybiBfTV9sZWZ0bW9zdCgpOyB9CiAgaXRlcmF0b3IgZW5kKCkgeyBy ZXR1cm4gX01faGVhZGVyOyB9CiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4g X01faGVhZGVyOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiByZXZlcnNl X2l0ZXJhdG9yKGVuZCgpKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29u c3QgeyAKICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgCiAgfQogIHJl dmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7 IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7IAogICAgcmV0dXJuIGNv bnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7CiAgfSAKICBib29sIGVtcHR5KCkgY29uc3Qg eyByZXR1cm4gX01fbm9kZV9jb3VudCA9PSAwOyB9CiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7 IHJldHVybiBfTV9ub2RlX2NvdW50OyB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyBy ZXR1cm4gc2l6ZV90eXBlKC0xKTsgfQoKICB2b2lkIHN3YXAoX1JiX3RyZWU8X0tleSxfVmFsdWUs X0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX190KSB7CiAgICAgOjpzd2FwKF9NX2hlYWRl ciwgX190Ll9NX2hlYWRlcik7CiAgICAgOjpzd2FwKF9NX25vZGVfY291bnQsIF9fdC5fTV9ub2Rl X2NvdW50KTsKICAgICA6OnN3YXAoX01fa2V5X2NvbXBhcmUsIF9fdC5fTV9rZXlfY29tcGFyZSk7 CiAgfQogICAgCnB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgcGFp cjxpdGVyYXRvcixib29sPiBpbnNlcnRfdW5pcXVlKGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CiAg aXRlcmF0b3IgaW5zZXJ0X2VxdWFsKGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CgogIGl0ZXJhdG9y IGluc2VydF91bmlxdWUoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194 KTsKICBpdGVyYXRvciBpbnNlcnRfZXF1YWwoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFs dWVfdHlwZSYgX194KTsKCgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lk IGluc2VydF91bmlxdWUoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s YXN0KTsKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBpbnNlcnRfZXF1 YWwoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KTsKCgoKCgoK CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKTsKICBzaXplX3R5cGUgZXJhc2UoY29u c3Qga2V5X3R5cGUmIF9feCk7CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRv ciBfX2xhc3QpOwogIHZvaWQgZXJhc2UoY29uc3Qga2V5X3R5cGUqIF9fZmlyc3QsIGNvbnN0IGtl eV90eXBlKiBfX2xhc3QpOwogIHZvaWQgY2xlYXIoKSB7CiAgICBpZiAoX01fbm9kZV9jb3VudCAh PSAwKSB7CiAgICAgIF9NX2VyYXNlKF9NX3Jvb3QoKSk7CiAgICAgIF9NX2xlZnRtb3N0KCkgPSBf TV9oZWFkZXI7CiAgICAgIF9NX3Jvb3QoKSA9IDA7CiAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX01f aGVhZGVyOwogICAgICBfTV9ub2RlX2NvdW50ID0gMDsKICAgIH0KICB9ICAgICAgCgpwdWJsaWM6 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogIGl0ZXJhdG9yIGZpbmQoY29uc3Qg a2V5X3R5cGUmIF9feCk7CiAgY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194 KSBjb25zdDsKICBzaXplX3R5cGUgY291bnQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7CiAg aXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCk7CiAgY29uc3RfaXRlcmF0 b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7CiAgaXRlcmF0b3IgdXBw ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCk7CiAgY29uc3RfaXRlcmF0b3IgdXBwZXJfYm91 bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7CiAgcGFpcjxpdGVyYXRvcixpdGVyYXRvcj4g ZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCk7CiAgcGFpcjxjb25zdF9pdGVyYXRvciwg Y29uc3RfaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0OwoK cHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICBib29sIF9fcmJfdmVy aWZ5KCkgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFz cyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgpp bmxpbmUgYm9vbCAKb3BlcmF0b3I9PShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZW YWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsIAogICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9L ZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKewogIHJldHVybiBf X3guc2l6ZSgpID09IF9feS5zaXplKCkgJiYKICAgICAgICAgZXF1YWwoX194LmJlZ2luKCksIF9f eC5lbmQoKSwgX195LmJlZ2luKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1Zh bHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3Mg X0FsbG9jPgppbmxpbmUgYm9vbCAKb3BlcmF0b3I8KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVl LF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCwgCiAgICAgICAgICBjb25zdCBfUmJf dHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCnsKICBy ZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX194LmJlZ2luKCksIF9feC5lbmQoKSwgCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9feS5iZWdpbigpLCBfX3kuZW5kKCkpOwp9 CgoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVl LCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSB2b2lkIApz d2FwKF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9f eCwgCiAgICAgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9j PiYgX195KQp7CiAgX194LnN3YXAoX195KTsKfQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNs YXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUs IGNsYXNzIF9BbGxvYz4KX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUs X0FsbG9jPiYgCl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv Yz4KICA6Om9wZXJhdG9yPShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxf Q29tcGFyZSxfQWxsb2M+JiBfX3gpCnsKICBpZiAodGhpcyAhPSAmX194KSB7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAogICAgY2xlYXIoKTsKICAgIF9NX25vZGVfY291bnQgPSAw OwogICAgX01fa2V5X2NvbXBhcmUgPSBfX3guX01fa2V5X2NvbXBhcmU7ICAgICAgICAKICAgIGlm IChfX3guX01fcm9vdCgpID09IDApIHsKICAgICAgX01fcm9vdCgpID0gMDsKICAgICAgX01fbGVm dG1vc3QoKSA9IF9NX2hlYWRlcjsKICAgICAgX01fcmlnaHRtb3N0KCkgPSBfTV9oZWFkZXI7CiAg ICB9CiAgICBlbHNlIHsKICAgICAgX01fcm9vdCgpID0gX01fY29weShfX3guX01fcm9vdCgpLCBf TV9oZWFkZXIpOwogICAgICBfTV9sZWZ0bW9zdCgpID0gX1NfbWluaW11bShfTV9yb290KCkpOwog ICAgICBfTV9yaWdodG1vc3QoKSA9IF9TX21heGltdW0oX01fcm9vdCgpKTsKICAgICAgX01fbm9k ZV9jb3VudCA9IF9feC5fTV9ub2RlX2NvdW50OwogICAgfQogIH0KICByZXR1cm4gKnRoaXM7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCAK ICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVl PF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yCl9SYl90 cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6Ol9NX2luc2Vy dChfQmFzZV9wdHIgX194XywgX0Jhc2VfcHRyIF9feV8sIGNvbnN0IF9WYWx1ZSYgX192KQp7CiAg X0xpbmtfdHlwZSBfX3ggPSAoX0xpbmtfdHlwZSkgX194XzsKICBfTGlua190eXBlIF9feSA9IChf TGlua190eXBlKSBfX3lfOwogIF9MaW5rX3R5cGUgX196OwoKICBpZiAoX195ID09IF9NX2hlYWRl ciB8fCBfX3ggIT0gMCB8fCAKICAgICAgX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3Yp LCBfU19rZXkoX195KSkpIHsKICAgIF9feiA9IF9NX2NyZWF0ZV9ub2RlKF9fdik7CiAgICBfU19s ZWZ0KF9feSkgPSBfX3o7ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKICAgIGlmIChfX3kgPT0gX01faGVhZGVyKSB7CiAgICAgIF9NX3Jvb3Qo KSA9IF9fejsKICAgICAgX01fcmlnaHRtb3N0KCkgPSBfX3o7CiAgICB9CiAgICBlbHNlIGlmIChf X3kgPT0gX01fbGVmdG1vc3QoKSkKICAgICAgX01fbGVmdG1vc3QoKSA9IF9fejsgICAgCiAgfQog IGVsc2UgewogICAgX196ID0gX01fY3JlYXRlX25vZGUoX192KTsKICAgIF9TX3JpZ2h0KF9feSkg PSBfX3o7CiAgICBpZiAoX195ID09IF9NX3JpZ2h0bW9zdCgpKQogICAgICBfTV9yaWdodG1vc3Qo KSA9IF9fejsgICAKICB9CiAgX1NfcGFyZW50KF9feikgPSBfX3k7CiAgX1NfbGVmdChfX3opID0g MDsKICBfU19yaWdodChfX3opID0gMDsKICBfUmJfdHJlZV9yZWJhbGFuY2UoX196LCBfTV9oZWFk ZXItPl9NX3BhcmVudCk7CiAgKytfTV9ub2RlX2NvdW50OwogIHJldHVybiBpdGVyYXRvcihfX3op Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1 ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJf dHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgpf UmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjppbnNl cnRfZXF1YWwoY29uc3QgX1ZhbHVlJiBfX3YpCnsKICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRl cjsKICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKICB3aGlsZSAoX194ICE9IDApIHsKICAg IF9feSA9IF9feDsKICAgIF9feCA9IF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwg X1Nfa2V5KF9feCkpID8gCiAgICAgICAgICAgIF9TX2xlZnQoX194KSA6IF9TX3JpZ2h0KF9feCk7 CiAgfQogIHJldHVybiBfTV9pbnNlcnQoX194LCBfX3ksIF9fdik7Cn0KCgp0ZW1wbGF0ZSA8Y2xh c3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFz cyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgpwYWlyPHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1Zh bHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yLCAKICAgICBib29sPgpf UmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjppbnNl cnRfdW5pcXVlKGNvbnN0IF9WYWx1ZSYgX192KQp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFk ZXI7CiAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CiAgYm9vbCBfX2NvbXAgPSB0cnVlOwog IHdoaWxlIChfX3ggIT0gMCkgewogICAgX195ID0gX194OwogICAgX19jb21wID0gX01fa2V5X2Nv bXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX194KSk7CiAgICBfX3ggPSBfX2NvbXAg PyBfU19sZWZ0KF9feCkgOiBfU19yaWdodChfX3gpOwogIH0KICBpdGVyYXRvciBfX2ogPSBpdGVy YXRvcihfX3kpOyAgIAogIGlmIChfX2NvbXApCiAgICBpZiAoX19qID09IGJlZ2luKCkpICAgICAK ICAgICAgcmV0dXJuIHBhaXI8aXRlcmF0b3IsYm9vbD4oX01faW5zZXJ0KF9feCwgX195LCBfX3Yp LCB0cnVlKTsKICAgIGVsc2UKICAgICAgLS1fX2o7CiAgaWYgKF9NX2tleV9jb21wYXJlKF9TX2tl eShfX2ouX01fbm9kZSksIF9LZXlPZlZhbHVlKCkoX192KSkpCiAgICByZXR1cm4gcGFpcjxpdGVy YXRvcixib29sPihfTV9pbnNlcnQoX194LCBfX3ksIF9fdiksIHRydWUpOwogIHJldHVybiBwYWly PGl0ZXJhdG9yLGJvb2w+KF9faiwgZmFsc2UpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNs YXNzIF9WYWwsIGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBj bGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBf Q29tcGFyZSwgX0FsbG9jPjo6aXRlcmF0b3IgCl9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZh bHVlLCBfQ29tcGFyZSwgX0FsbG9jPgogIDo6aW5zZXJ0X3VuaXF1ZShpdGVyYXRvciBfX3Bvc2l0 aW9uLCBjb25zdCBfVmFsJiBfX3YpCnsKICBpZiAoX19wb3NpdGlvbi5fTV9ub2RlID09IF9NX2hl YWRlci0+X01fbGVmdCkgeyAgCiAgICBpZiAoc2l6ZSgpID4gMCAmJiAKICAgICAgICBfTV9rZXlf Y29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX3Bvc2l0aW9uLl9NX25vZGUpKSkK ICAgICAgcmV0dXJuIF9NX2luc2VydChfX3Bvc2l0aW9uLl9NX25vZGUsIF9fcG9zaXRpb24uX01f bm9kZSwgX192KTsKICAgICAKICAgIGVsc2UKICAgICAgcmV0dXJuIGluc2VydF91bmlxdWUoX192 KS5maXJzdDsKICB9IGVsc2UgaWYgKF9fcG9zaXRpb24uX01fbm9kZSA9PSBfTV9oZWFkZXIpIHsg IAogICAgaWYgKF9NX2tleV9jb21wYXJlKF9TX2tleShfTV9yaWdodG1vc3QoKSksIF9LZXlPZlZh bHVlKCkoX192KSkpCiAgICAgIHJldHVybiBfTV9pbnNlcnQoMCwgX01fcmlnaHRtb3N0KCksIF9f dik7CiAgICBlbHNlCiAgICAgIHJldHVybiBpbnNlcnRfdW5pcXVlKF9fdikuZmlyc3Q7CiAgfSBl bHNlIHsKICAgIGl0ZXJhdG9yIF9fYmVmb3JlID0gX19wb3NpdGlvbjsKICAgIC0tX19iZWZvcmU7 CiAgICBpZiAoX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fYmVmb3JlLl9NX25vZGUpLCBfS2V5T2ZW YWx1ZSgpKF9fdikpIAogICAgICAgICYmIF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192 KSwgX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9kZSkpKSB7CiAgICAgIGlmIChfU19yaWdodChfX2Jl Zm9yZS5fTV9ub2RlKSA9PSAwKQogICAgICAgIHJldHVybiBfTV9pbnNlcnQoMCwgX19iZWZvcmUu X01fbm9kZSwgX192KTsgCiAgICAgIGVsc2UKICAgICAgICByZXR1cm4gX01faW5zZXJ0KF9fcG9z aXRpb24uX01fbm9kZSwgX19wb3NpdGlvbi5fTV9ub2RlLCBfX3YpOwogICAgIAogICAgfSBlbHNl CiAgICAgIHJldHVybiBpbnNlcnRfdW5pcXVlKF9fdikuZmlyc3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbCwgY2xhc3MgX0tleU9mVmFsdWUsIAogICAgICAgICAgY2xh c3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9L ZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yIApfUmJfdHJlZTxfS2V5LF9WYWws X0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6aW5zZXJ0X2VxdWFsKGl0ZXJhdG9yIF9f cG9zaXRpb24sIGNvbnN0IF9WYWwmIF9fdikKewogIGlmIChfX3Bvc2l0aW9uLl9NX25vZGUgPT0g X01faGVhZGVyLT5fTV9sZWZ0KSB7ICAKICAgIGlmIChzaXplKCkgPiAwICYmIAogICAgICAgIF9N X2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9k ZSkpKQogICAgICByZXR1cm4gX01faW5zZXJ0KF9fcG9zaXRpb24uX01fbm9kZSwgX19wb3NpdGlv bi5fTV9ub2RlLCBfX3YpOwogICAgIAogICAgZWxzZQogICAgICByZXR1cm4gaW5zZXJ0X2VxdWFs KF9fdik7CiAgfSBlbHNlIGlmIChfX3Bvc2l0aW9uLl9NX25vZGUgPT0gX01faGVhZGVyKSB7IAog ICAgaWYgKCFfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfTV9yaWdo dG1vc3QoKSkpKQogICAgICByZXR1cm4gX01faW5zZXJ0KDAsIF9NX3JpZ2h0bW9zdCgpLCBfX3Yp OwogICAgZWxzZQogICAgICByZXR1cm4gaW5zZXJ0X2VxdWFsKF9fdik7CiAgfSBlbHNlIHsKICAg IGl0ZXJhdG9yIF9fYmVmb3JlID0gX19wb3NpdGlvbjsKICAgIC0tX19iZWZvcmU7CiAgICBpZiAo IV9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9fYmVmb3JlLl9NX25v ZGUpKQogICAgICAgICYmICFfTV9rZXlfY29tcGFyZShfU19rZXkoX19wb3NpdGlvbi5fTV9ub2Rl KSwgX0tleU9mVmFsdWUoKShfX3YpKSkgewogICAgICBpZiAoX1NfcmlnaHQoX19iZWZvcmUuX01f bm9kZSkgPT0gMCkKICAgICAgICByZXR1cm4gX01faW5zZXJ0KDAsIF9fYmVmb3JlLl9NX25vZGUs IF9fdik7IAogICAgICBlbHNlCiAgICAgICAgcmV0dXJuIF9NX2luc2VydChfX3Bvc2l0aW9uLl9N X25vZGUsIF9fcG9zaXRpb24uX01fbm9kZSwgX192KTsKICAgICAKICAgIH0gZWxzZQogICAgICBy ZXR1cm4gaW5zZXJ0X2VxdWFsKF9fdik7CiAgfQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBj bGFzcyBfVmFsLCBjbGFzcyBfS29WLCBjbGFzcyBfQ21wLCBjbGFzcyBfQWxsb2M+CiAgdGVtcGxh dGU8Y2xhc3MgX0lJPgp2b2lkIF9SYl90cmVlPF9LZXksX1ZhbCxfS29WLF9DbXAsX0FsbG9jPgog IDo6aW5zZXJ0X2VxdWFsKF9JSSBfX2ZpcnN0LCBfSUkgX19sYXN0KQp7CiAgZm9yICggOyBfX2Zp cnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaW5zZXJ0X2VxdWFsKCpfX2ZpcnN0KTsKfQoK dGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWwsIGNsYXNzIF9Lb1YsIGNsYXNzIF9DbXAs IGNsYXNzIF9BbGxvYz4gCiAgdGVtcGxhdGU8Y2xhc3MgX0lJPgp2b2lkIF9SYl90cmVlPF9LZXks X1ZhbCxfS29WLF9DbXAsX0FsbG9jPgogIDo6aW5zZXJ0X3VuaXF1ZShfSUkgX19maXJzdCwgX0lJ IF9fbGFzdCkgewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGlu c2VydF91bmlxdWUoKl9fZmlyc3QpOwp9CgojIDEwMjEgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1s aWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0 bF90cmVlLmgiIDMKCiAgICAgICAgIAp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVl LCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0Fs bG9jPgppbmxpbmUgdm9pZCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFy ZSxfQWxsb2M+CiAgOjplcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQp7CiAgX0xpbmtfdHlwZSBf X3kgPSAKICAgIChfTGlua190eXBlKSBfUmJfdHJlZV9yZWJhbGFuY2VfZm9yX2VyYXNlKF9fcG9z aXRpb24uX01fbm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9NX2hlYWRlci0+X01fcGFyZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX01faGVhZGVyLT5fTV9sZWZ0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX01faGVhZGVyLT5fTV9yaWdodCk7CiAgZGVzdHJveV9u b2RlKF9feSk7CiAgLS1fTV9ub2RlX2NvdW50Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xh c3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwg Y2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxf Q29tcGFyZSxfQWxsb2M+OjpzaXplX3R5cGUgCl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZh bHVlLF9Db21wYXJlLF9BbGxvYz46OmVyYXNlKGNvbnN0IF9LZXkmIF9feCkKewogIHBhaXI8aXRl cmF0b3IsaXRlcmF0b3I+IF9fcCA9IGVxdWFsX3JhbmdlKF9feCk7CiAgc2l6ZV90eXBlIF9fbiA9 IDA7CiAgZGlzdGFuY2UoX19wLmZpcnN0LCBfX3Auc2Vjb25kLCBfX24pOwogIGVyYXNlKF9fcC5m aXJzdCwgX19wLnNlY29uZCk7CiAgcmV0dXJuIF9fbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXks IGNsYXNzIF9WYWwsIGNsYXNzIF9Lb1YsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5 cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWwsIF9Lb1YsIF9Db21wYXJlLCBfQWxsb2M+OjpfTGlu a190eXBlIApfUmJfdHJlZTxfS2V5LF9WYWwsX0tvVixfQ29tcGFyZSxfQWxsb2M+CiAgOjpfTV9j b3B5KF9MaW5rX3R5cGUgX194LCBfTGlua190eXBlIF9fcCkKewogICAgICAgICAgICAgICAgICAg ICAgICAgCiAgX0xpbmtfdHlwZSBfX3RvcCA9IF9NX2Nsb25lX25vZGUoX194KTsKICBfX3RvcC0+ X01fcGFyZW50ID0gX19wOwogCiAgdHJ5ICB7CiAgICBpZiAoX194LT5fTV9yaWdodCkKICAgICAg X190b3AtPl9NX3JpZ2h0ID0gX01fY29weShfU19yaWdodChfX3gpLCBfX3RvcCk7CiAgICBfX3Ag PSBfX3RvcDsKICAgIF9feCA9IF9TX2xlZnQoX194KTsKCiAgICB3aGlsZSAoX194ICE9IDApIHsK ICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9jbG9uZV9ub2RlKF9feCk7CiAgICAgIF9fcC0+X01f bGVmdCA9IF9feTsKICAgICAgX195LT5fTV9wYXJlbnQgPSBfX3A7CiAgICAgIGlmIChfX3gtPl9N X3JpZ2h0KQogICAgICAgIF9feS0+X01fcmlnaHQgPSBfTV9jb3B5KF9TX3JpZ2h0KF9feCksIF9f eSk7CiAgICAgIF9fcCA9IF9feTsKICAgICAgX194ID0gX1NfbGVmdChfX3gpOwogICAgfQogIH0K ICBjYXRjaCguLi4pIHsgIF9NX2VyYXNlKF9fdG9wKSA7IHRocm93OyB9IDsKCiAgcmV0dXJuIF9f dG9wOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZW YWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp2b2lkIF9SYl90 cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6Ol9NX2VyYXNl KF9MaW5rX3R5cGUgX194KQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogIHdo aWxlIChfX3ggIT0gMCkgewogICAgX01fZXJhc2UoX1NfcmlnaHQoX194KSk7CiAgICBfTGlua190 eXBlIF9feSA9IF9TX2xlZnQoX194KTsKICAgIGRlc3Ryb3lfbm9kZShfX3gpOwogICAgX194ID0g X195OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tl eU9mVmFsdWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4Kdm9pZCBf UmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjplcmFz ZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCnsKICBpZiAoX19maXJzdCA9PSBi ZWdpbigpICYmIF9fbGFzdCA9PSBlbmQoKSkKICAgIGNsZWFyKCk7CiAgZWxzZQogICAgd2hpbGUg KF9fZmlyc3QgIT0gX19sYXN0KSBlcmFzZShfX2ZpcnN0KyspOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBf Q29tcGFyZSwgY2xhc3MgX0FsbG9jPgp2b2lkIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZh bHVlLF9Db21wYXJlLF9BbGxvYz4KICA6OmVyYXNlKGNvbnN0IF9LZXkqIF9fZmlyc3QsIGNvbnN0 IF9LZXkqIF9fbGFzdCkgCnsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIGVyYXNlKCpfX2Zp cnN0KyspOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5 T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFt ZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVy YXRvciAKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6 ZmluZChjb25zdCBfS2V5JiBfX2spCnsKICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsgICAg ICAgCiAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7ICAgICAgIAoKICB3aGlsZSAoX194ICE9 IDApIAogICAgaWYgKCFfTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwgX19rKSkKICAgICAgX195 ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICBlbHNlCiAgICAgIF9feCA9IF9TX3JpZ2h0 KF9feCk7CgogIGl0ZXJhdG9yIF9faiA9IGl0ZXJhdG9yKF9feSk7ICAgCiAgcmV0dXJuIChfX2og PT0gZW5kKCkgfHwgX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX19qLl9NX25vZGUpKSkgPyAK ICAgICBlbmQoKSA6IF9fajsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwg Y2xhc3MgX0tleU9mVmFsdWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxv Yz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0Fs bG9jPjo6Y29uc3RfaXRlcmF0b3IgCl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9D b21wYXJlLF9BbGxvYz46OmZpbmQoY29uc3QgX0tleSYgX19rKSBjb25zdAp7CiAgX0xpbmtfdHlw ZSBfX3kgPSBfTV9oZWFkZXI7ICAKICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsgIAoKICB3 aGlsZSAoX194ICE9IDApIHsKICAgIGlmICghX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9f aykpCiAgICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gpOwogICAgZWxzZQogICAgICBf X3ggPSBfU19yaWdodChfX3gpOwogIH0KICBjb25zdF9pdGVyYXRvciBfX2ogPSBjb25zdF9pdGVy YXRvcihfX3kpOyAgIAogIHJldHVybiAoX19qID09IGVuZCgpIHx8IF9NX2tleV9jb21wYXJlKF9f aywgX1Nfa2V5KF9fai5fTV9ub2RlKSkpID8KICAgIGVuZCgpIDogX19qOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBj bGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1 ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjpzaXplX3R5cGUgCl9SYl90cmVlPF9LZXks X1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6OmNvdW50KGNvbnN0IF9LZXkm IF9faykgY29uc3QKewogIHBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yPiBfX3Ag PSBlcXVhbF9yYW5nZShfX2spOwogIHNpemVfdHlwZSBfX24gPSAwOwogIGRpc3RhbmNlKF9fcC5m aXJzdCwgX19wLnNlY29uZCwgX19uKTsKICByZXR1cm4gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBf Q29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5 T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvciAKX1JiX3RyZWU8X0tleSxfVmFsdWUs X0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6bG93ZXJfYm91bmQoY29uc3QgX0tleSYg X19rKQp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7ICAKICBfTGlua190eXBlIF9feCA9 IF9NX3Jvb3QoKTsgIAoKICB3aGlsZSAoX194ICE9IDApIAogICAgaWYgKCFfTV9rZXlfY29tcGFy ZShfU19rZXkoX194KSwgX19rKSkKICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7 CiAgICBlbHNlCiAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7CgogIHJldHVybiBpdGVyYXRvcihf X3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZW YWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBf UmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+Ojpjb25zdF9p dGVyYXRvciAKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9j PgogIDo6bG93ZXJfYm91bmQoY29uc3QgX0tleSYgX19rKSBjb25zdAp7CiAgX0xpbmtfdHlwZSBf X3kgPSBfTV9oZWFkZXI7ICAKICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsgIAoKICB3aGls ZSAoX194ICE9IDApIAogICAgaWYgKCFfTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwgX19rKSkK ICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICBlbHNlCiAgICAgIF9feCA9 IF9TX3JpZ2h0KF9feCk7CgogIHJldHVybiBjb25zdF9pdGVyYXRvcihfX3kpOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAg ICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9W YWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvciAKX1JiX3RyZWU8X0tl eSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6dXBwZXJfYm91bmQoY29u c3QgX0tleSYgX19rKQp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7ICAKICBfTGlua190 eXBlIF9feCA9IF9NX3Jvb3QoKTsgIAoKICAgd2hpbGUgKF9feCAhPSAwKSAKICAgICBpZiAoX01f a2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX194KSkpCiAgICAgICBfX3kgPSBfX3gsIF9feCA9IF9T X2xlZnQoX194KTsKICAgICBlbHNlCiAgICAgICBfX3ggPSBfU19yaWdodChfX3gpOwoKICAgcmV0 dXJuIGl0ZXJhdG9yKF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUs IGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxs b2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9B bGxvYz46OmNvbnN0X2l0ZXJhdG9yIApfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxf Q29tcGFyZSxfQWxsb2M+CiAgOjp1cHBlcl9ib3VuZChjb25zdCBfS2V5JiBfX2spIGNvbnN0CnsK ICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsgIAogIF9MaW5rX3R5cGUgX194ID0gX01fcm9v dCgpOyAgCgogICB3aGlsZSAoX194ICE9IDApIAogICAgIGlmIChfTV9rZXlfY29tcGFyZShfX2ss IF9TX2tleShfX3gpKSkKICAgICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gpOwogICAg IGVsc2UKICAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7CgogICByZXR1cm4gY29uc3RfaXRlcmF0 b3IoX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tl eU9mVmFsdWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5l IApwYWlyPHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJl LF9BbGxvYz46Oml0ZXJhdG9yLAogICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9L ZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yPgpfUmJfdHJlZTxfS2V5LF9WYWx1 ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjplcXVhbF9yYW5nZShjb25zdCBfS2V5 JiBfX2spCnsKICByZXR1cm4gcGFpcjxpdGVyYXRvciwgaXRlcmF0b3I+KGxvd2VyX2JvdW5kKF9f ayksIHVwcGVyX2JvdW5kKF9faykpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1Zh bHVlLCBjbGFzcyBfS29WLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgCnBh aXI8dHlwZW5hbWUgX1JiX3RyZWU8X0tleSwgX1ZhbHVlLCBfS29WLCBfQ29tcGFyZSwgX0FsbG9j Pjo6Y29uc3RfaXRlcmF0b3IsCiAgICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSwgX1ZhbHVlLCBf S29WLCBfQ29tcGFyZSwgX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3I+Cl9SYl90cmVlPF9LZXksIF9W YWx1ZSwgX0tvViwgX0NvbXBhcmUsIF9BbGxvYz4KICA6OmVxdWFsX3JhbmdlKGNvbnN0IF9LZXkm IF9faykgY29uc3QKewogIHJldHVybiBwYWlyPGNvbnN0X2l0ZXJhdG9yLGNvbnN0X2l0ZXJhdG9y Pihsb3dlcl9ib3VuZChfX2spLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1cHBlcl9ib3VuZChfX2spKTsKfQoKaW5saW5lIGludCAKX19ibGFja19jb3VudChf UmJfdHJlZV9ub2RlX2Jhc2UqIF9fbm9kZSwgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3Jvb3QpCnsK ICBpZiAoX19ub2RlID09IDApCiAgICByZXR1cm4gMDsKICBlbHNlIHsKICAgIGludCBfX2JjID0g X19ub2RlLT5fTV9jb2xvciA9PSBfU19yYl90cmVlX2JsYWNrID8gMSA6IDA7CiAgICBpZiAoX19u b2RlID09IF9fcm9vdCkKICAgICAgcmV0dXJuIF9fYmM7CiAgICBlbHNlCiAgICAgIHJldHVybiBf X2JjICsgX19ibGFja19jb3VudChfX25vZGUtPl9NX3BhcmVudCwgX19yb290KTsKICB9Cn0KCnRl bXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCAKICAg ICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmJvb2wgX1JiX3RyZWU8X0tleSxf VmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6X19yYl92ZXJpZnkoKSBjb25zdAp7 CiAgaWYgKF9NX25vZGVfY291bnQgPT0gMCB8fCBiZWdpbigpID09IGVuZCgpKQogICAgcmV0dXJu IF9NX25vZGVfY291bnQgPT0gMCAmJiBiZWdpbigpID09IGVuZCgpICYmCiAgICAgIF9NX2hlYWRl ci0+X01fbGVmdCA9PSBfTV9oZWFkZXIgJiYgX01faGVhZGVyLT5fTV9yaWdodCA9PSBfTV9oZWFk ZXI7CiAgCiAgaW50IF9fbGVuID0gX19ibGFja19jb3VudChfTV9sZWZ0bW9zdCgpLCBfTV9yb290 KCkpOwogIGZvciAoY29uc3RfaXRlcmF0b3IgX19pdCA9IGJlZ2luKCk7IF9faXQgIT0gZW5kKCk7 ICsrX19pdCkgewogICAgX0xpbmtfdHlwZSBfX3ggPSAoX0xpbmtfdHlwZSkgX19pdC5fTV9ub2Rl OwogICAgX0xpbmtfdHlwZSBfX0wgPSBfU19sZWZ0KF9feCk7CiAgICBfTGlua190eXBlIF9fUiA9 IF9TX3JpZ2h0KF9feCk7CgogICAgaWYgKF9feC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQp CiAgICAgIGlmICgoX19MICYmIF9fTC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpIHx8CiAg ICAgICAgICAoX19SICYmIF9fUi0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpKQogICAgICAg IHJldHVybiBmYWxzZTsKCiAgICBpZiAoX19MICYmIF9NX2tleV9jb21wYXJlKF9TX2tleShfX3gp LCBfU19rZXkoX19MKSkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmIChfX1IgJiYgX01fa2V5 X2NvbXBhcmUoX1Nfa2V5KF9fUiksIF9TX2tleShfX3gpKSkKICAgICAgcmV0dXJuIGZhbHNlOwoK ICAgIGlmICghX19MICYmICFfX1IgJiYgX19ibGFja19jb3VudChfX3gsIF9NX3Jvb3QoKSkgIT0g X19sZW4pCiAgICAgIHJldHVybiBmYWxzZTsKICB9CgogIGlmIChfTV9sZWZ0bW9zdCgpICE9IF9S Yl90cmVlX25vZGVfYmFzZTo6X1NfbWluaW11bShfTV9yb290KCkpKQogICAgcmV0dXJuIGZhbHNl OwogIGlmIChfTV9yaWdodG1vc3QoKSAhPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21heGltdW0o X01fcm9vdCgpKSkKICAgIHJldHVybiBmYWxzZTsKCiAgcmV0dXJuIHRydWU7Cn0KCiAKIAoKdGVt cGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIGNsYXNz IF9Db21wYXJlLAogICAgICAgICAgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9yPCBfVmFsdWUgPiAg PgpzdHJ1Y3QgcmJfdHJlZSA6IHB1YmxpYyBfUmJfdHJlZTxfS2V5LCBfVmFsdWUsIF9LZXlPZlZh bHVlLCBfQ29tcGFyZSwgX0FsbG9jPgp7CiAgdHlwZWRlZiBfUmJfdHJlZTxfS2V5LCBfVmFsdWUs IF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPiBfQmFzZTsKICB0eXBlZGVmIHR5cGVuYW1l IF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgcmJfdHJlZShjb25zdCBf Q29tcGFyZSYgX19jb21wID0gX0NvbXBhcmUoKSwKICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90 eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfQmFzZShfX2NvbXAsIF9fYSkge30K ICAKICB+cmJfdHJlZSgpIHt9Cn07CgoKCgoKICAKCgoKIAogCiAKIyAzMSAiL29wdC9tdnBsb2Nh bC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1 ZGUvZysrLTMvc2V0IiAyIDMKCgojIDEgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMt c3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9zZXQuaCIg MSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoKCgoKCgoKdGVtcGxhdGUg PGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlID0gbGVzczxfS2V5PiwKICAgICAgICAgIGNsYXNz IF9BbGxvYyA9IGFsbG9jYXRvcjwgX0tleSA+ICA+CgoKCgpjbGFzcyBzZXQgewpwdWJsaWM6CiAg IAoKICB0eXBlZGVmIF9LZXkgICAgIGtleV90eXBlOwogIHR5cGVkZWYgX0tleSAgICAgdmFsdWVf dHlwZTsKICB0eXBlZGVmIF9Db21wYXJlIGtleV9jb21wYXJlOwogIHR5cGVkZWYgX0NvbXBhcmUg dmFsdWVfY29tcGFyZTsKcHJpdmF0ZToKICB0eXBlZGVmIF9SYl90cmVlPGtleV90eXBlLCB2YWx1 ZV90eXBlLCAKICAgICAgICAgICAgICAgICAgX0lkZW50aXR5PHZhbHVlX3R5cGU+LCBrZXlfY29t cGFyZSwgX0FsbG9jPiBfUmVwX3R5cGU7CiAgX1JlcF90eXBlIF9NX3Q7ICAgCnB1YmxpYzoKICB0 eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcG9pbnRlciBwb2ludGVyOwogIHR5cGVk ZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CiAgdHlw ZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSByZWZlcmVuY2U7CiAgdHlw ZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7 CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGl0ZXJhdG9yOwog IHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRv cjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBy ZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZXZl cnNlX2l0ZXJhdG9yIGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBf UmVwX3R5cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5 cGU6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBf UmVwX3R5cGU6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICAgCgogIHNldCgpIDog X01fdChfQ29tcGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKSB7fQogIGV4cGxpY2l0IHNldChjb25z dCBfQ29tcGFyZSYgX19jb21wLAogICAgICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYg X19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX01fdChfX2NvbXAsIF9fYSkge30KCgogIHRl bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICBzZXQoX0lucHV0SXRlcmF0b3IgX19maXJz dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgOiBfTV90KF9Db21wYXJlKCksIGFsbG9jYXRv cl90eXBlKCkpCiAgICB7IF9NX3QuaW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QpOyB9Cgog IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICBzZXQoX0lucHV0SXRlcmF0b3IgX19m aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBjb25zdCBfQ29tcGFyZSYgX19jb21wLAogICAg ICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX01f dChfX2NvbXAsIF9fYSkgeyBfTV90Lmluc2VydF91bmlxdWUoX19maXJzdCwgX19sYXN0KTsgfQoj IDEwNyAiL29wdC9tdnBsb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIvMi45NS4z Ly4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3NldC5oIiAzCgoKICBzZXQoY29uc3Qgc2V0 PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194KSA6IF9NX3QoX194Ll9NX3QpIHt9CiAgc2V0PF9L ZXksX0NvbXBhcmUsX0FsbG9jPiYgb3BlcmF0b3I9KGNvbnN0IHNldDxfS2V5LCBfQ29tcGFyZSwg X0FsbG9jPiYgX194KQogIHsgCiAgICBfTV90ID0gX194Ll9NX3Q7IAogICAgcmV0dXJuICp0aGlz OwogIH0KCiAgIAoKICBrZXlfY29tcGFyZSBrZXlfY29tcCgpIGNvbnN0IHsgcmV0dXJuIF9NX3Qu a2V5X2NvbXAoKTsgfQogIHZhbHVlX2NvbXBhcmUgdmFsdWVfY29tcCgpIGNvbnN0IHsgcmV0dXJu IF9NX3Qua2V5X2NvbXAoKTsgfQogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25z dCB7IHJldHVybiBfTV90LmdldF9hbGxvY2F0b3IoKTsgfQoKICBpdGVyYXRvciBiZWdpbigpIGNv bnN0IHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQogIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0 dXJuIF9NX3QuZW5kKCk7IH0KICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0IHsgcmV0 dXJuIF9NX3QucmJlZ2luKCk7IH0gCiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QgeyBy ZXR1cm4gX01fdC5yZW5kKCk7IH0KICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gX01fdC5l bXB0eSgpOyB9CiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBfTV90LnNpemUoKTsg fQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3QubWF4X3NpemUoKTsg fQogIHZvaWQgc3dhcChzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIHsgX01fdC5zd2Fw KF9feC5fTV90KTsgfQoKICAgCiAgcGFpcjxpdGVyYXRvcixib29sPiBpbnNlcnQoY29uc3QgdmFs dWVfdHlwZSYgX194KSB7IAogICAgcGFpcjx0eXBlbmFtZSBfUmVwX3R5cGU6Oml0ZXJhdG9yLCBi b29sPiBfX3AgPSBfTV90Lmluc2VydF91bmlxdWUoX194KTsgCiAgICByZXR1cm4gcGFpcjxpdGVy YXRvciwgYm9vbD4oX19wLmZpcnN0LCBfX3Auc2Vjb25kKTsKICB9CiAgaXRlcmF0b3IgaW5zZXJ0 KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgewogICAgdHlwZWRl ZiB0eXBlbmFtZSBfUmVwX3R5cGU6Oml0ZXJhdG9yIF9SZXBfaXRlcmF0b3I7CiAgICByZXR1cm4g X01fdC5pbnNlcnRfdW5pcXVlKChfUmVwX2l0ZXJhdG9yJilfX3Bvc2l0aW9uLCBfX3gpOwogIH0K CiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0KF9JbnB1dEl0 ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgX01fdC5pbnNlcnRf dW5pcXVlKF9fZmlyc3QsIF9fbGFzdCk7CiAgfQoKCgoKCgoKCiAgdm9pZCBlcmFzZShpdGVyYXRv ciBfX3Bvc2l0aW9uKSB7IAogICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6Oml0ZXJhdG9y IF9SZXBfaXRlcmF0b3I7CiAgICBfTV90LmVyYXNlKChfUmVwX2l0ZXJhdG9yJilfX3Bvc2l0aW9u KTsgCiAgfQogIHNpemVfdHlwZSBlcmFzZShjb25zdCBrZXlfdHlwZSYgX194KSB7IAogICAgcmV0 dXJuIF9NX3QuZXJhc2UoX194KTsgCiAgfQogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwg aXRlcmF0b3IgX19sYXN0KSB7IAogICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6Oml0ZXJh dG9yIF9SZXBfaXRlcmF0b3I7CiAgICBfTV90LmVyYXNlKChfUmVwX2l0ZXJhdG9yJilfX2ZpcnN0 LCAoX1JlcF9pdGVyYXRvciYpX19sYXN0KTsgCiAgfQogIHZvaWQgY2xlYXIoKSB7IF9NX3QuY2xl YXIoKTsgfQoKICAgCgogIGl0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Qg eyByZXR1cm4gX01fdC5maW5kKF9feCk7IH0KICBzaXplX3R5cGUgY291bnQoY29uc3Qga2V5X3R5 cGUmIF9feCkgY29uc3QgeyByZXR1cm4gX01fdC5jb3VudChfX3gpOyB9CiAgaXRlcmF0b3IgbG93 ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QubG93 ZXJfYm91bmQoX194KTsKICB9CiAgaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUm IF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsgCiAgfQogIHBh aXI8aXRlcmF0b3IsaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIGNv bnN0IHsKICAgIHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7CiAgfQogIGZyaWVuZCBib29s IG9wZXJhdG9yPT0gPD4gIChjb25zdCBzZXQmLCBjb25zdCBzZXQmKTsKICBmcmllbmQgYm9vbCBv cGVyYXRvcjwgPD4gIChjb25zdCBzZXQmLCBjb25zdCBzZXQmKTsKfTsKCnRlbXBsYXRlIDxjbGFz cyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRv cj09KGNvbnN0IHNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCwgCiAgICAgICAgICAgICAg ICAgICAgICAgY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJu IF9feC5fTV90ID09IF9feS5fTV90Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0Nv bXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHNldDxfS2V5 LF9Db21wYXJlLF9BbGxvYz4mIF9feCwgCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXQ8 X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX3QgPCBfX3kuX01f dDsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxv Yz4KaW5saW5lIHZvaWQgc3dhcChzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsIAogICAg ICAgICAgICAgICAgIHNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIF9feC5zd2Fw KF9feSk7Cn0KCgoKCgoKCgogCgoKCiAKIAogCiMgMzMgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1s aWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3Nl dCIgMiAzCgojIDEgIi9vcHQvbXZwbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9tdWx0aXNldC5oIiAxIDMKIAoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg X0tleSwgY2xhc3MgX0NvbXBhcmUgPSBsZXNzPF9LZXk+LCAKICAgICAgICAgIGNsYXNzIF9BbGxv YyA9IGFsbG9jYXRvcjwgX0tleSA+ICA+CgoKCgpjbGFzcyBtdWx0aXNldCB7CnB1YmxpYzoKICAg CgogIHR5cGVkZWYgX0tleSAgICAga2V5X3R5cGU7CiAgdHlwZWRlZiBfS2V5ICAgICB2YWx1ZV90 eXBlOwogIHR5cGVkZWYgX0NvbXBhcmUga2V5X2NvbXBhcmU7CiAgdHlwZWRlZiBfQ29tcGFyZSB2 YWx1ZV9jb21wYXJlOwpwcml2YXRlOgogIHR5cGVkZWYgX1JiX3RyZWU8a2V5X3R5cGUsIHZhbHVl X3R5cGUsIAogICAgICAgICAgICAgICAgICBfSWRlbnRpdHk8dmFsdWVfdHlwZT4sIGtleV9jb21w YXJlLCBfQWxsb2M+IF9SZXBfdHlwZTsKICBfUmVwX3R5cGUgX01fdDsgICAKcHVibGljOgogIHR5 cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9wb2ludGVyIHBvaW50ZXI7CiAgdHlwZWRl ZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKICB0eXBl ZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmVmZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBl ZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsK ICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7CiAg dHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9y OwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJl dmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JldmVy c2VfaXRlcmF0b3IgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9S ZXBfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlw ZTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9S ZXBfdHlwZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgogICAKCiAgbXVsdGlzZXQo KSA6IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUoKSkge30KICBleHBsaWNpdCBtdWx0 aXNldChjb25zdCBfQ29tcGFyZSYgX19jb21wLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGFs bG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfTV90KF9fY29tcCwg X19hKSB7fQoKCgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICBtdWx0aXNldChf SW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgICA6IF9NX3Qo X0NvbXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsgX01fdC5pbnNlcnRfZXF1YWwoX19m aXJzdCwgX19sYXN0KTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgbXVs dGlzZXQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAg ICAgICAgIGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsCiAgICAgICAgICAgY29uc3QgYWxsb2NhdG9y X3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHsg X01fdC5pbnNlcnRfZXF1YWwoX19maXJzdCwgX19sYXN0KTsgfQoKIyAxMTMgIi9vcHQvbXZwbG9j YWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNs dWRlL2crKy0zL3N0bF9tdWx0aXNldC5oIiAzCgoKICBtdWx0aXNldChjb25zdCBtdWx0aXNldDxf S2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCkgOiBfTV90KF9feC5fTV90KSB7fQogIG11bHRpc2V0 PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYKICBvcGVyYXRvcj0oY29uc3QgbXVsdGlzZXQ8X0tleSxf Q29tcGFyZSxfQWxsb2M+JiBfX3gpIHsKICAgIF9NX3QgPSBfX3guX01fdDsgCiAgICByZXR1cm4g KnRoaXM7CiAgfQoKICAgCgogIGtleV9jb21wYXJlIGtleV9jb21wKCkgY29uc3QgeyByZXR1cm4g X01fdC5rZXlfY29tcCgpOyB9CiAgdmFsdWVfY29tcGFyZSB2YWx1ZV9jb21wKCkgY29uc3QgeyBy ZXR1cm4gX01fdC5rZXlfY29tcCgpOyB9CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigp IGNvbnN0IHsgcmV0dXJuIF9NX3QuZ2V0X2FsbG9jYXRvcigpOyB9CgogIGl0ZXJhdG9yIGJlZ2lu KCkgY29uc3QgeyByZXR1cm4gX01fdC5iZWdpbigpOyB9CiAgaXRlcmF0b3IgZW5kKCkgY29uc3Qg eyByZXR1cm4gX01fdC5lbmQoKTsgfQogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3Qg eyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfSAKICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25z dCB7IHJldHVybiBfTV90LnJlbmQoKTsgfQogIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiBf TV90LmVtcHR5KCk7IH0KICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3Quc2l6 ZSgpOyB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gX01fdC5tYXhfc2l6 ZSgpOyB9CiAgdm9pZCBzd2FwKG11bHRpc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194KSB7 IF9NX3Quc3dhcChfX3guX01fdCk7IH0KCiAgIAogIGl0ZXJhdG9yIGluc2VydChjb25zdCB2YWx1 ZV90eXBlJiBfX3gpIHsgCiAgICByZXR1cm4gX01fdC5pbnNlcnRfZXF1YWwoX194KTsKICB9CiAg aXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9f eCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6Oml0ZXJhdG9yIF9SZXBfaXRlcmF0 b3I7CiAgICByZXR1cm4gX01fdC5pbnNlcnRfZXF1YWwoKF9SZXBfaXRlcmF0b3ImKV9fcG9zaXRp b24sIF9feCk7CiAgfQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQg aW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewog ICAgX01fdC5pbnNlcnRfZXF1YWwoX19maXJzdCwgX19sYXN0KTsKICB9CgoKCgoKCgoKICB2b2lk IGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsgCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBf dHlwZTo6aXRlcmF0b3IgX1JlcF9pdGVyYXRvcjsKICAgIF9NX3QuZXJhc2UoKF9SZXBfaXRlcmF0 b3ImKV9fcG9zaXRpb24pOyAKICB9CiAgc2l6ZV90eXBlIGVyYXNlKGNvbnN0IGtleV90eXBlJiBf X3gpIHsgCiAgICByZXR1cm4gX01fdC5lcmFzZShfX3gpOyAKICB9CiAgdm9pZCBlcmFzZShpdGVy YXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpIHsgCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9S ZXBfdHlwZTo6aXRlcmF0b3IgX1JlcF9pdGVyYXRvcjsKICAgIF9NX3QuZXJhc2UoKF9SZXBfaXRl cmF0b3ImKV9fZmlyc3QsIChfUmVwX2l0ZXJhdG9yJilfX2xhc3QpOyAKICB9CiAgdm9pZCBjbGVh cigpIHsgX01fdC5jbGVhcigpOyB9CgogICAKCiAgaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlw ZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQogIHNpemVfdHlwZSBjb3Vu dChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmNvdW50KF9feCk7IH0K ICBpdGVyYXRvciBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICBy ZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOwogIH0KICBpdGVyYXRvciB1cHBlcl9ib3VuZChj b25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fdC51cHBlcl9ib3VuZChf X3gpOyAKICB9CiAgcGFpcjxpdGVyYXRvcixpdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5 X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9 CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PSA8PiAgKGNvbnN0IG11bHRpc2V0JiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aXNldCYpOwog IGZyaWVuZCBib29sIG9wZXJhdG9yPCA8PiAgKGNvbnN0IG11bHRpc2V0JiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpc2V0Jik7Cn07Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5l IGJvb2wgb3BlcmF0b3I9PShjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9f eCwgCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxf QWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX3QgPT0gX195Ll9NX3Q7Cn0KCnRlbXBsYXRl IDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBv cGVyYXRvcjwoY29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsIAogICAg ICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBf X3kpIHsKICByZXR1cm4gX194Ll9NX3QgPCBfX3kuX01fdDsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg X0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgc3dhcChtdWx0 aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCwgCiAgICAgICAgICAgICAgICAgbXVsdGlz ZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICBfX3guc3dhcChfX3kpOwp9CgoKCgoK CgoKIAoKCgogCiAKIAojIDM0ICIvb3B0L212cGxvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z b2xhcmlzMi8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zZXQiIDIgMwoKCgoKIAog CiAKIyAxMiAiLi4vLi4vaW5jbHVkZS9sb2NhbGluYy9IZHIuSCIgMgoKCgoKIyAxICIuLi8uLi9p bmNsdWRlL2xvY2FsaW5jL1Bhc3MuSCIgMQoKCgoKCgoKCgoKCgpzdGF0aWMgY29uc3QgaW50IGtN YXhQYXNzTmFtZUxlbmd0aCA9IDE2OwkgCgpjbGFzcyBQeHBvczsKY2xhc3MgV2luZDsKY2xhc3Mg R3JvdXA7CmNsYXNzIEl0ZW07CmNsYXNzIFN5bmM7CmNsYXNzIFNuYXA7CmNsYXNzIFNjYW47CmNs YXNzIEhkcjsKY2xhc3MgWHlzdGFnZTsKCmNsYXNzIFBhc3MgewpwdWJsaWM6CiAgICB2b2lkIHJl bW92ZShjb25zdCBHcm91cCAqKTsKICAgIHZvaWQgYWRkKEdyb3VwICopOwoKICAgIHZvaWQgcmVt b3ZlKGNvbnN0IEl0ZW0gKik7CiAgICB2b2lkIGFkZChJdGVtICopOwoKICAgIHZvaWQgcmVtb3Zl KCk7CiAgICB2b2lkIGFkZChTeW5jICopOwoKICAgIHZvaWQgYWRkKFNuYXAgKik7CgogICAgdm9p ZCByZXNldCgpOwkJIAogICAgdm9pZCBjcnVuY2goKTsJCSAKCiAgICAgCgoKICAgIGJvb2wgaGFz X3NuYXBzKCkgY29uc3Q7CiAgICBHcm91cCAqZ3JvdXBfbGlzdCgpIGNvbnN0OwogICAgdm9pZCBn cm91cF9saXN0KEdyb3VwICopOwoKICAgIEl0ZW0gKml0ZW1fbGlzdCgpIGNvbnN0OwogICAgdm9p ZCBpdGVtX2xpc3QoSXRlbSAqKTsKCiAgICBTeW5jICpnZXRfc3luYyhpbnQgaW54ID0gLTEpIGNv bnN0OwogICAgdm9pZCBzeW5jX2xpc3QoU3luYyAqKTsKICAgIFN5bmMgKnN5bmNfbGlzdCgpIGNv bnN0OwoKICAgIFNuYXAgKnNuYXBfbGlzdCgpIGNvbnN0OwogICAgdm9pZCBzbmFwX2xpc3QoU25h cCAqKTsKCiAgICBTY2FuICpzY2FuX2xpc3QoKSBjb25zdDsKICAgIHZvaWQgc2Nhbl9saXN0KFNj YW4gKik7CgogICAgdm9pZCB3aW5kX2NvbXAoV2luZCYgdzEpOwogICAgdm9pZCB3aW5kX3VuX2Nv bXAoV2luZCYgdzEpOwogICAgY29uc3QgUHhwb3Mgc25hcF9jb21wKFNuYXAgKnNuKTsKCgogICAg Y29uc3Qgc3RkOjpzdHJpbmcgcGFzc19uYW1lKCkgY29uc3Q7CiAgICB2b2lkIHBhc3NfbmFtZShj b25zdCBzdGQ6OnN0cmluZyYpOwoKICAgIGludCBpbnNwZWN0X21vZHVsdXMoKSBjb25zdDsKICAg IHZvaWQgaW5zcGVjdF9tb2R1bHVzKGludCk7CgoKICAgIHZvaWQgZm92M2luaXQoY29uc3QgWHlz dGFnZSAqLCBjb29yX3QpOwoKICAgIEluc3BMaWdodCAmZmx5X2xpZ2h0aW5nKCkgeyByZXR1cm4g X2ZseTsgfQogICAgSW5zcExpZ2h0ICZmaWR1Y2lhbF9saWdodGluZygpIHsgcmV0dXJuIF9maWR1 OyB9CgogICAgdm9pZCBmbHlfbGlnaHRpbmcoSW5zcExpZ2h0ICZmbHkpIHsgX2ZseSA9IGZseTsg fQogICAgdm9pZCBmaWR1Y2lhbF9saWdodGluZyhJbnNwTGlnaHQgJmZpZHUpIHsgX2ZpZHUgPSBm aWR1OyB9CgogICAgdV9zaG9ydAltX25ncnBzKCkgeyByZXR1cm4gX21fbmdycHM7IH0KICAgIHVf c2hvcnQJbV9uaXRlbXMoKSB7IHJldHVybiBfbV9uaXRlbXM7IH0KICAgIHNob3J0CW1fc25hcF9k ZWxheSgpIHsgcmV0dXJuIF9tX3NuYXBfZGVsYXk7IH0KICAgIHNob3J0CW1fbWluZmlkKCkgeyBy ZXR1cm4gX21fbWluZmlkOyB9CiAgICBzaG9ydAltX2hpYW5nbGUoKSB7IHJldHVybiBfbV9oaWFu Z2xlOyB9CiAgICBzaG9ydAltX2R1cmF0aW9uKCkgeyByZXR1cm4gX21fZHVyYXRpb247IH0KICAg IHNob3J0CW1fbGxmbmR4KCkgeyByZXR1cm4gX21fbGxmbmR4OyB9CiAgICBzaG9ydAltX2xsZnJl cSgpIHsgcmV0dXJuIF9tX2xsZnJlcTsgfQogICAgc2hvcnQJbV8zZGZvdigpIHsgcmV0dXJuIF9t XzNkZm92OyB9CiAgICBzaG9ydAltX3NzM2QoKSB7IHJldHVybiBfbV9zczNkOyB9CiAgICBzaG9y dAltX2xlZnRfb2Zmc2V0KCkgeyByZXR1cm4gX21fbGVmdF9vZmZzZXQ7IH0KICAgIHNob3J0CW1f cmlnaHRfb2Zmc2V0KCkgeyByZXR1cm4gX21fcmlnaHRfb2Zmc2V0OyB9CiAgICBsb25nCW1fZm92 c2NhbGUoKSB7IHJldHVybiBfbV9mb3ZzY2FsZTsgfQogICAgc2hvcnQJKm1fYmFzZWNvbXB0Ymwo KSB7IHJldHVybiBfbV9iYXNlY29tcHRibDsgfQoKICAgIHZvaWQJbV9uZ3Jwcyh1X3Nob3J0IHZh bCkgeyBfbV9uZ3JwcyA9IHZhbDsgfQogICAgdm9pZAltX25pdGVtcyh1X3Nob3J0IHZhbCkgeyBf bV9uaXRlbXMgPSB2YWw7IH0KICAgIHZvaWQJbV9zbmFwX2RlbGF5KHNob3J0IHZhbCkgeyBfbV9z bmFwX2RlbGF5ID0gdmFsOyB9CiAgICB2b2lkCW1fbWluZmlkKHNob3J0IHZhbCkgeyBfbV9taW5m aWQgPSB2YWw7IH0KICAgIHZvaWQJbV9oaWFuZ2xlKHNob3J0IHZhbCkgeyBfbV9oaWFuZ2xlID0g dmFsOyB9CiAgICB2b2lkCW1fZHVyYXRpb24oc2hvcnQgdmFsKSB7IF9tX2R1cmF0aW9uID0gdmFs OyB9CiAgICB2b2lkCW1fbGxmbmR4KHNob3J0IHZhbCkgeyBfbV9sbGZuZHggPSB2YWw7IH0KICAg IHZvaWQJbV9sbGZyZXEoc2hvcnQgdmFsKSB7IF9tX2xsZnJlcSA9IHZhbDsgfQogICAgdm9pZAlt XzNkZm92KHNob3J0IHZhbCkgeyBfbV8zZGZvdiA9IHZhbDsgfQogICAgdm9pZAltX3NzM2Qoc2hv cnQgdmFsKSB7IF9tX3NzM2QgPSB2YWw7IH0KICAgIHZvaWQJbV9sZWZ0X29mZnNldChzaG9ydCB2 YWwpIHsgX21fbGVmdF9vZmZzZXQgPSB2YWw7IH0KICAgIHZvaWQJbV9yaWdodF9vZmZzZXQoc2hv cnQgdmFsKSB7IF9tX3JpZ2h0X29mZnNldCA9IHZhbDsgfQogICAgdm9pZAltX2ZvdnNjYWxlKGxv bmcgdmFsKSB7IF9tX2ZvdnNjYWxlID0gdmFsOyB9CiAgICB2b2lkCW1fYmFzZWNvbXB0Ymwoc2hv cnQgKnZhbCkgeyBfbV9iYXNlY29tcHRibCA9IHZhbDsgfQogICAgCiAgICBzdGF0aWMgUGFzcyAq Z2V0X3Bhc3MoaW50IHBhc3MgPSAtMSk7CgoKCiAgICB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lk ICopOwkgCgpwcml2YXRlOgogICAgR3JvdXAgKl9ncm91cF9saXN0OwkJIAogICAgSXRlbSAqX2l0 ZW1fbGlzdDsJCSAKICAgIFN5bmMgKl9zeW5jX2xpc3Q7CQkgCiAgICBTbmFwICpfc25hcF9saXN0 OwkJIAogICAgU2NhbiAqX3NjYW5fbGlzdDsJCSAKICAgIAogICAgY2hhciBfcGFzc19uYW1lW2tN YXhQYXNzTmFtZUxlbmd0aF07CiAgICBsb25nIF9pbnNwZWN0X2V2ZXJ5X3hfdGltZXM7CSAKCiAg ICBJbnNwTGlnaHQJX2ZseTsKICAgIEluc3BMaWdodAlfZmlkdTsKCiAgICB1X3Nob3J0IF9tX25n cnBzOwkJIAogICAgdV9zaG9ydCBfbV9uaXRlbXM7CQkgCgogICAgc2hvcnQgX21fc25hcF9kZWxh eTsJIAogICAgc2hvcnQgX21fbWluZmlkOwkJIAoKICAgIHNob3J0IF9tX2hpYW5nbGU7CQkgCiAg ICBzaG9ydCBfbV9kdXJhdGlvbjsJCSAKCiAgICBzaG9ydCBfbV9sbGZuZHg7CQkgCgogICAgc2hv cnQgX21fbGxmcmVxOwkJIAoKCiAgICBzaG9ydCBfbV8zZGZvdjsJCSAKICAgIHNob3J0IF9tX3Nz M2Q7CQkgCgogICAgc2hvcnQgX21fbGVmdF9vZmZzZXQ7CSAKICAgIHNob3J0IF9tX3JpZ2h0X29m ZnNldDsJIAoKICAgIGxvbmcgIF9tX2ZvdnNjYWxlOwkJIAogICAgc2hvcnQgX21fcmVzZXJ2ZWRb Ml07CSAKCiAgICAgCgoKICAgIHNob3J0ICpfbV9iYXNlY29tcHRibDsJIAoKICAgICAKCgogICAg dm9pZCAqb3BlcmF0b3IgbmV3KHNpemVfdCk7CQkgCiAgICB2b2lkICpvcGVyYXRvciBuZXcoc2l6 ZV90LCBpbnQpOwkgCgogICAgaW50IGZpbmRfcGFzc193aXRoX2l0ZW1zKEhkciAqLCBpbnQpOwog ICAgY29uc3QgUHhwb3MgKmZpbmRfY29tcChjb25zdCBXaW5kJiB3MSk7CiAgICBpbnQJcGFzc25v KCk7Cn07CgoKaW5saW5lIGludApQYXNzOjppbnNwZWN0X21vZHVsdXMoKSBjb25zdAp7CiAgICBy ZXR1cm4gKF9pbnNwZWN0X2V2ZXJ5X3hfdGltZXMpOwp9CgppbmxpbmUgdm9pZApQYXNzOjppbnNw ZWN0X21vZHVsdXMoaW50IHZhbHVlKQp7CiAgICBfaW5zcGVjdF9ldmVyeV94X3RpbWVzID0gdmFs dWU7Cn0KCmlubGluZSBjb25zdCBzdGQ6OnN0cmluZwpQYXNzOjpwYXNzX25hbWUoKSBjb25zdAp7 CiAgICByZXR1cm4oc3RkOjpzdHJpbmcoX3Bhc3NfbmFtZSkpOwp9CgppbmxpbmUgdm9pZApQYXNz OjpwYXNzX25hbWUoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpCnsKICAgIHN0cm5jcHkoX3Bhc3Nf bmFtZSwgbmFtZS5jX3N0cigpLCBzaXplb2YoX3Bhc3NfbmFtZSkgLSAxKTsKICAgIF9wYXNzX25h bWVbc2l6ZW9mKF9wYXNzX25hbWUpIC0gMV0gPSAnXDAnOwp9CgoKIAoKCmlubGluZSB2b2lkClBh c3M6OnNjYW5fbGlzdChTY2FuICpkYXRhKQp7CiAgICBfc2Nhbl9saXN0ID0gKCAgICBkYXRhICAg PyAoICBTY2FuICogICkoKChjaGFyICopICAgIGRhdGEgICkgLSBnU2htZW1PZmZzZXQpIDogKCAg U2NhbiAqICApMCkgIDsKfQoKaW5saW5lIFNjYW4gKgpQYXNzOjpzY2FuX2xpc3QoKSBjb25zdAp7 CiAgICByZXR1cm4oKCAgICBfc2Nhbl9saXN0ICAgPyAoICBTY2FuICogICkoKChjaGFyICopICAg IF9zY2FuX2xpc3QgICkgKyBnU2htZW1PZmZzZXQpIDogKCAgU2NhbiAqICApMCkgICk7Cn0KCiAK CgogCgoKaW5saW5lIHZvaWQKUGFzczo6c25hcF9saXN0KFNuYXAgKnNwKQp7CiAgICBfc25hcF9s aXN0ID0gKCAgICBzcCAgID8gKCAgU25hcCAqICApKCgoY2hhciAqKSAgICBzcCAgKSAtIGdTaG1l bU9mZnNldCkgOiAoICBTbmFwICogICkwKSAgOwp9CgppbmxpbmUgU25hcCAqClBhc3M6OnNuYXBf bGlzdCgpIGNvbnN0CnsKICAgIHJldHVybigoICAgIF9zbmFwX2xpc3QgICA/ICggIFNuYXAgKiAg KSgoKGNoYXIgKikgICAgX3NuYXBfbGlzdCAgKSArIGdTaG1lbU9mZnNldCkgOiAoICBTbmFwICog ICkwKSAgKTsKfQoKaW5saW5lIGJvb2wKUGFzczo6aGFzX3NuYXBzKCkgY29uc3QKewogICAgcmV0 dXJuKF9zbmFwX2xpc3QgIT0gX19udWxsICk7Cn0KCiAKCgppbmxpbmUgR3JvdXAgKgpQYXNzOjpn cm91cF9saXN0KCkgY29uc3QKewogICAgcmV0dXJuKCggICAgX2dyb3VwX2xpc3QgICA/ICggIEdy b3VwICogICkoKChjaGFyICopICAgIF9ncm91cF9saXN0ICApICsgZ1NobWVtT2Zmc2V0KSA6ICgg IEdyb3VwICogICkwKSAgKTsKfQoKaW5saW5lIHZvaWQKUGFzczo6Z3JvdXBfbGlzdChHcm91cCAq ZGF0YSkKewogICAgX2dyb3VwX2xpc3QgPSAoICAgIGRhdGEgICA/ICggIEdyb3VwICogICkoKChj aGFyICopICAgIGRhdGEgICkgLSBnU2htZW1PZmZzZXQpIDogKCAgR3JvdXAgKiAgKTApICA7Cn0K CiAKCgppbmxpbmUgSXRlbSAqClBhc3M6Oml0ZW1fbGlzdCgpIGNvbnN0CnsKICAgIHJldHVybigo ICAgIF9pdGVtX2xpc3QgICA/ICggIEl0ZW0gKiAgKSgoKGNoYXIgKikgICAgX2l0ZW1fbGlzdCAg KSArIGdTaG1lbU9mZnNldCkgOiAoICBJdGVtICogICkwKSAgKTsKfQoKaW5saW5lIHZvaWQKUGFz czo6aXRlbV9saXN0KEl0ZW0gKmRhdGEpCnsKICAgIF9pdGVtX2xpc3QgPSAoICAgIGRhdGEgICA/ ICggIEl0ZW0gKiAgKSgoKGNoYXIgKikgICAgZGF0YSAgKSAtIGdTaG1lbU9mZnNldCkgOiAoICBJ dGVtICogICkwKSAgOwp9CgogCgoKaW5saW5lIFN5bmMgKgpQYXNzOjpzeW5jX2xpc3QoKSBjb25z dAp7CiAgICByZXR1cm4oKCAgICBfc3luY19saXN0ICAgPyAoICBTeW5jICogICkoKChjaGFyICop ICAgIF9zeW5jX2xpc3QgICkgKyBnU2htZW1PZmZzZXQpIDogKCAgU3luYyAqICApMCkgICk7Cn0K CmlubGluZSB2b2lkClBhc3M6OnN5bmNfbGlzdChTeW5jICpkYXRhKQp7CiAgICBfc3luY19saXN0 ID0gKCAgICBkYXRhICAgPyAoICBTeW5jICogICkoKChjaGFyICopICAgIGRhdGEgICkgLSBnU2ht ZW1PZmZzZXQpIDogKCAgU3luYyAqICApMCkgIDsKfQoKCgoKCgoKCiMgMTYgIi4uLy4uL2luY2x1 ZGUvbG9jYWxpbmMvSGRyLkgiIDIKCgpjbGFzcwlGdW5uZWw7CmNsYXNzCVdpbmQ7CmNsYXNzCUJv YXJkOwpjbGFzcwlQcGFyYW07CmNsYXNzCU5tcmVjOwpjbGFzcwlHcm91cDsKY2xhc3MJSXRlbTsK Y2xhc3MJU3luYzsKY2xhc3MJU25hcDsKY2xhc3MJU3luYzsKY2xhc3MJU3lzcGFyOwpjbGFzcwlD YW1kZXNjOwpjbGFzcwlFZGdlc19XaW5kOwpjbGFzcwlFZGdlc19MTGZyOwpjbGFzcwlGaWR1cmVz dWx0OwoKCmNsYXNzCWxlc3NfeQp7CnB1YmxpYzoKICAgIHN0YXRpYyBib29sIHN0YXJ0X2xlZnQ7 CiAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgSXRlbSAqbGVmdCwgY29uc3QgSXRlbSAqIHJpZ2h0 KTsKfTsKCmNsYXNzCWxlc3NfeAp7CnB1YmxpYzoKICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBJ dGVtICpsZWZ0LCBjb25zdCBJdGVtICogcmlnaHQpOwp9OwoKCiAKCgoKCmNsYXNzIEhkciB7CnB1 YmxpYzoKICAgICAKCgogICAgc3RhdGljIHZvaWQJaW5pdCgpOwogICAgc3RhdGljIHZvaWQgbWFw X2NvbW1zZWcoaW50IHNlc3Npb24pOwoKICAgIGludAkJY3NuYXAoKTsKICAgIHZvaWQJZnJlZV9z bmFwcygpOwoKICAgICAKCgogICAgbG9hZF9jb2RlX3QJbG9hZF9kYmFzZShjb25zdCBjaGFyICos IGJvb2wgcmVzZXRfcmVzdWx0cyA9IHRydWUpOwogICAgaW50CQlsb2FkaXQoaW50IGZpbGVfdHlw ZSwgY29uc3QgY2hhciAqZm4sIEZ1bm5lbCAqcmVtb3RlID0gX19udWxsICwgYm9vbCBmaXh1cCA9 IHRydWUsIGJvb2wgcmVzZXRfcmVzdWx0cyA9IHRydWUpOwoKICAgIGxvYWRfY29kZV90CXNhdmVf Y29tcGlsZWRfZmlsZShjb25zdCBjaGFyICpmbik7CiAgICBsb2FkX2NvZGVfdAlzYXZlX2FzY2lp X2ZpbGUoY29uc3QgY2hhciAqZm4sIGJvb2wgaW5fY2FkX29yaWVudGF0aW9uKTsKCiAgICBsb2Fk X2NvZGVfdAljaGVja19kYmFzZShDYW1kZXNjICosIGNvbnN0IGNoYXIgKik7CgogICAgdm9pZAlm bGlwKGludCBheGlzKTsKICAgIHZvaWQJcm90YXRlKCk7CiAgICB2b2lkCXJlbG9jKGNvb3JfdCBy eCwgY29vcl90IHJ5KTsKICAgIGludAkJd3R5cGUoaW50IHd0eXBlKTsKICAgIGludAkJc3RfZ2l0 ZW1zKCk7CQkJIAogICAgbG9uZwlpdGVtY291bnQobG9uZyAqLCBsb25nICogPSBfX251bGwgKTsJ IAogICAgbG9uZwlzZXRnaXRlbXMoKTsKICAgIGxvbmcJc2V0Z2l0ZW1zKEl0ZW0gKiopOwkgCiAg ICBpbnQJCW1raWxzdCgpOwogICAgdm9pZAlzZXRfc25hcF9udW1iZXJzKCk7CgogICAgdm9pZAlm cmVlX3NjYW5zKCk7CiAgICB2b2lkCWNhZGNvb3IoY29uc3QgV2luZCAqdzEsIFdpbmQgKncyLCBi b29sIGZvcmNlID0gMCkgY29uc3Q7CiAgICB2b2lkCXNuYXBzdHVmZigpOwogICAgaW50CQlzZWxf cmVmcHRzKEZpZHVyZXN1bHQgKik7CiAgICB2b2lkCWZpbmRfc2htZW1fb2Zmc2V0KCk7CgogICAg aW50CQlzZXR1cF8zZF9yZXN1bHRzKCk7CgogICAgUGFzcwkqZXNfbWIodV9pbnQpOwogICAgQm9h cmQJKmVzX2JwKCkgY29uc3Q7CQkgCiAgICBQcGFyYW0JKmVzX3BwYXIoKSBjb25zdDsJIAogICAg Tm1yZWMJKm1fbmxzdCgpIGNvbnN0OwkgCgogICAgR3JvdXAJKmVzX2dmcmVlKCkgY29uc3Q7CiAg ICBJdGVtCSplc19pZnJlZSgpIGNvbnN0OwogICAgU3luYwkqZXNfc3lmcmVlKCkgY29uc3Q7CiAg ICBTbmFwCSplc19zbmZyZWUoKSBjb25zdDsKICAgIFNjYW4JKmVzX3NjZnJlZSgpIGNvbnN0Owog ICAgTm1yZWMJKmVzX25mcmVlKCkgY29uc3Q7CiAgICBFZGdlc19XaW5kCSplc19ld2ZyZWUoKSBj b25zdDsKICAgIEVkZ2VzX0xMZnIJKmVzX2VsZnJlZSgpIGNvbnN0OwoKICAgIHVfaW50IAllc19v dmVybGFwKCkgY29uc3QgeyByZXR1cm4gX2VzX292ZXJsYXA7IH0KICAgIGxvbmcJZXNfc2RhdGUo KSBjb25zdCB7IHJldHVybiBfZXNfc2RhdGU7IH0KICAgIGxvbmcJZXNfbml0ZW1zKCkgY29uc3Qg eyByZXR1cm4gX2VzX25pdGVtczsgfQogICAgbG9uZwllc19zY2FsZSgpIGNvbnN0IHsgcmV0dXJu IF9lc19zY2FsZTsgfQogICAgdV9pbnQJZXNfaGZvdigpIGNvbnN0IHsgcmV0dXJuIF9lc19oZm92 OyB9CiAgICB1X2ludAllc19tYXJnKCkgY29uc3QgeyByZXR1cm4gX2VzX21hcmc7IH0KICAgIHVf aW50CWVzX3dpZGVjYW1lcmEoKSBjb25zdCB7IHJldHVybiBfZXNfd2lkZWNhbWVyYTsgfQogICAg dV9pbnQJZXNfcnBzaXplKCkgY29uc3QgeyByZXR1cm4gX2VzX3Jwc2l6ZTsgfQogICAgdV9pbnQJ ZXNfbmdycHMoKSBjb25zdCB7IHJldHVybiBfZXNfbmdycHM7IH0KICAgIGJvb2wJZXNfc25wcmVz bnQoKSBjb25zdCB7IHJldHVybiBfZXNfc25wcmVzbnQgJiYgX2VzX2RicHJlc250OyB9CiAgICBi b29sCWVzX2RicHJlc250KCkgY29uc3QgeyByZXR1cm4gX2VzX2RicHJlc250OyB9CiAgICBib29s CWVzX3RvcHNpZGUoKSBjb25zdCB7IHJldHVybiBfZXNfdG9wc2lkZTsgfQogICAgYm9vbAllc19j YWRjb29yKCkgY29uc3QgeyByZXR1cm4gX2VzX2NhZGNvb3I7IH0KICAgIHVfaW50CWVzX25jYW1z KCkgY29uc3QgeyByZXR1cm4gX2VzX25jYW1zOyB9CiAgICBpbnQJCWVzX3dpbmRvd190eXBlKCkg Y29uc3QgeyByZXR1cm4gX2VzX3dpbmRvd190eXBlOyB9CiAgICBpbnQJCWVzX3N0YXJ0X3N0b3Ao KSBjb25zdCB7IHJldHVybiBfZXNfc3RhcnRfc3RvcDsgfQogICAgaW50CQllc19zbmFwX2RlbGF5 KCkgY29uc3QgeyByZXR1cm4gX2VzX3NuYXBfZGVsYXk7IH0KICAgIGJvb2wJZXNfYmFzZV9jb21w KCkgY29uc3QgeyByZXR1cm4gX2VzX2Jhc2VfY29tcDsgfQogICAgdV9pbnQJZXNfY3VycmVudF9i b2FyZCgpIGNvbnN0IHsgcmV0dXJuIF9lc19jdXJyZW50X2JvYXJkOyB9CiAgICB1X2ludAllc19u dW1iZXJfb2ZfYm9hcmRzKCkgY29uc3QgeyByZXR1cm4gX2VzX251bWJlcl9vZl9ib2FyZHM7IH0K ICAgIGJvb2wJcGFydHNfZXhjbHVkZWQoKSBjb25zdCB7IHJldHVybiBfcGFydHNfZXhjbHVkZWQ7 IH0KCiAgICB2b2lkCWVzX2JwKEJvYXJkICopOwkJIAogICAgdm9pZAllc19wcGFyKFBwYXJhbSAq KTsJCSAKICAgIHZvaWQJbV9ubHN0KE5tcmVjICopOwkJIAogICAgdm9pZAllc19nZnJlZShHcm91 cCAqKTsKICAgIHZvaWQJZXNfaWZyZWUoSXRlbSAqKTsKICAgIHZvaWQJZXNfc3lmcmVlKFN5bmMg Kik7CiAgICB2b2lkCWVzX3NuZnJlZShTbmFwICopOwogICAgdm9pZAllc19zY2ZyZWUoU2NhbiAq KTsKICAgIHZvaWQJZXNfbmZyZWUoTm1yZWMgKik7CiAgICB2b2lkCWVzX2V3ZnJlZShFZGdlc19X aW5kICopOwogICAgdm9pZAllc19lbGZyZWUoRWRnZXNfTExmciAqKTsKCiAgICB2b2lkIAllc19v dmVybGFwKGludCB2YWwpIHsgX2VzX292ZXJsYXAgPSB2YWw7IH0KICAgIHZvaWQJZXNfc2RhdGUo bG9uZyB2YWwpIHsgX2VzX3NkYXRlID0gdmFsOyB9CiAgICB2b2lkCWVzX25pdGVtcyhsb25nIHZh bCkgeyBfZXNfbml0ZW1zID0gdmFsOyB9CiAgICB2b2lkCWVzX3NjYWxlKGxvbmcgdmFsKSB7IF9l c19zY2FsZSA9IHZhbDsgfQogICAgdm9pZAllc19oZm92KGludCB2YWwpIHsgX2VzX2hmb3YgPSB2 YWw7IH0KICAgIHZvaWQJZXNfbWFyZyhpbnQgdmFsKSB7IF9lc19tYXJnID0gdmFsOyB9CiAgICB2 b2lkCWVzX3dpZGVjYW1lcmEoaW50IHZhbCkgeyBfZXNfd2lkZWNhbWVyYSA9IHZhbDsgfQogICAg dm9pZAllc19ycHNpemUoaW50IHZhbCkgeyBfZXNfcnBzaXplID0gdmFsOyB9CiAgICB2b2lkCWVz X25ncnBzKGludCB2YWwpIHsgX2VzX25ncnBzID0gdmFsOyB9CiAgICB2b2lkCWVzX3NucHJlc250 KGJvb2wgdmFsKSB7IF9lc19zbnByZXNudCA9IHZhbDsgfQogICAgdm9pZAllc19kYnByZXNudChi b29sIHZhbCkgeyBfZXNfZGJwcmVzbnQgPSB2YWw7IH0KICAgIHZvaWQJZXNfdG9wc2lkZShib29s IHZhbCkgeyBfZXNfdG9wc2lkZSA9IHZhbDsgfQogICAgdm9pZAllc19jYWRjb29yKGJvb2wgdmFs KSB7IF9lc19jYWRjb29yID0gdmFsOyB9CiAgICB2b2lkCWVzX25jYW1zKHVfaW50IHZhbCkgeyBf ZXNfbmNhbXMgPSB2YWw7IH0KICAgIHZvaWQJZXNfd2luZG93X3R5cGUoaW50IHZhbCkgeyBfZXNf d2luZG93X3R5cGUgPSB2YWw7IH0KICAgIHZvaWQJZXNfc3RhcnRfc3RvcChpbnQgdmFsKSB7IF9l c19zdGFydF9zdG9wID0gdmFsOyB9CiAgICB2b2lkCWVzX3NuYXBfZGVsYXkoaW50IHZhbCkgeyBf ZXNfc25hcF9kZWxheSA9IHZhbDsgfQogICAgdm9pZAllc19iYXNlX2NvbXAoYm9vbCB2YWwpIHsg X2VzX2Jhc2VfY29tcCA9IHZhbDsgfQogICAgdm9pZAllc19jdXJyZW50X2JvYXJkKHVfaW50IHZh bCkgeyBfZXNfY3VycmVudF9ib2FyZCA9IHZhbDsgfQogICAgdm9pZAllc19udW1iZXJfb2ZfYm9h cmRzKHVfaW50IHZhbCkgeyBfZXNfbnVtYmVyX29mX2JvYXJkcyA9IHZhbDsgfQogICAgdm9pZAlw YXJ0c19leGNsdWRlZChib29sIHZhbCkgeyBfcGFydHNfZXhjbHVkZWQgPSB2YWw7IH0KCiAgICBz dGF0aWMgSGRyICpnZXQoKTsKCgoKCgpwcml2YXRlOgogICAgQm9hcmQgKl9lc19icDsJCSAKICAg IFBwYXJhbSAqX2VzX3BwYXI7CQkgCiAgICBObXJlYyAqX2VzX25sc3Q7CQkgCiAgICAgCgoKICAg IEdyb3VwICpfZXNfZ2ZyZWU7CiAgICBJdGVtICpfZXNfaWZyZWU7CiAgICBTeW5jICpfZXNfc3lm cmVlOwogICAgU25hcCAqX2VzX3NuZnJlZTsKICAgIFNjYW4gKl9lc19zY2ZyZWU7CiAgICBObXJl YyAqX2VzX25mcmVlOwogICAgRWRnZXNfV2luZCAqX2VzX2V3ZnJlZTsKICAgIEVkZ2VzX0xMZnIg Kl9lc19lbGZyZWU7CgogICAgIAoKCiAgICBsb25nIF9lc19zZGF0ZTsJCSAKICAgIGxvbmcgX2Vz X25pdGVtczsJCSAKICAgIGxvbmcgX2VzX3NjYWxlOwkJIAoKICAgICAKCgoKICAgIHVfc2hvcnQg X2VzX2hmb3Y7CQkgCiAgICB1X3Nob3J0IF9lc19tYXJnOwkJIAoKICAgIHVfc2hvcnQgX2VzX292 ZXJsYXA7CSAKICAgIHVfc2hvcnQgX2VzX3dpZGVjYW1lcmE7CSAKCiAgICB1X3Nob3J0IF9lc19y cHNpemU7CQkgCiAgICB1X3Nob3J0IF9lc19uZ3JwczsJCSAKCiAgICBCb29sZWFuIF9lc19zbnBy ZXNudDsJIAogICAgQm9vbGVhbiBfZXNfZGJwcmVzbnQ7CiAgICBCb29sZWFuIF9lc190b3BzaWRl OwogICAgQm9vbGVhbiBfZXNfY2FkY29vcjsKCiAgICB1X3Nob3J0IF9lc19uY2FtczsJCSAKICAg IHVfc2hvcnQgX2VzX3dpbmRvd190eXBlOwkgCgogICAgdV9zaG9ydCBfZXNfc3RhcnRfc3RvcDsJ IAogICAgdV9zaG9ydCBfZXNfc25hcF9kZWxheTsJIAoKICAgICAKCgogICAgQm9vbGVhbiBfZXNf YmFzZV9jb21wOwkgCiAgICBCb29sZWFuIF9ib3VuZGFyeV9maWxsOwkgCiAgICBzaG9ydCAgIF9m aWxsZXJbM107CQkgCgogICAgdV9zaG9ydCBfZXNfY3VycmVudF9ib2FyZDsJCSAKICAgIHVfc2hv cnQgX2VzX251bWJlcl9vZl9ib2FyZHM7CSAKCiAgICBzaG9ydCBfZXNfcnNbMzBdOwkJCSAKCiAg ICBQYXNzIF9lc19tYltNQVhCUkRdOwkJIAogICAgc2hvcnQgX2VzX292ZXJsYXBfcGVyX2NhbWVy YVs0XTsJIAoKICAgIEJvb2xlYW4gX3BhcnRzX2V4Y2x1ZGVkOwkJIAogICAgQm9vbGVhbiBfYm9v bF9maWxsZXI7CQkgCiAgICBzaG9ydCBfc2hvcnRfZmlsbGVyOwkJIAoKICAgIHZvaWQJcmVzZXQo KTsKCiAgICAgCgoKICAgIHZvaWQJZnJlZV9zbmFwcyhTbmFwICopOwogICAgaW50CQlhbGxfYm9h cmRfc25hcHMoKTsKICAgIGludAkJc2V0dXBfc25hcF9jYWxjKCk7CiAgICBsb25nCXNuYXAoKTsK ICAgIGxvbmcJZ2V0X2l0ZW1zKGNsYXNzIEl0ZW0gKiopOwogICAgdm9pZAljX2Rvc25hcChJdGVt ICoqLCB2ZWN0b3I8IHZlY3RvcjxpbnQ+ID4mLCB2ZWN0b3I8aW50PiYpOwogICAgdm9pZAljc25h cChJdGVtICoqaWxzdCk7CiAgICBib29sCWdldF9pdGVtcyhzdGQ6Om11bHRpc2V0PEl0ZW0gKiwg bGVzc194PiYpOwogICAgdm9pZAljX2Rvc25hcChzdGQ6Om11bHRpc2V0PEl0ZW0gKiwgbGVzc194 PiYpOwogICAgdm9pZAljc25hcChzdGQ6Om11bHRpc2V0PEl0ZW0gKiwgbGVzc194PiYpOwoKICAg IGNvbnN0IHN0ZDo6c3RyaW5nJiBnZXRfYmFzZV9mbGF2b3IoY29uc3QgY2hhciAqZGJfZm5hbWUp OwoKICAgIHZvaWQJc29ydF9ncm91cCgpOwogICAgdm9pZAlzcmV2ZXJzZSgpOwogICAgdm9pZAlk b2hpYW5nKCk7CiAgICBsb25nCWdldGdpdGVtKGxvbmcgKik7CiAgICB2b2lkCWR1bXBfaWxpc3Qo SXRlbSAqKmlsc3QsIGludCBpdGVtcywgY2hhciAqbXNnKTsKICAgIHZvaWQJZ2VuZXJhdGVfc25h cF9yZWNvcmRzKGxvbmcsIEl0ZW0gKiosIGxvbmcsIGJvb2wsIGJvb2wsIHZlY3RvcjxpbnQ+Jik7 CiAgICB2b2lkCWFzc2lnbl9pdGVtc190b19jYW1lcmFzKEl0ZW0gKiosIGxvbmcsIGxvbmcsIGxv bmcsIHZlY3RvcjxpbnQ+Jik7CiAgICB2b2lkCWR1bXBfcGFydGlhbF9saXN0KEl0ZW0gKiosIGlu dCwgY2hhciAqLCBib29sKTsKICAgIEl0ZW0qKglnZXRzY2FuKEl0ZW0gKiosIGxvbmcgKiwgSXRl bSAqKik7CiAgICBJdGVtKioJZ2F0aGVyX3NuYXBfaXRlbXMoSXRlbSAqKiwgbG9uZywgYm9vbCwg bG9uZyYsIGxvbmcmKTsKICAgIHZvaWQJc29ydF9mb3JfeShJdGVtICoqIGlsc3QsIGxvbmcgaXRl bXMsIGJvb2wgc3RhcnRsZWZ0KTsKICAgIGJvb2wJc2luZ2xlX2l0ZW1faW5fc2NhbihJdGVtICoq LCBsb25nLCBib29sKTsKCiAgICBsb25nCXNvcnRfZm9yX3hfY2VudGVycyhjb25zdCBJdGVtICog ZTEsIGNvbnN0IEl0ZW0gKiBlMik7CiAgICB2b2lkCXNvcnRfZm9yX3hfY2VudGVycyhJdGVtICoq LCBsb25nKTsKICAgIHN0YXRpYyBsb25nCXhfY2VudGVyX2NtcChjb25zdCBJdGVtICogZTEsIGNv bnN0IEl0ZW0gKiBlMik7CiAgICBzdGF0aWMgbG9uZwl4X3Bvc19zb3J0KGNvbnN0IEl0ZW0gKiwg Y29uc3QgSXRlbSAqKTsKICAgIHZvaWQJc29ydF9mb3JfeF9wb3MoSXRlbSAqKiwgY29uc3QgbG9u Zyk7CiAgICBzdGF0aWMgbG9uZwl5X2NtcChjb25zdCBJdGVtICogZTEsIGNvbnN0IEl0ZW0gKiBl Mik7CiAgICBzdGF0aWMgbG9uZwl5X3Jldl9jbXAoY29uc3QgSXRlbSAqIGUxLCBjb25zdCBJdGVt ICogZTIpOwogICAgYm9vbAlta3NuYXAoKTsKICAgIHZvaWQJbWtzY2FuKCk7CgogICAgYm9vbAlt azNkc25hcCgpOwogICAgdm9pZAltazNkc2NhbigpOwoKICAgIGxvYWRfY29kZV90CWxvYWRfYmlu YXJ5X2RiYXNlKGNvbnN0IGNoYXIgKmZuKTsKICAgICAKICAgIHZvaWQJY2xlYXJfZXhjbHVkZWRf cGFydHMoKTsKCiAgICB2b2lkCWR1bXBfZGF0YWJhc2UoYm9vbCBpbl9jYWRfb3JpZW50YXRpb24p OwogICAgdm9pZAlkdW1wX2hlYWRlcigpOwogICAgdm9pZAlkX2VzcGFybSgpOwogICAgdm9pZAlk X3BwYXJtKCk7CiAgICB2b2lkCWRfc3luYygpOwogICAgdm9pZAlkX2JvYXJkKCk7CiAgICB2b2lk CWRfb2JqZWN0KFdpbmQgKndwLCBib29sIGluX2NhZF9vcmllbnRhdGlvbiA9IGZhbHNlKTsKICAg IHVfaW50CWdldF9pbnNwZWN0aW9uX2ZsYWdzKCk7CiAgICB2b2lkCWRfc25wZGx5KFBhc3MgKnBh c3MpOwogICAgdm9pZAlkX2Jjb21wKCk7CiAgICB2b2lkCWRfaXRlbShJdGVtICppcCwgYm9vbCBp bl9jYWRfb3JpZW50YXRpb24pOwogICAgdm9pZAlkX2dwaXRlbShHcm91cCAqZ3AsIGJvb2wgaW5f Y2FkX29yaWVudGF0aW9uKTsKICAgIHZvaWQJZF9nbmdfaXRlbXMoR3JvdXAgKmdwKTsKICAgIHZv aWQJZF9ncm91cChib29sIGluX2NhZF9vcmllbnRhdGlvbik7CiAgICB2b2lkCWRfbm9ncGl0ZW1z KGJvb2wgaW5fY2FkX29yaWVudGF0aW9uKTsKICAgIGJvb2wJb3Blbl9maWxlKGNvbnN0IGNoYXIg KmZuKSBjb25zdDsKCiAgICB2b2lkCXJkX3N5c3BhcigpOwogICAgdm9pZAlmaXh1cF9icm9rZW5f bGlnaHRpbmcoKTsKICAgIHZvaWQJbWFya19leGNsdWRlZF9wYXJ0cyhjb25zdCBjaGFyICpleGNs dWRlX2ZpbGUpOwoKICAgIHZvaWQJYmFkX2RiKGNvbnN0IGNoYXIgKik7CiAgICBpbnQJCWZpbmRf ZmlkdWNpYWxzKEl0ZW0gKkRyZWZbXSk7CgogICAgdm9pZCAqb3BlcmF0b3IgbmV3KHNpemVfdCBh bXQpOwogICAgdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCAqKTsKfTsKCnN0YXRpYyBpbmxpbmUg dm9pZApjYWRjb29yKGNvbnN0IEhkciAqZXNwLCBjb25zdCBXaW5kICp3MSwgV2luZCAqdzIsIGJv b2wgZm9yY2UgPSAwKQp7CiAgICBlc3AtPmNhZGNvb3IodzEsIHcyLCBmb3JjZSk7Cn0KCmlubGlu ZSBQYXNzICoKSGRyOjplc19tYih1X2ludCBpKQp7CiAgICBpZiAoaSA+PSBNQVhCUkQpCglyZXR1 cm4oX19udWxsICk7CiAgICByZXR1cm4oJl9lc19tYltpXSk7Cn0KCmlubGluZSBCb2FyZCAqCkhk cjo6ZXNfYnAoKSBjb25zdAkJIAp7CiAgICByZXR1cm4oKCAgICBfZXNfYnAgICA/ICggIEJvYXJk ICogICkoKChjaGFyICopICAgIF9lc19icCAgKSArIGdTaG1lbU9mZnNldCkgOiAoICBCb2FyZCAq ICApMCkgICk7Cn0KCmlubGluZSBQcGFyYW0gKgpIZHI6OmVzX3BwYXIoKSBjb25zdAkJIAp7CiAg ICByZXR1cm4oKCAgICBfZXNfcHBhciAgID8gKCAgUHBhcmFtICogICkoKChjaGFyICopICAgIF9l c19wcGFyICApICsgZ1NobWVtT2Zmc2V0KSA6ICggIFBwYXJhbSAqICApMCkgICk7Cn0KCmlubGlu ZSBObXJlYyAqCkhkcjo6bV9ubHN0KCkgY29uc3QJCSAKewogICAgcmV0dXJuKCggICAgX2VzX25s c3QgICA/ICggIE5tcmVjICogICkoKChjaGFyICopICAgIF9lc19ubHN0ICApICsgZ1NobWVtT2Zm c2V0KSA6ICggIE5tcmVjICogICkwKSAgKTsKfQoKaW5saW5lIEdyb3VwICoKSGRyOjplc19nZnJl ZSgpIGNvbnN0CnsKICAgIHJldHVybigoICAgIF9lc19nZnJlZSAgID8gKCAgR3JvdXAgKiAgKSgo KGNoYXIgKikgICAgX2VzX2dmcmVlICApICsgZ1NobWVtT2Zmc2V0KSA6ICggIEdyb3VwICogICkw KSAgKTsKfQoKaW5saW5lIEl0ZW0gKgpIZHI6OmVzX2lmcmVlKCkgY29uc3QKewogICAgcmV0dXJu KCggICAgX2VzX2lmcmVlICAgPyAoICBJdGVtICogICkoKChjaGFyICopICAgIF9lc19pZnJlZSAg KSArIGdTaG1lbU9mZnNldCkgOiAoICBJdGVtICogICkwKSAgKTsKfQoKaW5saW5lIFN5bmMgKgpI ZHI6OmVzX3N5ZnJlZSgpIGNvbnN0CnsKICAgIHJldHVybigoICAgIF9lc19zeWZyZWUgICA/ICgg IFN5bmMgKiAgKSgoKGNoYXIgKikgICAgX2VzX3N5ZnJlZSAgKSArIGdTaG1lbU9mZnNldCkgOiAo ICBTeW5jICogICkwKSAgKTsKfQoKaW5saW5lIFNuYXAgKgpIZHI6OmVzX3NuZnJlZSgpIGNvbnN0 CnsKICAgIHJldHVybigoICAgIF9lc19zbmZyZWUgICA/ICggIFNuYXAgKiAgKSgoKGNoYXIgKikg ICAgX2VzX3NuZnJlZSAgKSArIGdTaG1lbU9mZnNldCkgOiAoICBTbmFwICogICkwKSAgKTsKfQoK aW5saW5lIFNjYW4gKgpIZHI6OmVzX3NjZnJlZSgpIGNvbnN0CnsKICAgIHJldHVybigoICAgIF9l c19zY2ZyZWUgICA/ICggIFNjYW4gKiAgKSgoKGNoYXIgKikgICAgX2VzX3NjZnJlZSAgKSArIGdT aG1lbU9mZnNldCkgOiAoICBTY2FuICogICkwKSAgKTsKfQoKaW5saW5lIE5tcmVjICoKSGRyOjpl c19uZnJlZSgpIGNvbnN0CnsKICAgIHJldHVybigoICAgIF9lc19uZnJlZSAgID8gKCAgTm1yZWMg KiAgKSgoKGNoYXIgKikgICAgX2VzX25mcmVlICApICsgZ1NobWVtT2Zmc2V0KSA6ICggIE5tcmVj ICogICkwKSAgKTsKfQoKaW5saW5lIEVkZ2VzX1dpbmQgKgpIZHI6OmVzX2V3ZnJlZSgpIGNvbnN0 CnsKICAgIHJldHVybigoICAgIF9lc19ld2ZyZWUgICA/ICggIEVkZ2VzX1dpbmQgKiAgKSgoKGNo YXIgKikgICAgX2VzX2V3ZnJlZSAgKSArIGdTaG1lbU9mZnNldCkgOiAoICBFZGdlc19XaW5kICog ICkwKSAgKTsKfQoKaW5saW5lIEVkZ2VzX0xMZnIgKgpIZHI6OmVzX2VsZnJlZSgpIGNvbnN0CnsK ICAgIHJldHVybigoICAgIF9lc19lbGZyZWUgICA/ICggIEVkZ2VzX0xMZnIgKiAgKSgoKGNoYXIg KikgICAgX2VzX2VsZnJlZSAgKSArIGdTaG1lbU9mZnNldCkgOiAoICBFZGdlc19MTGZyICogICkw KSAgKTsKfQoKaW5saW5lIHZvaWQKSGRyOjplc19icChCb2FyZCAqIGRhdGEpCQkgCnsKICAgIF9l c19icCA9ICggICAgZGF0YSAgID8gKCAgQm9hcmQgKiAgKSgoKGNoYXIgKikgICAgZGF0YSAgKSAt IGdTaG1lbU9mZnNldCkgOiAoICBCb2FyZCAqICApMCkgIDsKfQoKaW5saW5lIHZvaWQKSGRyOjpl c19wcGFyKFBwYXJhbSAqIGRhdGEpCQkgCnsKICAgIF9lc19wcGFyID0gKCAgICBkYXRhICAgPyAo ICBQcGFyYW0gKiAgKSgoKGNoYXIgKikgICAgZGF0YSAgKSAtIGdTaG1lbU9mZnNldCkgOiAoICBQ cGFyYW0gKiAgKTApICA7Cn0KCmlubGluZSB2b2lkCkhkcjo6bV9ubHN0KE5tcmVjICogZGF0YSkJ CSAKewogICAgX2VzX25sc3QgPSAoICAgIGRhdGEgICA/ICggIE5tcmVjICogICkoKChjaGFyICop ICAgIGRhdGEgICkgLSBnU2htZW1PZmZzZXQpIDogKCAgTm1yZWMgKiAgKTApICA7Cn0KCmlubGlu ZSB2b2lkCSAgICAKSGRyOjplc19nZnJlZShHcm91cCAqZGF0YSkKewogICAgX2VzX2dmcmVlID0g KCAgICBkYXRhICAgPyAoICBHcm91cCAqICApKCgoY2hhciAqKSAgICBkYXRhICApIC0gZ1NobWVt T2Zmc2V0KSA6ICggIEdyb3VwICogICkwKSAgOwp9CgppbmxpbmUgdm9pZAkgICAgCkhkcjo6ZXNf aWZyZWUoSXRlbSAqZGF0YSkKewogICAgX2VzX2lmcmVlID0gKCAgICBkYXRhICAgPyAoICBJdGVt ICogICkoKChjaGFyICopICAgIGRhdGEgICkgLSBnU2htZW1PZmZzZXQpIDogKCAgSXRlbSAqICAp MCkgIDsKfQoKaW5saW5lIHZvaWQJICAgIApIZHI6OmVzX3N5ZnJlZShTeW5jICpkYXRhKQp7CiAg ICBfZXNfc3lmcmVlID0gKCAgICBkYXRhICAgPyAoICBTeW5jICogICkoKChjaGFyICopICAgIGRh dGEgICkgLSBnU2htZW1PZmZzZXQpIDogKCAgU3luYyAqICApMCkgIDsKfQoKaW5saW5lIHZvaWQJ ICAgIApIZHI6OmVzX3NuZnJlZShTbmFwICpkYXRhKQp7CiAgICBfZXNfc25mcmVlID0gKCAgICBk YXRhICAgPyAoICBTbmFwICogICkoKChjaGFyICopICAgIGRhdGEgICkgLSBnU2htZW1PZmZzZXQp IDogKCAgU25hcCAqICApMCkgIDsKfQoKaW5saW5lIHZvaWQJICAgIApIZHI6OmVzX3NjZnJlZShT Y2FuICpkYXRhKQp7CiAgICBfZXNfc2NmcmVlID0gKCAgICBkYXRhICAgPyAoICBTY2FuICogICko KChjaGFyICopICAgIGRhdGEgICkgLSBnU2htZW1PZmZzZXQpIDogKCAgU2NhbiAqICApMCkgIDsK fQoKaW5saW5lIHZvaWQJICAgIApIZHI6OmVzX25mcmVlKE5tcmVjICpkYXRhKQp7CiAgICBfZXNf bmZyZWUgPSAoICAgIGRhdGEgICA/ICggIE5tcmVjICogICkoKChjaGFyICopICAgIGRhdGEgICkg LSBnU2htZW1PZmZzZXQpIDogKCAgTm1yZWMgKiAgKTApICA7Cn0KCmlubGluZSB2b2lkCSAgICAK SGRyOjplc19ld2ZyZWUoRWRnZXNfV2luZCAqZGF0YSkKewogICAgX2VzX2V3ZnJlZSA9ICggICAg ZGF0YSAgID8gKCAgRWRnZXNfV2luZCAqICApKCgoY2hhciAqKSAgICBkYXRhICApIC0gZ1NobWVt T2Zmc2V0KSA6ICggIEVkZ2VzX1dpbmQgKiAgKTApICA7Cn0KCmlubGluZSB2b2lkCSAgICAKSGRy Ojplc19lbGZyZWUoRWRnZXNfTExmciAqZGF0YSkKewogICAgX2VzX2VsZnJlZSA9ICggICAgZGF0 YSAgID8gKCAgRWRnZXNfTExmciAqICApKCgoY2hhciAqKSAgICBkYXRhICApIC0gZ1NobWVtT2Zm c2V0KSA6ICggIEVkZ2VzX0xMZnIgKiAgKTApICA7Cn0KCiAKCgoKCgoKCgoKCgoKCiAKCgoKCgoK CgoKCgogCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKIyAyNSAic2F2ZV9zbmFwLmMi IDIKCiMgMSAiLi4vLi4vaW5jbHVkZS9sb2NhbGluYy9TaWRlbnYuSCIgMQoKCgoKCgoKIyAxICIu Li8uLi9pbmNsdWRlL2xvY2FsaW5jL0FsaWduLkgiIDEKCgoKCgoKCiMgMSAiLi4vLi4vaW5jbHVk ZS9sb2NhbGluYy9GaWR1cmVzdWx0LkgiIDEKCgogCgoKCgoKCmNsYXNzCUl0ZW07CgpjbGFzcyBG aWR1cmVzdWx0IHsKcHJpdmF0ZToKICAgIEl0ZW0gKl9mX2l0ZW07CQkgCnB1YmxpYzoKICAgIGxv bmcgZl9vazsJCQkgCiAgICBjb29yX3QgZl9keDsJCSAKICAgIGNvb3JfdCBmX2R5OwkJIAoKICAg IEl0ZW0gKmZfaXRlbSgpOwogICAgdm9pZCBmX2l0ZW0oSXRlbSAqZGF0YSk7Cn07CgppbmxpbmUg SXRlbSAqCkZpZHVyZXN1bHQ6OmZfaXRlbSgpCnsKICAgIHJldHVybigoICAgIF9mX2l0ZW0gICA/ ICggIEl0ZW0gKiAgKSgoKGNoYXIgKikgICAgX2ZfaXRlbSAgKSArIGdTaG1lbU9mZnNldCkgOiAo ICBJdGVtICogICkwKSAgKTsKfQoKaW5saW5lIHZvaWQKRmlkdXJlc3VsdDo6Zl9pdGVtKEl0ZW0g KmRhdGEpCnsKICAgIF9mX2l0ZW0gPSAoICAgIGRhdGEgICA/ICggIEl0ZW0gKiAgKSgoKGNoYXIg KikgICAgZGF0YSAgKSAtIGdTaG1lbU9mZnNldCkgOiAoICBJdGVtICogICkwKSAgOwp9CgojIDgg Ii4uLy4uL2luY2x1ZGUvbG9jYWxpbmMvQWxpZ24uSCIgMgoKCmNsYXNzCVN5bmM7CgogCgoKCmNs YXNzIEFsaWduIHsKcHVibGljOgogICAgUG9pbnQgYV9wdjsJCQkgCiAgICBjb29yX3QgYV90eDsJ CSAKICAgIGNvb3JfdCBhX3R5OwkJIAogICAgY29vcl90IGFfYW5nOwkJIAogICAgY29vcl90IGFf ZGlzOwkJIAogICAgdV9sb25nIGFfbnJvdDsJCSAKICAgIGxvbmcgYV8xMTsJCQkgCiAgICBsb25n IGFfMTI7CiAgICBsb25nIGFfMjE7CiAgICBsb25nIGFfMjI7CiAgICBsb25nIGFfMzE7CiAgICBs b25nIGFfMzI7CiAgICBGaWR1cmVzdWx0IGFfZmlkdVtORklEVV07CgogICAgc2hvcnQgdHJhbnNy b3QoY29uc3QgU3luYyAqKTsKICAgIHZvaWQgbm9fY29tcCgpOwogICAgdm9pZCBkaXNwbGF5KGNo YXIgKik7CiAgICBib29sIHNldHVwX2FsaWdubWVudChib29sIGRvX3NodWZmbGUsICBpbnQgKm51 bV9maWR1Y2lhbHMgPSBfX251bGwgKTsKCiAgICBBbGlnbiYgb3BlcmF0b3IgPShjb25zdCBBbGln biYpOwoKICAgIHN0YXRpYyBBbGlnbiAqZ2V0X3Bhc3MoaW50IHBhc3MgPSAtMSk7Cgpwcml2YXRl OgogICAgdm9pZCAqb3BlcmF0b3IgbmV3KHNpemVfdCk7CiAgICB2b2lkICpvcGVyYXRvciBuZXco c2l6ZV90LCBpbnQpOwogICAgdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCAqKTsKfTsKCiMgOCAi Li4vLi4vaW5jbHVkZS9sb2NhbGluYy9TaWRlbnYuSCIgMgoKCgojIDEgIi4uLy4uL2luY2x1ZGUv bG9jYWxpbmMvQ2FtZGVzYy5IIiAxCgoKCgoKCiMgMSAiLi4vLi4vaW5jbHVkZS9sb2NhbGluYy9D b21wdGFiLkgiIDEKCgoKCiAKCgoKY29uc3QgaW50IE5CQUQJCT0gMzI7CSAKCnR5cGVkZWYgZW51 bSB7IGtDb21wT2ZmLCBrQ29tcE9uIH0gZUNvbXBPbk9mZjsKCnR5cGVkZWYgY29vcl90IENvbXBU YWJsZVZhbHVlX3Q7CgpzdGF0aWMgY29uc3QgQ29tcFRhYmxlVmFsdWVfdCBDT01QX05PVFNFVCA9 IDA7CSAKCmNsYXNzIFB4cG9zIHsKcHVibGljOgogICAgUHhwb3MoQ29tcFRhYmxlVmFsdWVfdCB4 LCBDb21wVGFibGVWYWx1ZV90IHkpIDogX3B4eCh4KSwgX3B4eSh5KSB7fQogICAgUHhwb3MoKSA6 IF9weHgoQ09NUF9OT1RTRVQpLCBfcHh5KENPTVBfTk9UU0VUKSB7fQoKICAgIHZvaWQgcHh4KENv bXBUYWJsZVZhbHVlX3QgdmFsKSB7IF9weHggPSB2YWw7IH0KICAgIHZvaWQgcHh5KENvbXBUYWJs ZVZhbHVlX3QgdmFsKSB7IF9weHkgPSB2YWw7IH0KCiAgICBDb21wVGFibGVWYWx1ZV90IHB4eCgp IGNvbnN0IHsgcmV0dXJuKF9weHgpOyB9CiAgICBDb21wVGFibGVWYWx1ZV90IHB4eSgpIGNvbnN0 IHsgcmV0dXJuKF9weHkpOyB9Cgpwcml2YXRlOgogICAgQ29tcFRhYmxlVmFsdWVfdCBfcHh4Owog ICAgQ29tcFRhYmxlVmFsdWVfdCBfcHh5OwkJIAp9OwoKY29uc3QgbG9uZyBOWEMJCT0gMjIwOwkJ IApjb25zdCBsb25nIE5ZQwkJPSAxODA7CQkgCmNvbnN0IGxvbmcgQ09NUEFSUlNaCT0gKE5YQypO WUMqc2l6ZW9mKFB4cG9zKSk7CmNvbnN0IGxvbmcgQ09NUE1BR0lDCT0gMHg0MzRmNGQ1MDsJIApj b25zdCBsb25nIENPTVBCTUFHSUMJPSAweGZmMDYyNTk3OwkgCgpjbGFzcyBDb21wdGFiIHsKcHJp dmF0ZToKICAgIFB4cG9zICpfY21fY29tcF90YWI7CSAKCnB1YmxpYzoKICAgIGxvbmcgY21fbWFn aWM7CiAgICBsb25nIGNtX3RtcHI7CiAgICBsb25nIGNtX3h0c2M7CQkgCiAgICBsb25nIGNtX3l0 c2M7CiAgICBsb25nIGNtX3N4OwkJCSAKICAgIGxvbmcgY21fc3k7CiAgICBsb25nIGNtX3J4OwkJ CSAKICAgIGxvbmcgY21fcnk7CiAgICBsb25nIGNtX294OwkJCSAKICAgIGxvbmcgY21fb3k7Cgog ICAgdm9pZCBpbml0KCk7CiAgICBpbnQgc2F2ZShpbnQpOwogICAgaW50IGxvYWQoaW50KTsKCiAg ICBQeHBvcyAqY21fY29tcF90YWIoKSBjb25zdCA7CiAgICBQeHBvcyAqY21fY29tcF90YWIoaW50 IGlueCl7cmV0dXJuICYoY21fY29tcF90YWIoKVtpbnhdKTt9CiAgICB2b2lkICAgY21fY29tcF90 YWIoUHhwb3MgKik7Cn07CgppbmxpbmUgUHhwb3MgKgpDb21wdGFiOjpjbV9jb21wX3RhYih2b2lk KSBjb25zdAp7CiAgICByZXR1cm4oKCAgIF9jbV9jb21wX3RhYiAgID8gKCAgUHhwb3MgKiAgKSgo KGNoYXIgKikgICBfY21fY29tcF90YWIgICkgKyBnU2htZW1PZmZzZXQpIDogKCAgUHhwb3MgKiAg KTApICApOwp9CgppbmxpbmUgdm9pZApDb21wdGFiOjpjbV9jb21wX3RhYihQeHBvcyAqIGRhdGEp CnsKICAgIF9jbV9jb21wX3RhYiA9ICggICBkYXRhICAgPyAoICBQeHBvcyAqICApKCgoY2hhciAq KSAgIGRhdGEgICkgLSBnU2htZW1PZmZzZXQpIDogKCAgUHhwb3MgKiAgKTApICA7Cn0gCgojIDcg Ii4uLy4uL2luY2x1ZGUvbG9jYWxpbmMvQ2FtZGVzYy5IIiAyCgoKCmNsYXNzCVdpbmQ7CmNsYXNz CVh5c3RhZ2U7CmNsYXNzCUhkcjsKY2xhc3MJY29uZmlndXJhdGlvbjsKCmNvbnN0IGludCBrTWF4 T3ZlcmxhcHMgPSBrTnVtQ21tQ2FtIC8gMjsKCmVudW0gZUNhbWVyYU92ZXJsYXBzIHsga092ZXJs YXBPbmUsIGtPdmVybGFwVHdvLCBrT3ZlcmxhcFRocmVlLCBrT3ZlcmxhcEZvdXIgfTsKCiMgMzcg Ii4uLy4uL2luY2x1ZGUvbG9jYWxpbmMvQ2FtZGVzYy5IIgoKCmNsYXNzIENhbWRlc2MgewpwdWJs aWM6CiAgICBDb21wdGFiIGNtX2NvbXB0YWI7CgogICAgdm9pZCB0cl92ZWN0KGNvb3JfdCwgY29v cl90LCBjb29yX3QgKiwgY29vcl90ICopOwoKICAgIHZvaWQgaW0yZ3IoY29vcl90LCBjb29yX3Qs IGNvb3JfdCAqLCBjb29yX3QgKik7CiAgICB2b2lkIHdfaW0yZ3IoV2luZCAqLCBXaW5kICopOwog ICAgdm9pZCB3X2RiMmltKFdpbmQgKiwgV2luZCAqLCBsb25nLCBsb25nKTsKICAgIHZvaWQgd19k YjJncihXaW5kICosIFdpbmQgKiwgY29uc3QgV2luZCAqLCBib29sID0gdHJ1ZSk7CiAgICBpbnQg b3IyZnIoaW50KTsKCiAgICB2b2lkIGZvdmluaXQoKTsKICAgIHZvaWQgdXBkYXRlX2Zyb21fY29u ZmlndXJhdGlvbihjb25zdCBjb25maWd1cmF0aW9uICopOwoKICAgIGludCAgY2FtZXJhX29yaWVu dGF0aW9uKCkgY29uc3QgeyByZXR1cm4gX2NtX29yaWVudDsgfQogICAgdm9pZCAgIGNhbWVyYV9v cmllbnRhdGlvbihpbnQgdmFsKSB7IF9jbV9vcmllbnQgPSB2YWw7IH0KCiAgICB2b2lkIGFkanVz dF94eV9mb3Jfb3JpZW50YXRpb24obG9uZyBkeCwgbG9uZyBkeSwgbG9uZyAqZHhwLCBsb25nICpk eXApOwoKICAgIGVDb21wT25PZmYgIGNhbWVyYV9jb21wZW5zYXRpb24oKSBjb25zdCB7IHJldHVy biBfY21fY29mZjsgfQogICAgdm9pZCAgIGNhbWVyYV9jb21wZW5zYXRpb24oZUNvbXBPbk9mZiB2 YWwpIHsgX2NtX2NvZmYgPSB2YWw7IH0KCiAgICB1X2ludCBob3Jpem9uYWxfZm92KCkgY29uc3Qg eyByZXR1cm4gX2NtX2hmb3Y7IH0KICAgIHZvaWQgaG9yaXpvbmFsX2Zvdih1X2ludCB2YWwpIHsg X2NtX2hmb3YgPSB2YWw7IH0KCiAgICBpbnQgIHhmb3ZfaW5fZGF0YWJhc2VfdW5pdHMoKSBjb25z dCB7IHJldHVybiBfY21feGZvdjsgfQogICAgdm9pZCAgIHhmb3ZfaW5fZGF0YWJhc2VfdW5pdHMo aW50IHZhbCkgeyBfY21feGZvdiA9IHZhbDsgfQoKICAgIGludCAgeWZvdl9pbl9kYXRhYmFzZV91 bml0cygpIGNvbnN0IHsgcmV0dXJuIF9jbV95Zm92OyB9CiAgICB2b2lkICAgeWZvdl9pbl9kYXRh YmFzZV91bml0cyhpbnQgdmFsKSB7IF9jbV95Zm92ID0gdmFsOyB9CgogICAgaW50ICB2aXNpYmxl X3hmb3ZfaW5fZGF0YWJhc2VfdW5pdHMoKSBjb25zdCB7IHJldHVybiBfY21fdnhmb3Y7IH0KICAg IHZvaWQgICB2aXNpYmxlX3hmb3ZfaW5fZGF0YWJhc2VfdW5pdHMoaW50IHZhbCkgeyBfY21fdnhm b3YgPSB2YWw7IH0KCiAgICBpbnQgIHZpc2libGVfeWZvdl9pbl9kYXRhYmFzZV91bml0cygpIGNv bnN0IHsgcmV0dXJuIF9jbV92eWZvdjsgfQogICAgdm9pZCAgIHZpc2libGVfeWZvdl9pbl9kYXRh YmFzZV91bml0cyhpbnQgdmFsKSB7IF9jbV92eWZvdiA9IHZhbDsgfQoKICAgIGludCAgY2FtZXJh X3dpZGUoKSBjb25zdCB7IHJldHVybiBfY21fd2lkZTsgfQogICAgdm9pZCAgIGNhbWVyYV93aWRl KGludCB2YWwpIHsgX2NtX3dpZGUgPSB2YWw7IH0KCiAgICBib29sICBjYW1lcmFfc2hvcnQoKSBj b25zdCB7IHJldHVybiBfY21fc2hvcnQ7IH0KICAgIHZvaWQgICBjYW1lcmFfc2hvcnQoYm9vbCB2 YWwpIHsgX2NtX3Nob3J0ID0gdmFsOyB9CgogICAgYm9vbCAgY2FtZXJhX2Zhc3QoKSBjb25zdCB7 IHJldHVybiBfY21fZmFzdDsgfQogICAgdm9pZCAgIGNhbWVyYV9mYXN0KGJvb2wgdmFsKSB7IF9j bV9mYXN0ID0gdmFsOyB9CgogICAgdV9pbnQgd2lkdGgoKSBjb25zdCB7IHJldHVybihfY21fb3Jp ZW50ICYgMSA/IF9jbV9udmlzIDogX2NtX2Zyc2l6ZSk7IH0KICAgIHVfaW50IGhlaWdodCgpIGNv bnN0IHsgcmV0dXJuKF9jbV9vcmllbnQgJiAxID8gX2NtX2Zyc2l6ZSA6IF9jbV9udmlzKTsgfQoK ICAgIHZvaWQgd2lkdGgoaW50IHZhbCkKCSAgICB7IGlmIChfY21fb3JpZW50ICYgMSkgX2NtX252 aXMgPSB2YWw7IGVsc2UgX2NtX2Zyc2l6ZSA9IHZhbDsgfQogICAgdm9pZCBoZWlnaHQoaW50IHZh bCkKCSAgICB7IGlmIChfY21fb3JpZW50ICYgMSkgX2NtX2Zyc2l6ZSA9IHZhbDsgZWxzZSBfY21f bnZpcyA9IHZhbDsgfQoKICAgIGludCBudW1fY2FtcygpIGNvbnN0IHsgcmV0dXJuKF9udW1fY2Ft cyk7IH0gIAogICAgdm9pZCBudW1fY2FtcyhpbnQgbnVtKTsKCiAgICB1X2ludCBob3Jpel92ZXJ0 X3JhdGlvKCkgY29uc3QgeyByZXR1cm4oX2NtX2todik7IH0KICAgIHZvaWQgaG9yaXpfdmVydF9y YXRpbyh1X2ludCByYXRpbykgeyBfY21fa2h2ID0gcmF0aW87IH0KCiAgICBpbnQgbWlycm9yX292 ZXJsYXAoKSBjb25zdCB7IHJldHVybiBfbWlycm9yX292ZXJsYXA7IH0KICAgIHZvaWQgbWlycm9y X292ZXJsYXAoaW50IG92ZXJsYXApIHsgX21pcnJvcl9vdmVybGFwID0gb3ZlcmxhcDsgfQoKICAg IGxvbmcgd2luX2FkanVzdF8zRGJhc2UoKSBjb25zdCB7IHJldHVybihfd2luX2FkanVzdF8zRGJh c2UpOyB9CiAgICB2b2lkIHdpbl9hZGp1c3RfM0RiYXNlKGxvbmcgdmFsdWUpIHsgX3dpbl9hZGp1 c3RfM0RiYXNlID0gdmFsdWU7IH0KCiAgICBsb25nIGJhc2VfZ3JheSgpIGNvbnN0IHsgcmV0dXJu KF9iYXNlX2dyYXkpOyB9CiAgICB2b2lkIGJhc2VfZ3JheShsb25nIHZhbHVlKSB7IF9iYXNlX2dy YXkgPSB2YWx1ZTsgfQoKICAgICAKCgogICAgdm9pZCBjb21wX2ZpbmkoY2hhciAqc3RyLCBjaGFy ICpmbik7CgogICAgc3RhdGljIENhbWRlc2MgKmdldCgpOwoKcHJpdmF0ZToKICAgIGxvbmcgICBf Y21fb3JpZW50OwkJIAogICAgZUNvbXBPbk9mZiAgIF9jbV9jb2ZmOwkJIAoKICAgIHVfc2hvcnQg X2NtX2hmb3Y7CQkgCiAgICBzaG9ydCAgIF9jbV94Zm92OwkJIAoKICAgIHNob3J0ICAgX2NtX3lm b3Y7CQkgCiAgICBzaG9ydCAgIF9jbV92eGZvdjsJCSAKCiAgICBzaG9ydCAgIF9jbV92eWZvdjsJ CSAKICAgIHNob3J0ICAgX2NtX3dpZGU7CQkgCgogICAgc2hvcnQgICBfY21fc2hvcnQ7CQkgCiAg ICBzaG9ydCAgIF9jbV9mYXN0OwkJIAoKICAgIHNob3J0ICAgX2NtX252aXM7CQkgCiAgICBzaG9y dCAgIF9jbV9mcnNpemU7CQkgCgogICAgc2hvcnQgICBfbnVtX2NhbXM7CQkgCiAgICB1X3Nob3J0 IF9jbV9raHY7CQkgCgogICAgc2hvcnQgICBfbWlycm9yX292ZXJsYXA7CSAKICAgIHNob3J0ICAg X2ZpbGxlcjsJCSAKICAgICAKCgoKICAgIHNob3J0IF9jbV9pY2Q7CQkgCiAgICBzaG9ydCBfY21f bmNhbTsJCSAKCgoKCgoKICAgIGxvbmcgX2Jhc2VfZ3JheTsKICAgIGxvbmcgX3dpbl9hZGp1c3Rf M0RiYXNlOwoKICAgIGlubGluZSBzaXplX3QgZ3RfeG1pZCgpOwogICAgaW5saW5lIHNpemVfdCBn dF95bWlkKCk7CiAgICB2b2lkIGRiMmltKGNvb3JfdCwgY29vcl90LCBjb29yX3QgKiwgY29vcl90 ICosIGxvbmcsIGxvbmcpOwogICAgdm9pZCBkYjJmcjQoY29vcl90LCBjb29yX3QsIGNvb3JfdCAq LCBjb29yX3QgKiwgbG9uZywgbG9uZyk7CiAgICB2b2lkIGRiMmdyKGNvb3JfdCwgY29vcl90LCBj b29yX3QgKiwgY29vcl90ICosIGNvbnN0IFdpbmQgKiwgYm9vbCA9IHRydWUpOwoKICAgIHZvaWQg cGRiMmZyNChjb29yX3QsIGNvb3JfdCwgY29vcl90ICosIGNvb3JfdCAqLCBsb25nICosIGxvbmcg Kik7CiAgICB2b2lkIHB3NF9kYjJmcihXaW5kICosIFdpbmQgKiwgbG9uZyAqLCBsb25nICopOwog ICAgdm9pZCB3NF9kYjJmcihXaW5kICosIFdpbmQgKiwgbG9uZywgbG9uZyk7CiAgICB2b2lkIGRi MmZyKGNvb3JfdCwgY29vcl90LCBjb29yX3QgKiwgY29vcl90ICosIGNvbnN0IFdpbmQgKik7CiAg ICB2b2lkIHdfZGIyZnIoV2luZCAqLCBXaW5kICosIGNvbnN0IFdpbmQgKik7CgogICAgIAoKCiAg ICBpbnQgcF9jbXB2YWxzKCk7CiAgICBpbnQgcmRjbXBmaWxlKGNvbnN0IGNoYXIgKmZuKTsKCiAg ICB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkICopOwogICAgdm9pZCAqb3BlcmF0b3IgbmV3IChz aXplX3QpOwkgCn07CgogCgoKc3RhdGljIGlubGluZSBpbnQKdHJfYyhpbnQgYywgbG9uZyBzY2Fs ZTEsIGludCBzY2FsZTIsIGludCBvZmZzZXQxLCBpbnQgb2Zmc2V0MikKewogICAgIAoKCiAgICBy ZXR1cm4gKCgoKChjIC0gb2Zmc2V0MSkgKiBzY2FsZTEpICsgNSkgLyBzY2FsZTIpICsgb2Zmc2V0 Mik7Cn0KCiAKCgpzdGF0aWMgaW5saW5lIGludAp0cl9sKGxvbmcgYywgbG9uZyBzMSwgZmxvYXQg czIpCnsKICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KCgoYyAqIHMxKSAvIHMyKSArIC41KTsK fQoKc3RhdGljIGlubGluZSB2b2lkCmFkanVzdF94eV9mb3Jfb3JpZW50YXRpb24obG9uZyBkeCwg bG9uZyBkeSwgbG9uZyAqZHhwLCBsb25nICpkeXApCnsKICAgIENhbWRlc2M6OmdldCgpLT5hZGp1 c3RfeHlfZm9yX29yaWVudGF0aW9uKGR4LCBkeSwgZHhwLCBkeXApOwp9CgojIDExICIuLi8uLi9p bmNsdWRlL2xvY2FsaW5jL1NpZGVudi5IIiAyCgoKCgoKY2xhc3MJWHlzdGFnZTsKY2xhc3MJU25h cDsKY2xhc3MJV2luZDsKY2xhc3MJY29uZmlndXJhdGlvbjsKCiAKCgoKCmNsYXNzIFNpZGVudiB7 CnB1YmxpYzoKICAgIFh5c3RhZ2UgKnNfc3RhZ2UoKSBjb25zdDsKICAgIHZvaWQgc19zdGFnZShY eXN0YWdlICopOwogICAgdm9pZCBndF9zbndpbihjb25zdCBTbmFwICosIFdpbmQgKiwgbG9uZyAq LCBsb25nICopIGNvbnN0OwogICAgdm9pZCBndF9zbjR3aW4oY29uc3QgU25hcCAqLCBXaW5kICos IGxvbmcgKiwgbG9uZyAqKSBjb25zdDsKICAgIHZvaWQgc2h1ZmZsZSgpOwogICAgdm9pZCB1cGRh dGVfZnJvbV9jb25maWd1cmF0aW9uKGNvbnN0IGNvbmZpZ3VyYXRpb24gKik7CgogICAgQm9vbGVh biBzX2ZpZHVsaWdodCgpIGNvbnN0IHsgcmV0dXJuIF9zX2ZpZHVsaWdodDsgfQogICAgQm9vbGVh biBzX3N0YXJ0c3RvcCgpIGNvbnN0IHsgcmV0dXJuIF9zX3N0YXJ0c3RvcDsgfQogICAgQm9vbGVh biBzX3JldmlldygpIGNvbnN0IHsgcmV0dXJuIF9zX3JldmlldzsgfQogICAgQm9vbGVhbiBzX3Ni YWRzbigpIGNvbnN0IHsgcmV0dXJuIF9zX3NiYWRzbjsgfQoKICAgIHZvaWQgc19maWR1bGlnaHQo Qm9vbGVhbiB2YWwpIHsgX3NfZmlkdWxpZ2h0ID0gdmFsOyB9CiAgICB2b2lkIHNfc3RhcnRzdG9w KEJvb2xlYW4gdmFsKSB7IF9zX3N0YXJ0c3RvcCA9IHZhbDsgfQogICAgdm9pZCBzX3JldmlldyhC b29sZWFuIHZhbCkgeyBfc19yZXZpZXcgPSB2YWw7IH0KICAgIHZvaWQgc19zYmFkc24oQm9vbGVh biB2YWwpIHsgX3Nfc2JhZHNuID0gdmFsOyB9CiAgICAKICAgIHN0YXRpYyBTaWRlbnYgKmdldCgp OwoKcHJpdmF0ZToKICAgIFh5c3RhZ2UgKl9zX3N0YWdlOwoKICAgIEJvb2xlYW4gX3NfZmlkdWxp Z2h0OwkJIAogICAgQm9vbGVhbiBfc19zdGFydHN0b3A7CQkgCiAgICBCb29sZWFuIF9zX3Jldmll dzsJCQkgCiAgICBCb29sZWFuIF9zX3NiYWRzbjsJCQkgCgogICAgZnJpZW5kIGNsYXNzIEFsaWdu OwogICAgZnJpZW5kIGNsYXNzIENhbWRlc2M7CgogICAgQWxpZ24gc19hbGlnbltrTWF4QnJkXTsK ICAgIENhbWRlc2Mgc19jYW1kZXNjOwoKICAgIGNvbnN0IEFsaWduICpmbHRfc253aW4oY29uc3Qg U25hcCAqLCBsb25nICosIGxvbmcgKikgY29uc3Q7CiAgICB2b2lkIHRyYW5zaXQoU25hcCAqLCBT bmFwICosIHNob3J0ICosIHNob3J0ICopOwogICAgSXRlbSAqeF9zbmFwKFNuYXAgKnNyYywgU25h cCAqZHN0LCBJdGVtICppdG0pOwoKICAgIHZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQgKik7CSAK ICAgIHZvaWQgKm9wZXJhdG9yIG5ldyhzaXplX3QpOwkJIAp9OwoKaW5saW5lIFh5c3RhZ2UgKgpT aWRlbnY6OnNfc3RhZ2UoKSBjb25zdAp7CiAgICByZXR1cm4oKCAgICBfc19zdGFnZSAgID8gKCAg WHlzdGFnZSAqICApKCgoY2hhciAqKSAgICBfc19zdGFnZSAgKSArIGdTaG1lbU9mZnNldCkgOiAo ICBYeXN0YWdlICogICkwKSAgKTsKfQoKaW5saW5lIHZvaWQKU2lkZW52OjpzX3N0YWdlKFh5c3Rh Z2UgKmRhdGEpCnsKICAgIF9zX3N0YWdlID0gKCAgICBkYXRhICAgPyAoICBYeXN0YWdlICogICko KChjaGFyICopICAgIGRhdGEgICkgLSBnU2htZW1PZmZzZXQpIDogKCAgWHlzdGFnZSAqICApMCkg IDsKfQoKc3RhdGljIGlubGluZSB2b2lkCmd0X3Nud2luKGNvbnN0IFNpZGVudiAqc2QsIFNuYXAg KkRzLCBXaW5kICp3aW4sIGxvbmcgKngsIGxvbmcgKnkpCnsKICAgIHNkLT5ndF9zbndpbihEcywg d2luLCB4LCB5KTsKfQoKc3RhdGljIGlubGluZSB2b2lkCmd0X3NuNHdpbihTaWRlbnYgKnNkLCBT bmFwICpEcywgV2luZCAqd2luLCBsb25nICp4LCBsb25nICp5KQp7CiAgICBzZC0+Z3Rfc240d2lu KERzLCB3aW4sIHgsIHkpOwp9CgojIDI2ICJzYXZlX3NuYXAuYyIgMgoKIyAxICIuLi8uLi9pbmNs dWRlL2xvY2FsaW5jL0l0ZW0uSCIgMQoKCgoKCgoKCgoKIyAxICIuLi8uLi9pbmNsdWRlL2xvY2Fs aW5jL0luc3BlY3RlZC5IIiAxCgoKIAoKCgoKCgoKCgoKCmNsYXNzCVJlc3VsdHM7CmNsYXNzCUl0 ZW07CmNsYXNzCVBhc3M7Cgpjb25zdCBjaGFyIGtTa2lwcGVkSXRlbSA9IC0xOwoKIAoKCgpjbGFz cyBJbnNwZWN0ZWQgewpwdWJsaWM6CgogICAgV2luZAlfd2luZDsKCiAgICBSZXN1bHRzICpyZXN1 bHRzKCkgY29uc3Q7CiAgICBJbnNwZWN0ZWQgKmZvcncoKSBjb25zdDsKICAgIEl0ZW0gKml0ZW1z KCkgY29uc3Q7CgogICAgdm9pZCBmb3J3KEluc3BlY3RlZCAqKTsKICAgIHZvaWQgaXRlbXMoSXRl bSAqKTsKICAgIHZvaWQgcm90YXRlKCk7CgogICAgdm9pZAl3aW5kKFdpbmQmIHdpbikgeyBfd2lu ZCA9IHdpbjsgfQogICAgV2luZAl3aW5kKCkgeyByZXR1cm4gX3dpbmQ7IH0KCiAgICB2b2lkCXJl c3VsdHNfaW5kZXgodV9pbnQgaW5kZXgpIHsgX3Jlc3VsdHNfaW5kZXggPSBpbmRleDsgfQogICAg Y29uc3QgdV9pbnQgcmVzdWx0c19pbmRleCgpIGNvbnN0ICB7IHJldHVybiBfcmVzdWx0c19pbmRl eDsgfQoKICAgIHZvaWQJYWxnb3JpdGhtKHVfaW50IGFsZ28pIHsgX2FsZ29yaXRobSA9IGFsZ287 IH0KICAgIGNvbnN0IHVfaW50IGFsZ29yaXRobSgpIGNvbnN0IHsgcmV0dXJuIF9hbGdvcml0aG07 IH0KCiAgICB2b2lkCXBhc3NfbnVtYmVyKHVfaW50IHBhc3MpIHsgX3Bhc3NfbnVtYmVyID0gcGFz czsgfQogICAgY29uc3QgdV9pbnQgcGFzc19udW1iZXIoKSBjb25zdCB7IHJldHVybiBfcGFzc19u dW1iZXI7IH0KCiAgICB2b2lkCW9yaWVudGF0aW9uKHVfaW50IG9yaWVudCkgeyBfb3JpZW50YXRp b24gPSBvcmllbnQ7IH0KICAgIGNvbnN0IHVfaW50IG9yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1 cm4gX29yaWVudGF0aW9uOyB9CgogICAgdm9pZAlzY3JhdGNoKHVfaW50IHZhbCkgeyBfc2NyYXRj aCA9IHZhbDsgfQogICAgY29uc3QgdV9pbnQgc2NyYXRjaCgpIGNvbnN0IHsgcmV0dXJuIF9zY3Jh dGNoOyB9CgogICAgdm9pZAl2aXNpYmxlKGJvb2wgdmlzKSB7IF92aXNpYmxlID0gdmlzOyB9CiAg ICBjb25zdCBib29sCXZpc2libGUoKSBjb25zdCB7IHJldHVybiAoX3Zpc2libGUgJiYgIV9leGNs dWRlZCk7IH0KCiAgICB2b2lkCWJhZGl0ZW0oY2hhciB2YWwpIHsgX2JhZGl0ZW0gPSB2YWw7IH0K ICAgIGNvbnN0IGNoYXIJYmFkaXRlbSgpIGNvbnN0IHsgcmV0dXJuIF9iYWRpdGVtOyB9CgogICAg dm9pZAlleGNsdWRlZChib29sIHZhbCkgeyBfZXhjbHVkZWQgPSB2YWw7IH0KICAgIGNvbnN0IGJv b2wJZXhjbHVkZWQoKSBjb25zdCB7IHJldHVybiBfZXhjbHVkZWQ7IH0KCnByb3RlY3RlZDoKICAg IEluc3BlY3RlZAkqX2Zvcnc7CiAgICBJdGVtCSpfaXRlbXM7CSAKCiAgICB1X3Nob3J0CV9yZXN1 bHRzX2luZGV4OwkJIAogICAgdV9zaG9ydAlfYWxnb3JpdGhtOwkJIAoKICAgIHVfc2hvcnQJX3Bh c3NfbnVtYmVyOwkJIAogICAgdV9zaG9ydAlfb3JpZW50YXRpb247CgogICAgdV9zaG9ydAlfc2Ny YXRjaDsJCSAKICAgIGJvb2wJX3Zpc2libGU7CQkgCiAgICBjaGFyCV9iYWRpdGVtOwkJIAoKICAg IGJvb2wJX2V4Y2x1ZGVkOwkJIAogICAgYm9vbAlfYm9vbF9maWxsZXI7CQkgCiAgICBzaG9ydAlf c2hvcnRfZmlsbGVyOwkJIAoKICAgIEluc3BlY3RlZCgpOwogICAgSW5zcGVjdGVkKGNvbnN0IElu c3BlY3RlZCYpOwogICAgSW5zcGVjdGVkJiBvcGVyYXRvcj0oY29uc3QgSW5zcGVjdGVkJik7CiAg ICB2b2lkIGRlc3RydWN0b3IoKTsJCSAKCnByaXZhdGU6CiAgICAgCgoKCiAgICB2b2lkIG9wZXJh dG9yIGRlbGV0ZSh2b2lkICopIHt9OwkgCiAgICB2b2lkICpvcGVyYXRvciBuZXcoc2l6ZV90KTsJ CSAKfTsKCmlubGluZSBJbnNwZWN0ZWQqCkluc3BlY3RlZDo6Zm9ydygpIGNvbnN0CnsKICAgIHJl dHVybigoICAgIF9mb3J3ICAgPyAoICBJbnNwZWN0ZWQgKiAgKSgoKGNoYXIgKikgICAgX2Zvcncg ICkgKyBnU2htZW1PZmZzZXQpIDogKCAgSW5zcGVjdGVkICogICkwKSAgKTsKfQoKaW5saW5lIEl0 ZW0qCkluc3BlY3RlZDo6aXRlbXMoKSBjb25zdAp7CiAgICByZXR1cm4oKCAgICBfaXRlbXMgICA/ ICggIEl0ZW0gKiAgKSgoKGNoYXIgKikgICAgX2l0ZW1zICApICsgZ1NobWVtT2Zmc2V0KSA6ICgg IEl0ZW0gKiAgKTApICApOwp9CgppbmxpbmUgdm9pZApJbnNwZWN0ZWQ6OmZvcncoSW5zcGVjdGVk ICpkYXRhKQp7CiAgICBfZm9ydyA9ICggICAgZGF0YSAgID8gKCAgSW5zcGVjdGVkICogICkoKChj aGFyICopICAgIGRhdGEgICkgLSBnU2htZW1PZmZzZXQpIDogKCAgSW5zcGVjdGVkICogICkwKSAg Owp9CgppbmxpbmUgdm9pZApJbnNwZWN0ZWQ6Oml0ZW1zKEl0ZW0gKmRhdGEpCnsKICAgIF9pdGVt cyA9ICggICAgZGF0YSAgID8gKCAgSXRlbSAqICApKCgoY2hhciAqKSAgICBkYXRhICApIC0gZ1No bWVtT2Zmc2V0KSA6ICggIEl0ZW0gKiAgKTApICA7Cn0KCiMgMTEgIi4uLy4uL2luY2x1ZGUvbG9j YWxpbmMvSXRlbS5IIiAyCgoKCmNsYXNzCUdyb3VwOwpjbGFzcwlSZXN1bHRzOwpjbGFzcwlTbmFw OwoKY2xhc3MgSXRlbSA6IHB1YmxpYyBJbnNwZWN0ZWQgewpwdWJsaWM6CiAgICBJdGVtKCk7CiAg ICBJdGVtKGNvbnN0IEl0ZW0mKTsKCiAgICB+SXRlbSgpOwoKICAgIEl0ZW0mIG9wZXJhdG9yID0o Y29uc3QgSXRlbSAmKTsKCiAgICB2b2lkICpvcGVyYXRvciBuZXcoc2l6ZV90IGFtdCk7CiAgICB2 b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkICopOwogICAgc3RhdGljIEl0ZW0gKmdldF9wYXNzKGlu dCBwYXNzID0gLTEpOwoKICAgIHZvaWQgcmVsb2MobG9uZyBhbXQpOwoKICAgIEl0ZW0gKnNsc3Qo KSBjb25zdDsKICAgIEdyb3VwICpncnAoKSBjb25zdDsKICAgIFNuYXAgKnNuYXAoKSBjb25zdDsK CiAgICAgCgoKICAgIGNvb3JfdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuKF93aW5kLiBfV2luLmN3 LmR5ICk7IH0KICAgIGNvb3JfdCBoZWlnaHQoKSBjb25zdCB7IHJldHVybihfd2luZC4gX1dpbi5j dy5keCApOyB9CiAgICBjb29yX3QgYWNyb3NzKCkgY29uc3QgeyByZXR1cm4oX3dpbmQuIF9XaW4u Y3cueSApOyB9CiAgICBjb29yX3QgZG93bigpIGNvbnN0IHsgcmV0dXJuKF93aW5kLiBfV2luLmN3 LnggKTsgfQoKICAgIHZvaWQgc2xzdChjb25zdCBJdGVtICopOwogICAgdm9pZCBncnAoY29uc3Qg R3JvdXAgKik7CiAgICB2b2lkIHNuYXAoY29uc3QgU25hcCAqKTsKCiAgICB2b2lkIAlwaW5udW0o dV9pbnQgcGluKSB7IF9waW5udW0gPSBwaW47IH0KICAgIGNvbnN0IHVfaW50IHBpbm51bSgpIGNv bnN0IHsgcmV0dXJuIF9waW5udW07IH0KCiAgICB2b2lkCWZyYW1lKHVfaW50IGZybSkgeyBfZnJh bWUgPSBmcm07IH0KICAgIGNvbnN0IHVfaW50IGZyYW1lKCkgY29uc3QgeyByZXR1cm4gX2ZyYW1l OyB9CgogICAgdm9pZAlpX251bSh1X2ludCB2YWwpIHsgX2lfbnVtID0gdmFsOyB9CiAgICBjb25z dCB1X2ludCBpX251bSgpIGNvbnN0IHsgcmV0dXJuIF9pX251bTsgfQoKICAgIHZvaWQJZmlkdWNp YWwoYm9vbCB2YWwpIHsgX2ZpZHVjaWFsID0gdmFsOyB9CiAgICBjb25zdCBib29sIGZpZHVjaWFs KCkgY29uc3QgeyByZXR1cm4gX2ZpZHVjaWFsOyB9CgogICAgdm9pZAlvem9uZShib29sIHZhbCkg eyBfb3pvbmUgPSB2YWw7IH0KICAgIGNvbnN0IGJvb2wgb3pvbmUoKSBjb25zdCB7IHJldHVybiBf b3pvbmU7IH0KCiAgICBsb25nIEl0ZW1NaW5Eb3duKCkgY29uc3QgeyByZXR1cm4oZG93bigpIC0g KGhlaWdodCgpID4+IDEpKTsgfQogICAgbG9uZyBJdGVtTWF4RG93bigpIGNvbnN0IHsgcmV0dXJu KGRvd24oKSArIChoZWlnaHQoKSA+PiAxKSk7IH0KICAgIGxvbmcgSXRlbU1heEFjcm9zcygpIGNv bnN0IHsgcmV0dXJuKGFjcm9zcygpICsgKHdpZHRoKCkgPj4gMSkpOyB9CiAgICBsb25nIEl0ZW1N aW5BY3Jvc3MoKSBjb25zdCB7IHJldHVybihhY3Jvc3MoKSAtICh3aWR0aCgpID4+IDEpKTsgfQoK CgoKCnByaXZhdGU6CiAgICBHcm91cCAqX2dycDsJCQkgCiAgICBJdGVtICpfc2xzdDsJCQkgCiAg ICBTbmFwICpfc25hcDsJCQkgCgogICAgdV9zaG9ydCBfcGlubnVtOwkJIAogICAgdV9zaG9ydCBf ZnJhbWU7CQkgCgogICAgdV9zaG9ydCBfaV9udW07CQkgCiAgICBCb29sZWFuIF9maWR1Y2lhbDsJ CSAKICAgIEJvb2xlYW4gX296b25lOwkJIAp9OwoKaW5saW5lIEdyb3VwICoKSXRlbTo6Z3JwKCkg Y29uc3QKewogICAgcmV0dXJuKCggICAgX2dycCAgID8gKCAgR3JvdXAgKiAgKSgoKGNoYXIgKikg ICAgX2dycCAgKSArIGdTaG1lbU9mZnNldCkgOiAoICBHcm91cCAqICApMCkgICk7Cn0KCmlubGlu ZSBJdGVtICoKSXRlbTo6c2xzdCgpIGNvbnN0CnsKICAgIHJldHVybigoICAgIF9zbHN0ICAgPyAo ICBJdGVtICogICkoKChjaGFyICopICAgIF9zbHN0ICApICsgZ1NobWVtT2Zmc2V0KSA6ICggIEl0 ZW0gKiAgKTApICApOwp9CgppbmxpbmUgU25hcCAqCkl0ZW06OnNuYXAoKSBjb25zdAp7CiAgICBy ZXR1cm4oKCAgICBfc25hcCAgID8gKCAgU25hcCAqICApKCgoY2hhciAqKSAgICBfc25hcCAgKSAr IGdTaG1lbU9mZnNldCkgOiAoICBTbmFwICogICkwKSAgKTsKfQoKaW5saW5lIHZvaWQKSXRlbTo6 c2xzdChjb25zdCBJdGVtICpzbHN0KQp7CiAgICBfc2xzdCA9ICggICAgc2xzdCAgID8gKCAgSXRl bSAqICApKCgoY2hhciAqKSAgICBzbHN0ICApIC0gZ1NobWVtT2Zmc2V0KSA6ICggIEl0ZW0gKiAg KTApICA7Cn0KCmlubGluZSB2b2lkCkl0ZW06OmdycChjb25zdCBHcm91cCAqZGF0YSkKewogICAg X2dycCA9ICggICAgZGF0YSAgID8gKCAgR3JvdXAgKiAgKSgoKGNoYXIgKikgICAgZGF0YSAgKSAt IGdTaG1lbU9mZnNldCkgOiAoICBHcm91cCAqICApMCkgIDsKfQoKaW5saW5lIHZvaWQKSXRlbTo6 c25hcChjb25zdCBTbmFwICpkYXRhKQp7CiAgICBfc25hcCA9ICggICAgZGF0YSAgID8gKCAgU25h cCAqICApKCgoY2hhciAqKSAgICBkYXRhICApIC0gZ1NobWVtT2Zmc2V0KSA6ICggIFNuYXAgKiAg KTApICA7Cn0KCgojIDI3ICJzYXZlX3NuYXAuYyIgMgoKCgoKIyAxICIuLi8uLi9pbmNsdWRlL2xp YmluYy9BbGVydC5IIiAxCgoKIAoKCgoKCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKCgojIDEgIi4u Ly4uL2luY2x1ZGUvbGliaW5jL0FsZXJ0UGx1cy5IIiAxCiAKCgoKCgoKCiMgMSAiLi4vLi4vaW5j bHVkZS9sb2NhbGluYy94ZGNsYXNzLmgiIDEKCgoKCgoKCmNsYXNzIHhkX2Jhc2VfYwp7CiAgICBw dWJsaWM6Cgl4ZF9iYXNlX2MoKSB7X3hkX3Jvb3R3aWRnZXQ9IF9fbnVsbCA7fQoJV2lkZ2V0IHhk X3Jvb3R3aWRnZXQoKSBjb25zdCB7cmV0dXJuIF94ZF9yb290d2lkZ2V0O30KICAgIHByb3RlY3Rl ZDoKCVdpZGdldCBfeGRfcm9vdHdpZGdldDsKICAgIHByaXZhdGU6Cgl2b2lkIG9wZXJhdG9yPSh4 ZF9iYXNlX2MmKTsgIAoJIAoJIAoJIAoJIAoJeGRfYmFzZV9jKHhkX2Jhc2VfYyYpIHsgYWJvcnQo KTt9ICAgIAp9OwoKY2xhc3MgeGRfWHRXaWRnZXRfYzogcHVibGljIHhkX2Jhc2VfYwp7CiAgICBw dWJsaWM6Cgl4ZF9YdFdpZGdldF9jKCk7Cgl2b2lkIFNldFZhbHVlKFN0cmluZyBuYW1lLCBYdEFy Z1ZhbCB2YWx1ZSk7Cgl2b2lkIFNldFZhbHVlcyhBcmdMaXN0IGFyZ3MsIENhcmRpbmFsIG51bV9h cmdzKTsKCXZvaWQgVmFTZXRWYWx1ZXMoU3RyaW5nIG5hbWUsLi4uKTsKCXZvaWQgR2V0VmFsdWUo U3RyaW5nIG5hbWUsIHZvaWQgKnZhbHVlKTsKCXZvaWQgR2V0VmFsdWVzKEFyZ0xpc3QgYXJncywg Q2FyZGluYWwgbnVtX2FyZ3MpOwoJdm9pZCBWYUdldFZhbHVlcyhTdHJpbmcgbmFtZSwuLi4pOwoJ dm9pZCBNYXAoKTsKCXZvaWQgVW5tYXAoKTsKCXZpcnR1YWwgdm9pZCB4ZF9lbmFibGUoKTsKCXZp cnR1YWwgdm9pZCB4ZF9kaXNhYmxlKCk7Cgl2aXJ0dWFsIHZvaWQgeGRfZGVzdHJveSgpOwp9OwoK Y2xhc3MgeGRfVG9wTGV2ZWxTaGVsbF9jOiBwdWJsaWMgeGRfWHRXaWRnZXRfYwp7Cn07CgpjbGFz cyB4ZF9BcHBsaWNhdGlvblNoZWxsX2M6IHB1YmxpYyB4ZF9Ub3BMZXZlbFNoZWxsX2MKewogICAg cHVibGljOgoJdm9pZCB4ZF9leGl0KGludCBzdGF0dXM9MCk7Cgl2b2lkIFJlYWxpemUoKTsKfTsK CmNsYXNzIHhkX0NoaWxkV2lkZ2V0X2M6IHB1YmxpYyB4ZF9YdFdpZGdldF9jCnsKICAgIHB1Ymxp YzoKCXZpcnR1YWwgdm9pZCB4ZF9zaG93KCk9MDsKCXZpcnR1YWwgdm9pZCB4ZF9oaWRlKCk9MDsK CXZvaWQgTWFuYWdlKCk7Cgl2b2lkIFVubWFuYWdlKCk7Cn07CgpjbGFzcyB4ZF9YbURpYWxvZ19j OiBwdWJsaWMgeGRfQ2hpbGRXaWRnZXRfYwp7CiAgICBwdWJsaWM6Cgl4ZF9YbURpYWxvZ19jKCk7 Cgl2aXJ0dWFsIHZvaWQgeGRfc2hvdygpOwoJdmlydHVhbCB2b2lkIHhkX2hpZGUoKTsKCXZvaWQg UmFpc2UoKTsKICAgIHByb3RlY3RlZDoKCVdpZGdldCB4ZF9nZXRjaGlsZHdpZGdldCgpOwoJV2lk Z2V0IHhkX2NoaWxkd2lkZ2V0Owp9OwoKY2xhc3MgeGRfTm9uU2hlbGxXaWRnZXRfYzogcHVibGlj IHhkX0NoaWxkV2lkZ2V0X2MKewogICAgcHVibGljOgoJdmlydHVhbCB2b2lkIHhkX3Nob3coKTsK CXZpcnR1YWwgdm9pZCB4ZF9oaWRlKCk7Cn07CgpjbGFzcyB4ZF9YbUxhYmVsX2M6IHB1YmxpYyB4 ZF9Ob25TaGVsbFdpZGdldF9jCnsKfTsKCmNsYXNzIHhkX1htQ2FzY2FkZUJ1dHRvbl9jOiBwdWJs aWMgeGRfTm9uU2hlbGxXaWRnZXRfYwp7Cn07CgpjbGFzcyB4ZF9YbURyYXduQnV0dG9uX2M6IHB1 YmxpYyB4ZF9Ob25TaGVsbFdpZGdldF9jCnsKfTsKCmNsYXNzIHhkX1htUHVzaEJ1dHRvbl9jOiBw dWJsaWMgeGRfTm9uU2hlbGxXaWRnZXRfYwp7Cn07CgpjbGFzcyB4ZF9YbVRvZ2dsZUJ1dHRvbl9j OiBwdWJsaWMgeGRfTm9uU2hlbGxXaWRnZXRfYwp7Cn07CgpjbGFzcyB4ZF9YbUFycm93QnV0dG9u X2M6IHB1YmxpYyB4ZF9Ob25TaGVsbFdpZGdldF9jCnsKfTsKCmNsYXNzIHhkX1htTGlzdF9jOiBw dWJsaWMgeGRfTm9uU2hlbGxXaWRnZXRfYwp7Cn07CgpjbGFzcyB4ZF9YbVNjcm9sbEJhcl9jOiBw dWJsaWMgeGRfTm9uU2hlbGxXaWRnZXRfYwp7Cn07CgpjbGFzcyB4ZF9YbVNlcGFyYXRvcl9jOiBw dWJsaWMgeGRfTm9uU2hlbGxXaWRnZXRfYwp7Cn07CgpjbGFzcyB4ZF9YbVRleHRfYzogcHVibGlj IHhkX05vblNoZWxsV2lkZ2V0X2MKewp9OwoKY2xhc3MgeGRfWG1UZXh0RmllbGRfYzogcHVibGlj IHhkX05vblNoZWxsV2lkZ2V0X2MKewp9OwoKY2xhc3MgeGRfWG1CdWxsZXRpbkJvYXJkX2M6IHB1 YmxpYyB4ZF9Ob25TaGVsbFdpZGdldF9jCnsKfTsKCmNsYXNzIHhkX1htUm93Q29sdW1uX2M6IHB1 YmxpYyB4ZF9Ob25TaGVsbFdpZGdldF9jCnsKfTsKCmNsYXNzIHhkX1htUmFkaW9Cb3hfYzogcHVi bGljIHhkX05vblNoZWxsV2lkZ2V0X2MKewp9OwoKY2xhc3MgeGRfWG1EcmF3aW5nQXJlYV9jOiBw dWJsaWMgeGRfTm9uU2hlbGxXaWRnZXRfYwp7Cn07CgpjbGFzcyB4ZF9YbVBhbmVkV2luZG93X2M6 IHB1YmxpYyB4ZF9Ob25TaGVsbFdpZGdldF9jCnsKfTsKCmNsYXNzIHhkX1htRnJhbWVfYzogcHVi bGljIHhkX05vblNoZWxsV2lkZ2V0X2MKewp9OwoKY2xhc3MgeGRfWG1TY2FsZV9jOiBwdWJsaWMg eGRfTm9uU2hlbGxXaWRnZXRfYwp7Cn07CgpjbGFzcyB4ZF9YbVNjcm9sbGVkV2luZG93X2M6IHB1 YmxpYyB4ZF9Ob25TaGVsbFdpZGdldF9jCnsKfTsKCmNsYXNzIHhkX1htU2Nyb2xsZWRUZXh0X2M6 IHB1YmxpYyB4ZF9Ob25TaGVsbFdpZGdldF9jCnsKfTsKCmNsYXNzIHhkX1htU2Nyb2xsZWRMaXN0 X2M6IHB1YmxpYyB4ZF9Ob25TaGVsbFdpZGdldF9jCnsKfTsKCmNsYXNzIHhkX1htTWFpbldpbmRv dzogcHVibGljIHhkX05vblNoZWxsV2lkZ2V0X2MKewp9OwoKY2xhc3MgeGRfWG1TZWxlY3Rpb25C b3hfYzogcHVibGljIHhkX05vblNoZWxsV2lkZ2V0X2MKewp9OwoKY2xhc3MgeGRfWG1GaWxlU2Vs ZWN0aW9uQm94X2M6IHB1YmxpYyB4ZF9Ob25TaGVsbFdpZGdldF9jCnsKfTsKCmNsYXNzIHhkX1ht Q29tbWFuZF9jOiBwdWJsaWMgeGRfTm9uU2hlbGxXaWRnZXRfYwp7Cn07CgpjbGFzcyB4ZF9YbU1l c3NhZ2VCb3hfYzogcHVibGljIHhkX05vblNoZWxsV2lkZ2V0X2MKewp9OwoKY2xhc3MgeGRfWG1N YWluV2luZG93X2M6IHB1YmxpYyB4ZF9Ob25TaGVsbFdpZGdldF9jCnsKfTsKCmNsYXNzIHhkX1ht Rm9ybV9jOiBwdWJsaWMgeGRfTm9uU2hlbGxXaWRnZXRfYwp7Cn07CgpjbGFzcyB4ZF9YbU1lbnVC YXJfYzogcHVibGljIHhkX05vblNoZWxsV2lkZ2V0X2MKewp9OwoKY2xhc3MgeGRfWG1QdWxsZG93 bk1lbnVfYzogcHVibGljIHhkX05vblNoZWxsV2lkZ2V0X2MKewp9OwoKY2xhc3MgeGRfWG1Qb3B1 cE1lbnVfYzogcHVibGljIHhkX05vblNoZWxsV2lkZ2V0X2MKewp9OwoKY2xhc3MgeGRfWG1PcHRp b25NZW51X2M6IHB1YmxpYyB4ZF9Ob25TaGVsbFdpZGdldF9jCnsKfTsKCgoKIyA5ICIuLi8uLi9p bmNsdWRlL2xpYmluYy9BbGVydFBsdXMuSCIgMgoKCmNsYXNzIEFsZXJ0UGx1czogcHVibGljIHhk X1htRGlhbG9nX2MgewpwdWJsaWM6Cgl2aXJ0dWFsIHZvaWQgY3JlYXRlIChXaWRnZXQgcGFyZW50 LCBjaGFyICp3aWRnZXRfbmFtZSA9IF9fbnVsbCApOwpwcm90ZWN0ZWQ6CglXaWRnZXQgYWxlcnRf c2hlbGw7CglXaWRnZXQgYWxlcnRfbWVzc2FnZV9ib3g7CglXaWRnZXQgYWxlcnRfY2FuY2VsX2J1 dHRvbjsKCVdpZGdldCBhbGVydF9oZWxwX2J1dHRvbjsKCVdpZGdldCBhbGVydF9tZXNzYWdlX2xh YmVsOwoJV2lkZ2V0IGFsZXJ0X29rX2J1dHRvbjsKCVdpZGdldCBhbGVydF9zZXAxOwoJV2lkZ2V0 IGFsZXJ0X3N5bWJvbDsKcHVibGljOgoJc3RhdGljIHZvaWQgYWxlcnRfcGx1c19oZWxwX2NiKCBX aWRnZXQsIFh0UG9pbnRlciwgWHRQb2ludGVyICk7Cgl2aXJ0dWFsIHZvaWQgYWxlcnRfcGx1c19o ZWxwX2NiKCBXaWRnZXQsIFh0UG9pbnRlciApOwoJc3RhdGljIHZvaWQgYWxlcnRfcGx1c19va19j YiggV2lkZ2V0LCBYdFBvaW50ZXIsIFh0UG9pbnRlciApOwoJdmlydHVhbCB2b2lkIGFsZXJ0X3Bs dXNfb2tfY2IoIFdpZGdldCwgWHRQb2ludGVyICk7Cn07Cgp0eXBlZGVmIEFsZXJ0UGx1cyAqQWxl cnRQbHVzX3A7CmNsYXNzIEFsZXJ0UGx1czsKdHlwZWRlZiBBbGVydFBsdXMgKkFsZXJ0UGx1c19w OwoKCmV4dGVybiBBbGVydFBsdXNfcCBhbGVydF9zaGVsbDsKCgoKCiMgMTQgIi4uLy4uL2luY2x1 ZGUvbGliaW5jL0FsZXJ0LkgiIDIKCgpjbGFzcyBBbGVydCA6IHB1YmxpYyBBbGVydFBsdXMgewpw cml2YXRlOgogICAgV2lkZ2V0IF9wYXJlbnQ7CiAgICBzdHJpbmcgX25hbWU7CiAgICBzdHJpbmcg X2hlbHBfZmlsZTsKICAgIFh0QXBwQ29udGV4dCBfY29udGV4dDsKICAgIFh0SW50ZXJ2YWxJZCBf dGltZW91dF9pZDsKICAgIGJvb2wgX2NsZWFyX3doZW5fZG9uZTsKICAgIGJvb2wgX3hkX2luaXRp YWxpc2VkOwogICAgaW50IF9jb3VudGVyOwoKICAgIHZvaWQgYWxlcnRfcGx1c19oZWxwX2NiKFdp ZGdldCwgWHRQb2ludGVyKTsKICAgIHZvaWQgaW5pdGlhbGlzZV9vYmplY3RzKFdpZGdldCBwYXJl bnQpOwoKcHVibGljOgogICAgQWxlcnQoV2lkZ2V0IHBhcmVudCwgY29uc3QgY2hhciAqYXBwX25h bWUpOwogICAgQWxlcnQoV2lkZ2V0IHBhcmVudCwgY29uc3QgY2hhciAqYXBwX25hbWUsIFh0QXBw Q29udGV4dCBjb250ZXh0KTsKICAgIH5BbGVydCgpOwoKICAgIHZvaWQgZG9fYWxlcnQoY29uc3Qg Y2hhciAqbXNnLCBjaGFyICpoZWxwID0gX19udWxsICk7CiAgICB2b2lkIGRvX2FsZXJ0KGNvbnN0 IHN0cmluZyYgbXNnLCBjaGFyICpoZWxwID0gX19udWxsICk7CgogICAgdm9pZCBkb19tc2coY29u c3QgY2hhciAqbXNnLCBpbnQgeCwgaW50IHksIGludCB1cHRpbWUgPSAtMSk7CiAgICB2b2lkIGRv X21zZyhjb25zdCBzdHJpbmcmIG1zZywgaW50IHgsIGludCB5LCBpbnQgdXB0aW1lID0gLTEpOwoK ICAgIHZvaWQgYWxlcnRfcGx1c19va19jYihXaWRnZXQsIFh0UG9pbnRlcik7CiAgICAKICAgIHZv aWQgY2xlYXJfd2hlbl9kb25lKGJvb2wgdmFsdWUpIHsgX2NsZWFyX3doZW5fZG9uZSA9IHZhbHVl OyB9CgogICAgV2lkZ2V0IFBhcmVudCgpIHsgcmV0dXJuIF9wYXJlbnQ7IH0KICAgIGNvbnN0IHN0 cmluZyBhcHBfbmFtZSgpIHsgcmV0dXJuIF9uYW1lOyB9CiAgICB2b2lkIGFwcF9uYW1lKGNvbnN0 IHN0cmluZyYgbmFtZSkgeyBfbmFtZSA9IG5hbWU7IH0KICAgIHZvaWQgaGVscF9maWxlKGNoYXIg KmhlbHApIHsgX2hlbHBfZmlsZSA9IHN0cmluZyhoZWxwKTsgfQogICAgdm9pZCByZW1vdmVfYWxl cnQoKSB7IGFsZXJ0X3BsdXNfb2tfY2IoX19udWxsICwgX19udWxsICk7IH0KICAgIGJvb2wgcmVk aXNwbGF5X2FsZXJ0KGNvbnN0IHN0cmluZyYgbXNnLCBpbnQgeCwgaW50IHksaW50IHVwdGltZSA9 IC0xKSA7Cgp9OwoKZXh0ZXJuIEFsZXJ0ICpnQWxlcnQ7CgojIDMxICJzYXZlX3NuYXAuYyIgMgoK IyAxICIuLi8uLi9pbmNsdWRlL2xvY2FsaW5jL01vdG9yLkgiIDEKCgogCgplbnVtIGVfbW92ZV90 eXBlcyB7IGtXYWl0TW92ZURvbmUsIGtNb3ZlT24gfTsKCmNsYXNzIFN5bmM7CmNsYXNzIFNuYXA7 CgpjbGFzcyBNb3RvciB7CnB1YmxpYzoKICAgIHZpcnR1YWwgdm9pZCBob21lKCkgPSAwOwogICAg dmlydHVhbCBib29sIG1vdmUobG9uZywgbG9uZywgZV9tb3ZlX3R5cGVzKSA9IDA7CiAgICB2aXJ0 dWFsIGJvb2wgcmVsYXRpdmVfbW92ZShsb25nLCBsb25nKSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQg cG9zaXRpb24obG9uZyAqLCBsb25nICopID0gMDsKICAgIHZpcnR1YWwgYm9vbCBjaGVjaygpID0g MDsKICAgIHZpcnR1YWwgdm9pZCBzZW5kX2F1dG9yYWlsX21zZyhjb25zdCBpbnQpID0gMDsKICAg IHZvaWQgZGJtb3Ztb3QoY29uc3QgU3luYyAqLCBjb25zdCBTbmFwICopOwogICAgdm9pZCBkYm1v dm1vdF9ub3dhaXQoY29uc3QgU3luYyAqLCBjb25zdCBTbmFwICopOwp9OwoKZXh0ZXJuIE1vdG9y CSpnTW90b3I7CgojIDMyICJzYXZlX3NuYXAuYyIgMgoKIyAxICIuLi8uLi9pbmNsdWRlL2xvY2Fs aW5jL1NlcmlhbC5IIiAxCgoKIAoKCgoKCgoKCgoKIAoKCgoKIAoKCmNsYXNzIFNlcmlhbCB7CnBy aXZhdGU6CiAgICBjaGFyIHNfc2VyaWFsW05TRVJJQUxdOwogICAgY2hhciBzX2ZsYXZvcltORkxB Vk9SXTsKICAgIGNoYXIgX2Jhc2VfZmxhdm9yW05GTEFWT1JdOwogICAgY2hhciBfSUZJQ1Nfd29y a19vcmRlcltrSW50ZWxGaWVsZExlbmd0aF07CiAgICBCb29sZWFuIF9JRklDU19wYXNzOwkgCiAg ICBCb29sZWFuIF9maWxsZXIxOwogICAgQm9vbGVhbiBfZmlsbGVyMjsKICAgIEJvb2xlYW4gX2Zp bGxlcjM7CgpwdWJsaWM6CiAgICBzdGF0aWMgU2VyaWFsICpnZXQoKTsKCgogICAgY29uc3Qgc3Rk OjpzdHJpbmcgZmxhdm9yKCkgY29uc3Q7CiAgICB2b2lkIGZsYXZvcihjb25zdCBzdGQ6OnN0cmlu ZyYpOwogICAgdm9pZCBmbGF2b3IoY29uc3QgY2hhciAqKTsKCiAgICBjb25zdCBzdGQ6OnN0cmlu ZyBiYXNlX2ZsYXZvcigpIGNvbnN0OwogICAgdm9pZCBiYXNlX2ZsYXZvcihjb25zdCBzdGQ6OnN0 cmluZyYpOwogICAgdm9pZCBiYXNlX2ZsYXZvcihjb25zdCBjaGFyICopOwoKICAgIGNvbnN0IHN0 ZDo6c3RyaW5nIHNlcmlhbCgpIGNvbnN0OwogICAgdm9pZCBzZXJpYWwoY29uc3Qgc3RkOjpzdHJp bmcmKTsKICAgIHZvaWQgc2VyaWFsKGNvbnN0IGNoYXIgKik7CiAgICB2b2lkIHNlcmlhbF9lcmFz ZSgpOwoKICAgIGNvbnN0IHN0ZDo6c3RyaW5nIElGSUNTX3dvcmtfb3JkZXIoKSBjb25zdDsKICAg IHZvaWQgSUZJQ1Nfd29ya19vcmRlcihjb25zdCBzdGQ6OnN0cmluZyYpOwogICAgdm9pZCBJRklD U193b3JrX29yZGVyKGNvbnN0IGNoYXIgKik7CgogICAgQm9vbGVhbiBJRklDU19wYXNzKCkgY29u c3QgIHsgcmV0dXJuIF9JRklDU19wYXNzOyB9CiAgICB2b2lkIElGSUNTX3Bhc3MoQm9vbGVhbiBz ZXQpIHsgX0lGSUNTX3Bhc3MgPSBzZXQ7IH0KCgoKCgoKfTsKCgppbmxpbmUgdm9pZApTZXJpYWw6 OnNlcmlhbF9lcmFzZSgpCnsKICAgIDo6bWVtc2V0KHNfc2VyaWFsLCAwLCBzaXplb2Yoc19zZXJp YWwpKTsKfQoKaW5saW5lIGNvbnN0IHN0ZDo6c3RyaW5nClNlcmlhbDo6Zmxhdm9yKCkgY29uc3QK ewogICAgcmV0dXJuKHN0ZDo6c3RyaW5nKHNfZmxhdm9yKSk7Cn0KCmlubGluZSBjb25zdCBzdGQ6 OnN0cmluZwpTZXJpYWw6OmJhc2VfZmxhdm9yKCkgY29uc3QKewogICAgcmV0dXJuKChzdHJsZW4o X2Jhc2VfZmxhdm9yKSkgPyBzdGQ6OnN0cmluZyhfYmFzZV9mbGF2b3IpIDogc3RkOjpzdHJpbmco c19mbGF2b3IpKTsKfQoKaW5saW5lIGNvbnN0IHN0ZDo6c3RyaW5nClNlcmlhbDo6c2VyaWFsKCkg Y29uc3QKewogICAgcmV0dXJuKHN0ZDo6c3RyaW5nKHNfc2VyaWFsKSk7Cn0KCmlubGluZSB2b2lk ClNlcmlhbDo6Zmxhdm9yKGNvbnN0IGNoYXIgKnZhbCkKewogICAgOjptZW1zZXQoc19mbGF2b3Is IDAsIHNpemVvZihzX2ZsYXZvcikpOwogICAgc3RybmNweShzX2ZsYXZvciwgdmFsLCBzaXplb2Yo c19mbGF2b3IpIC0gMSk7Cn0KCmlubGluZSB2b2lkClNlcmlhbDo6Zmxhdm9yKGNvbnN0IHN0ZDo6 c3RyaW5nJiB2YWwpCnsKICAgIDo6bWVtc2V0KHNfZmxhdm9yLCAwLCBzaXplb2Yoc19mbGF2b3Ip KTsKICAgIHN0cm5jcHkoc19mbGF2b3IsIHZhbC5jX3N0cigpLCBzaXplb2Yoc19mbGF2b3IpIC0g MSk7Cn0KCmlubGluZSB2b2lkClNlcmlhbDo6YmFzZV9mbGF2b3IoY29uc3QgY2hhciAqdmFsKQp7 CiAgICA6Om1lbXNldChfYmFzZV9mbGF2b3IsIDAsIHNpemVvZihfYmFzZV9mbGF2b3IpKTsKICAg IHN0cm5jcHkoX2Jhc2VfZmxhdm9yLCB2YWwsIHNpemVvZihfYmFzZV9mbGF2b3IpIC0gMSk7Cn0K CmlubGluZSB2b2lkClNlcmlhbDo6YmFzZV9mbGF2b3IoY29uc3Qgc3RkOjpzdHJpbmcmIHZhbCkK ewogICAgOjptZW1zZXQoX2Jhc2VfZmxhdm9yLCAwLCBzaXplb2YoX2Jhc2VfZmxhdm9yKSk7CiAg ICBzdHJuY3B5KF9iYXNlX2ZsYXZvciwgdmFsLmNfc3RyKCksIHNpemVvZihfYmFzZV9mbGF2b3Ip IC0gMSk7Cn0KCmlubGluZSB2b2lkClNlcmlhbDo6c2VyaWFsKGNvbnN0IGNoYXIgKnZhbCkKewog ICAgOjptZW1zZXQoc19zZXJpYWwsIDAsIHNpemVvZihzX3NlcmlhbCkpOwogICAgc3RybmNweShz X3NlcmlhbCwgdmFsLCBzaXplb2Yoc19zZXJpYWwpIC0gMSk7Cn0KCmlubGluZSB2b2lkClNlcmlh bDo6c2VyaWFsKGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWwpCnsKICAgIDo6bWVtc2V0KHNfc2VyaWFs LCAwLCBzaXplb2Yoc19zZXJpYWwpKTsKICAgIHN0cm5jcHkoc19zZXJpYWwsIHZhbC5jX3N0cigp LCBzaXplb2Yoc19zZXJpYWwpIC0gMSk7Cn0KCmlubGluZSBjb25zdCBzdGQ6OnN0cmluZwpTZXJp YWw6OklGSUNTX3dvcmtfb3JkZXIoKSBjb25zdAp7CiAgICByZXR1cm4oc3RkOjpzdHJpbmcoX0lG SUNTX3dvcmtfb3JkZXIpKTsKfQoKaW5saW5lIHZvaWQKU2VyaWFsOjpJRklDU193b3JrX29yZGVy KGNvbnN0IGNoYXIgKnZhbCkKewogICAgOjptZW1zZXQoX0lGSUNTX3dvcmtfb3JkZXIsIDAsIHNp emVvZihfSUZJQ1Nfd29ya19vcmRlcikpOwogICAgc3RybmNweShfSUZJQ1Nfd29ya19vcmRlciwg dmFsLCBzaXplb2YoX0lGSUNTX3dvcmtfb3JkZXIpIC0gMSk7Cn0KCmlubGluZSB2b2lkClNlcmlh bDo6SUZJQ1Nfd29ya19vcmRlcihjb25zdCBzdGQ6OnN0cmluZyYgdmFsKQp7CiAgICA6Om1lbXNl dChfSUZJQ1Nfd29ya19vcmRlciwgMCwgc2l6ZW9mKF9JRklDU193b3JrX29yZGVyKSk7CiAgICBz dHJuY3B5KF9JRklDU193b3JrX29yZGVyLCB2YWwuY19zdHIoKSwgc2l6ZW9mKF9JRklDU193b3Jr X29yZGVyKSAtIDEpOwp9CgoKCgoKCgojIDMzICJzYXZlX3NuYXAuYyIgMgoKCgoKCiAKCgppbnQK SW5zcGVjdG9yOjpzYXZlX3NuYXAoaW50IHNuLCBjb25zdCBTbmFwICpEcywgZVNhdmVUeXBlIHN0 eWxlLCBib29sIHNhdmluZ19hbGxfc25hcHMpCnsKICAgIFNlcmlhbCAqc2VyID0gU2VyaWFsOjpn ZXQoKTsKCiAgICBpZiAoc2VyLT5mbGF2b3IoKS5sZW5ndGgoKSA9PSAwKQoJc2VyLT5mbGF2b3Io Z0NHLT5DdXJyZW50RGF0YWJhc2VOYW1lKCkpOwoKICAgIGlmIChzZXItPnNlcmlhbCgpLmxlbmd0 aCgpID09IDApCglzZXItPnNlcmlhbChnQ0ctPkltYWdlU3RvcmFnZURpcigpKTsKCiAgICBnR3Jh cGhpY3MtPklwZihTTkFQKTsJIAoKICAgIEltYWdlQnVmIGJ1ZihEcy0+c25fY2FtbnVtKCkgLSBr Rmlyc3RDYW1lcmEsIDAsIDApOwogICAgRnJhbWUgZnJhbWUoJmJ1ZiwgQ2FtZGVzYzo6Z2V0KCkp OwoKICAgIGlmICghZ0NmZy0+Y2FtZXJhX2lzX2NhbWVyYWxpbmsoKSkgewoJZnJhbWUuc2V0X2Zy YW1lX2J1ZmZlcihTTkFQLCBDYW1kZXNjOjpnZXQoKSk7CiAgICB9CgogICAgY2hhciAqc2F2ZV9i YXNlOwoKICAgIGlmIChzdHlsZSA9PSBrRmlkdSkKCXNhdmVfYmFzZSA9ICJmaWR1IjsKICAgIGVs c2UgaWYgKHN0eWxlID09IGtGcmFtZSkKCXNhdmVfYmFzZSA9ICJmcmFtZSI7CiAgICBlbHNlCglz YXZlX2Jhc2UgPSAic25hcCI7CgogICAgY2hhciBzdGRuYW1lWzE2ICsgTlNFUklBTCArIE5GTEFW T1JdOwoKICAgIEhkciAqZXNwID0gSGRyOjpnZXQoKTsKICAgIHNwcmludGYoc3RkbmFtZSwgIiVz JTAzZC5wJWQiLCBzYXZlX2Jhc2UsIHNuLCBlc3AtPmVzX2N1cnJlbnRfYm9hcmQoKSk7CgogICAg IAoKCgoKICAgIGNvbnN0IHN0cmluZyBkaXJfb3Jfc2VyaWFsID0gc2F2aW5nX2FsbF9zbmFwcyA/ IHNlci0+c2VyaWFsKCkgOiBzdHJpbmcoZ0NHLT5JbWFnZVN0b3JhZ2VEaXIoKSk7CgogICAgc3Ry aW5nIGZuYW1lID0gc2VyLT5mbGF2b3IoKSArICIvIiArIGRpcl9vcl9zZXJpYWwgKyAiLyIgKyBz dHJpbmcoc3RkbmFtZSk7CiAgICBpbWFnZV9wYXRoKGZuYW1lKTsJCQkgCiAgICBta2RpcnMoZGly bmFtZShmbmFtZS5jX3N0cigpKSk7CSAKCiAgICBzdHJpbmcgbXNnID0gc3RyaW5nKCJTYXZpbmcg IikgKyBiYXNlbmFtZShmbmFtZS5jX3N0cigpKTsKICAgIGRvX3B1dG1lcyhtc2cpOwoKICAgIGlu dCBmZDsKCiAgICBpZiAoKGZkID0gb3BlbihmbmFtZS5jX3N0cigpLCAxICB8IDB4MTAwICwgMDY2 NikpIDwgMCkgewoJZm5hbWUgKz0gIjogQ2FuJ3Qgb3BlbiBmaWxlIjsKCWdBbGVydC0+ZG9fYWxl cnQoZm5hbWUpOwoJZG9fcHV0bWVzKCIiKTsKCXJldHVybiAtMiA7CiAgICB9CgogICAgIAoKCiAg ICBsb25nIGZyYW1lX3NpemUgPSAobG9uZykgZnJhbWUuaGVpZ2h0KCkgKiAobG9uZykgZnJhbWUu d2lkdGgoKTsKCiAgICBpZiAoIGNvbW1zZWdfZmxhZ3MoKSAmIGtIYXNIb3N0UnRjICkgewoJIAoK CgoKCWludCBieXRlcyA9IDEwMjQ7Cgl1X2NoYXIgKiBwdHIgPSBmcmFtZS5nZXRfZnJhbWVfb2Zm c2V0KDAsIDApOwoKCXdoaWxlIChmcmFtZV9zaXplID4gMCkgewoJICAgIGlmIChieXRlcyA+IGZy YW1lX3NpemUpCgkJYnl0ZXMgPSBmcmFtZV9zaXplOwoKCSAgICBpbnQgc3RhdHVzID0gd3JpdGUo ZmQsIHB0ciwgYnl0ZXMpOwoJICAgIGlmIChzdGF0dXMgIT0gYnl0ZXMpIHsKCQljbG9zZShmZCk7 CgkJZm5hbWUgKz0gIjogIjsKCQlmbmFtZSArPSBzdHJlcnJvcigoKihfX19lcnJubygpKSkgKTsK CQlnQWxlcnQtPmRvX2FsZXJ0KGZuYW1lKTsKCQlkb19wdXRtZXMoIiIpOwoJCXJldHVybiAtMSA7 CgkgICAgfQoJICAgIGZyYW1lX3NpemUgLT0gYnl0ZXM7CgkgICAgcHRyICs9IGJ5dGVzOwoJfQog ICAgfQogICAgZWxzZSB7CglpZiAod3JpdGUoZmQsIGZyYW1lLmdldF9mcmFtZV9vZmZzZXQoMCwg MCksIGZyYW1lX3NpemUpICE9IGZyYW1lX3NpemUpIHsKCSAgICBjbG9zZShmZCk7CgkgICAgZm5h bWUgKz0gIjogIjsKCSAgICBmbmFtZSArPSBzdHJlcnJvcigoKihfX19lcnJubygpKSkgKTsKCSAg ICBnQWxlcnQtPmRvX2FsZXJ0KGZuYW1lKTsKCSAgICBkb19wdXRtZXMoIiIpOwoJICAgIHJldHVy biAtMSA7Cgl9CiAgICB9CgogICAgY2xvc2UoZmQpOwogICAgZG9fcHV0bWVzKCIiKTsKICAgIHJl dHVybiAwOwp9CgogCgoKdm9pZApJbnNwZWN0b3I6OnNhdmVfZmlkdXMoY29uc3QgU3luYyAqRHN5 LCBib29sIHNhdmluZ19hbGxfc25hcHMpCnsKICAgIEhkciAqZXNwID0gSGRyOjpnZXQoKTsKICAg IEFsaWduICphbGlnbiA9IEFsaWduOjpnZXRfcGFzcyhlc3AtPmVzX2N1cnJlbnRfYm9hcmQoKSk7 CgogICAgYWxpZ24tPnNldHVwX2FsaWdubWVudChmYWxzZSwgX19udWxsICk7CgogICAgYWxpZ24t Pm5vX2NvbXAoKTsJCSAKICAgIGdHcmFwaGljcy0+SXBmcmFtZShTTkFQKTsJIAoKICAgIGNvbmZp Z3VyYXRpb24gKnBDZmcgPSBjb25maWd1cmF0aW9uOjpnZXQoKTsKCiAgICBMaWdodGluZyBmaWRf bGlnaHQoKnBDZmcpOwogICAgZmlkX2xpZ2h0LnNldF90b19maWR1KCk7CgogICAgZm9yIChpbnQg bmZpZHUgPSAwOyBuZmlkdSA8IE5GSURVOyBuZmlkdSsrKSB7CglXaW5kIHdpbjsKCVdpbmQgc253 aW47Cglsb25nIGJpZ3gsIGJpZ3k7CglTbmFwIERzOwoJcmVnaXN0ZXIgSXRlbSAqRGk7CgoJRGkg PSBhbGlnbi0+YV9maWR1W25maWR1XS5mX2l0ZW0oKTsJIAoKCWlmIChEaSA9PSBfX251bGwgKQoJ ICAgIGNvbnRpbnVlOwoKCURpLT5fd2luZC5zMmMoJndpbik7CSAKCURzLnNuX3B0LnggPSB3aW4u IF9XaW4uY3cueCA7CSAKCURzLnNuX3B0LnkgPSB3aW4uIF9XaW4uY3cueSA7CglEcy5zbl9jYW1u dW0oa0NhbWVyYU9uZSk7IAoKCWdNb3Rvci0+ZGJtb3Ztb3QoRHN5LCAmRHMpOwkgCgoJIAoKCglT aWRlbnYgKnN2ID0gU2lkZW52OjpnZXQoKTsKCXN2LT5ndF9zbndpbigmRHMsICZzbndpbiwgJmJp Z3gsICZiaWd5KTsKCWZvciAoaW50IHJldHJ5ID0gMDsgcmV0cnkgPCAzOyArK3JldHJ5KSB7Cgkg ICAgaWYgKHNuYXAoRklEVUNJQUwsIDAsIHRydWUpID09IEJBRFNOQVApIHsKCQlnQWxlcnQtPmRv X2FsZXJ0KCJzYXZlX2ZpZHVzOiBzbmFwIGZhaWxlZCIpOwoJCWNvbnRpbnVlOwoJICAgIH0KCSAg ICBlbHNlIHsKCQkgCgoKCQlpbnQgc2F2ZV9yZXMgPSBzYXZlX3NuYXAobmZpZHUsICZEcywga0Zp ZHUsIHNhdmluZ19hbGxfc25hcHMpOwoJCWlmIChzYXZlX3JlcyA9PSAtMSApIHsKCQkgICAgZ0Fs ZXJ0LT5kb19hbGVydCgiT3V0IG9mIGRpc2sgc3BhY2VcblNhdmUgYWJvcnRlZCIpOwoJCSAgICBy ZXR1cm47CgkJfQoJCQoJCWlmIChzYXZlX3JlcyAmJiAoIWdldHllc25vKCJTYXZlIGZhaWxlZCwg Y29udGludWU/IikpKQoJCSAgICByZXR1cm47CgoJCWJyZWFrOwoJICAgIH0KCX0KICAgIH0KfQoK c3RhdGljIGlubGluZSB2b2lkCmZpeF9zcGFjZXMoc3RyaW5nJiBwYXRoKQp7CiAgICBmb3IgKHVf aW50IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGgoKTsgaSsrKQoJaWYgKHBhdGhbaV0gPT0gJyAnKQoJ ICAgIHBhdGhbaV0gPSAnXyc7Cn0KCnZvaWQKSW5zcGVjdG9yOjpzYXZlX2ltYWdlKGludCBzbmFw bm8sIGJvb2wgZmlkdSkKewogICAgIAoKCiAgICBjb25maWd1cmF0aW9uICpwQ2ZnID0gY29uZmln dXJhdGlvbjo6Z2V0KCk7CgogICAgc3RyaW5nIGZsYXZvcihTZXJpYWw6OmdldCgpLT5mbGF2b3Io KSk7CiAgICBzdHJpbmcgaW1hZ2VfZmlsZShmbGF2b3IpOwogICAgaW1hZ2VfZmlsZSArPSAiL1BQ VSI7CgogICAgaWYgKHBDZmctPnNwY19hcHBlbmRfZmxhdm9yKCkpIHsKCWltYWdlX2ZpbGUgKz0g Ii0iOwoJaW1hZ2VfZmlsZSArPSBmbGF2b3I7CiAgICB9CgogICAgZml4X3NwYWNlcyhpbWFnZV9m aWxlKTsKICAgIGltYWdlX3BhdGgoaW1hZ2VfZmlsZSk7CiAgICAgCgoKICAgIG1rZGlycyhpbWFn ZV9maWxlKTsKCiAgICBjaGFyIGltYWdlX25hbWVbMzBdOwogICAgc3ByaW50ZihpbWFnZV9uYW1l LCAiLyVzJTAzZC5wJWQiLCBmaWR1ID8gImZpZHUiIDogInNuYXAiLCBzbmFwbm8sIGVzcC0+ZXNf Y3VycmVudF9ib2FyZCgpKTsKICAgIGltYWdlX2ZpbGUgKz0gaW1hZ2VfbmFtZTsKICAgICAKCgoK ICAgIGludCBmZCA9IDo6b3BlbihpbWFnZV9maWxlLmNfc3RyKCksIDIgIHwgMHgxMDAgLCAwNjY2 KTsKICAgIGlmIChmZCA+PSAwKSB7CglDYW1kZXNjICpjYW1wYXIgPSBDYW1kZXNjOjpnZXQoKTsK CWludCBmcmFtZV9zaXplID0gY2FtcGFyLT53aWR0aCgpICogIGNhbXBhci0+aGVpZ2h0KCk7Cgl1 X2NoYXIgKnB0ciA9IERiZ2N0cmw6OmdldCgpLT5zaGFyZWRfZmJfcHRyKCk7Cglib29sIHN1Y2Nl c3MgPSB0cnVlOwoKCSAKCgoKCWlmIChjb21tc2VnX2ZsYWdzKCkgJiBrSGFzSG9zdFJ0YykgewoJ ICAgIGludCBieXRlcyA9IDEwMjQ7CgoJICAgIHdoaWxlIChmcmFtZV9zaXplID4gMCkgewoJCWlm IChieXRlcyA+IGZyYW1lX3NpemUpCgkJICAgIGJ5dGVzID0gZnJhbWVfc2l6ZTsKCgkJaW50IHN0 YXR1cyA9IDo6d3JpdGUoZmQsIHB0ciwgYnl0ZXMpOwoKCQlpZiAoc3RhdHVzICE9IGJ5dGVzKSB7 CgkJICAgIHN1Y2Nlc3MgPSBmYWxzZTsKCQkgICAgRWxvZzo6Z2V0KCktPm1lc3NhZ2UodHJ1ZSwK CQkJIkVycm9yIHdyaXRpbmcgaW1hZ2UgZmlsZSAlcyIsIGltYWdlX2ZpbGUuY19zdHIoKSk7CgkJ ICAgIGJyZWFrOwoJCX0KCQlmcmFtZV9zaXplIC09IGJ5dGVzOwoJCXB0ciArPSBieXRlczsKCSAg ICB9Cgl9CgllbHNlIHsKCSAgICA6OndyaXRlKGZkLCBwdHIsIGZyYW1lX3NpemUpOwoJfQoJOjpj bG9zZShmZCk7CgoJaWYgKCFzdWNjZXNzKQoJICAgIHVubGluayhpbWFnZV9maWxlLmNfc3RyKCkp OwogICAgfQp9Cg==
reply other threads:[~2002-07-24 15:56 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20020724154955.2010.qmail@sources.redhat.com \ --to=barto@visionpro.com \ --cc=gcc-gnats@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).